PageSourceSearch

https://bytetoken.ai/static/js/index.116589394a.js

js bytetoken.ai collected 2026-10-05 14:01:53 UTC 2,706,113 bytes, 107 lines download raw bytes

1(()=>{"use strict";var e,t,n,a,i,o,r,s={4274(e,t,n){n.d(t,{k:()=>T});var a=n(23579),i=n(39845),o=n(89595),r=n(762),s=n(36862),l=n(20582),c=n(72407),d=n(12591);function u(e){let{dir:t,className:n,...i}=e;return(0,a.jsxs)("svg",{"data-name":`icon-dir-${t}`,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 79.86 51.14",className:(0,d.cn)("rtl"===t&&"rotate-y-180",n),...i,children:[(0,a.jsx)("path",{d:"M23.42.51h51.92c2.21 0 4 1.79 4 4v42.18c0 2.21-1.79 4-4 4H23.42s-.04-.02-.04-.04V.55s.02-.04.04-.04z",opacity:.15}),(0,a.jsx)("path",{fill:"none",opacity:.72,strokeLinecap:"round",strokeMiterlimit:10,strokeWidth:"2px",d:"M5.56 14.88L17.78 14.88"}),(0,a.jsx)("path",{fill:"none",opacity:.48,strokeLinecap:"round",strokeMiterlimit:10,strokeWidth:"2px",d:"M5.56 22.09L16.08 22.09"}),(0,a.jsx)("path",{fill:"none",opacity:.55,strokeLinecap:"round",strokeMiterlimit:10,strokeWidth:"2px",d:"M5.56 18.38L14.93 18.38"}),(0,a.jsxs)("g",{strokeLinecap:"round",strokeMiterlimit:10,children:[(0,a.jsx)("circle",{cx:7.51,cy:7.4,r:2.54,opacity:.8}),(0,a.jsx)("path",{fill:"none",opacity:.8,strokeWidth:"2px",d:"M12.06 6.14L17.78 6.14"}),(0,a.jsx)("path",{fill:"none",opacity:.6,d:"M11.85 8.79L16.91 8.79"})]}),(0,a.jsx)("path",{fill:"none",opacity:.62,strokeLinecap:"round",strokeMiterlimit:10,strokeWidth:"3px",d:"M29.41 7.4L34.67 7.4"}),(0,a.jsx)("rect",{x:28.76,y:11.21,width:26.03,height:2.73,rx:.64,ry:.64,opacity:.44,strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsx)("rect",{x:28.76,y:17.01,width:44.25,height:13.48,rx:.64,ry:.64,opacity:.3,strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsx)("rect",{x:28.76,y:33.57,width:44.25,height:4.67,rx:.64,ry:.64,opacity:.21,strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsx)("rect",{x:28.76,y:41.32,width:36.21,height:4.67,rx:.64,ry:.64,opacity:.3,strokeLinecap:"round",strokeMiterlimit:10})]})}function h(e){return(0,a.jsxs)("svg",{"data-name":"icon-layout-compact",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 79.86 51.14",...e,children:[(0,a.jsx)("rect",{x:5.84,y:5.2,width:4,height:40,rx:2,ry:2,strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsxs)("g",{stroke:"#fff",strokeLinecap:"round",strokeMiterlimit:10,children:[(0,a.jsx)("path",{fill:"none",opacity:.66,strokeWidth:"2px",d:"M7.26 11.56L8.37 11.56"}),(0,a.jsx)("path",{fill:"none",opacity:.51,strokeWidth:"2px",d:"M7.26 14.49L8.37 14.49"}),(0,a.jsx)("path",{fill:"none",opacity:.52,strokeWidth:"2px",d:"M7.26 17.39L8.37 17.39"}),(0,a.jsx)("circle",{cx:7.81,cy:7.25,r:1.16,fill:"#fff",opacity:.8})]}),(0,a.jsx)("path",{fill:"none",opacity:.75,strokeLinecap:"round",strokeMiterlimit:10,strokeWidth:"3px",d:"M15.81 14.49L22.89 14.49"}),(0,a.jsx)("rect",{x:14.93,y:18.39,width:22.19,height:2.73,rx:.64,ry:.64,opacity:.5,strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsx)("rect",{x:14.93,y:5.89,width:59.16,height:2.73,rx:.64,ry:.64,opacity:.9,strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsx)("rect",{x:14.93,y:24.22,width:32.68,height:19.95,rx:2.11,ry:2.11,opacity:.4,strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsxs)("g",{strokeLinecap:"round",strokeMiterlimit:10,children:[(0,a.jsx)("rect",{x:59.05,y:38.15,width:2.01,height:3.42,rx:.33,ry:.33,opacity:.32}),(0,a.jsx)("rect",{x:54.78,y:34.99,width:2.01,height:6.58,rx:.33,ry:.33,opacity:.44}),(0,a.jsx)("rect",{x:63.17,y:32.86,width:2.01,height:8.7,rx:.33,ry:.33,opacity:.53}),(0,a.jsx)("rect",{x:67.54,y:29.17,width:2.01,height:12.4,rx:.33,ry:.33,opacity:.66})]}),(0,a.jsxs)("g",{opacity:.5,children:[(0,a.jsx)("circle",{cx:62.16,cy:18.63,r:7.5}),(0,a.jsx)("path",{d:"M62.16 11.63c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.14-7-7 3.14-7 7-7m0-1c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8z"})]}),(0,a.jsxs)("g",{opacity:.74,children:[(0,a.jsx)("path",{d:"M63.04 18.13l3.38-5.67c.93.64 1.7 1.48 2.26 2.47.56.98.89 2.08.96 3.21h-6.6z"}),(0,a.jsx)("path",{d:"M66.57 13.19a6.977 6.977 0 012.52 4.44h-5.17l2.65-4.44m-.31-1.43l-4.1 6.87h8c0-1.39-.36-2.75-1.04-3.95a8.007 8.007 0 00-2.86-2.92z"})]})]})}function p(e){return(0,a.jsxs)("svg",{"data-name":"con-layout-default",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 79.86 51.14",...e,children:[(0,a.jsx)("path",{d:"M39.22 15.99h-8.16c-.79 0-1.43-.67-1.43-1.5s.64-1.5 1.43-1.5h8.16c.79 0 1.43.67 1.43 1.5s-.64 1.5-1.43 1.5z",opacity:.75}),(0,a.jsx)("rect",{x:29.63,y:18.39,width:16.72,height:2.73,rx:1.36,ry:1.36,opacity:.5}),(0,a.jsx)("path",{d:"M75.1 6.68v1.45c0 .63-.49 1.14-1.09 1.14H30.72c-.6 0-1.09-.51-1.09-1.14V6.68c0-.62.49-1.14 1.09-1.14h43.29c.6 0 1.09.52 1.09 1.14z",opacity:.9}),(0,a.jsx)("rect",{x:29.63,y:24.22,width:21.8,height:19.95,rx:2.11,ry:2.11,opacity:.4}),(0,a.jsxs)("g",{strokeLinecap:"round",strokeMiterlimit:10,children:[(0,a.jsx)("rect",{x:61.06,y:38.15,width:2.01,height:3.42,rx:.33,ry:.33,opacity:.32}),(0,a.jsx)("rect",{x:56.78,y:34.99,width:2.01,height:6.58,rx:.33,ry:.33,opacity:.44}),(0,a.jsx)("rect",{x:65.17,y:32.86,width:2.01,height:8.7,rx:.33,ry:.33,opacity:.53}),(0,a.jsx)("rect",{x:69.55,y:29.17,width:2.01,height:12.4,rx:.33,ry:.33,opacity:.66})]}),(0,a.jsxs)("g",{opacity:.5,children:[(0,a.jsx)("circle",{cx:63.17,cy:18.63,r:7.5}),(0,a.jsx)("path",{d:"M63.17 11.63c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.14-7-7 3.14-7 7-7m0-1c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8z"})]}),(0,a.jsxs)("g",{opacity:.74,children:[(0,a.jsx)("path",{d:"M64.05 18.13l3.38-5.67c.93.64 1.7 1.48 2.26 2.47.56.98.89 2.08.96 3.21h-6.6z"}),(0,a.jsx)("path",{d:"M67.57 13.19a6.977 6.977 0 012.52 4.44h-5.17l2.65-4.44m-.31-1.43l-4.1 6.87h8c0-1.39-.36-2.75-1.04-3.95a8.007 8.007 0 00-2.86-2.92z"})]}),(0,a.jsxs)("g",{strokeLinecap:"round",strokeMiterlimit:10,children:[(0,a.jsx)("rect",{x:5.84,y:5.02,width:19.14,height:40,rx:2,ry:2,opacity:.8}),(0,a.jsxs)("g",{stroke:"#fff",children:[(0,a.jsx)("path",{fill:"none",opacity:.72,strokeWidth:"2px",d:"M9.02 17.39L21.25 17.39"}),(0,a.jsx)("path",{fill:"none",opacity:.48,strokeWidth:"2px",d:"M9.02 24.6L19.54 24.6"}),(0,a.jsx)("path",{fill:"none",opacity:.55,strokeWidth:"2px",d:"M9.02 20.88L18.4 20.88"}),(0,a.jsx)("circle",{cx:10.98,cy:9.91,r:2.54,fill:"#fff",opacity:.8}),(0,a.jsx)("path",{fill:"none",opacity:.8,strokeWidth:"2px",d:"M15.53 8.65L21.25 8.65"}),(0,a.jsx)("path",{fill:"none",opacity:.6,d:"M15.32 11.3L20.38 11.3"})]})]})]})}function m(e){return(0,a.jsxs)("svg",{"data-name":"icon-layout-full",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 79.86 51.14",...e,children:[(0,a.jsx)("path",{fill:"none",opacity:.75,strokeLinecap:"round",strokeMiterlimit:10,strokeWidth:"3px",d:"M6.85 14.49L15.02 14.49"}),(0,a.jsx)("rect",{x:5.84,y:18.39,width:25.6,height:2.73,rx:.64,ry:.64,opacity:.5,strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsx)("rect",{x:5.84,y:5.89,width:68.26,height:2.73,rx:.64,ry:.64,opacity:.9,strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsx)("rect",{x:5.84,y:24.22,width:37.71,height:19.95,rx:2.11,ry:2.11,opacity:.4,strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsxs)("g",{strokeLinecap:"round",strokeMiterlimit:10,children:[(0,a.jsx)("rect",{x:59.05,y:38.15,width:2.01,height:3.42,rx:.33,ry:.33,opacity:.32}),(0,a.jsx)("rect",{x:54.78,y:34.99,width:2.01,height:6.58,rx:.33,ry:.33,opacity:.44}),(0,a.jsx)("rect",{x:63.17,y:32.86,width:2.01,height:8.7,rx:.33,ry:.33,opacity:.53}),(0,a.jsx)("rect",{x:67.54,y:29.17,width:2.01,height:12.4,rx:.33,ry:.33,opacity:.66})]}),(0,a.jsxs)("g",{opacity:.5,children:[(0,a.jsx)("circle",{cx:62.16,cy:18.63,r:7.5}),(0,a.jsx)("path",{d:"M62.16 11.63c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.14-7-7 3.14-7 7-7m0-1c-4.42 0-8 3.58-8 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8z"})]}),(0,a.jsxs)("g",{opacity:.74,children:[(0,a.jsx)("path",{d:"M63.04 18.13l3.38-5.67c.93.64 1.7 1.48 2.26 2.47.56.98.89 2.08.96 3.21h-6.6z"}),(0,a.jsx)("path",{d:"M66.57 13.19a6.977 6.977 0 012.52 4.44h-5.17l2.65-4.44m-.31-1.43l-4.1 6.87h8c0-1.39-.36-2.75-1.04-3.95a8.007 8.007 0 00-2.86-2.92z"})]})]})}function g(e){return(0,a.jsxs)("svg",{"data-name":"icon-sidebar-floating",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 79.86 51.14",...e,children:[(0,a.jsx)("rect",{x:5.89,y:5.15,width:19.74,height:40,rx:2,ry:2,opacity:.8,strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsxs)("g",{stroke:"#fff",strokeLinecap:"round",strokeMiterlimit:10,children:[(0,a.jsx)("path",{fill:"none",opacity:.72,strokeWidth:"2px",d:"M9.81 18.36L22.04 18.36"}),(0,a.jsx)("path",{fill:"none",opacity:.48,strokeWidth:"2px",d:"M9.81 25.57L20.33 25.57"}),(0,a.jsx)("path",{fill:"none",opacity:.55,strokeWidth:"2px",d:"M9.81 21.85L19.18 21.85"}),(0,a.jsx)("circle",{cx:11.76,cy:10.88,r:2.54,fill:"#fff",opacity:.8}),(0,a.jsx)("path",{fill:"none",opacity:.8,strokeWidth:"2px",d:"M16.31 9.62L22.04 9.62"}),(0,a.jsx)("path",{fill:"none",opacity:.6,d:"M16.1 12.27L21.16 12.27"})]}),(0,a.jsx)("path",{fill:"none",opacity:.62,strokeLinecap:"round",strokeMiterlimit:10,strokeWidth:"3px",d:"M30.59 9.62L35.85 9.62"}),(0,a.jsx)("rect",{x:29.94,y:13.42,width:26.03,height:2.73,rx:.64,ry:.64,opacity:.44,strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsx)("rect",{x:29.94,y:19.28,width:43.11,height:25.87,rx:2,ry:2,opacity:.3,strokeLinecap:"round",strokeMiterlimit:10})]})}function f(e){return(0,a.jsxs)("svg",{"data-name":"icon-sidebar-inset",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 79.86 51.14",...e,children:[(0,a.jsx)("rect",{x:23.39,y:5.57,width:50.22,height:40,rx:2,ry:2,opacity:.2,strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsx)("path",{fill:"none",opacity:.72,strokeLinecap:"round",strokeMiterlimit:10,strokeWidth:"2px",d:"M5.08 17.05L17.31 17.05"}),(0,a.jsx)("path",{fill:"none",opacity:.48,strokeLinecap:"round",strokeMiterlimit:10,strokeWidth:"2px",d:"M5.08 24.25L15.6 24.25"}),(0,a.jsx)("path",{fill:"none",opacity:.55,strokeLinecap:"round",strokeMiterlimit:10,strokeWidth:"2px",d:"M5.08 20.54L14.46 20.54"}),(0,a.jsxs)("g",{strokeLinecap:"round",strokeMiterlimit:10,children:[(0,a.jsx)("circle",{cx:7.04,cy:9.57,r
1:2.54,opacity:.8}),(0,a.jsx)("path",{fill:"none",opacity:.8,strokeWidth:"2px",d:"M11.59 8.3L17.31 8.3"}),(0,a.jsx)("path",{fill:"none",opacity:.6,d:"M11.38 10.95L16.44 10.95"})]})]})}function y(e){return(0,a.jsxs)("svg",{"data-name":"icon-sidebar-sidebar",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 79.86 51.14",...e,children:[(0,a.jsx)("path",{d:"M23.42.51h51.99c2.21 0 4 1.79 4 4v42.18c0 2.21-1.79 4-4 4H23.42s-.04-.02-.04-.04V.55s.02-.04.04-.04z",opacity:.2,strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsx)("path",{fill:"none",opacity:.72,strokeLinecap:"round",strokeMiterlimit:10,strokeWidth:"2px",d:"M5.56 14.88L17.78 14.88"}),(0,a.jsx)("path",{fill:"none",opacity:.48,strokeLinecap:"round",strokeMiterlimit:10,strokeWidth:"2px",d:"M5.56 22.09L16.08 22.09"}),(0,a.jsx)("path",{fill:"none",opacity:.55,strokeLinecap:"round",strokeMiterlimit:10,strokeWidth:"2px",d:"M5.56 18.38L14.93 18.38"}),(0,a.jsxs)("g",{strokeLinecap:"round",strokeMiterlimit:10,children:[(0,a.jsx)("circle",{cx:7.51,cy:7.4,r:2.54,opacity:.8}),(0,a.jsx)("path",{fill:"none",opacity:.8,strokeWidth:"2px",d:"M12.06 6.14L17.78 6.14"}),(0,a.jsx)("path",{fill:"none",opacity:.6,d:"M11.85 8.79L16.91 8.79"})]})]})}function b(e){return(0,a.jsxs)("svg",{"data-name":"icon-theme-dark",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 79.86 51.14",...e,children:[(0,a.jsxs)("g",{fill:"#1d2b3f",children:[(0,a.jsx)("rect",{x:.53,y:.5,width:78.83,height:50.14,rx:3.5,ry:3.5}),(0,a.jsx)("path",{d:"M75.86 1c1.65 0 3 1.35 3 3v43.14c0 1.65-1.35 3-3 3H4.03c-1.65 0-3-1.35-3-3V4c0-1.65 1.35-3 3-3h71.83m0-1H4.03c-2.21 0-4 1.79-4 4v43.14c0 2.21 1.79 4 4 4h71.83c2.21 0 4-1.79 4-4V4c0-2.21-1.79-4-4-4z"})]}),(0,a.jsx)("path",{d:"M22.88 0h52.97c2.21 0 4 1.79 4 4v43.14c0 2.21-1.79 4-4 4H22.88V0z",fill:"#0d1628"}),(0,a.jsx)("circle",{cx:6.7,cy:7.04,r:3.54,fill:"#426187"}),(0,a.jsx)("path",{d:"M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1zM18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05zM15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.91h11c.55 0 1 .41 1 .91s-.45.91-1 .91zM16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z",fill:"#426187"}),(0,a.jsxs)("g",{fill:"#2a62bc",children:[(0,a.jsx)("rect",{x:33.36,y:19.73,width:2.75,height:3.42,rx:.33,ry:.33,opacity:.32}),(0,a.jsx)("rect",{x:29.64,y:16.57,width:2.75,height:6.58,rx:.33,ry:.33,opacity:.44}),(0,a.jsx)("rect",{x:37.16,y:14.44,width:2.75,height:8.7,rx:.33,ry:.33,opacity:.53}),(0,a.jsx)("rect",{x:41.19,y:10.75,width:2.75,height:12.4,rx:.33,ry:.33,opacity:.53})]}),(0,a.jsx)("circle",{cx:62.74,cy:16.32,r:8,fill:"#2f5491",opacity:.5}),(0,a.jsx)("path",{d:"M62.74 16.32l4.1-6.87c1.19.71 2.18 1.72 2.86 2.92s1.04 2.57 1.04 3.95h-8z",fill:"#2f5491",opacity:.74}),(0,a.jsx)("rect",{x:29.64,y:27.75,width:41.62,height:18.62,rx:1.69,ry:1.69,fill:"#17273f"})]})}function v(e){return(0,a.jsxs)("svg",{"data-name":"icon-theme-light",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 79.86 51.14",...e,children:[(0,a.jsxs)("g",{fill:"#d9d9d9",children:[(0,a.jsx)("rect",{x:.53,y:.5,width:78.83,height:50.14,rx:3.5,ry:3.5}),(0,a.jsx)("path",{d:"M75.86 1c1.65 0 3 1.35 3 3v43.14c0 1.65-1.35 3-3 3H4.03c-1.65 0-3-1.35-3-3V4c0-1.65 1.35-3 3-3h71.83m0-1H4.03c-2.21 0-4 1.79-4 4v43.14c0 2.21 1.79 4 4 4h71.83c2.21 0 4-1.79 4-4V4c0-2.21-1.79-4-4-4z"})]}),(0,a.jsx)("path",{d:"M22.88 0h52.97c2.21 0 4 1.79 4 4v43.14c0 2.21-1.79 4-4 4H22.88V0z",fill:"#ecedef"}),(0,a.jsx)("circle",{cx:6.7,cy:7.04,r:3.54,fill:"#fff"}),(0,a.jsx)("path",{d:"M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1zM18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05zM15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.91h11c.55 0 1 .41 1 .91s-.45.91-1 .91zM16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z",fill:"#fff"}),(0,a.jsxs)("g",{fill:"#c0c4c4",children:[(0,a.jsx)("rect",{x:33.36,y:19.73,width:2.75,height:3.42,rx:.33,ry:.33,opacity:.32}),(0,a.jsx)("rect",{x:29.64,y:16.57,width:2.75,height:6.58,rx:.33,ry:.33,opacity:.44}),(0,a.jsx)("rect",{x:37.16,y:14.44,width:2.75,height:8.7,rx:.33,ry:.33,opacity:.53}),(0,a.jsx)("rect",{x:41.19,y:10.75,width:2.75,height:12.4,rx:.33,ry:.33,opacity:.53})]}),(0,a.jsx)("circle",{cx:62.74,cy:16.32,r:8,fill:"#fff"}),(0,a.jsxs)("g",{fill:"#d9d9d9",children:[(0,a.jsx)("path",{d:"M63.62 15.82L67 10.15c.93.64 1.7 1.48 2.26 2.47.56.98.89 2.08.96 3.21h-6.6z"}),(0,a.jsx)("path",{d:"M67.14 10.88a6.977 6.977 0 012.52 4.44h-5.17l2.65-4.44m-.31-1.43l-4.1 6.87h8c0-1.39-.36-2.75-1.04-3.95s-1.67-2.21-2.86-2.92z"})]}),(0,a.jsx)("rect",{x:29.64,y:27.75,width:41.62,height:18.62,rx:1.69,ry:1.69,fill:"#fff"})]})}function x(e){let{className:t,...n}=e;return(0,a.jsxs)("svg",{"data-name":"icon-theme-system",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 79.86 51.14",className:(0,d.cn)("overflow-hidden rounded-md","stroke-primary fill-primary group-data-unchecked:stroke-muted-foreground group-data-unchecked:fill-muted-foreground",t),...n,children:[(0,a.jsx)("path",{opacity:.2,d:"M0 0.03H22.88V51.17H0z"}),(0,a.jsx)("circle",{cx:6.7,cy:7.04,r:3.54,fill:"#fff",opacity:.8,stroke:"#fff",strokeLinecap:"round",strokeMiterlimit:10}),(0,a.jsx)("path",{d:"M18.12 6.39h-5.87c-.6 0-1.09-.45-1.09-1s.49-1 1.09-1h5.87c.6 0 1.09.45 1.09 1s-.49 1-1.09 1zM16.55 9.77h-4.24c-.55 0-1-.45-1-1s.45-1 1-1h4.24c.55 0 1 .45 1 1s-.45 1-1 1z",fill:"#fff",stroke:"none",opacity:.75}),(0,a.jsx)("path",{d:"M18.32 17.37H4.59c-.69 0-1.25-.47-1.25-1.05s.56-1.05 1.25-1.05h13.73c.69 0 1.25.47 1.25 1.05s-.56 1.05-1.25 1.05z",fill:"#fff",stroke:"none",opacity:.72}),(0,a.jsx)("path",{d:"M15.34 21.26h-11c-.55 0-1-.41-1-.91s.45-.91 1-.9
11h11c.55 0 1 .41 1 .91s-.45.91-1 .91z",fill:"#fff",stroke:"none",opacity:.55}),(0,a.jsx)("path",{d:"M16.46 25.57H4.43c-.6 0-1.09-.44-1.09-.98s.49-.98 1.09-.98h12.03c.6 0 1.09.44 1.09.98s-.49.98-1.09.98z",fill:"#fff",stroke:"none",opacity:.67}),(0,a.jsx)("rect",{x:33.36,y:19.73,width:2.75,height:3.42,rx:.33,ry:.33,opacity:.31,stroke:"none"}),(0,a.jsx)("rect",{x:29.64,y:16.57,width:2.75,height:6.58,rx:.33,ry:.33,opacity:.4,stroke:"none"}),(0,a.jsx)("rect",{x:37.16,y:14.44,width:2.75,height:8.7,rx:.33,ry:.33,opacity:.26,stroke:"none"}),(0,a.jsx)("rect",{x:41.19,y:10.75,width:2.75,height:12.4,rx:.33,ry:.33,opacity:.37,stroke:"none"}),(0,a.jsxs)("g",{children:[(0,a.jsx)("circle",{cx:62.74,cy:16.32,r:8,opacity:.25}),(0,a.jsx)("path",{d:"M62.74 16.32l4.1-6.87c1.19.71 2.18 1.72 2.86 2.92s1.04 2.57 1.04 3.95h-8z",opacity:.45})]}),(0,a.jsx)("rect",{x:29.64,y:27.75,width:41.62,height:18.62,rx:1.69,ry:1.69,opacity:.3,stroke:"none",strokeLinecap:"round",strokeMiterlimit:10})]})}var k=n(84223),C=n(93735),S=n(62526),w=n(50067),A=n(48639),P=n(66304),j=n(34915),N=n(43713),I=n(84722);let R=i.U;function T(){let{t:e}=(0,c.Bd)(),{setOpen:t}=(0,I.cL)(),{resetDir:n}=(0,C.j)(),{resetTheme:i}=(0,A.D)(),{resetLayout:o}=(0,S.g)(),{resetCustomization:s}=(0,w.A)();return(0,a.jsxs)(j.cj,{children:[(0,a.jsx)(j.CG,{render:(0,a.jsx)(P.$,{size:"icon",variant:"ghost","aria-label":e("Open theme settings"),"aria-describedby":"config-drawer-description",className:"max-md:hidden"}),children:(0,a.jsx)(r.A,{className:"size-[1.2rem]","aria-hidden":"true"})}),(0,a.jsxs)(j.h,{className:(0,N.jW)("sm:max-w-md"),children:[(0,a.jsxs)(j.Fm,{className:(0,N.Dt)(),children:[(0,a.jsx)(j.qp,{children:e("Theme Settings")}),(0,a.jsx)(j.Qs,{id:"config-drawer-description",children:e("Adjust the appearance and layout to suit your preferences.")})]}),(0,a.jsxs)("div",{className:(0,N.e)(),children:[(0,a.jsx)(O,{}),(0,a.jsx)(L,{}),(0,a.jsx)(U,{}),(0,a.jsx)(F,{}),(0,a.jsx)(B,{}),(0,a.jsx)(G,{}),(0,a.jsx)(z,{}),(0,a.jsx)(K,{}),(0,a.jsx)(J,{})]}),(0,a.jsx)(j.XW,{className:(0,N.Jx)("grid-cols-1"),children:(0,a.jsx)(P.$,{variant:"destructive",onClick:()=>{t(!0),n(),i(),o(),s()},"aria-label":e("Reset all settings to default values"),children:e("Reset")})})]})]})}function M(e){return(0,a.jsxs)("div",{className:(0,d.cn)("text-muted-foreground mb-2 flex items-center gap-2 text-sm font-semibold",e.className),children:[e.title,e.showReset&&e.onReset&&(0,a.jsx)(P.$,{size:"icon",variant:"secondary",className:"size-4",onClick:e.onReset,"aria-label":"Reset",children:(0,a.jsx)(s.A,{className:"size-3","aria-hidden":"true"})})]})}function D(e){let t=e.isTheme??!1;return(0,a.jsxs)(R,{value:e.item.value,className:(0,d.cn)("group outline-none","transition duration-200 ease-in"),"aria-label":`Select ${e.
1item.label.toLowerCase()}`,"aria-describedby":`${e.item.value}-description`,children:[(0,a.jsxs)("div",{className:(0,d.cn)("ring-border relative rounded-md ring-[1px]","group-data-checked:ring-primary group-data-checked:shadow-2xl","group-focus-visible:ring-2"),role:"img","aria-hidden":"false","aria-label":`${e.item.label} option preview`,children:[(0,a.jsx)(l.A,{className:(0,d.cn)("fill-primary size-6 stroke-white","group-data-unchecked:hidden","absolute top-0 right-0 translate-x-1/2 -translate-y-1/2"),"aria-hidden":"true"}),(0,a.jsx)(e.item.icon,{className:(0,d.cn)(!t&&"stroke-primary fill-primary group-data-unchecked:stroke-muted-foreground group-data-unchecked:fill-muted-foreground"),"aria-hidden":"true"})]}),(0,a.jsx)("div",{className:"mt-1 text-xs",id:`${e.item.value}-description`,"aria-live":"polite",children:e.item.label})]})}function O(){let{t:e}=(0,c.Bd)(),{defaultTheme:t,theme:n,setTheme:i}=(0,A.D)();return(0,a.jsxs)("div",{children:[(0,a.jsx)(M,{title:e("Theme"),showReset:n!==t,onReset:()=>i(t)}),(0,a.jsx)(o.z,{value:n,onValueChange:i,className:"grid w-full max-w-md grid-cols-3 gap-4","aria-label":e("Select theme preference"),"aria-describedby":"theme-description",children:[{value:"system",label:e("System"),icon:x},{value:"light",label:e("Light"),icon:v},{value:"dark",label:e("Dark"),icon:b}].map(e=>(0,a.jsx)(D,{item:e,isTheme:!0},e.value))}),(0,a.jsx)("div",{id:"theme-description",className:"sr-only",children:e("Choose between system preference, light mode, or dark mode")})]})}function L(){let{t:e}=(0,c.Bd)(),{defaults:t,customization:n,setPreset:i}=(0,w.A)();return(0,a.jsxs)("div",{children:[(0,a.jsx)(M,{title:e("Color preset"),showReset:n.preset!==t.preset,onReset:()=>i(t.preset)}),(0,a.jsx)(o.z,{value:n.preset,onValueChange:e=>i(e),className:"grid w-full grid-cols-4 gap-3","aria-label":e("Select color preset"),children:k.b3.map(t=>(0,a.jsxs)(R,{value:t.value,className:"group flex flex-col items-stretch outline-none","aria-label":e(`preset.${t.value}`),children:[(0,a.jsxs)("div",{className:(0,d.cn)("ring-border relative h-12 rounded-md ring-[1px] transition","group-data-checked:ring-primary group-data-checked:shadow-md","group-focus-visible:ring-2","group-hover:ring-primary/60"),children:[(0,a.jsx)("div",{"aria-hidden":"true",className:"absolute inset-0 rounded-md",style:"default"===t.value?{background:"linear-gradient(135deg, var(--background) 0%, var(--muted) 50%, var(--foreground) 100%)"}:{background:`linear-gradient(135deg, ${t.swatches[0]} 0%, ${t.swatches[1]??t.swatches[0]} 100%)`}}),(0,a.jsx)(l.A,{className:(0,d.cn)("fill-primary absolute top-0 right-0 z-10 size-5 translate-x-1/2 -translate-y-1/2 stroke-white","group-data-unchecked:hidden"),"aria-hidden":"true"})]}),(0,a.jsx)("div",{className:"mt-1.5 truncate text-center text-xs",children:e(`preset.${t.value}`)})]},t.value))})]})}let E=[{value:"default",label:"Auto",preview:void 0},{value:"sans",label:"Sans",preview:"var(--font-sans)"},{value:"serif",label:"Serif",preview:"var(--font-serif)"}];function U(){let{t:e}=(0,c.Bd)(),{defaults:t,customization:n,setFont:i}=(0,w.A)();return(0,a.jsxs)("div",{children:[(0,a.jsx)(M,{title:e("Font"),showReset:n.font!==t.font,onReset:()=>i(t.font)}),(0,a.jsx)(o.z,{value:n.font,onValueChange:e=>i(e),className:"grid w-full grid-cols-3 gap-4","aria-label":e("Select body font"),children:E.map(t=>(0,a.jsxs)(R,{value:t.value,className:"group flex flex-col items-stretch outline-none","aria-label":"default"===t.value?e("System default"):t.label,children:[(0,a.jsxs)("div",{className:(0,d.cn)("ring-border relative h-12 rounded-md ring-[1px] transition","group-data-checked:ring-primary group-data-checked:shadow-md","group-focus-visible:ring-2","group-hover:ring-primary/60"),children:[(0,a.jsx)(l.A,{className:(0,d.cn)("fill-primary absolute top-0 right-0 z-10 size-5 translate-x-1/2 -translate-y-1/2 stroke-white","group-data-unchecked:hidden"),"aria-hidden":"true"}),(0,a.jsx)("span",{"aria-hidden":"true",className:"text-foreground absolute inset-0 flex items-center justify-center text-lg leading-none font-medium",style:t.preview?{fontFamily:t.preview}:{font:"inherit",fontSize:"1.125rem"},children:"Aa"})]}),(0,a.jsx)("div",{className:"mt-1.5 text-center text-xs",children:t.label})]},t.value))})]})}let q=[{value:"default",label:"Auto",preview:"1rem"},{value:"none",label:"0",preview:"0"},{value:"sm",label:"0.3",preview:"0.3rem"},{value:"md",label:"0.5",preview:"0.5rem"},{value:"lg",label:"0.75",preview:"0.75rem"},{value:"xl",label:"1.0",preview:"1rem"}];function F(){let{t:e}=(0,c.Bd)(),{defaults:t,customization:n,setRadius:i}=(0,w.A)();return(0,a.jsxs)("div",{children:[(0,a.jsx)(M,{title:e("Border radius"),showReset:n.radius!==t.radius,onReset:()=>i(t.radius)}),(0,a.jsx)(o.z,{value:n.radius,onValueChange:e=>i(e),className:"grid w-full grid-cols-6 gap-2","aria-label":e("Select border radius"),children:q.map(t=>(0,a.jsxs)(R,{value:t.value,className:"group flex flex-col items-stretch outline-none","aria-label":"default"===t.value?e("System default"):t.label,children:[(0,a.jsxs)("div",{className:(0,d.cn)("ring-border relative h-12 rounded-md ring-[1px] transition","group-data-checked:ring-primary group-data-checked:shadow-md","group-focus-visible:ring-2","group-hover:ring-primary/60"),children:[(0,a.jsx)(l.A,{className:(0,d.cn)("fill-primary absolute top-0 right-0 z-10 size-5 translate-x-1/2 -translate-y-1/2 stroke-white","group-data-unchecked:hidden"),"aria-hidden":"true"}),(0,a.jsx)("span",{"aria-hidden":"true",className:"border-foreground
1/70 absolute top-2.5 left-2.5 size-3.5 border-t-[1.5px] border-l-[1.5px]",style:{borderTopLeftRadius:t.preview}})]}),(0,a.jsx)("div",{className:"mt-1.5 text-center text-xs",children:t.label})]},t.value))})]})}function _(e){return(0,a.jsx)("div",{"aria-hidden":"true",className:"absolute inset-2.5 flex flex-col justify-center",style:{gap:e.rowGap},children:Array.from({length:e.rows}).map((e,t)=>(0,a.jsx)("span",{className:"bg-foreground/60 block h-[2px] rounded-full",style:{width:`${85-10*t}%`}},t))})}function B(){let{t:e}=(0,c.Bd)(),{defaults:t,customization:n,setScale:i}=(0,w.A)(),r=[{value:"sm",label:e("Compact"),rows:4,rowGap:"3px"},{value:"default",label:e("Default"),rows:3,rowGap:"6px"},{value:"lg",label:e("Comfortable"),rows:2,rowGap:"10px"},{value:"xl",label:e("Super Large"),rows:1,rowGap:"14px"}];return(0,a.jsxs)("div",{children:[(0,a.jsx)(M,{title:e("Density"),showReset:n.scale!==t.scale,onReset:()=>i(t.scale)}),(0,a.jsx)(o.z,{value:n.scale,onValueChange:e=>i(e),className:"grid w-full grid-cols-4 gap-3","aria-label":e("Select interface density"),children:r.map(e=>(0,a.jsxs)(R,{value:e.value,className:"group flex flex-col items-stretch outline-none","aria-label":e.label,children:[(0,a.jsxs)("div",{className:(0,d.cn)("ring-border relative h-12 rounded-md ring-[1px] transition","group-data-checked:ring-primary group-data-checked:shadow-md","group-focus-visible:ring-2","group-hover:ring-primary/60"),children:[(0,a.jsx)(l.A,{className:(0,d.cn)("fill-primary absolute top-0 right-0 z-10 size-5 translate-x-1/2 -translate-y-1/2 stroke-white","group-data-unchecked:hidden"),"aria-hidden":"true"}),(0,a.jsx)(_,{rows:e.rows,rowGap:e.rowGap})]}),(0,a.jsx)("div",{className:"mt-1.5 truncate text-center text-xs",children:e.label})]},e.value))})]})}function G(){let{t:e}=(0,c.Bd)(),{defaultVariant:t,variant:n,setVariant:i}=(0,S.g)();return(0,a.jsxs)("div",{className:"max-md:hidden",children:[(0,a.jsx)(M,{title:e("Sidebar"),showReset:t!==n,onReset:()=>i(t)}),(0,a.jsx)(o.z,{value:n,onValueChange:i,className:"grid w-full max-w-md grid-cols-3 gap-4","aria-label":e("Select sidebar style"),"aria-describedby":"sidebar-description",children:[{value:"inset",label:e("Inset"),icon:f},{value:"floating",label:e("Floating"),icon:g},{value:"sidebar",label:e("Sidebar"),icon:y}].map(e=>(0,a.jsx)(D,{item:e},e.value))}),(0,a.jsx)("div",{id:"sidebar-description",className:"sr-only",children:e("Choose between inset, floating, or standard sidebar layout")})]})}function z(){let{t:e}=(0,c.Bd)(),{open:t,setOpen:n}=(0,I.cL)(),{defaultCollapsible:i,collapsible:r,setCollapsible:s}=(0,S.g)(),l=t?"default":r;return(0,a.jsxs)("div",{className:"max-md:hidden",children:[(0,a.jsx)(M,{title:e("Layout"),showReset:"default"!==l,onReset:()=>{n(!0),s(i)}}),(0,a.jsx)(o.z,{value:l,onValueChange:e=>{"default"===e?n(!0):(n(!1),s(e))},className:"grid w-full max-w-md grid-cols-3 gap-4","aria-label":e("Select layout style"),"aria-describedby":"layout-description",children:[{value:"default",label:e("Default"),icon:p},{value:"icon",label:e("Compact"),icon:h},{value:"offcanvas",label:e("Full layout"),icon:m}].map(e=>(0,a.jsx)(D,{item:e},e.value))}),(0,a.jsx)("div",{id:"layout-description",className:"sr-only",children:e("Choose between default expanded, compact icon-only, or full layout mode")})]})}function K(){let{t:e}=(0,c.Bd)(),{defaults:t,customization:n,setContentLayout:i}=(0,w.A)();return(0,a.jsxs)("div",{className:"max-md:hidden",children:[(0,a.jsx)(M,{title:e("Content width"),showReset:n.contentLayout!==t.contentLayout,onReset:()=>i(t.contentLayout)}),(0,a.jsx)(o.z,{value:n.contentLayout,onValueChange:e=>i(e),className:"grid w-full grid-cols-2 gap-4","aria-label":e("Select content width"),children:[{value:"full",label:e("Full width")},{value:"centered",label:e("Centered")}].map(e=>(0,a.jsxs)(R,{value:e.value,className:"group flex flex-col items-stretch outline-none","aria-label":e.label,children:[(0,a.jsxs)("div",{className:(0,d.cn)("ring-border relative h-12 rounded-md ring-[1px] transition","group-data-checked:ring-primary group-data-checked:shadow-md","group-focus-visible:ring-2","group-hover:ring-primary/60"),children:[(0,a.jsx)(l.A,{className:(0,d.cn)("fill-primary absolute top-0 right-0 z-10 size-5 translate-x-1/2 -translate-y-1/2 stroke-white","group-data-unchecked:hidden"),"aria-hidden":"true"}),(0,a.jsx)(W,{centered:"centered"===e.value})]}),(0,a.jsx)("div",{className:"mt-1.5 truncate text-center text-xs",children:e.label})]},e.value))})]})}function W(e){return(0,a.jsxs)("div",{"aria-hidden":"true",className:"absolute inset-2 flex flex-col gap-1.5",children:[(0,a.jsx)("span",{className:"bg-foreground
1/40 block h-1.5 w-full rounded-sm"}),(0,a.jsxs)("div",{className:(0,d.cn)("flex flex-1 flex-col gap-1",e.centered?"mx-auto w-1/2":"w-full"),children:[(0,a.jsx)("span",{className:"bg-foreground/60 block h-[2px] w-full rounded-full"}),(0,a.jsx)("span",{className:"bg-foreground/60 block h-[2px] w-3/4 rounded-full"})]})]})}function J(){let{t:e}=(0,c.Bd)(),{defaultDir:t,dir:n,setDir:i}=(0,C.j)();return(0,a.jsxs)("div",{children:[(0,a.jsx)(M,{title:e("Direction"),showReset:t!==n,onReset:()=>i(t)}),(0,a.jsx)(o.z,{value:n,onValueChange:i,className:"grid w-full max-w-md grid-cols-3 gap-4","aria-label":e("Select site direction"),"aria-describedby":"direction-description",children:[{value:"ltr",label:e("Left to Right"),icon:e=>(0,a.jsx)(u,{dir:"ltr",...e})},{value:"rtl",label:e("Right to Left"),icon:e=>(0,a.jsx)(u,{dir:"rtl",...e})}].map(e=>(0,a.jsx)(D,{item:e},e.value))}),(0,a.jsx)("div",{id:"direction-description",className:"sr-only",children:e("Choose between left-to-right or right-to-left site direction")})]})}},2388(e,t,n){var a=n(23579),i=n(72407),o=n(12591),r=n(31759),s=n(66304);function l(e){let{t}=(0,i.Bd)(),{title:n,desc:l,children:c,className:d,confirmText:u,cancelBtnText:h,destructive:p,isLoading:m,disabled:g=!1,handleConfirm:f,...y}=e;return(0,a.jsx)(r.Lt,{...y,children:(0,a.jsxs)(r.EO,{className:(0,o.cn)(d&&d),children:[(0,a.jsxs)(r.wd,{className:"text-start",children:[(0,a.jsx)(r.r7,{children:n}),(0,a.jsx)(r.$v,{render:(0,a.jsx)("div",{}),children:l})]}),c,(0,a.jsxs)(r.ck,{children:[(0,a.jsx)(r.Zr,{disabled:m,children:h??t("Cancel")}),(0,a.jsx)(s.$,{variant:p?"destructive":"default",onClick:f,disabled:g||m,children:u??t("Continue")})]})]})})}n.d(t,{T:()=>l})},68448(e,t,n){n.d(t,{Yt:()=>w,JM:()=>eP,Z0:()=>ej,Of:()=>F,wZ:()=>x,cx:()=>ex,Tw:()=>m,J2:()=>ee,wk:()=>q,Oz:()=>es,io:()=>A,hm:()=>V,n$:()=>J,uI:()=>eS,bz:()=>eA});var a=n(23579),i=n(35477),o=n(65400),r=n(95987),s=n(48816),l=n(72407),c=n(12591),d=n(66304),u=n(62036);let h=[10,20,30,40,50,100],p=h.map(e=>({value:`${e}`,label:e}));function m(e){let{table:t}=e,{t:n}=(0,l.Bd)(),m=t.getState().pagination,g=m.pageIndex+1,f=m.pageSize,y=t.getPageCount(),b=t.getRowCount(),v=(0,c.ml)(g,y);return(0,a.jsx)("div",{className:(0,c.cn)("@container/pagination flex min-w-0 items-center justify-end overflow-clip"),style:{overflowClipMargin:1},children:(0,a.jsxs)("div",{className:"flex min-w-0 shrink-0 items-center gap-2 @xl/pagination:gap-3",children:[(0,a.jsxs)("div",{className:"flex shrink-0 items-baseline gap-1.5 text-xs font-medium whitespace-nowrap sm:text-sm",children:[(0,a.jsx)("span",{className:"text-muted-foreground/80",children:n("Total:")}),(0,a.jsx)("span",{className:"text-foreground tabular-nums",children:b.toLocaleString()})]}),(0,a.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5 @lg/pagination:gap-2",children:[(0,a.jsx)("p",{className:"text-muted-foreground/80 hidden text-sm font-medium whitespace-nowrap @2xl/pagination:block",children:n("Rows per page")}),(0,a.jsxs)(u.l6,{items:p,value:`${f}`,onValueChange:e=>{t.setPageSize(Number(e))},children:[(0,a.jsx)(u.bq,{className:"text-foreground h-8 w-[64px] font-medium tabular-nums sm:w-[70px]",children:(0,a.jsx)(u.yv,{placeholder:f})}),(0,a.jsx)(u.gC,{side:"top",alignItemWithTrigger:!1,children:(0,a.jsx)(u.s3,{children:h.map(e=>(0,a.jsx)(u.eb,{value:`${e}`,children:e},e))})})]})]}),(0,a.jsxs)("div",{className:"flex min-w-0 shrink-0 items-center gap-1 @lg/pagination:gap-1.5 @xl/pagination:gap-2",children:[(0,a.jsxs)(d.$,{variant:"outline",className:"text-muted-foreground hover:text-foreground disabled:text-muted-foreground/50 size-8 p-0 @max-lg/pagination:hidden",onClick:()=>t.setPageIndex(0),disabled:!t.getCanPreviousPage(),children:[(0,a.jsx)("span",{className:"sr-only",children:n("Go to first page")}),(0,a.jsx)(i.A,{className:"h-4 w-4"})]}),(0,a.jsxs)(d.$,{variant:"outline",className:"text-muted-foreground hover:text-foreground disabled:text-muted-foreground/50 size-8 p-0",onClick:()=>t.previousPage(),disabled:!t.getCanPreviousPage(),children:[(0,a.jsx)("span",{className:"sr-only",children:n("Go to previous page")}),(0,a.jsx)(o.A,{className:"h-4 w-4"})]}),v.map((e,i)=>(0,a.jsx)("div",{className:"flex items-center",children:"..."===e?(0,a.jsx)("span",{className:"text-muted-foreground
1/60 px-0.5 text-sm @lg/pagination:px-1",children:"..."}):(0,a.jsxs)(d.$,{variant:g===e?"default":"outline",className:(0,c.cn)("h-8 min-w-8 px-2 tabular-nums",g===e?"font-semibold":"text-muted-foreground hover:text-foreground"),onClick:()=>t.setPageIndex(e-1),children:[(0,a.jsx)("span",{className:"sr-only",children:n("Go to page {{page}}",{page:e})}),e]})},`${e}-${i}`)),(0,a.jsxs)(d.$,{variant:"outline",className:"text-muted-foreground hover:text-foreground disabled:text-muted-foreground/50 size-8 p-0",onClick:()=>t.nextPage(),disabled:!t.getCanNextPage(),children:[(0,a.jsx)("span",{className:"sr-only",children:n("Go to next page")}),(0,a.jsx)(r.A,{className:"h-4 w-4"})]}),(0,a.jsxs)(d.$,{variant:"outline",className:"text-muted-foreground hover:text-foreground disabled:text-muted-foreground/50 size-8 p-0 @max-lg/pagination:hidden",onClick:()=>t.setPageIndex(t.getPageCount()-1),disabled:!t.getCanNextPage(),children:[(0,a.jsx)("span",{className:"sr-only",children:n("Go to last page")}),(0,a.jsx)(s.A,{className:"h-4 w-4"})]})]})]})})}var g=n(72281),f=n(17302),y=n(24306),b=n(72620),v=n(43660);function x(e){let{column:t,title:n,className:i}=e,{t:o}=(0,l.Bd)();return t.getCanSort()?(0,a.jsx)("div",{className:(0,c.cn)("flex items-center space-x-2",i),children:(0,a.jsxs)(v.rI,{children:[(0,a.jsxs)(v.ty,{render:(0,a.jsx)(d.$,{variant:"ghost",size:"sm",className:"data-popup-open:bg-accent -ms-3 h-8"}),children:[(0,a.jsx)("span",{children:n}),"desc"===t.getIsSorted()?(0,a.jsx)(g.A,{className:"ms-2 h-4 w-4"}):"asc"===t.getIsSorted()?(0,a.jsx)(f.A,{className:"ms-2 h-4 w-4"}):(0,a.jsx)(y.A,{className:"ms-2 h-4 w-4"})]}),(0,a.jsxs)(v.SQ,{align:"start",children:[(0,a.jsxs)(v._2,{onClick:()=>t.toggleSorting(!1),children:[(0,a.jsx)(f.A,{className:"text-muted-foreground/70 size-3.5"}),o("Asc")]}),(0,a.jsxs)(v._2,{onClick:()=>t.toggleSorting(!0),children:[(0,a.jsx)(g.A,{className:"text-muted-foreground/70 size-3.5"}),o("Desc")]}),t.getCanHide()&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(v.mB,{}),(0,a.jsxs)(v._2,{onClick:()=>t.toggleVisibility(!1),children:[(0,a.jsx)(b.A,{className:"text-muted-foreground/70 size-3.5"}),o("Hide")]})]})]})]})}):(0,a.jsx)("div",{className:(0,c.cn)(i),children:n})}var k=n(31371),C=n(68165),S=n(95163);function w(e){let{items:t,max:n=2,tooltipClassName:i}=e;if(0===t.length)return(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:"-"});let o=t.length>n;return(0,a.jsx)(S.Bc,{children:(0,a.jsxs)(S.m_,{children:[(0,a.jsx)(S.k$,{render:(0,a.jsx)("div",{className:"-ml-1.5"}),children:(0,a.jsx)(C.M8,{items:t,max:n,renderItem:e=>e})}),o&&(0,a.jsx)(S.ZI,{side:"top",className:i??"border-border bg-popover max-h-48 max-w-[320px] overflow-y-auto p-2",children:(0,a.jsx)("div",{className:"flex flex-wrap gap-1",children:t})})]})})}function A(e){let{table:t}=e,{t:n}=(0,l.Bd)(),i=k.useMemo(()=>t.getAllColumns().filter(e=>void 0!==e.accessorFn&&e.getCanHide()),[t]);return(0,a.jsxs)(v.rI,{modal:!1,children:[(0,a.jsx)(v.ty,{render:(0,a.jsx)(d.$,{variant:"outline",className:"shrink-0","aria-label":n("View")}),children:n("View")}),(0,a.jsx)(v.SQ,{align:"end",className:"w-[150px]",children:(0,a.jsxs)(v.I,{children:[(0,a.jsx)(v.lp,{children:n("Toggle columns")}),i.map(e=>(0,a.jsx)(v.hO,{className:"capitalize",checked:e.getIsVisible(),onCheckedChange:t=>e.toggleVisibility(!!t),children:"string"==typeof e.columnDef.header?e.columnDef.header:e.columnDef.meta?.label??e.id},e.id))]})})]})}var P=n(575),j=n(6631),N=n(30369),I=n(88939),R=n(40382),T=n(31214),M=n(79839),D=n(26067),O=n(75257),L=n(81361),E=n(51983);let U=k.memo(function(e){let{column:t,title:n,options:i,singleSelect:o=!1}=e,{t:r}=(0,l.Bd)(),s=t?.getFacetedUniqueValues(),u=new Set(t?.getFilterValue());return(0,a.jsxs)(L.AM,{children:[(0,a.jsxs)(L.Wv,{render:(0,a.jsx)(d.$,{variant:"outline",size:"sm",className:"h-8 border-dashed"}),children:[(0,a.jsx)(T.A,{className:"size-4"}),n,u?.size>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.w,{orientation:"vertical",className:"mx-2 h-4"}),(0,a.jsx)(D.E,{variant:"secondary",className:"rounded-sm px-1 font-normal lg:hidden",children:u.size}),(0,a.jsx)("div",{className:"hidden space-x-1 lg:flex",children:u.size>2?(0,a.jsxs)(D.E,{variant:"secondary",className:"rounded-sm px-1 font-normal",children:[u.size," ",r("selected")]}):i.filter(e=>u.has(e.value)).map(e=>(0,a.jsx)(D.E,{variant:"secondary",className:"rounded-sm px-1 font-normal",children:r(e.label)},e.value))})]})]}),(0,a.jsx)(L.hl,{className:"max-w-[360px] min-w-[200px] p-0",align:"start",children:(0,a.jsxs)(O.uB,{children:[(0,a.jsx)(O.G7,{placeholder:n}),(0,a.jsxs)(O.oI,{children:[(0,a.jsx)(O.xL,{children:r("No results found.")}),(0,a.jsx)(O.L$,{children:i.map(e=>{let n=u.has(e.value);return(0,a.jsxs)(O.h_,{onSelect:()=>{let n;return n=function(e,t,n){if(n)return e.has(t)?[]:[t];let a=new Set(e);return a.has(t)?a.delete(t):a.add(t),Array.from(a)}(u,e.value,o),void t?.setFilterValue(n.length?n:void 0)}
1,children:[(0,a.jsx)("div",{className:(0,c.cn)("border-primary flex size-4 items-center justify-center rounded-sm border",n?"bg-primary text-primary-foreground":"opacity-50 [&_svg]:invisible"),children:(0,a.jsx)(M.A,{className:(0,c.cn)("text-background h-4 w-4")})}),e.iconNode?(0,a.jsx)("span",{className:"text-muted-foreground flex size-4 items-center justify-center",children:e.iconNode}):e.icon?(0,a.jsx)(e.icon,{className:"text-muted-foreground size-4"}):null,(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate",title:r(e.label),children:r(e.label)}),"number"==typeof e.count?(0,a.jsx)("span",{className:"text-muted-foreground ms-auto flex h-4 min-w-4 items-center justify-center font-mono text-xs",children:e.count}):s?.get(e.value)?(0,a.jsx)("span",{className:"ms-auto flex h-4 w-4 items-center justify-center font-mono text-xs",children:s.get(e.value)}):null]},e.value)})}),u.size>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(O.fx,{}),(0,a.jsx)(O.L$,{children:(0,a.jsx)(O.h_,{onSelect:()=>t?.setFilterValue(void 0),className:"justify-center text-center",children:r("Clear filters")})})]})]})]})})]})});function q(e){let{t}=(0,l.Bd)(),[n,i]=(0,k.useState)(!1),[o,r]=(0,k.useState)(!1),s=e.filters??[],u=null!=e.expandable,h=null!=e.onSearch,p=e.table.getState().columnFilters.length>0||!!e.table.getState().globalFilter||!!e.hasAdditionalFilters,m=e.searchPlaceholder??t("Filter..."),g=e.searchKey?e.table.getColumn(e.searchKey)?.getFilterValue()??"":e.table.getState().globalFilter??"",[f,y]=(0,k.useState)(null),b=f&&(o||f.baseValue===g)?f:null,v=b?.value??g,x=Math.max(0,e.searchDebounceMs??0),C=(0,P.d7)(v,x),S=k.useCallback(t=>{if(t!==g){if(e.searchKey)return void e.table.getColumn(e.searchKey)?.setFilterValue(t);e.table.setGlobalFilter(t)}},[g,e.searchKey,e.table]);k.useEffect(()=>{x<=0||o||C!==v||S(C)},[S,C,o,x,v]);let w=e=>{x<=0&&S(e)},T=(0,a.jsx)(R.p,{placeholder:m,value:v,onChange:e=>{let t=e.target.value;y({baseValue:g,value:t}),o||w(t)},onCompositionStart:()=>{r(!0)},onCompositionEnd:e=>{r(!1);let t=e.currentTarget.value;y({baseValue:g,value:t}),w(t)},className:"w-full sm:w-[200px] lg:w-[240px]"}),M=k.useMemo(()=>s.map(t=>{let n=e.table.getColumn(t.columnId);return n?(0,a.jsx)(U,{column:n,title:t.title,options:t.options,singleSelect:t.singleSelect},t.columnId):null}),[e.filters,e.table]),D=()=>{r(!1),y(null),e.table.resetColumnFilters(),e.table.setGlobalFilter(""),e.onReset?.()},O=h?(0,a.jsx)(d.$,{variant:"outline",onClick:D,disabled:!p,children:t("Reset")}):p?(0,a.jsxs)(d.$,{variant:"ghost",onClick:D,className:"text-muted-foreground hover:text-foreground gap-1 px-2",children:[t("Reset"),(0,a.jsx)(j.A,{})]}):null,L=h?(0,a.jsxs)(d.$,{onClick:e.onSearch,disabled:e.searchLoading,children:[e.searchLoading&&(0,a.jsx)(N.A,{className:"animate-spin"}),t("Search")]}):null,E=e.hideViewOptions?null:(0,a.jsx)(A,{table:e.table}),q=u?(0,a.jsxs)(d.$,{variant:"ghost",onClick:()=>i(e=>!e),"aria-expanded":n,className:(0,c.cn)("text-muted-foreground hover:text-foreground gap-1 px-2",e.hasExpandedActiveFilters&&!n&&"text-primary hover:text-primary"),children:[t(n?"Collapse":"Expand"),(0,a.jsx)(I.A,{className:(0,c.cn)("size-3.5 transition-transform duration-200",n&&"rotate-180")})]}):null;return null!=e.leftActions?(0,a.jsxs)("div",{className:(0,c.cn)("flex flex-col gap-2",e.className),children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 sm:gap-3",children:[void 0!==e.customSearch?e.customSearch:T,e.additionalSearch,M,(0,a.jsx)("div",{className:"ms-auto flex shrink-0 items-center gap-1.5 sm:gap-2",children:q})]}),n&&u&&(0,a.jsx)("div",{className:"flex flex-wrap items-center gap-2 sm:gap-3",children:e.expandable}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 sm:gap-3",children:[e.leftActions,(0,a.jsxs)("div",{className:"ms-auto flex shrink-0 items-center gap-1.5 sm:gap-2",children:[e.preActions,O,L,E]})]})]}):(0,a.jsxs)("div",{className:(0,c.cn)("flex flex-wrap items-center gap-2 sm:gap-3",e.className),children:[void 0!==e.customSearch?e.customSearch:T,e.additionalSearch,M,n&&u&&e.expandable,(0,a.jsxs)("div",{className:"ms-auto flex shrink-0 items-center gap-1.5 sm:gap-2",children:[e.preActions,O,L,E,q]})]})}function F(e){let{table:t,entityName:n,children:i}=e,{t:o}=(0,l.Bd)(),r=t.getFilteredSelectedRowModel().rows.length,s=(0,k.useRef)(null),u=(0,k.useRef)(null),[h,p]=(0,k.useState)("");(0,k.useLayoutEffect)(()=>{u.current=s.current?.querySelectorAll("button")??null}),(0,k.useEffect)(()=>
1{if(r>0){p(`${r} ${n}${r>1?"s":""} selected. Bulk actions toolbar is available.`);let e=setTimeout(()=>p(""),3e3);return()=>clearTimeout(e)}},[r,n]);let m=()=>{t.resetRowSelection()};return 0===r?null:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{"aria-live":"polite","aria-atomic":"true",className:"sr-only",role:"status",children:h}),(0,a.jsx)("div",{ref:s,role:"toolbar","aria-label":`Bulk actions for ${r} selected ${n}${r>1?"s":""}`,"aria-describedby":"bulk-actions-description",tabIndex:-1,onKeyDown:e=>{let t=u.current;if(!t)return;let n=Array.from(t).findIndex(e=>e===document.activeElement);switch(e.key){case"ArrowRight":{e.preventDefault();let a=(n+1)%t.length;t[a]?.focus();break}case"ArrowLeft":{e.preventDefault();let a=0===n?t.length-1:n-1;t[a]?.focus();break}case"Home":e.preventDefault(),t[0]?.focus();break;case"End":e.preventDefault(),t[t.length-1]?.focus();break;case"Escape":{let t=e.target,n=document.activeElement,a=t?.getAttribute("data-slot")==="dropdown-menu-trigger"||n?.getAttribute("data-slot")==="dropdown-menu-trigger"||t?.closest('[data-slot="dropdown-menu-trigger"]')||n?.closest('[data-slot="dropdown-menu-trigger"]'),i=n?.closest('[data-slot="dropdown-menu-content"]')||t?.closest('[data-slot="dropdown-menu-content"]');if(a||i)return;e.preventDefault(),m()}}},className:(0,c.cn)("fixed bottom-6 left-1/2 z-50 -translate-x-1/2 rounded-xl","transition-all delay-100 duration-300 ease-out hover:scale-105","focus-visible:ring-ring/50 focus-visible:ring-2 focus-visible:outline-none"),children:(0,a.jsxs)("div",{className:(0,c.cn)("p-2 shadow-xl","rounded-xl border","bg-background/95 supports-[backdrop-filter]:bg-background/60 backdrop-blur-lg","flex items-center gap-x-2"),children:[(0,a.jsxs)(S.m_,{children:[(0,a.jsxs)(S.k$,{render:(0,a.jsx)(d.$,{variant:"outline",size:"icon",onClick:m,className:"size-6","aria-label":o("Clear selection"),title:o("Clear selection (Escape)")}),children:[(0,a.jsx)(j.A,{}),(0,a.jsx)("span",{className:"sr-only",children:o("Clear selection")})]}),(0,a.jsx)(S.ZI,{children:(0,a.jsx)("p",{children:o("Clear selection (Escape)")})})]}),(0,a.jsx)(E.w,{className:"h-5",orientation:"vertical","aria-hidden":"true"}),(0,a.jsxs)("div",{className:"flex items-center gap-x-1 text-sm",id:"bulk-actions-description",children:[(0,a.jsx)(D.E,{variant:"default",className:"min-w-8 rounded-lg","aria-label":`${r} selected`,children:r})," ",(0,a.jsxs)("span",{className:"hidden sm:inline",children:[n,r>1?"s":""]})," ",o("selected")]}),(0,a.jsx)(E.w,{className:"h-5",orientation:"vertical","aria-hidden":"true"}),i]})})]})}function _(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto overflow-y-hidden",children:(0,a.jsx)("table",{"data-slot":"table",className:(0,c.cn)("w-full caption-bottom text-sm tabular-nums [&_td]:text-sm [&_td_*]:text-sm [&_th]:text-sm [&_th_*]:text-sm",t),...n})})}function B(e){let{className:t,...n}=e;return(0,a.jsx)("thead",{"data-slot":"table-header",className:(0,c.cn)("[&_tr]:border-b",t),...n})}function G(e){let{className:t,...n}=e;return(0,a.jsx)("tbody",{"data-slot":"table-body",className:(0,c.cn)("[&_tr:last-child]:border-0",t),...n})}function z(e){let{className:t,...n}=e;return(0,a.jsx)("tr",{"data-slot":"table-row",className:(0,c.cn)("group hover:[background-color:color-mix(in_oklch,var(--muted)_50%,var(--background))] has-aria-expanded:[background-color:color-mix(in_oklch,var(--muted)_50%,var(--background))] data-[state=selected]:bg-muted border-b transition-colors",t),...n})}function K(e){let{className:t,...n}=e;return(0,a.jsx)("th",{"data-slot":"table-head",className:(0,c.cn)("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0",t),...n})}function W(e){let{className:t,...n}=e;return(0,a.jsx)("td",{"data-slot":"table-cell",className:(0,c.cn)("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",t),...n})}let J={container:"overflow-hidden rounded-md border",sectionContainer:"border-border/60 rounded-lg",embeddedContainer:"rounded-none border-0",compactTable:"text-sm",compactHeaderRow:"hover:bg-transparent",mutedHeaderRow:"[background-color:color-mix(in_oklch,var(--muted)_30%,var(--background))] hover:[background-color:color-mix(in_oklch,var(--muted)_30%,var(--background))]",compactHeaderCell:"text-muted-foreground py-2 text-[10px] font-medium tracking-wider up
1percase",compactHeaderCellRight:"text-muted-foreground py-2 text-right text-[10px] font-medium tracking-wider uppercase",compactCell:"py-2.5",compactTopCell:"py-2.5 align-top",compactTopNumericCell:"py-2.5 text-right align-top font-mono",compactMutedCell:"text-muted-foreground py-2.5",compactMutedCodeCell:"text-muted-foreground py-2.5 font-mono",compactNumericCell:"py-2.5 text-right font-mono",compactMutedNumericCell:"text-muted-foreground py-2.5 text-right font-mono",topCell:"py-2 align-top",topMutedCell:"text-muted-foreground py-2 align-top",codeCell:"font-mono text-sm",mutedCell:"text-muted-foreground text-sm",mutedCodeCell:"text-muted-foreground font-mono text-sm",topNumericCell:"py-2 text-right font-mono",mediumCell:"font-medium",actionHeaderCell:"text-right",actionCell:"text-right"};function V(e){let{className:t,tableClassName:n,containerProps:i,tableProps:o}=e;return(0,a.jsx)("div",{className:(0,c.cn)(J.container,t),...i,children:(0,a.jsx)(_,{className:n,...o,children:void 0!==e.columns?(0,a.jsx)(H,{...e}):e.children})})}function H(e){let{columns:t,data:n,getRowKey:i,getRowClassName:o,renderRow:r,empty:s,emptyContent:l,emptyClassName:c,headerRowClassName:d}=e,u=s??(void 0!==n&&0===n.length),h=n.map((e,n)=>(0,a.jsx)($,{row:e,index:n,columns:t,getRowClassName:o,renderRow:r},i?.(e,n)??n));return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(B,{children:(0,a.jsx)(z,{className:d,children:t.map(e=>(0,a.jsx)(K,{className:e.className,children:e.header},e.id))})}),(0,a.jsx)(G,{children:u?(0,a.jsx)(Q,{colSpan:t.length,className:c,children:l}):h})]})}function $(e){let{row:t,index:n,columns:i,getRowClassName:o,renderRow:r}=e;return r?(0,a.jsx)(a.Fragment,{children:r(t,n)}):(0,a.jsx)(z,{className:o?.(t,n),children:i.map(e=>{var i,o,r;return(0,a.jsx)(W,{className:(i=e,o=t,r=n,"function"==typeof i.cellClassName?i.cellClassName(o,r):i.cellClassName),children:e.cell?.(t,n)},e.id)})})}function Q(e){let{colSpan:t,children:n,className:i}=e;return(0,a.jsx)(z,{children:(0,a.jsx)(W,{colSpan:t,className:(0,c.cn)("h-24 text-center",i),children:n})})}function Y(e){let{table:t}=e,n=t.getVisibleLeafColumns(),i=n.reduce((e,t)=>e+t.getSize(),0);return(0,a.jsx)("colgroup",{children:n.map(e=>(0,a.jsx)("col",{style:{width:i>0?`${e.getSize()/i*100}%`:void 0}},e.id))})}var X=n(15624);function Z(e){let{table:t,applyHeaderSize:n,className:i,rowClassName:o,getColumnClassName:r}=e;return(0,a.jsx)(B,{className:i,children:t.getHeaderGroups().map(e=>(0,a.jsx)(z,{className:o,children:e.headers.map(e=>(0,a.jsx)(K,{colSpan:e.colSpan,className:r?.(e.column.id,"header"),style:n?{width:e.getSize()}:void 0,children:function(e){if(e.isPlaceholder)return null;let{header:t,meta:n}=e.column.columnDef;return"string"==typeof t?(0,a.jsx)(x,{column:e.column,title:t}):n?.label?(0,a.jsx)(x,{column:e.column,title:n.label}):(0,X.Kv)(t,e.getContext())}(e)},e.id))},e.id))})}let ee=k.memo(function(e){let{row:t,className:n,getColumnClassName:i,...o}=e;return(0,a.jsx)(z,{"data-state":t.getIsSelected()?"selected":void 0,className:n,...o,children:t.getVisibleCells().map(e=>(0,a.jsx)(W,{className:i?.(e.column.id,"cell"),children:(0,X.Kv)(e.column.columnDef.cell,e.getContext())},e.id))})},(e,t)=>e.row===t.row&&e.className===t.className&&e.row.getIsSelected()===t.row.getIsSelected());var et=n(30058),en=n(43021);function ea(e){let{colSpan:t,title:n,description:i,icon:o,children:r}=e,{t:s}=(0,l.Bd)(),c=n??s("No Data"),d=i??s("No records found. Try adjusting your filters.");return(0,a.jsx)(z,{children:(0,a.jsx)(W,{colSpan:t,className:"h-[400px] p-0",children:(0,a.jsxs)(en.Sv,{children:[(0,a.jsxs)(en.FT,{children:[(0,a.jsx)(en.Kr,{variant:"icon",children:o||(0,a.jsx)(et.A,{className:"size-6"})}),(0,a.jsx)(en.cz,{children:c}),(0,a.jsx)(en.Ou,{children:d})]}),r]})})})}var ei=n(27917);let eo=["75%","60%","85%","50%","70%","90%","55%","80%","65%","45%"];function er(e){let{table:t,rowCount:n,rowHeight:i="h-[52px]",keyPrefix:o="skeleton"}=e,r=t.getVisibleLeafColumns(),s=n??Math.min(t.getState().pagination?.pageSize||20,20);return(0,a.jsx)(a.Fragment,{children:Array.from({length:s},(e,t)=>
1(0,a.jsx)(z,{className:(0,c.cn)(i,"border-b"),children:r.map((e,n)=>{let i="select"===e.id,o=(t*r.length+n)%eo.length;return(0,a.jsx)(W,{className:"py-3",children:(0,a.jsx)(ei.E,{className:(0,c.cn)("h-4 rounded-sm",i?"size-4":void 0),style:i?void 0:{width:eo[o]}})},e.id)})},`${o}-${t}`))})}function es(e){var t,n,i;let o,r,s=e.rows??e.table.getRowModel().rows,l=k.useMemo(()=>e.table.getVisibleLeafColumns().length,[e.table]),d=(t=e.table,n=e.getColumnClassName,i=e.pinnedColumns,o=k.useMemo(()=>(function(e,t){if(!t.length)return e;if(!e?.length)return t;let n=new Set(e.map(e=>e.columnId));return[...e,...t.filter(e=>!n.has(e.columnId))]})(i,t.getAllColumns().flatMap(e=>{let t=e.columnDef.meta?.pinned;return t?[{columnId:e.id,side:t}]:[]})),[t,i]),r=k.useMemo(()=>(function(e){if(e?.length)return new Map(e.map(e=>[e.columnId,e]))})(o),[o]),k.useMemo(()=>(e,t)=>{var a,i;let o,s=n?.(e,t),l=r?.get(e);return l?(0,c.cn)(s,(a=l,i=t,o="left"===a.side?"shadow-[8px_0_10px_-10px_hsl(var(--foreground))]":"shadow-[-8px_0_10px_-10px_hsl(var(--foreground))]",(0,c.cn)("sticky whitespace-nowrap","left"===a.side?"left-0":"right-0",o,"header"===i?"[background-color:var(--table-header-bg,var(--background))] group-hover:[background-color:color-mix(in_oklch,var(--muted)_50%,var(--background))] z-30":"bg-background z-10 group-hover:[background-color:color-mix(in_oklch,var(--muted)_50%,var(--background))] group-data-[state=selected]:bg-muted",a.className,"header"===i?a.headerClassName:a.cellClassName))):s},[n,r]));return(0,a.jsx)("div",{className:(0,c.cn)("overflow-hidden rounded-lg border",e.containerClassName),...e.containerProps,children:e.splitHeader?(0,a.jsx)(ec,{props:e,rows:s,colSpan:l,getColumnClassName:d}):(0,a.jsx)(el,{props:e,rows:s,colSpan:l,getColumnClassName:d})})}function el(e){let{props:t,rows:n,colSpan:i,getColumnClassName:o}=e,r=ed(t);return(0,a.jsx)("div",{className:t.tableContainerClassName,children:(0,a.jsxs)(_,{className:t.tableClassName,style:r.style,children:[r.colgroup,(0,a.jsx)(Z,{table:t.table,applyHeaderSize:t.applyHeaderSize,className:t.tableHeaderClassName,rowClassName:t.tableHeaderRowClassName,getColumnClassName:o}),eu(t,n,i,o)]})})}function ec(e){let{props:t,rows:n,colSpan:i,getColumnClassName:o}=e,r=ed(t);return(0,a.jsx)("div",{className:(0,c.cn)("flex h-full min-h-0 flex-col",t.tableContainerClassName),children:(0,a.jsx)("div",{className:(0,c.cn)("min-h-0 flex-1 overflow-auto","[&_[data-slot=table-header]]:[--table-header-bg:color-mix(in_oklch,var(--muted)_30%,var(--background))]","[&_[data-slot=table-header]]:[background-color:var(--table-header-bg)]",t.splitHeaderScrollClassName,t.bodyContainerClassName),children:(0,a.jsxs)("table",{"data-slot":"table",className:(0,c.cn)("w-full caption-bottom text-sm tabular-nums [&_td]:text-sm [&_td_*]:text-sm [&_th]:text-sm [&_th_*]:text-sm",t.tableClassName),style:r.style,children:[r.colgroup,(0,a.jsx)(Z,{table:t.table,applyHeaderSize:t.applyHeaderSize,className:(0,c.cn)("sticky top-0 z-10",t.tableHeaderClassName),rowClassName:t.tableHeaderRowClassName,getColumnClassName:o}),eu(t,n,i,o)]})})})}function ed(e){return e.colgroup?{colgroup:e.colgroup}:e.splitHeader||e.applyHeaderSize?{colgroup:(0,a.jsx)(Y,{table:e.table}),style:{minWidth:e.table.getVisibleLeafColumns().reduce((e,t)=>e+t.getSize(),0),tableLayout:"fixed",width:"100%"}}:{}}function eu(e,t,n,i){var o,r,s,l,d,u;return(0,a.jsx)(G,{className:e.tableBodyClassName,children:(o=e,r=t,s=n,l=i,o.isLoading?(0,a.jsx)(er,{table:o.table,keyPrefix:o.skeletonKeyPrefix,rowHeight:o.skeletonRowHeight}):0===r.length?(d=o,u=s,d.emptyContent?(0,a.jsx)(z,{children:(0,a.jsx)(W,{colSpan:u,className:d.emptyCellClassName,children:d.emptyContent})}):(0,a.jsx)(ea,{colSpan:u,title:d.emptyTitle,description:d.emptyDescription,icon:d.emptyIcon,children:d.emptyAction})):r.map(e=>{var t,n,i;return o.renderRow?o.renderRow(e,{getCellClassName:(e,t)=>(0,c.cn)(l(e,"cell"),t)}):(t=o,n=e,i=l,(0,a.jsx)(ee,{row:n,className:(0,c.cn)(t.tableBodyRowClassName,t.getRowClassName?.(n)),getColumnClassName:i},n.id))}))})}function eh(e){let{header:t,meta:n}=e.column.columnDef;return"string"==typeof t?t:n?.label?n.label:null}function ep(e){let t=e.column.columnDef.cell;return t?(0,X.Kv)(t,e.getContext()):e.getValue()}function em(){return(0,a.jsx)("div",{className:"divide-y overflow-hidden rounded-lg border",children:[1,2,3,4,5].map(e=>(0,a.jsxs)("div",{className:"px-3 py-2.5",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)(ei.E,{className:"h-4 w-32"}),(0,a.jsx)(ei.E,{className:"h-5 w-16 rounded-md"})]}),(0,a.jsxs)("div",{className:"mt-1.5 grid grid-cols-2 gap-2",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)(ei.E,{className:"mb-1 h-2 w-8"}),(0,a.jsx)(ei.E,{className:"h-4 w-full"})]}),(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)(ei.E,{className:"mb-1 h-2 w-8"}),(0,a.jsx)(ei.E,{className:"h-4 w-full"})]})]})]},e))})}function eg(){return(0,a.jsx)("div",{className:"divide-y overflow-hidden rounded-lg border",children:[1,2,3,4,5].map(e=>(0,a.jsx)("div",{className:"space-y-1.5 px-3 py-2.5",children:[1,2,3].map(e=>(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)(ei.E,{className:"h-2.5 w-16"}),(0,a.jsx)(ei.E,{className:"h-3.5 w-28"})]},e))},e))})}function ef(e){let{row:t}=e,n=t.getVisibleCells().filter(e=>"select"!==e.column.id),i=k.useMemo(()=>n.map(e=>e.column.columnDef.meta),[n.map(e=>e.id).join(",")]),o=n.find((e,t)=>i[t]?.mobileTitle),r=n.find((e,t)=>i[t]?.mobileBadge),s=n.find(e=>"actions"===e.column.id),l=n.filter((e,t)=>
1e!==o&&e!==r&&e!==s&&!i[t]?.mobileHidden);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[o&&(0,a.jsx)("div",{className:"min-w-0 flex-1 text-sm font-medium [&_[data-slot=status-badge]]:max-w-full [&_[data-slot=status-badge]]:whitespace-normal",children:ep(o)}),r&&(0,a.jsx)("div",{className:"flex-none [&_[data-slot=status-badge]]:max-w-none",children:ep(r)})]}),l.length>0&&(0,a.jsx)("div",{className:"mt-1.5 grid grid-cols-2 gap-x-3 gap-y-1.5",children:l.map(e=>{let t=eh(e);return(0,a.jsxs)("div",{className:"min-w-0 flex-1 overflow-hidden",children:[t&&(0,a.jsx)("div",{className:"text-muted-foreground mb-0.5 text-[10px] leading-none select-none",children:t}),(0,a.jsx)("div",{className:"min-w-0 overflow-hidden text-xs [&_[data-slot=provider-badge]]:ml-0 [&_[data-slot=status-badge]]:ml-0",children:(0,a.jsx)(C.lO.Provider,{value:"text",children:ep(e)??"-"})})]},e.id)})}),s&&(0,a.jsx)("div",{className:"mt-1 -mb-0.5 flex justify-end",children:ep(s)})]})}function ey(e){let{row:t}=e,n=t.getVisibleCells().filter(e=>"select"!==e.column.id),i=k.useMemo(()=>n.map(e=>e.column.columnDef.meta),[n.map(e=>e.id).join(",")]),o=n.find(e=>"actions"===e.column.id),r=n.filter((e,t)=>"actions"!==e.column.id&&!i[t]?.mobileHidden);return(0,a.jsxs)(a.Fragment,{children:[r.map(e=>{let t=eh(e);return t?(0,a.jsxs)("div",{className:"flex items-start justify-between gap-2 overflow-hidden",children:[(0,a.jsx)("span",{className:"text-muted-foreground shrink-0 text-[10px] font-medium select-none",children:t}),(0,a.jsx)("div",{className:"flex min-w-0 flex-1 items-center justify-end overflow-hidden text-xs [&_[data-slot=provider-badge]]:ml-0 [&_[data-slot=status-badge]]:ml-0",children:(0,a.jsx)(C.lO.Provider,{value:"text",children:ep(e)??"-"})})]},e.id):(0,a.jsx)("div",{className:"flex justify-end overflow-hidden [&_[data-slot=provider-badge]]:ml-0 [&_[data-slot=status-badge]]:ml-0",children:(0,a.jsx)(C.lO.Provider,{value:"text",children:ep(e)})},e.id)}),o&&(0,a.jsx)("div",{className:"-mb-0.5 flex justify-end pt-0.5",children:ep(o)})]})}function eb(e){let{table:t,isLoading:n=!1,emptyTitle:i,emptyDescription:o,getRowKey:r,getRowClassName:s}=e,{t:d}=(0,l.Bd)(),u=i??d("No Data"),h=o??d("No data available"),p=t.getVisibleLeafColumns(),m=k.useMemo(()=>p.some(e=>{let t=e.columnDef.meta;return t?.mobileTitle||t?.mobileBadge}),[p]);if(n)return m?(0,a.jsx)(em,{}):(0,a.jsx)(eg,{});let g=t.getRowModel().rows;if(!g||0===g.length)return(0,a.jsx)("div",{className:"rounded-lg border p-6",children:(0,a.jsx)(en.Sv,{className:"border-none p-0",children:(0,a.jsxs)(en.FT,{children:[(0,a.jsx)(en.Kr,{variant:"icon",children:(0,a.jsx)(et.A,{className:"size-6"})}),(0,a.jsx)(en.cz,{children:u}),(0,a.jsx)(en.Ou,{children:h})]})})});let f=m?ef:ey;return(0,a.jsx)("div",{className:"divide-y overflow-hidden rounded-lg border",children:g.map(e=>{let t=r?r(e):e.id;return(0,a.jsx)("div",{className:(0,c.cn)("bg-card px-3 py-2.5",s?.(e)),children:(0,a.jsx)(f,{row:e})},t)})})}var ev=n(19237);function ex(e){var t;let n=(0,P.Ub)("(max-width: 640px)")&&!e.hideMobile,i=void 0!==(t=e).toolbar?t.toolbar:null===t.toolbarProps?null:t.toolbarProps?(0,a.jsx)(q,{table:t.table,...t.toolbarProps}):null,o=function(e,t){if(!t)return null;let n=e.getRowClassName,i=e.mobileProps?.getRowClassName??(n?e=>n(e,{isMobile:!0}):void 0),o=e.mobile??(0,a.jsx)(eb,{table:e.table,isLoading:e.isLoading,emptyTitle:e.emptyTitle,emptyDescription:e.emptyDescription,getRowKey:e.mobileProps?.getRowKey,getRowClassName:i});return(0,a.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:o})}(e,n),r=function(e,t){if(t)return null;let n=e.isFetching&&!e.isLoading,i=!1!==e.fixedHeight;return(0,a.jsx)(es,{table:e.table,isLoading:e.isLoading,emptyTitle:e.emptyTitle,emptyDescription:e.emptyDescription,emptyIcon:e.emptyIcon,emptyAction:e.emptyAction,skeletonKeyPrefix:e.skeletonKeyPrefix,renderRow:e.renderRow,applyHeaderSize:e.applyHeaderSize,splitHeader:i,tableContainerClassName:i?"h-full min-h-0":void 0,tableHeaderClassName:(0,c.cn)(i&&"[background-color:color-mix(in_oklch,var(--muted)_30%,var(--background))]",e.tableHeaderClassName),getColumnClassName:e.getColumnClassName,pinnedColumns:e.pinnedColumns,containerClassName:(0,
1c.cn)(i&&"min-h-0 flex-1","transition-opacity duration-150",n&&"pointer-events-none opacity-60",e.tableClassName),getRowClassName:t=>e.getRowClassName?.(t,{isMobile:!1})})}(e,n),s=function(e){if(!1===e.showPagination)return null;let t=(0,a.jsx)(m,{table:e.table});return!1!==e.paginationInFooter?(0,a.jsx)(ev.jM,{children:t}):(0,a.jsx)("div",{className:"pt-2",children:t})}(e);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:(0,c.cn)(!1!==e.fixedHeight?"flex h-full min-h-0 flex-col gap-2.5 sm:gap-3":"space-y-2.5 sm:space-y-3",e.className),children:[i,o,r,e.afterTable]}),!n&&e.bulkActions,s]})}var ek=n(64720);function eC(e,t,n){let[a,i]=k.useState(t);return[e??a,k.useCallback(t=>{void 0===e&&i(e=>"function"==typeof t?t(e):t),n?.(t)},[e,n])]}function eS(e){let{data:t,columns:n,totalCount:a,pageCount:i,ensurePageInRange:o,manualFiltering:r,manualPagination:s,manualSorting:l,initialSorting:c=[],initialColumnVisibility:d={},initialRowSelection:u={},initialExpanded:h={},initialPagination:p={pageIndex:0,pageSize:20},withFilteredRowModel:m=!r,withPaginationRowModel:g=!s,withSortedRowModel:f=!l,withFacetedRowModel:y=!r,withExpandedRowModel:b=!1}=e,[v,x]=eC(e.sorting,c,e.onSortingChange),[C,S]=eC(e.columnVisibility,d,e.onColumnVisibilityChange),[w,A]=eC(e.rowSelection,u,e.onRowSelectionChange),[P,j]=eC(e.expanded,h,e.onExpandedChange),[N,I]=eC(e.pagination,p,e.onPaginationChange),R=i??(void 0!==a?Math.ceil(a/N.pageSize):void 0),T=(0,X.N4)({data:t,columns:n,rowCount:a,pageCount:R,state:{sorting:v,columnVisibility:C,rowSelection:w,expanded:P,columnFilters:e.columnFilters,globalFilter:e.globalFilter,pagination:N},enableRowSelection:e.enableRowSelection,getRowId:e.getRowId,getSubRows:e.getSubRows,globalFilterFn:e.globalFilterFn,autoResetPageIndex:e.autoResetPageIndex,manualFiltering:r,manualPagination:s,manualSorting:l,onSortingChange:x,onColumnVisibilityChange:S,onRowSelectionChange:A,onExpandedChange:j,onColumnFiltersChange:e.onColumnFiltersChange,onGlobalFilterChange:e.onGlobalFilterChange,onPaginationChange:I,getCoreRowModel:(0,ek.HT)(),getFilteredRowModel:m?(0,ek.hM)():void 0,getPaginationRowModel:g?(0,ek.kW)():void 0,getSortedRowModel:f?(0,ek.h5)():void 0,getFacetedRowModel:y?(0,ek.kQ)():void 0,getFacetedUniqueValues:y?(0,ek.oS)():void 0,getExpandedRowModel:b?(0,ek.D0)():void 0}),M=T.getPageCount();return k.useEffect(()=>{o?.(M)},[M,o]),{table:T}}var ew=n(37716);function eA(e){let{columnFilters:t,columnId:n,onColumnFiltersChange:a,delay:i=500}=e,o=t.find(e=>e.id===n)?.value??"",[r,s]=k.useState(o),[l,c]=k.useState(o),d=k.useRef(!1),u=(0,ew.d)(l,i),h=k.useRef(a);h.current=a,k.useEffect(()=>{d.current||s(o),c(o)},[o]),k.useEffect(()=>{u!==o&&h.current(e=>{let t=e.filter(e=>e.id!==n);return u?[...t,{id:n,value:u}]:t})},[n,u,o]);let p=k.useCallback(e=>{s(e),d.current||c(e)},[]),m=k.useCallback(e=>{p(e.target.value)},[p]);return{value:o,inputValue:r,setInputValue:p,onChange:m,onCompositionStart:k.useCallback(()=>{d.current=!0},[]),onCompositionEnd:k.useCallback(e=>{d.current=!1;let t=e.currentTarget.value;s(t),c(t)},[]),resetInput:k.useCallback(()=>{d.current=!1,s(""),c("")},[])}}let eP="bg-muted/85 hover:bg-muted [&>td:first-child]:border-l-muted-foreground/35 [&>td:first-child]:border-l-4 [&>td:first-child]:pl-1",ej="border-l-4 border-l-muted-foreground/35 bg-muted/85"},83814(e,t,n){n.d(t,{K:()=>A});var a=n(23579),i=n(31371),o=n(88939),r=n(92985),s=n(64624),l=n(59322),c=n(81330),d=n(38282),u=n(25076),h=n(72407),p=n(21683),m=n(12591),g=n(66304),f=n(15691),y=n(71817),b=n(22693),v=n(62798);function x(e){let{className:t,classNames:n,showOutsideDays:i=!0,captionLayout:o="label",buttonVariant:r="ghost",locale:s,formatters:l,components:c,...d}=e,u=(0,b.a)();return(0,a.jsx)(v.h,{showOutsideDays:i,className:(0,m.cn)("group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,t),captionLayout:o,locale:s,formatters:{formatMonthDropdown:e=>
1e.toLocaleString(s?.code,{month:"short"}),...l},classNames:{root:(0,m.cn)("w-fit",u.root),months:(0,m.cn)("relative flex flex-col gap-4 md:flex-row",u.months),month:(0,m.cn)("flex w-full flex-col gap-4",u.month),nav:(0,m.cn)("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",u.nav),button_previous:(0,m.cn)((0,g.r)({variant:r}),"size-(--cell-size) p-0 select-none aria-disabled:opacity-50",u.button_previous),button_next:(0,m.cn)((0,g.r)({variant:r}),"size-(--cell-size) p-0 select-none aria-disabled:opacity-50",u.button_next),month_caption:(0,m.cn)("flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)",u.month_caption),dropdowns:(0,m.cn)("flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium",u.dropdowns),dropdown_root:(0,m.cn)("relative rounded-(--cell-radius)",u.dropdown_root),dropdown:(0,m.cn)("absolute inset-0 bg-popover opacity-0",u.dropdown),caption_label:(0,m.cn)("font-medium select-none","label"===o?"text-sm":"flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground",u.caption_label),month_grid:"w-full border-collapse",weekdays:(0,m.cn)("flex",u.weekdays),weekday:(0,m.cn)("flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none",u.weekday),week:(0,m.cn)("mt-2 flex w-full",u.week),week_number_header:(0,m.cn)("w-(--cell-size) select-none",u.week_number_header),week_number:(0,m.cn)("text-[0.8rem] text-muted-foreground select-none",u.week_number),day:(0,m.cn)("group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)",d.showWeekNumber?"[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)":"[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",u.day),range_start:(0,m.cn)("relative isolate z-0 rounded-l-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-muted",u.range_start),range_middle:(0,m.cn)("rounded-none",u.range_middle),range_end:(0,m.cn)("relative isolate z-0 rounded-r-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-muted",u.range_end),today:(0,m.cn)("rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none",u.today),outside:(0,m.cn)("text-muted-foreground aria-selected:text-muted-foreground",u.outside),disabled:(0,m.cn)("text-muted-foreground opacity-50",u.disabled),hidden:(0,m.cn)("invisible",u.hidden),...n},components:{Root:e=>{let{className:t,rootRef:n,...i}=e;return(0,a.jsx)("div",{"data-slot":"calendar",ref:n,className:(0,m.cn)(t),...i})},Chevron:e=>{let{className:t,orientation:n,...i}=e;return"left"===n?(0,a.jsx)(y.n,{icon:f.A602,strokeWidth:2,className:(0,m.cn)("size-4",t),...i}):"right"===n?(0,a.jsx)(y.n,{icon:f.flY4,strokeWidth:2,className:(0,m.cn)("size-4",t),...i}):(0,a.jsx)(y.n,{icon:f.ZLNm,strokeWidth:2,className:(0,m.cn)("size-4",t),...i})},DayButton:e=>{let{...t}=e;return(0,a.jsx)(k,{locale:s,...t})},WeekNumber:e=>{let{children:t,...n}=e;return(0,a.jsx)("td",{...n,children:(0,a.jsx)("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:t})})},...c},...d})}function k(e){let{className:t,day:n,modifiers:o,locale:r,...s}=e,l=(0,b.a)(),c=i.useRef(null);return i.useEffect(()=>{o.focused&&c.current?.focus()},[o.focused]),(0,a.jsx)(g.$,{variant:"ghost",size:"icon","data-day":n.date.toLocaleDateString(r?.code),"data-selected-single":o.selected&&!o.range_start&&!o.range_end&&!o.range_middle,"data-range-start":o.range_start,"data-range-end":o.range_end,"data-range-middle":o.range_middle,className:(0,m.cn)("group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) [&>span]:text-xs [&>span]:opacity-70",l.day,t),...s})}var C=n(40382),S=n(81361);let w={en:r.c,zh:s.g,fr:l.fr,ru:c.ru,ja:d.ja,vi:u.vi};function A(e){let{value:t,onChange:n,placeholder:s,className:l}=e,{t:c,i18n:d}=(0,h.Bd)(),u=s??c("Select date"),f=w[d.language]??r.c,[y,b]=i.useState(!1),[v,k]=i.useState(t),[A,P]=i.useState(t),[j,N]=i.useState("00:00");return i.useEffect(()=>{if(k(t),P(t),t){let e=t.getHours().toString().padStart(2,"0"),n=t.getMinutes().toString().padStart(2,"0");N(`${e}:${n}`)}},[t]),(0,a.jsxs)("div",{className:(0,m.cn)("flex gap-2",l),children:[(0,a.jsxs)(S.AM,{open:y,onOpenChange:b,children:[(0,a.jsxs)(S.Wv,{render:(0,a.jsx)(g.$,{variant:"outline",className:(0,m.cn)("flex-1 justify-between font-normal",!v&&"text-muted-foreground")}),children:[v?(0,p.A)(v).format("YYYY-MM-DD"):u,(0,a.jsx)(o.A,{className:"h-4 w-4 opacity-50"})]}),(0,a.jsx)(S.hl,{className:"w-auto overflow-hidden p-0",align:"start",children:(0,a.jsx)(x,{mode:"single",selected:v,month:A,onMonthChange:P,captionLayout:"dropdown",onSelect:e=>
1{if(e){let[t,a]=j.split(":").map(Number),i=new Date(e);i.setHours(t,a,0,0),k(i),P(i),n?.(i),b(!1)}else k(void 0),P(void 0),n?.(void 0)},locale:f})})]}),(0,a.jsx)(C.p,{type:"time",value:j,onChange:e=>{let t=e.target.value;if(N(t),v){let[e,a]=t.split(":").map(Number),i=new Date(v);i.setHours(e,a,0,0),k(i),n?.(i)}},className:"w-32 appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none",disabled:!v}),v&&(0,a.jsx)(g.$,{type:"button",variant:"outline",size:"icon",onClick:()=>{k(void 0),P(void 0),N("00:00"),n?.(void 0)},className:"shrink-0","aria-label":"Clear",children:(0,a.jsx)("span",{"aria-hidden":"true",children:"✕"})})]})}},97933(e,t,n){var a=n(23579);n(31371);var i=n(12591),o=n(65592);function r(e){let{title:t,description:n,children:r,trigger:s,footer:l,contentHeight:c="auto",contentClassName:d,headerClassName:u,titleClassName:h,descriptionClassName:p,bodyClassName:m,footerClassName:g,initialFocus:f,showCloseButton:y,...b}=e;return(0,a.jsxs)(o.lG,{...b,children:[s?(0,a.jsx)(o.zM,{render:s}):null,(0,a.jsxs)(o.Cf,{className:(0,i.cn)("flex max-h-[calc(100vh-2rem)] w-full flex-col gap-4 overflow-hidden p-4 sm:max-w-2xl sm:p-6",d,"data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 duration-100"),initialFocus:f,showCloseButton:y,style:{"--dialog-content-height":c},children:[(0,a.jsxs)(o.c7,{className:(0,i.cn)("flex-shrink-0 text-start",u),children:[(0,a.jsx)(o.L3,{className:h,children:t}),n?(0,a.jsx)(o.rr,{className:p,children:n}):null]}),(0,a.jsx)("div",{className:(0,i.cn)("-mx-1 min-h-0 overflow-x-hidden overflow-y-auto overscroll-contain","h-[var(--dialog-content-height)] max-h-[calc(100vh-14rem)]"),children:(0,a.jsx)("div",{className:(0,i.cn)("min-w-0 px-1 py-1","[&_form]:overflow-x-visible","[&_[data-slot=scroll-area-viewport]]:px-1 [&_[data-slot=scroll-area-viewport]]:py-1",m),children:r})}),l?(0,a.jsx)(o.Es,{className:(0,i.cn)("flex-shrink-0 gap-2 sm:-mx-6 sm:-mb-6 sm:justify-end sm:p-6",g),children:l}):null]})]})}n.d(t,{l:()=>r})},43713(e,t,n){var a=n(31371),i=n(12591);let o=e=>(0,i.cn)("border-border/60 flex flex-col gap-4 border-b pb-6 last:border-b-0 last:pb-0",e);function r(e){return(0,a.createElement)("section",{className:o(e.className)},e.children)}function s(e){return(0,a.createElement)("div",{className:(0,i.cn)("flex items-start gap-3",e.className)},e.icon?(0,a.createElement)("span",{className:"bg-muted text-muted-foreground flex size-8 shrink-0 items-center justify-center rounded-md"},e.icon):null,(0,a.createElement)("div",{className:"min-w-0 flex-1"},(0,a.createElement)("h3",{className:"text-sm leading-none font-semibold tracking-tight"},e.title),e.description?(0,a.createElement)("p",{className:"text-muted-foreground mt-1 text-xs leading-5"},e.description):null))}n.d(t,{JP:()=>s,y5:()=>r},{Dt:e=>(0,i.cn)("border-border/70 bg-background/95 border-b px-4 py-3 text-start backdrop-blur supports-[backdrop-filter]:bg-background/80 sm:px-6 sm:py-4",e),Jx:e=>(0,i.cn)("border-border/70 bg-background/95 grid grid-cols-2 gap-2 border-t px-4 py-3 backdrop-blur supports-[backdrop-filter]:bg-background/80 sm:flex sm:flex-row sm:justify-end sm:px-6 sm:py-4",e),e:e=>(0,i.cn)("flex min-h-0 flex-1 flex-col gap-6 overflow-y-auto overscroll-contain px-4 py-4 sm:px-6 sm:py-5",e),fE:e=>(0,i.cn)("border-border/60 flex min-h-16 flex-row items-center justify-between gap-3 border-y py-3",e),jW:e=>(0,i.cn)("bg-background text-foreground flex h-dvh w-full flex-col gap-0 overflow-hidden p-0 shadow-none",e),nP:o})},25467(e,t,n){var a=n(23579),i=n(31371),o=n(40028),r=n(94826),s=n(79839),l=n(72407),c=n(1855),d=n(82406),u=n(12591),h=n(66304),p=n(43660);function m(){let{i18n:e,t}=(0,l.Bd)(),n=(0,c.n)(e=>e.auth.user),m=(0,o.L)(e.language),g=(0,i.useCallback)(async t=>{if(await e.changeLanguage(t),n)try{await d.FH.put("/api/user/self",{language:t})}catch{}},[e,n]);return(0,a.jsxs)(p.rI,{modal:!1,children:[(0,a.jsxs)(p.ty,{render:(0,a.jsx)(h.$,{variant:"ghost",size:"icon",className:"h-9 w-9"}),children:[(0,a.jsx)(r.A,{className:"size-[1.2rem]"}),(0,a.jsx)("span",{className:"sr-only",children:t("Change language")})]}),(0,a.jsx)(p.SQ,{align:"end",children:o.i.map(e=>(0,a.jsxs)(p._2,{onClick:()=>g(e.code),children:[e.label,(0,a.jsx)(s.A,{size:14,className:(0,u.cn)("ms-auto",m!==e.code&&"hidden")})]},e.code))})]})}n.d(t,{c:()=>m})},30502(e,t,n){n.d(t,{k:()=>y});var a=n(36666),i=n(80402),o=n(73349),r=n(55068),s=n(11987),l=n(63724),c=n(79614),d=n(201
176),u=n(92625),h=n(8876),p=n(60414),m=n(13830),g=n(22722),f=n(63317);let y={id:"system-settings",pathPattern:/^\/system-settings(\/|$)/,parent:{to:"/dashboard/overview",label:"Back to Dashboard"},getNavGroups:function(e){return[{id:"system-administration",title:e("System Administration"),items:[{title:e("Site & Branding"),icon:a.A,items:(0,f.o3)(e)},{title:e("Authentication"),icon:i.A,items:(0,d.xH)(e)},{title:e("Billing & Payment"),icon:o.A,items:(0,u.Eu)(e)},{title:e("Models & Routing"),icon:r.A,items:(0,p.dj)(e)},{title:e("Security & Limits"),icon:s.A,items:(0,g.lt)(e)},{title:e("Console Content"),icon:l.A,items:(0,h.ey)(e)},{title:e("Operations"),icon:c.A,items:(0,m.bK)(e)}]}]}}},19237(e,t,n){n.d(t,{GN:()=>eS,Y9:()=>T,gZ:()=>eM,jM:()=>eE,si:()=>eT,Ni:()=>eB});var a=n(23579),i=n(17471),o=n(18016),r=n(4274),s=n(25467),l=n(79610),c=n(6521),d=n(72407),u=n(8208),h=n(52205),p=n(12591),m=n(26067),g=n(66304),f=n(43021),y=n(63999),b=n(81361),v=n(88381),x=n(51983),k=n(96084);function C(e){let{type:t}=e;return(0,a.jsx)("span",{className:(0,p.cn)("mt-1.5 inline-block size-2 shrink-0 rounded-full",(0,u.zv)(t))})}function S(e){let{icon:t,title:n,description:i}=e;return(0,a.jsx)(f.Sv,{className:"min-h-48 border-0 p-4",children:(0,a.jsxs)(f.FT,{children:[(0,a.jsx)(f.Kr,{variant:"icon",children:t}),(0,a.jsx)(f.cz,{children:n}),i?(0,a.jsx)(f.Ou,{children:i}):null]})})}function w(e){let{notice:t,loading:n,t:i}=e;return n?(0,a.jsx)(S,{icon:(0,a.jsx)(l.A,{}),title:i("Loading..."),description:i("Latest platform updates and notices")}):t?(0,a.jsx)(v.F,{className:"h-[min(52vh,28rem)] pr-3",children:(0,a.jsx)(y.o,{children:t})}):(0,a.jsx)(S,{icon:(0,a.jsx)(l.A,{}),title:i("No announcements at this time")})}function A(e){let{announcements:t,loading:n,t:i}=e;return n?(0,a.jsx)(S,{icon:(0,a.jsx)(c.A,{}),title:i("Loading..."),description:i("Latest platform updates and notices")}):0===t.length?(0,a.jsx)(S,{icon:(0,a.jsx)(c.A,{}),title:i("No system announcements")}):(0,a.jsx)(v.F,{className:"h-[min(52vh,28rem)] pr-3",children:(0,a.jsx)("div",{className:"flex flex-col",children:t.map((e,n)=>{let o=e.publishDate?new Date(e.publishDate):null,r=o?function(e,t){if(!e)return"";let n=new Date,a=new Date(e);if(isNaN(a.getTime()))return"string"==typeof e?e:"";let i=n.getTime()-a.getTime(),o=Math.floor(i/1e3),r=Math.floor(o/60),s=Math.floor(r/60),l=Math.floor(s/24),c=Math.floor(l/7),d=Math.floor(l/30),u=Math.floor(l/365);return i<0?(0,h.Ah)(a):o<60?t("Just now"):r<60?1===r?t("1 minute ago"):t("{{count}} minutes ago",{count:r}):s<24?1===s?t("1 hour ago"):t("{{count}} hours ago",{count:s}):l<7?1===l?t("1 day ago"):t("{{count}} days ago",{count:l}):c<4?1===c?t("1 week ago"):t("{{count}} weeks ago",{count:c}):d<12?1===d?t("1 month ago"):t("{{count}} months ago",{count:d}):u<2?t("1 year ago"):(0,h.Ah)(a)}(o,i):"",s=o?(0,h.Ah)(o):"";return(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"py-3",children:(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)(C,{type:e.type}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-2",children:[(0,a.jsx)("div",{className:"text-sm",children:(0,a.jsx)(y.o,{children:e.content||""})}),e.extra?(0,a.jsx)("div",{className:"text-muted-foreground text-xs",children:(0,a.jsx)(y.o,{children:e.extra})}):null,s?(0,a.jsxs)("div",{className:"text-muted-foreground text-xs",children:[r?`${r} • `:null,s]}):null]})]})}),n<t.length-1?(0,a.jsx)(x.w,{}):null]},n)})})})}function P(e){let{open:t,onOpenChange:n,unreadCount:i,activeTab:o,onTabChange:r,notice:s,announcements:u,loading:h,className:f}=e,{t:y}=(0,d.Bd)();return(0,a.jsxs)(b.AM,{open:t,onOpenChange:n,children:[(0,a.jsxs)(b.Wv,{render:(0,a.jsx)(g.$,{variant:"ghost",size:"icon",className:(0,p.cn)("relative size-9",f),"aria-label":y("Notifications")}),children:[(0,a.jsx)(l.A,{className:"size-[1.2rem]"}),i>0?(0,a.jsx)(m.E,{variant:"destructive",className:"absolute -top-1 -right-1 flex h-5 min-w-5 items-center justify-center px-1 text-[10px] font-semibold tabular-nums",children:i>99?"99+":i}):null]}),(0,a.jsxs)(b.hl,{align:"end",sideOffset:8,className:"w-[min(26rem,calc(100vw-1rem))] gap-3 p-3",children:[(0,a.jsxs)(b.DI,{className:"gap-1 px-1",children:[(0,a.jsx)(b.eO,{children:y("System Announcements")}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:y("Latest platform updates and notices")})]}),(0,a.jsxs)(k.tU,{value:o,onValueChange:r,children:[(0,a.jsxs)(k.j7,{className:"grid w-full grid-cols-2",children:[(0,a.jsxs)(k.Xi,{value:"notice",className:"gap-1.5",children:[(0,a.jsx)(l.A,{className:"size-3.5"}),y("Notice")]}),(0,a.jsxs)(k.Xi,{value:"announcements",className:"gap-1.5",children:[(0,a.jsx)(c.A,{className:"size-3.5"}),y("Timeline")]})]}),(0,a.jsx)(k.av,{value:"notice",className:"mt-2",children:(0,a.jsx)(w,{notice:s,loading:h,t:y})}),(0,a.jsx)(k.av,{value:"announcements",className:"mt-2",children:(0,a.jsx)(A,{announcements:u,loading:h,t:y})})]}),(0,a.jsx)("div",{className:"flex justify-end",children:(0,a.jsx)(g.$,{size:"sm",onClick:()=>n(!1),children:y("Close")})})]})]})}var j=n(8062),N=n(36653);let I=[];var R=n(84722);function T(e){let{className:t,children:n,...i}=e;return(0,a.jsx)("header",{className:(0,p.cn)("sticky top-0 z-40 h-[var(--app-header-height,3rem)] w-full shrink-0 bg-transparent",t),...i,children:(0,a.jsxs)("div",{className:"flex h-full items-center gap-1.5 px-2 sm:gap-2 sm:px-3",children:[(0,a.jsx)(R.x2,{variant:"ghost",className:"size-8"}),n]})})}var M=n(12815),D=n(73405),O=n(21325);function L(e){let{t}=(0,d.Bd)(),{status:n}=(0,D.s)(),{logo:i}=(0,O.R)(),o=e.variant??"sidebar",r=n?.system_name||e.defaultName||"New API",s=n?.version||e.defaultVersion||t("Unknown version");return"inline"===o?(0,a.jsxs)(M.N_,{to:"/","aria-label":t("Go to home"),className:(0,p.cn)("text-foreground inline-flex h-7 items-center gap-1.5 rounded-md px-1.5 text-sm font-medium transition-colors outline-none select-none","hover:bg-accent focus-visible:ring-ring/40 focus-visible:ring-2"),children:[(0,a.jsx)("div",{className:"flex size-5 items-center justify-center overflow-hidden rounded-md",children:(0,a.jsx)("img",{src:i,alt:t("Logo"),className:"size-full rounded-md object-cover"})}),(0,a.jsx)("span",{className:"max-w-[12rem] truncate",children:r})]}):(0,a.jsx)(R.wZ,{children:(0,a.jsx)(R.FX,{children:(0,a.jsxs)(R.Uj,{size:"lg",className:"hover:text-sidebar-foreground active:text-sidebar-foreground cursor-default hover:bg-transparent active:bg-transparent",render:(0,a.jsx)("div",{}),children:[(0,a.jsx)("div",{className:"flex aspect-square size-8 items-center justify-center overflow-hidden rounded-lg",children:(0,a.jsx)("img",{src:i,alt:t("Logo"),className:"size-full rounded-lg object-cover"})}),(0,a.jsxs)("div",{className:"grid flex-1 text-start text-sm leading-tight group-data-[collapsible=icon]:hidden",children:[(0,a.jsx)("span",{className:"truncate font-semibold",children:r}),(0,a.jsx)("span",{className:"truncate text-xs",children:s})]})]})})})}var E=n(31371),U=n(74580),q=n(43660);function F(e){let{className:t,links:n,...i}=e,o=(0,E.useMemo)(()=>n.map(e=>({isActive:!1,disabled:!1,external:!1,...e})),[n]);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"lg:hidden",children:(0,a.jsxs)(q.rI,{modal:!1,children:[(0,a.jsx)(q.ty,{render:(0,a.jsx)(g.$,{size:"icon",variant:"outline",className:"size-7"}),children:(0,a.jsx)(U.A,{})}),(0,a.jsx)(q.SQ,{side:"bottom",align:"start",children:o.map(e=>{let{title:t,href:n,isActive:i,disabled:o,external:r}=e;return(0,a.jsx)(q._2,{render:r?(0,a.jsx)("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:i?"":"text-muted-foreground",children:t}):(0,a.jsx)(M.N_,{to:n,className:i?"":"text-muted-foreground",disabled:o,children:t})},`${t}-${n}`)})})]})}),(0,a.jsx)("nav",{className:(0,p.cn)("hidden items-center space-x-4 lg:flex lg:space-x-4 xl:space-x-6",t),...i,children:o.map(e=>{let{title:t,href:n,isActive:i,disabled:o,external:r}=e;return r?(0,a.jsx)("a",{href:n,target:"_blank",rel:"noopener noreferrer",className:`hover:text-primary text-sm font-medium transition-colors ${i?"":"text-muted-foreground"}`,children:t},`${t}-${n}`):(0,a.jsx)(M.N_,{to:n,disabled:o,className:`hover:text-primary text-sm font-medium transition-colors ${i?"":"text-muted-foreground"}`,children:t},`${t}-${n}`)})})]})}function _(e){let{navLinks:t=I,showTopNav:n=!0,leftContent:l,showSearch:c=!0,rightContent:d,showNotifications:u=!0,showConfigDrawer:h=!0,showProfileDropdown:p=!0}=e,m=(0,o.v)(),g=m.length>0?m:t,f=(0,i.E)();return(0,a.jsx)(a.Fragment,{children:(0,a.jsxs)(T,{children:[(0,a.jsx)(L,{variant:"inline"}),l?(0,a.jsx)("div",{className:"ms-2 flex items-center",children:l}):null,d??(0,a.jsxs)("div",{className:"ms-auto flex items-center gap-1 sm:gap-2",children:[n&&(0,a.jsx)("div",{className:"me-1 hidden lg:block",children:(0,a.jsx)(F,{links:g})}),c&&(0,a.jsx)(N.v,{}),u&&(0,a.jsx)(P,{open:f.popoverOpen,onOpenChange:f.setPopoverOpen,unreadCount:f.unreadCount,activeTab:f.activeTab,onTabChange:f.setActiveTab,notice:f.notice,announcements:f.announcements,loading:f.loading}),(0,a.jsx)(s.c,{}),h&&(0,a.jsx)(r.k,{}),p&&(0,a.jsx)(j.t,{})]})]})})}var B=n(12281),G=n(91064),z=n(29717),K=n(42454),W=n(62526),J=n(55759),V=n(1855),H=n(93919),$=n(8344),Q=n(19858),Y=n(88720),X=n(95987),Z=n(48726);function ee(e){return"string"==typeof e?e:e&&"object"==typeof e&&!Array.isArray(e)?("string"==typeof e.pathname?e.pathname:"")+("string"==typeof e.search?e.search:""):null}function et(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=e.split("?")[0];if(t.activeUrls?.some(e=>ee(e)===a)||"items"in t&&t.items&&t.items.some(t=>{if(!t?.url)return!1;let n=ee(t.url);if(!n)return!1;if(e===n)return!0;let i=n.split("?")[0],o=n.includes("?");return i===a&&(!o||!!o&&e===n)||!1}))return!0;
1if(!t.url)return!1;let i=ee(t.url);if(!i)return!1;if(e===i)return!0;let o=i.split("?")[0],r=i.includes("?");return a===o&&(!r||!!r&&e===i)||!!n&&!!e.split("/")[1]&&!!i&&e.split("/")[1]===i.split("/")[1]}var en=n(30369),ea=n(58241),ei=n(36461),eo=n(50183),er=n(96607),es=n(10289);function el(e){let{preset:t,active:n,loading:i,onOpen:o,onNavigate:r}=e;return"web"===t.type?(0,a.jsx)(R.Fg,{children:(0,a.jsx)(R.Cp,{isActive:n,render:(0,a.jsx)(M.N_,{to:"/chat/$chatId",params:{chatId:t.id},onClick:r}),children:(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate whitespace-nowrap",children:t.name})})}):(0,a.jsx)(R.Fg,{children:(0,a.jsxs)(R.Cp,{onClick:()=>{i||o(t)},"aria-disabled":i?"true":void 0,isActive:!1,className:"justify-between",children:[(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate whitespace-nowrap",children:t.name}),i?(0,a.jsx)(en.A,{className:"h-4 w-4 shrink-0 animate-spin"}):(0,a.jsx)(ea.A,{className:"h-4 w-4 shrink-0"})]})})}function ec(e){let{preset:t,loading:n,onOpen:i}=e;return"web"===t.type?(0,a.jsx)(q._2,{render:(0,a.jsx)(M.N_,{to:"/chat/$chatId",params:{chatId:t.id}}),children:t.name}):(0,a.jsxs)(q._2,{disabled:n,onClick:()=>{n||i(t)},children:[t.name,n?(0,a.jsx)(en.A,{className:"ml-auto h-4 w-4 animate-spin opacity-70"}):(0,a.jsx)(ea.A,{className:"ml-auto h-4 w-4 opacity-70"})]})}function ed(e){let t,{item:n}=e,{t:i}=(0,d.Bd)(),{chatPresets:o,serverAddress:r}=(0,er.w)(),{state:s,isMobile:l,setOpenMobile:c}=(0,R.cL)(),u=(0,J.z)({select:e=>e.href}),[h,p]=(0,E.useState)(null),m=(0,E.useRef)(null),g=(0,E.useMemo)(()=>o.filter(e=>"fluent"!==e.type),[o]),f=(0,E.useCallback)(async e=>{let t;if("web"===e.type)return;let n=(0,es.I9)(e.url);if(n&&m.current)return void ei.oR.info(i("Preparing your chat link, please try again in a moment."));if(n){m.current=e.id,p(e.id);try{t=await (0,eo.G)()}catch(t){let e=t instanceof Error?t.message:i("Unable to prepare chat link. Please ensure you have an enabled API key.");ei.oR.error(e);return}finally{m.current=null,p(null)}}let a=(0,es.Kf)({template:e.url,apiKey:n?t:void 0,serverAddress:r});a?"u">typeof window&&(window.open(a,"_blank","noopener"),c(!1)):ei.oR.error(i("Invalid chat link. Please contact the administrator."))},[r,c,i]),y=(t=u.split("?")[0]).length>1?t.replace(/\/+$/,""):t;return 0===g.length?null:"collapsed"!==s||l?(0,a.jsxs)(Z.Nt,{defaultOpen:y.startsWith("/chat"),className:"group/collapsible",render:(0,a.jsx)(R.FX,{}),children:[(0,a.jsxs)(Z.R6,{className:"group/collapsible-trigger",render:(0,a.jsx)(R.Uj,{}),children:[n.icon&&(0,a.jsx)(n.icon,{className:"shrink-0"}),(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate",children:n.title}),(0,a.jsx)(X.A,{className:"ms-auto size-4 shrink-0 transition-transform duration-200 group-data-[panel-open]/collapsible-trigger:rotate-90"})]}),(0,a.jsx)(Z.Ke,{className:"CollapsibleContent",children:(0,a.jsx)(R.q9,{children:g.map(e=>(0,a.jsx)(el,{preset:e,active:y===`/chat/${e.id}`,loading:h===e.id,onOpen:f,onNavigate:()=>c(!1)},e.id))})})]}):(0,a.jsx)(R.FX,{children:(0,a.jsxs)(q.rI,{children:[(0,a.jsxs)(q.ty,{render:(0,a.jsx)(R.Uj,{tooltip:n.title}),children:[n.icon&&(0,a.jsx)(n.icon,{className:"h-4 w-4 shrink-0"}),(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate",children:n.title}),(0,a.jsx)(X.A,{className:"ms-auto h-4 w-4 shrink-0 opacity-70"})]}),(0,a.jsx)(q.SQ,{align:"start",children:g.map(e=>(0,a.jsx)(ec,{preset:e,loading:h===e.id,onOpen:f},e.id))})]})})}function eu(e){let{title:t,items:n}=e,{state:i,isMobile:o}=(0,R.cL)(),r=(0,J.z)({select:e=>e.href});return(0,a.jsxs)(R.Cn,{className:"px-2 py-1",children:[(0,a.jsx)(R.jj,{className:"text-muted-foreground/70 px-2 text-[11px] font-medium tracking-wider uppercase",children:t}),(0,a.jsx)(R.wZ,{children:n.map(e=>{let t=`${e.title}-${e.url||e.type}`;return"chat-presets"===e.type?(0,a.jsx)(ed,{item:e},t):e.items?"collapsed"!==i||o?(0,a.jsx)(em,{item:e,href:r},t):(0,a.jsx)(eg,{item:e,href:r},t):(0,a.jsx)(ep,{item:e,href:r},t)})})]})}function eh(e){let{children:t}=e;return(0,a.jsx)(m.E,{className:"shrink-0 px-1 py-0 text-xs",children:t})}function ep(e){let{item:t,href:n}=e,{setOpenMobile:i}=(0,R.cL)();return(0,a.jsx)(R.FX,{children:(0,a.jsxs)(R.Uj,{isActive:et(n,t),tooltip:t.t
1itle,render:(0,a.jsx)(M.N_,{to:t.url,onClick:()=>i(!1)}),children:[t.icon&&(0,a.jsx)(t.icon,{className:"shrink-0"}),(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate",children:t.title}),t.badge&&(0,a.jsx)(eh,{children:t.badge})]})})}function em(e){let{item:t,href:n}=e,{setOpenMobile:i}=(0,R.cL)(),o=et(n,t),[r,s]=(0,E.useState)(()=>o);return(0,E.useEffect)(()=>{o&&s(!0)},[o]),(0,a.jsxs)(Z.Nt,{open:r,onOpenChange:s,className:"group/collapsible",render:(0,a.jsx)(R.FX,{}),children:[(0,a.jsxs)(Z.R6,{className:"group/collapsible-trigger",render:(0,a.jsx)(R.Uj,{tooltip:t.title}),children:[t.icon&&(0,a.jsx)(t.icon,{className:"shrink-0"}),(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate",children:t.title}),t.badge&&(0,a.jsx)(eh,{children:t.badge}),(0,a.jsx)(X.A,{className:"ms-auto size-4 shrink-0 transition-transform duration-200 group-data-[panel-open]/collapsible-trigger:rotate-90"})]}),(0,a.jsx)(Z.Ke,{className:"CollapsibleContent",children:(0,a.jsx)(R.q9,{children:t.items.map(e=>(0,a.jsx)(R.Fg,{children:(0,a.jsxs)(R.Cp,{isActive:et(n,e),render:(0,a.jsx)(M.N_,{to:e.url,onClick:()=>i(!1)}),children:[e.icon&&(0,a.jsx)(e.icon,{className:"shrink-0"}),(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate",children:e.title}),e.badge&&(0,a.jsx)(eh,{children:e.badge})]})},e.title))})})]})}function eg(e){let{item:t,href:n}=e;return(0,a.jsx)(R.FX,{children:(0,a.jsxs)(q.rI,{children:[(0,a.jsxs)(q.ty,{className:"group/dropdown-trigger",render:(0,a.jsx)(R.Uj,{tooltip:t.title,isActive:et(n,t)}),children:[t.icon&&(0,a.jsx)(t.icon,{className:"shrink-0"}),(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate",children:t.title}),t.badge&&(0,a.jsx)(eh,{children:t.badge}),(0,a.jsx)(X.A,{className:"ms-auto size-4 shrink-0 transition-transform duration-200 group-data-[popup-open]/dropdown-trigger:rotate-90"})]}),(0,a.jsx)(q.SQ,{side:"right",align:"start",sideOffset:4,children:(0,a.jsxs)(q.I,{children:[(0,a.jsxs)(q.lp,{children:[t.title," ",t.badge?`(${t.badge})`:""]}),(0,a.jsx)(q.mB,{}),t.items.map(e=>(0,a.jsxs)(q._2,{render:(0,a.jsx)(M.N_,{to:e.url,className:`${et(n,e)?"bg-secondary":""}`}),children:[e.icon&&(0,a.jsx)(e.icon,{}),(0,a.jsx)("span",{className:"max-w-52 text-wrap",children:e.title}),e.badge&&(0,a.jsx)("span",{className:"ms-auto text-xs",children:e.badge})]},`${e.title}-${e.url}`))]})})]})})}var ef=n(65400);function ey(e){let{t}=(0,d.Bd)(),{setOpenMobile:n}=(0,R.cL)();return(0,a.jsx)(R.Gh,{className:"border-sidebar-border border-b px-2 py-2",children:(0,a.jsx)(R.wZ,{children:(0,a.jsx)(R.FX,{children:(0,a.jsxs)(R.Uj,{tooltip:t(e.view.parent.label),className:(0,p.cn)("text-muted-foreground hover:text-foreground","gap-1.5 font-medium"),render:(0,a.jsx)(M.N_,{to:e.view.parent.to,onClick:()=>n(!1)}),children:[(0,a.jsx)(ef.A,{className:"size-4 shrink-0"}),(0,a.jsx)("span",{className:"truncate",children:t(e.view.parent.label)})]})})})})}function eb(){let{collapsible:e,variant:t}=(0,W.g)(),{key:n,view:i,navGroups:o}=function(){let{t:e}=(0,d.Bd)(),t=(0,J.z)({select:e=>e.pathname}),n=(0,V.n)(e=>e.auth.user?.role),a=(0,Y.k)(),i=(0,Q.K)(a.navGroups),o=(0,E.useMemo)(()=>{let e=void 0!==n&&n>=H.z7.ADMIN;return i.filter(t=>"admin"!==t.id||e)},[i,n]),r=(0,$.G)(t);return r?{key:r.id,view:r,navGroups:r.getNavGroups(e)}:{key:"__root",view:null,navGroups:o}}(),r=(0,B.I)();return(0,a.jsxs)(R.Bx,{collapsible:e,variant:t,children:[i&&(0,a.jsx)(ey,{view:i}),(0,a.jsx)(R.Yv,{className:"py-2",children:(0,a.jsx)(G.N,{mode:"wait",initial:!1,children:(0,a.jsx)(z.P.div,{initial:!r&&K.mL.sidebarSlide.initial,animate:K.mL.sidebarSlide.animate,exit:r?void 0:K.mL.sidebarSlide.exit,transition:K.fI.fast,className:"flex flex-col",children:o.map(e=>(0,a.jsx)(eu,{...e},e.id||e.title))},n)})}),(0,a.jsx)(R.jM,{})]})}var ev=n(53693),ex=n(61933),ek=n(97806);function eC(){let{t:e}=(0,d.Bd)();return(0,a.jsx)("a",{className:"bg-primary text-primary-foreground hover:bg-primary/90 focus-visible:ring-ring fixed start-44 z-999 -translate-y-52 px-4 py-2 text-sm font-medium whitespace-nowrap opacity-95 shadow-sm transition focus:translate-y-3 focus:transform focus-visible:ring-1",href:"#content",children:e("Skip to Main")})}function eS(e){let t="false"!==(0,ev.Ri)("sidebar_state");return(0,a.jsx)(W.U,{children:(0,a.jsx)(ex.Y,{children:(0,a.jsxs)(R.GB,{defaultOpen:t,className:"flex-col",children:[(0,a.jsx)(eC,{}),(0,a.jsx)(_,{}),(0,a.jsxs)("div",{className:"flex min-h-0 w-full flex-1",children:[(0,a.jsx)(eb,{}),(0,a.jsx)(R.sF,{className:(0,p.cn)("@container/content","h-[calc(100svh-var(--app-header-height,0px))]","min-h-0 overflow-hidden","peer-data-[variant=inset]:h-[calc(100svh-var(--app-header-height,0px)-(var(--spacing)*4))]"),children:e.children??(0,a.jsx)(ek.N8,{})})]})]})})})}
1var ew=n(3707),eA=n(14676),eP=n(27917),ej=n(97933),eN=n(52245);function eI(e){let{src:t,alt:n="logo",loading:i,logoLoaded:o,className:r}=e;return(0,a.jsx)("img",{src:t,alt:n,className:(0,p.cn)("h-6 w-6 rounded-full transition-opacity duration-200",!i&&o?"opacity-100":"opacity-0",r)})}function eR(e){let{navLinks:t=I,showThemeSwitch:n=!0,showLanguageSwitcher:r=!0,logo:l,siteName:c,homeUrl:u="/",showAuthButtons:h=!0,showNotifications:m=!0}=e,{t:f}=(0,d.Bd)(),y=(0,ew.Z)(),[b,v]=(0,E.useState)(!1),[x,k]=(0,E.useState)(!1),[C,S]=(0,E.useState)(null),[w,A]=(0,E.useState)(5),{auth:N}=(0,V.n)(),{systemName:R,logo:T,loading:D,logoLoaded:L}=(0,O.R)(),U=(0,o.v)(),q=(0,i.E)(),F=(0,eA.k)().location.pathname,_=!!N.user,B=U.length>0?U:t;(0,E.useEffect)(()=>{let e=()=>v(window.scrollY>20);return e(),window.addEventListener("scroll",e,{passive:!0}),()=>window.removeEventListener("scroll",e)},[]),(0,E.useEffect)(()=>(document.body.style.overflow=x?"hidden":"",()=>{document.body.style.overflow=""}),[x]),(0,E.useEffect)(()=>{if(!C)return;let e=window.setInterval(()=>{A(e=>Math.max(e-1,0))},1e3),t=window.setTimeout(()=>{let e=C.href;S(null),y({to:"/sign-in",search:{redirect:e}})},5e3);return()=>{window.clearInterval(e),window.clearTimeout(t)}},[C,y]);let G=(0,E.useCallback)(()=>{S(null),A(5)},[]),z=(0,E.useCallback)(()=>{let e=C?.href||"/";S(null),y({to:"/sign-in",search:{redirect:e}})},[C?.href,y]),K=(0,E.useCallback)(function(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(t.disabled)return void e.preventDefault();if(t.requiresAuth){e.preventDefault(),n&&k(!1),A(5),S({title:f(t.title),href:t.href});return}n&&k(!1)},[f]);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("header",{className:"pointer-events-none fixed inset-x-0 top-0 z-50",children:(0,a.jsx)("div",{className:(0,p.cn)("pointer-events-auto mx-auto transition-all duration-700 ease-[cubic-bezier(0.16,1,0.3,1)]",b?"max-w-[52rem] px-3 pt-3":"max-w-7xl px-4 pt-0 md:px-6"),children:(0,a.jsxs)("nav",{className:(0,p.cn)("flex items-center justify-between transition-all duration-700 ease-[cubic-bezier(0.16,1,0.3,1)]",b?"bg-background/60 ring-border/50 h-12 rounded-2xl pr-1.5 pl-4 shadow-[0_2px_16px_-6px_rgba(0,0,0,0.08),0_0_0_0.5px_rgba(0,0,0,0.02)] ring-[0.5px] backdrop-blur-2xl dark:shadow-[0_2px_16px_-6px_rgba(0,0,0,0.4)]":"h-16 px-2"),children:[(0,a.jsxs)(M.N_,{to:u,className:"group flex shrink-0 items-center gap-2.5",children:[(0,a.jsx)("div",{className:"flex size-7 shrink-0 items-center justify-center transition-all duration-300 group-hover:scale-105",children:D?(0,a.jsx)(eP.E,{className:"size-full rounded-lg"}):l||(0,a.jsx)(eI,{src:T,loading:D,logoLoaded:L,className:"size-full rounded-lg object-contain"})}),(0,a.jsx)("span",{className:"text-sm font-semibold tracking-tight",children:D?(0,a.jsx)(eP.E,{className:"h-4 w-16"}):c||R})]}),(0,a.jsxs)("div",{className:"hidden items-center gap-0.5 sm:flex",children:[B.map((e,t)=>{let n=F===e.href;return e.external?(0,a.jsx)("a",{href:e.href,target:"_blank",rel:"noopener noreferrer","aria-disabled":e.disabled,tabIndex:e.disabled?-1:void 0,onClick:t=>K(t,e),className:(0,p.cn)("text-muted-foreground hover:text-foreground rounded-lg px-3 py-1.5 text-[13px] font-medium transition-colors duration-200",e.disabled&&"pointer-events-none opacity-50"),children:f(e.title)},t):(0,a.jsx)(M.N_,{to:e.href,disabled:e.disabled,onClick:t=>K(t,e),className:(0,p.cn)("rounded-lg px-3 py-1.5 text-[13px] font-medium transition-colors duration-200",n?"text-foreground":"text-muted-foreground hover:text-foreground",e.disabled&&"pointer-events-none opacity-50"),children:f(e.title)},t)}),(r||n||m)&&(0,a.jsx)("div",{className:"bg-border/40 mx-2 h-4 w-px"}),r&&(0,a.jsx)(s.c,{}),n&&(0,a.jsx)(eN.o,{}),m&&(0,a.jsx)(P,{open:q.popoverOpen,onOpenChange:q.setPopoverOpen,unreadCount:q.unreadCount,activeTab:q.activeTab,onTabChange:q.setActiveTab,notice:q.notice,announcements:q.announcements,loading:q.loading}),h&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"bg-border/40 mx-1 h-4 w-px"}),D?(0,a.jsx)(eP.E,{className:"h-8 w-20 rounded-lg"}):_?(0,a.jsx)(j.t,{}):(0,a.jsx)(g.$,{size:"sm",className:"h-8 rounded-lg px-3.5 text-xs font-medium",render:(0,a.jsx)(M.N_,{to:"/sign-in"}),children:f("Sign in")})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2 sm:hidden",children:[n&&(0,a.jsx)(eN.o,{}),h&&!D&&_&&(0,a.jsx)(j.t,{}),(0,a.jsx)(g.$,{type:"button",variant:"ghost",size:"icon",className:"size-9",onClick:()=>k(e=>!e),"aria-label":f("Toggle navigation menu"),children:(0,a.jsxs)("div",{className:"relative size-4",children:[(0,a.jsx)("span",{className:(0,p.cn)("absolute inset-x-0 block h-[1.5px] origin-center rounded-full bg-current transition-all duration-300",x?"top-[7px] rotate-45":"top-[3px]")}
1),(0,a.jsx)("span",{className:(0,p.cn)("absolute inset-x-0 top-[7px] block h-[1.5px] rounded-full bg-current transition-all duration-300",x?"scale-x-0 opacity-0":"opacity-100")}),(0,a.jsx)("span",{className:(0,p.cn)("absolute inset-x-0 block h-[1.5px] origin-center rounded-full bg-current transition-all duration-300",x?"top-[7px] -rotate-45":"top-[11px]")})]})})]})]})})}),(0,a.jsx)("div",{className:(0,p.cn)("bg-background/98 fixed inset-0 z-40 backdrop-blur-2xl transition-all duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] sm:pointer-events-none sm:hidden",x?"pointer-events-auto opacity-100":"pointer-events-none opacity-0"),children:(0,a.jsxs)("div",{className:"flex h-full flex-col justify-between px-8 pt-20 pb-10",children:[(0,a.jsx)("nav",{className:"flex flex-col gap-1",children:B.map((e,t)=>{let n=F===e.href,i=(0,p.cn)("flex items-center gap-3 py-3 text-base font-medium tracking-tight transition-all duration-500 ease-[cubic-bezier(0.16,1,0.3,1)]",x?"translate-y-0 opacity-100":"translate-y-4 opacity-0",n?"text-foreground":"text-muted-foreground",e.disabled&&"pointer-events-none opacity-50"),o={transitionDelay:x?`${100+50*t}ms`:"0ms"};return e.external?(0,a.jsx)("a",{href:e.href,target:"_blank",rel:"noopener noreferrer","aria-disabled":e.disabled,tabIndex:e.disabled?-1:void 0,onClick:t=>K(t,e,!0),className:i,style:o,children:f(e.title)},t):(0,a.jsx)(M.N_,{to:e.href,disabled:e.disabled,onClick:t=>K(t,e,!0),className:i,style:o,children:f(e.title)},t)})}),(0,a.jsx)("div",{className:(0,p.cn)("flex flex-col gap-3 transition-all duration-500",x?"translate-y-0 opacity-100":"translate-y-4 opacity-0"),style:{transitionDelay:x?"250ms":"0ms"},children:h&&(0,a.jsx)(M.N_,{to:_?"/dashboard":"/sign-in",onClick:()=>k(!1),className:"bg-foreground text-background inline-flex h-10 items-center justify-center rounded-lg text-sm font-medium transition-opacity hover:opacity-90 active:opacity-80",children:_?f("Go to Dashboard"):f("Sign in")})})]})}),(0,a.jsx)(ej.l,{open:!!C,onOpenChange:e=>{e||G()},title:f("Sign in required"),description:f("Please sign in to view {{module}}.",{module:C?.title||""}),contentClassName:"sm:max-w-md",contentHeight:"auto",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(g.$,{variant:"outline",onClick:G,children:f("Cancel")}),(0,a.jsx)(g.$,{onClick:z,children:f("Sign in now")})]}),children:(0,a.jsx)("div",{className:"bg-muted/40 text-muted-foreground rounded-lg px-3 py-2 text-sm",children:f("Redirecting to sign in in {{seconds}} seconds.",{seconds:w})})})]})}function eT(e){return(0,a.jsxs)("div",{className:"bg-background text-foreground relative min-h-svh overflow-x-clip",children:[(0,a.jsx)(eR,{navContent:e.navContent,navLinks:e.navLinks,showThemeSwitch:e.showThemeSwitch,showAuthButtons:e.showAuthButtons,showNotifications:e.showNotifications,logo:e.logo,siteName:e.siteName,...e.headerProps}),!1!==e.showMainContainer?(0,a.jsx)("main",{className:"container px-4 py-6 pt-20 md:px-4",children:e.children}):e.children]})}function eM(e){let{className:t,fluid:n=!0,...i}=e;return(0,a.jsx)("main",{className:(0,p.cn)("flex min-h-0 flex-1 flex-col overflow-hidden",!n&&"@7xl/content:mx-auto @7xl/content:w-full @7xl/content:max-w-7xl",t),...i})}var eD=n(23338);let eO=(0,E.createContext)(null);function eL(e){return(0,a.jsx)(eO.Provider,{value:e.container,children:e.children})}function eE(e){let t=(0,E.useContext)(eO);return t?(0,eD.createPortal)(e.children,t):null}function eU(e){return null}function eq(e){return null}function eF(e){return null}function e_(e){return null}function eB(e){let[t,n]=(0,E.useState)(null),i=null,o=null,r=null,s=null;return E.Children.forEach(e.children,e=>{(0,E.isValidElement)(e)&&(e.type===eU?i=e.props.children:e.type===eq?o=e.props.children:e.type===eF?r=e.props.children:e.type===e_&&(s=e.props.children))}),(0,a.jsx)(eL,{container:t,children:(0,a.jsxs)(eM,{children:[(0,a.jsxs)("div",{className:"shrink-0 px-3 pt-3 pb-2.5 sm:px-4 sm:pt-5 sm:pb-3",children:[null!=s&&(0,a.jsx)("div",{className:"mb-2 sm:mb-3",children:s}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-x-3 gap-y-2 sm:gap-x-4",children:[(0,a.jsx)("div",{className:"min-w-0 flex-1",children:(0,a.jsx)("h2",{className:"truncate text-base font-bold tracking-tight sm:text-lg",children:i})}),null!=o&&(0,a.jsx)("div",{className:"flex shrink-0 flex-wrap items-center justify-end gap-2 sm:gap-x-4",children:o})]})]}),(0,a.jsx)("div",{className:e.fixedContent?"min-h-0 flex-1 overflow-hidden px-3 pt-1 pb-3 sm:px-4 sm:pt-1.5 sm:pb-4":"min-h-0 flex-1 overflow-auto px-3 pt-1 pb-3 sm:px-4 sm:pt-1.5 sm:pb-4",children:r}),(0,a.jsx)("div",{ref:n,className:"bg-background shrink-0 border-t px-3 py-2.5 empty:hidden sm:px-4 sm:py-3"})]})})}eU.displayName="SectionPageLayout.Title",eq.displayName="SectionPageLayout.Actions",eF.displayName="SectionPageLayout.Content",e_.displayName="SectionPageLayout.Breadcrumb",eB.Title=eU,eB.Actions=eq,eB.Content=eF,eB.Breadcrumb=e_,n(73163),n(86975),n(59047),n(7724),n(30502)},8344(e,t,n){n.d(t,{G:()=>i,U:()=>o});let a=[n(30502).k];function i(e){return a.find(t=>t.pathPattern.test(e))??null}function o(e,t){let n=i(e);return n?n.getNavGroups(t):null}},97806(e,t,n){var a=n(23579),i=n(14676),o=n(30403),r=n(12281),s=n(29717),l=n(42454);function c(e){return(0,r.I)()?(0,a.jsx)("div",{className:e.className,children:e.children}):(0,a.jsx)(s.P.div,{initial:l.mL.pageEnter.initial,animate:l.mL.pageEnter.animate,transition:l.fI.default,className:e.className,children:e.children})}function d(){let e=(0,r.I)(),t=(0,i.k)({select:e=>e.location.pathname});return e?(0,a.jsx)("div",{className:"flex min-h-0 flex-1 flex-col",children:(0,a.jsx)(o.s,{})}):(0,a.jsx)(s.P.div,{initial:l.mL.pageEnter.initial,animate:l.mL.pageEnter.animate,transition:l.fI.fast,className:"flex min-h-0 flex-1 flex-col",children:(0,a.jsx)(o.s,{})},t)}function u(e){return(0,r.I)()?(0,a.jsx)("div",{className:e.className,children:e.children}):(0,a.jsx)(s.P.div,{variants:e.variants??l.j0,initial:"initial",animate:"animate",className:e.className,children:e.children})}function h(e){return(0,a.jsx)(s.P.div,{variants:e.variants??l.DX,
1className:e.className,children:e.children})}function p(e){return(0,r.I)()?(0,a.jsx)("div",{className:e.className,children:e.children}):(0,a.jsx)(s.P.div,{variants:l.AK,initial:"initial",animate:"animate",className:e.className,children:e.children})}function m(e){return(0,a.jsx)(s.P.div,{variants:l.mz,className:e.className,children:e.children})}function g(e){return(0,r.I)()?(0,a.jsx)("div",{className:e.className,children:e.children}):(0,a.jsx)(s.P.div,{initial:l.mL.fadeIn.initial,animate:l.mL.fadeIn.animate,transition:{...l.fI.default,delay:e.delay},className:e.className,children:e.children})}n.d(t,{Hd:()=>m,JX:()=>u,N8:()=>d,Tc:()=>h,Z_:()=>c,_A:()=>g,nD:()=>p})},8062(e,t,n){var a=n(23579),i=n(31371),o=n(3707),r=n(21228),s=n(56726),l=n(36666),c=n(9394),d=n(72407),u=n(1855),h=n(56077),p=n(93919),m=n(73163),g=n(86975),f=n(59047),y=n(66304),b=n(43660),v=n(7724);let x="font-semibold text-white";function k(){let{t:e}=(0,d.Bd)(),t=(0,o.Z)(),[n,k]=(0,m.Ay)(),C=(0,u.n)(e=>e.auth.user),{displayName:S,roleLabel:w}=(0,g.F)(C),A=C?.role===p.z7.SUPER_ADMIN,P=C?.username||S,j=(0,h.f)(P),N=(0,i.useMemo)(()=>(0,h.u)(P),[P]);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(b.rI,{modal:!1,children:[(0,a.jsx)(b.ty,{render:(0,a.jsx)(y.$,{variant:"ghost",className:"relative size-6 p-0"}),children:(0,a.jsx)(f.eu,{className:"size-6",children:(0,a.jsx)(f.q5,{className:`${x} text-[11px]`,style:N,children:j})})}),(0,a.jsxs)(b.SQ,{align:"end",sideOffset:8,className:"w-56",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 px-1.5 py-1.5",children:[(0,a.jsx)(f.eu,{className:"size-8",children:(0,a.jsx)(f.q5,{className:`${x} text-xs`,style:N,children:j})}),(0,a.jsxs)("div",{className:"flex flex-1 flex-col gap-0.5 overflow-hidden",children:[(0,a.jsx)("p",{className:"text-foreground truncate text-sm font-medium",children:S}),(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:w}),C?.group&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:"·"}),(0,a.jsx)("span",{className:"text-muted-foreground truncate text-xs",children:String(C.group)})]})]})]})]}),(0,a.jsx)(b.mB,{}),(0,a.jsxs)(b._2,{onClick:()=>t({to:"/profile"}),children:[(0,a.jsx)(r.A,{className:"size-4"}),e("Profile")]}),(0,a.jsxs)(b._2,{onClick:()=>t({to:"/wallet"}),children:[(0,a.jsx)(s.A,{className:"size-4"}),e("Wallet")]}),A&&(0,a.jsxs)(b._2,{onClick:()=>t({to:"/system-settings/site/$section",params:{section:"system-info"}}),children:[(0,a.jsx)(l.A,{className:"size-4"}),e("System Settings")]}),(0,a.jsx)(b.mB,{}),(0,a.jsxs)(b._2,{variant:"destructive",onClick:()=>k(!0),children:[(0,a.jsx)(c.A,{className:"size-4"}),e("Sign out")]})]})]}),(0,a.jsx)(v.I,{open:!!n,onOpenChange:k})]})}n.d(t,{t:()=>k})},36653(e,t,n){n.d(t,{v:()=>c});var a=n(23579),i=n(8273),o=n(72407),r=n(12591),s=n(61933),l=n(66304);function c(e){let{className:t="",placeholder:n}=e,{t:c}=(0,o.Bd)(),{setOpen:d}=(0,s.S)(),u=n??c("Search");return(0,a.jsxs)(l.$,{variant:"outline",className:(0,r.cn)("bg-muted/25 group text-muted-foreground hover:bg-accent relative h-8 w-full flex-1 justify-start rounded-md text-sm font-normal shadow-none sm:w-40 sm:pe-12 md:flex-none lg:w-52 xl:w-64",t),onClick:()=>d(!0),"aria-label":u,children:[(0,a.jsx)(i.A,{"aria-hidden":"true",className:"absolute start-1.5 top-1/2 -translate-y-1/2",size:16}),(0,a.jsx)("span",{className:"ms-4",children:u}),(0,a.jsxs)("kbd",{className:"bg-muted group-hover:bg-accent pointer-events-none absolute end-[0.3rem] top-[0.3rem] hidden h-5 items-center gap-1 rounded border px-1.5 font-mono text-[10px] font-medium opacity-100 select-none sm:flex",children:[(0,a.jsx)("span",{className:"text-xs",children:"⌘"}),c("K")]})]})}},7724(e,t,n){var a=n(23579),i=n(72407),o=n(36461),r=n(1855),s=n(2388),l=n(32787);function c(e){let{open:t,onOpenChange:n}=e,{t:c}=(0,i.Bd)(),{auth:d}=(0,r.n)(),u=async()=>{try{await (0,l.ri)()}catch{}d.reset();try{"u">typeof window&&window.localStorage.removeItem("uid")}catch{}o.oR.success(c("Signed out")),"u">typeof window&&window.location.reload()};return(0,a.jsx)(s.T,{open:t,onOpenChange:n,title:c("Sign out"),desc:c("Are you sure you want to sign out? You will need to sign in again to access your account."),confirmText:c("Sign out"),handleConfirm:u,className:"sm:max-w-sm"})}n.d(t,{I:()=>c})},68165(e,t,n){var a=n(23579),i=n(31371),o=n(8208),r=n(12591),s=n(2989);let l={success:"bg-success",warning:"bg-warning",danger:"bg-destructive",info:"bg-info",neutral:"bg-neutral",purple:"bg-chart-4",amber:"bg-warning",blue:"bg-chart-1",cyan:"bg-chart-2",green:"bg-success",grey:"bg-neutral",indigo:"bg-chart-1","light-blue":"bg-info","light-green":"bg-success",lime:"bg-chart-3",orange:"bg-warning",pink:"bg-chart-5",red:"bg-destructive",teal:"bg-chart-2",violet:"bg-chart-4",yellow:"bg-warning"},c={success:"text-success",warning:"text-warning",danger:"text-destructive",info:"text-info",neutral:"text-muted-foreground",purple:"text-chart-4",amber:"text-warning",blue:"text-chart-1",cyan:"text-chart-2",green:"text-success",grey:"text-muted-foreground",indigo:"text-chart-1","light-blue":"text-info","light-green":"text-success",lime:"text-chart-3",orange:"text-warning",pink:"text-chart-5",red:"text-destructive",teal:"text-chart-2",violet:"text-chart-4",yellow:"text-warning"},d=i.createContext("badge"),u={sm:"h-5 gap-1 px-1.5 text-xs leading-none",md:"h-5 gap-1 px-1.5 text-xs leading-none",lg:"h-6 gap-1.5 px-2 text-xs leading-none"},h={sm:"gap-1 text-xs leading-none",md:"gap-1 text-xs leading-none",lg:"gap-1.5 text-xs leading-none"};function p(e){let{label:t,children:n,icon:p,variant:m,size:g="sm",pulse:f=!1,showDot:y=!1,copyable:b=!0,copyText:v,autoColor:x,type:k,className:C,onClick:S,...w}=e,{copyToClipboard:A}=(0,s.C)(),P=i.useContext(d),j=k??P,N=x?(0,o.qA)(x):m??"neutral",I=n??(t?(0,a.jsx)("span",{className:"min-w-0 truncate leading-normal",children:t}):null);return(0,a.jsxs)("span",{"data-slot":"status-badge",className:(0,r.cn)("inline-flex w-fit max-w-full shrink-0 items-center font-medium tracking-normal whitespace-nowrap transition-colors","badge"===j?(0,r.cn)("rounded-4xl",u[g??"sm"]):(0,r.cn)(h[g??"sm"],"underline"===j&&"border-b border-current pb-px"),c[N],f&&"animate-pulse",b&&"curs
1or-copy hover:brightness-95 active:scale-95 dark:hover:brightness-110",C),onClick:e=>{b&&(e.stopPropagation(),A(v||t||"")),S?.(e)},title:b?`Click to copy: ${v||t||""}`:void 0,...w,children:[y&&(0,a.jsx)("span",{className:(0,r.cn)("inline-block size-1.5 shrink-0 rounded-full",l[N]),"aria-hidden":"true"}),p&&(0,a.jsx)(p,{className:"size-3.5 shrink-0"}),I]})}function m(e){let{className:t,empty:n=(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:"-"}),getKey:o,items:s,max:l=2,moreLabel:c,renderItem:d,...u}=e;if(0===s.length)return n;let h=s.slice(0,l),m=s.length-l;return(0,a.jsxs)("div",{className:(0,r.cn)("flex max-w-full items-center gap-1 overflow-hidden",t),...u,children:[h.map((e,t)=>(0,a.jsx)(i.Fragment,{children:d(e,t)},o?.(e,t)??t)),m>0&&(0,a.jsx)(p,{label:c?.(m)??`+${m}`,variant:"neutral",size:"sm",copyable:!1,className:"shrink-0"})]})}n.d(t,{M8:()=>m,Wh:()=>p},{BQ:c,jk:l,lO:d})},52245(e,t,n){var a=n(23579),i=n(31371),o=n(39769),r=n(79146),s=n(79839),l=n(72407),c=n(12591),d=n(48639),u=n(66304),h=n(43660);function p(){let{t:e}=(0,l.Bd)(),{theme:t,setTheme:n}=(0,d.D)();return(0,i.useEffect)(()=>{let e=document.querySelector("meta[name='theme-color']");e&&e.setAttribute("content","dark"===t?"#020817":"#fff")},[t]),(0,a.jsxs)(h.rI,{modal:!1,children:[(0,a.jsxs)(h.ty,{render:(0,a.jsx)(u.$,{variant:"ghost",size:"icon",className:"h-9 w-9"}),children:[(0,a.jsx)(o.A,{className:"size-[1.2rem] scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90"}),(0,a.jsx)(r.A,{className:"absolute size-[1.2rem] scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0"}),(0,a.jsx)("span",{className:"sr-only",children:e("Toggle theme")})]}),(0,a.jsxs)(h.SQ,{align:"end",children:[(0,a.jsxs)(h._2,{onClick:()=>n("light"),children:[e("Light")," ",(0,a.jsx)(s.A,{size:14,className:(0,c.cn)("ms-auto","light"!==t&&"hidden")})]}),(0,a.jsxs)(h._2,{onClick:()=>n("dark"),children:[e("Dark"),(0,a.jsx)(s.A,{size:14,className:(0,c.cn)("ms-auto","dark"!==t&&"hidden")})]}),(0,a.jsxs)(h._2,{onClick:()=>n("system"),children:[e("System"),(0,a.jsx)(s.A,{size:14,className:(0,c.cn)("ms-auto","system"!==t&&"hidden")})]})]})]})}n.d(t,{o:()=>p})},39640(e,t,n){var a=n(23579),i=n(94627),o=n(67707),r=n(1139),s=n(47537),l=n(14942),c=n(15691),d=n(71817),u=n(12591);function h(e){let{className:t,...n}=e;return(0,a.jsx)(i.X,{"data-slot":"accordion",className:(0,u.cn)("flex w-full flex-col",t),...n})}function p(e){let{className:t,...n}=e;return(0,a.jsx)(o.A,{"data-slot":"accordion-item",className:(0,u.cn)("not-last:border-b",t),...n})}function m(e){let{className:t,children:n,...i}=e;return(0,a.jsx)(r.u,{className:"flex",children:(0,a.jsxs)(s.$,{"data-slot":"accordion-trigger",className:(0,u.cn)("group/accordion-trigger focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:after:border-ring **:data-[slot=accordion-trigger-icon]:text-muted-foreground relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-3 aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4",t),...i,children:[n,(0,a.jsx)(d.n,{icon:c.eWiX,strokeWidth:2,"data-slot":"accordion-trigger-icon",className:"pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden"}),(0,a.jsx)(d.n,{icon:c.p_kY,strokeWidth:2,"data-slot":"accordion-trigger-icon",className:"pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline"})]})})}function g(e){let{className:t,children:n,...i}=e;return(0,a.jsx)(l.v,{"data-slot":"accordion-content",className:"data-open:animate-accordion-down data-closed:animate-accordion-up overflow-hidden text-sm",...i,children:(0,a.jsx)("div",{className:(0,u.cn)("[&_a]:hover:text-foreground h-(--accordion-panel-height) pt-0 pb-2.5 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4",t),children:n})})}n.d(t,{$m:()=>m,As:()=>p,nD:()=>h,ub:()=>g})},31759(e,t,n){var a=n(23579);n(31371);var i=n(86682),o=n(55536),r=n(94219),s=n(11491),l=n(50324),c=n(20049),d=n(18049),u=n(39653),h=n(12591),p=n(66304);function m(e){let{...t}=e;return(0,a.jsx)(i.V,{"data-slot":"alert-dialog",...t})}function g(e){let{...t}=e;return(0,a.jsx)(o.t,{"data-slot":"alert-dialog-trigger",...t})}function f(e){let{...t}=e;return(0,a.jsx)(r.Z,{"data-slot":"alert-dialog-portal",...t})}function y(e){let{className:t,...n}=e;return(0,a.jsx)(s.X,{"data-slot":"alert-dialog-overlay",className:(0,h.cn)("data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0 fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs",t),...n})}function b(e){let{className:t,size:n="default",...i}=e;return(0,a.jsxs)(f,{children:[(0,a.jsx)(y,{}),(0,a.jsx)(l.h,{"data-slot":"alert-dialog-content","data-size":n,className:(0,h.cn)("group/alert-dialog-content bg-popover text-popover-foreground ring-foreground
1/10 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl p-4 ring-1 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm",t),...i})]})}function v(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"alert-dialog-header",className:(0,h.cn)("grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",t),...n})}function x(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"alert-dialog-footer",className:(0,h.cn)("bg-muted/50 -mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",t),...n})}function k(e){let{className:t,...n}=e;return(0,a.jsx)(c.L,{"data-slot":"alert-dialog-title",className:(0,h.cn)("text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",t),...n})}function C(e){let{className:t,...n}=e;return(0,a.jsx)(d.r,{"data-slot":"alert-dialog-description",className:(0,h.cn)("text-muted-foreground *:[a]:hover:text-foreground text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3",t),...n})}function S(e){let{className:t,...n}=e;return(0,a.jsx)(p.$,{"data-slot":"alert-dialog-action",className:(0,h.cn)(t),...n})}function w(e){let{className:t,variant:n="outline",size:i="default",...o}=e;return(0,a.jsx)(u.H,{"data-slot":"alert-dialog-cancel",className:(0,h.cn)(t),render:(0,a.jsx)(p.$,{variant:n,size:i}),...o})}n.d(t,{$v:()=>C,EO:()=>b,Lt:()=>m,Rx:()=>S,Zr:()=>w,ck:()=>x,r7:()=>k,tv:()=>g,wd:()=>v})},64792(e,t,n){var a=n(23579);n(31371);var i=n(86460),o=n(12591);let r=(0,i.F)("group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"}},defaultVariants:{variant:"default"}});function s(e){let{className:t,variant:n,...i}=e;return(0,a.jsx)("div",{"data-slot":"alert",role:"alert",className:(0,o.cn)(r({variant:n}),t),...i})}function l(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"alert-title",className:(0,o.cn)("[&_a]:hover:text-foreground font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3",t),...n})}function c(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"alert-description",className:(0,o.cn)("text-muted-foreground [&_a]:hover:text-foreground text-sm text-balance md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4",t),...n})}function d(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"alert-action",className:(0,o.cn)("absolute top-2 right-2",t),...n})}n.d(t,{Fc:()=>s,T2:()=>d,TN:()=>c,XL:()=>l})},59047(e,t,n){var a=n(23579);n(31371);var i=n(3415),o=n(10891),r=n(12591);function s(e){let{className:t,size:n="default",...o}=e;return(0,a.jsx)(i.C,{"data-slot":"avatar","data-size":n,className:(0,r.cn)("group/avatar after:border-border relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten",t),...o})}function l(e){let{className:t,...n}=e;return(0,a.jsx)(o.q,{"data-slot":"avatar-fallback",className:(0,r.cn)("bg-muted text-muted-foreground flex size-full items-center justify-center rounded-full text-sm group-data-[size=sm]/avatar:text-xs",t),...n})}n.d(t,{eu:()=>s,q5:()=>l})},26067(e,t,n){var a=n(53671),i=n(47387),o=n(86460),r=n(12591);let s=(0,o.F)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});
1function l(e){let{className:t,variant:n="default",render:o,...l}=e;return(0,i.C)({defaultTagName:"span",props:(0,a.v6)({className:(0,r.cn)(s({variant:n}),t)},l),render:o,state:{slot:"badge",variant:n}})}n.d(t,{E:()=>l})},66304(e,t,n){var a=n(23579),i=n(31371),o=n(66508),r=n(86460),s=n(12591);let l=(0,r.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-md px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-md px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-md in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-md in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function c(e){let{className:t,variant:n="default",size:r="default",nativeButton:c,render:d,...u}=e;return(0,a.jsx)(o.$,{"data-slot":"button",className:(0,s.cn)(l({variant:n,size:r,className:t})),nativeButton:c??(!(d&&(0,i.isValidElement)(d))||"button"===d.type),render:d,...u})}n.d(t,{$:()=>c},{r:l})},23962(e,t,n){var a=n(23579);n(31371);var i=n(12591);function o(e){let{className:t,size:n="default",...o}=e;return(0,a.jsx)("div",{"data-slot":"card","data-size":n,className:(0,i.cn)("group/card bg-card text-card-foreground ring-foreground/10 flex flex-col gap-4 overflow-hidden rounded-xl py-4 text-sm ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",t),...o})}function r(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"card-header",className:(0,i.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",t),...n})}function s(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"card-title",className:(0,i.cn)("text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",t),...n})}function l(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"card-description",className:(0,i.cn)("text-muted-foreground text-sm",t),...n})}function c(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"card-content",className:(0,i.cn)("px-4 group-data-[size=sm]/card:px-3",t),...n})}function d(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"card-footer",className:(0,i.cn)("bg-muted/50 flex items-center rounded-b-xl border-t p-4 group-data-[size=sm]/card:p-3",t),...n})}n.d(t,{BT:()=>l,Wu:()=>c,ZB:()=>s,Zp:()=>o,aR:()=>r,wL:()=>d})},4403(e,t,n){var a=n(23579),i=n(58992),o=n(54683),r=n(15691),s=n(71817),l=n(12591);function c(e){let{className:t,...n}=e;return(0,a.jsx)(i.y,{"data-slot":"checkbox",className:(0,l.cn)("peer border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary relative flex size-4 shrink-0 items-center justify-center rounded-sm border transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3",t),...n,children:(0,a.jsx)(o.P,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none [&>svg]:size-3.5",children:(0,a.jsx)(s.n,{icon:r.zQdu,strokeWidth:2})})})}n.d(t,{S:()=>c})},48726(e,t,n){var a=n(23579),i=n(83487),o=n(82293),r=n(32166);function s(e){let{...t}=e;return(0,a.jsx)(i.N,{"data-slot":"collapsible",...t})}function l(e){let{...t}=e;return(0,a.jsx)(o.R,{"data-slot":"collapsible-trigger",...t})}function c(e){let{...t}=e;return(0,a.jsx)(r.j,{"data-slot":"collapsible-content",...t})}n.d(t,{Ke:()=>c,Nt:()=>s,R6:()=>l})},38202(e,t,n){var a=n(23579),i=n(31371),o=n(24306),r=n(79839),s=n(72407),l=n(12591),c=n(40382);function d(e){let{options:t,value:n="",onValueChange:d,placeholder:u="Select or type...",emptyText:h="No option found.",className:p,id:m,allowCustomValue:g=!1}=e,{t:f}=(0,s.Bd)(),[y,b]=i.useState(!1),[v,x]=i.useState(""),[k,C]=i.useState(-1),S=i.useRef(null),w=i.useRef(null),A=i.useRef(null),P=i.useMemo(()=>t.find(e=>e.value===n),[t,n]),j=y?v:P?.label??n,N=i.useMemo(()=>
1{if(!v.trim())return t;let e=v.toLowerCase().trim();return t.filter(t=>t.label.toLowerCase().includes(e)||t.value.toLowerCase().includes(e))},[t,v]);i.useEffect(()=>{C(-1)},[N]),i.useEffect(()=>{if(!y)return;let e=e=>{S.current&&!S.current.contains(e.target)&&(b(!1),x(""))};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[y]);let I=e=>{d(e),b(!1),x(""),w.current?.focus()};i.useEffect(()=>{if(k<0||!A.current)return;let e=A.current.children[k];e?.scrollIntoView({block:"nearest"})},[k]);let R=y&&(N.length>0||g&&v.trim());return(0,a.jsxs)("div",{ref:S,className:"relative",children:[(0,a.jsx)(c.p,{ref:w,id:m,type:"text",role:"combobox","aria-expanded":y,"aria-haspopup":"listbox","aria-autocomplete":"list",autoComplete:"off",placeholder:u,value:j,onChange:e=>{let t=e.target.value;x(t),g&&d(t),y||b(!0)},onFocus:()=>{x(g&&!P?n:""),b(!0)},onKeyDown:e=>{if(!y&&("ArrowDown"===e.key||"ArrowUp"===e.key))return void b(!0);if(y)switch(e.key){case"ArrowDown":e.preventDefault(),C(e=>e<N.length-1?e+1:0);break;case"ArrowUp":e.preventDefault(),C(e=>e>0?e-1:N.length-1);break;case"Enter":e.preventDefault(),k>=0&&N[k]?I(N[k].value):g&&v.trim()?I(v.trim()):(b(!1),x(""));break;case"Escape":e.preventDefault(),b(!1),x("")}},className:(0,l.cn)("pr-9",p)}),(0,a.jsx)(o.A,{className:"pointer-events-none absolute top-1/2 right-3 size-4 shrink-0 -translate-y-1/2 opacity-50"}),R&&(0,a.jsx)("div",{className:"bg-popover text-popover-foreground absolute top-full z-100 mt-1 w-full rounded-md border shadow-md",children:N.length>0?(0,a.jsx)("ul",{ref:A,role:"listbox",className:"max-h-[200px] overflow-y-auto p-1",children:N.map((e,t)=>(0,a.jsxs)("li",{role:"option","aria-selected":n===e.value,"data-highlighted":t===k,className:(0,l.cn)("relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm select-none",t===k&&"bg-accent text-accent-foreground",n===e.value&&"font-medium"),onMouseEnter:()=>C(t),onMouseDown:t=>{t.preventDefault(),I(e.value)},children:[(0,a.jsx)(r.A,{className:(0,l.cn)("size-4 shrink-0",n===e.value?"opacity-100":"opacity-0")}),e.icon&&(0,a.jsx)("span",{children:e.icon}),(0,a.jsx)("span",{className:"truncate",children:e.label})]},e.value))}):(0,a.jsxs)("div",{className:"px-2 py-6 text-center text-sm",children:[f(h),g&&v.trim()&&(0,a.jsx)("div",{className:"text-muted-foreground mt-1 text-xs",children:f('Press Enter to use "{{value}}"',{value:v.trim()})})]})})]})}n.d(t,{o:()=>d})},37133(e,t,n){var a=n(23579),i=n(31371),o=n(41740),r=n(30079),s=n(41815),l=n(29407),c=n(30183),d=n(44799),u=n(28706),h=n(35808),p=n(77),m=n(91221),g=n(25204),f=n(1199),y=n(330),b=n(27404),v=n(15691),x=n(71817),k=n(12591),C=n(66304),S=n(38202);function w(e){return"options"in e?(0,a.jsx)(S.o,{id:e.id,options:e.options,value:e.value??"",onValueChange:t=>e.onValueChange?.(t),placeholder:e.searchPlaceholder??e.placeholder,emptyText:e.emptyText,className:e.className,allowCustomValue:e.allowCustomValue}):(0,a.jsx)(o.i,{...e})}function A(e){let{...t}=e;return(0,a.jsx)(r.p,{"data-slot":"combobox-value",...t})}function P(e){let{className:t,side:n="bottom",sideOffset:i=6,align:o="start",alignOffset:r=0,anchor:d,...u}=e;return(0,a.jsx)(s.K,{children:(0,a.jsx)(l.o,{side:n,sideOffset:i,align:o,alignOffset:r,anchor:d,className:"isolate z-50",children:(0,a.jsx)(c.I,{"data-slot":"combobox-content","data-chips":!!d,className:(0,k.cn)("group/combobox-content bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-lg shadow-md ring-1 duration-100 data-[chips=true]:min-w-(--anchor-width) *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:shadow-none",t),...u})})})}function j(e){let{className:t,...n}=e;return(0,a.jsx)(d.e,{"data-slot":"combobox-list",className:(0,k.cn)("no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto overscroll-contain p-1 data-empty:p-0",t),...n})}function N(e){let{className:t,children:n,...i}=e;return(0,a.jsxs)(u.x,{"data-slot":"combobox-item",className:(0,k.cn)("data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground relative flex w-full cursor-default items-center gap-2 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...i,children:[n,(0,a.jsx)(h.Q,{render:(0,a.jsx)("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center"}),children:(0,a.jsx)(x.n,{icon:v.zQdu,strokeWidth:2,className:"pointer-events-none"})})]})}function I(e){let{...t}=e;return(0,a.jsx)(p.u,{"data-slot":"combobox-collection",...t})}function R(e){let{className:t,...n}=e;return(0,a.jsx)(m.$,{"data-slot":"combobox-empty",className:(0,k.cn)("text-muted-foreground hidden w-full justify-center py-2 text-center text-sm group-data-empty/combobox-content:flex",t),...n})}function T(e){let{className:t,...n}=e;return(0,a.jsx)(g.H,{"data-slot":"combobox-chips",className:(0,k.cn)("border-input focus-within:border-ring focus-within:ring-ring/50 has-aria-invalid:border-destructive has-aria-invalid:ring-destructive/20 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40 flex min-h-8 flex-wrap items-center gap-1 rounded-lg border bg-transparent bg-clip-padding px-2.5 py-1 text-sm transition-colors focus-within:ring-3 has-aria-invalid:ring-3 has-data-[slot=combobox-chip]:px-1",t),...n})}function M(e){let{className:t,children:n,showRemove:i=!0,...o}=e;return(0,a.jsxs)(f.e,{"data-slot":"combobox-chip",className:(0,k.cn)("bg-muted text-foreground flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-sm px-1.5 text-xs font-medium whitespace-nowrap has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0",t),...o,children:[n,i&&(0,a.jsx)(y.a,{render:(0,a.jsx)(C.$,{variant:"ghost",size:"icon-xs"}),className:"-ml-1 opacity-50 hover:opacity-100","data-slot":"combobox-chip-remove",children:(0,a.jsx)(x.n,{icon:v.bJi8,strokeWidth:2,className:"pointer-events-none"})})]})}function D(e){let{className:t,...n}=e;return(0,a.jsx)(b.o,{"data-slot":"combobox-chip-input",className:(0,k.cn)("min-w-16 flex-1 outline-none",t),...n})}function O(){return i.useRef(null)}n(76076),n.d(t,{$U:()=>R,G3:()=>w,HL:()=>T,I0:()=>O,em:()=>M,ex:()=>j,h5:()=>P,pJ:()=>D,pn:()=>A,uL:()=>I,x4:()=>N})},75257(e,t,n){var a=n(23579);n(31371);var i=n(15691),o=n(71817),r=n(19143),s=n(12591),l=n(65592),c=n(76076);function d(e){let{className:t,...n}=e;return(0,a.jsx)(r.uB,{"data-slot":"command",className:(0,s.cn)("bg-popover text-popover-foreground flex size-full flex-col overflow-hidden rounded-xl! p-1",t),...n})}function u(e){let{title:t="Command Palette",description:n="Search for a command to run...",children:i,className:o,showCloseButton:r=!1,...c}=e;return(0,a.jsxs)(l.lG,{...c,children:[(0,a.jsxs)(l.c7,{className:"sr-only",children:[(0,a.jsx)(l.L3,{children:t}),(0,a.jsx)(l.rr,{children:n})]}),(0,a.jsx)(l.Cf,{className:(0,s.cn)("top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0",o),showCloseButton:r,children:i})]})}function h(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"command-input-wrapper",className:"p-1 pb-0",children:(0,a.jsxs)(c.MG,{className:"border-input/30 bg-input/30 h-8! rounded-lg! shadow-none! *:data-[slot=input-group-addon]:pl-2!",children:[(0,a.jsx)(r.uB.Input,{"data-slot":"command-input",className:(0,s.cn)("w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",t),...n}),(0,a.jsx)(c.Sq,{children:(0,a.jsx)(o.n,{icon:i.WIvO,strokeWidth:2,className:"size-4 shrink-0 opacity-50"})})]})})}function p(e){let{className:t,...n}=e;return(0,a.jsx)(r.uB.List,{"data-slot":"command-list",className:(0,s.cn)("no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none",t),...n})}function m(e){let{className:t,...n}=e;return(0,a.jsx)(r.uB.Empty,{"data-slot":"command-empty",className:(0,s.cn)("py-6 text-center text-sm",t),...n})}function g(e){let{className:t,...n}=e;return(0,a.jsx)(r.uB.Group,{"data-slot":"command-group",className:(0,s.cn)("text-foreground **:[[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium",t),...n})}function f(e){let{className:t,...n}=e;return(0,a.jsx)(r.uB.Separator,{"data-slot":"command-separator",className:(0,s.cn)("bg-border -mx-1 h-px",t),...n})}function y(e){let{className:t,children:n,...l}=e;return(0,a.jsxs)(r.uB.Item,{"data-slot":"command-item",className:(0,s.cn)("group/command-item data-selected:bg-muted data-selected:text-foreground data-selected:*:[svg]:text-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...l,children:[n,(0,a.jsx)(o.n,{icon:i.zQdu,strokeWidth:2,className:"ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100"})]})}n.d(t,{G7:()=>h,Gj:()=>u,L$:()=>g,fx:()=>f,h_:()=>y,oI:()=>p,uB:()=>d,xL:()=>m})},65592(e,t,n){var a=n(23579);n(31371);var i=n(547),o=n(14133),r=n(94219),s=n(11491),l=n(50324),c=n(39653),d=n(20049),u=n(18049),h=n(15691),p=n(71817),m=n(12591),g=n(66304);function f(e){let{...t}=e;return(0,a.jsx)(i.D,{"data-slot":"dialog",...t})}function y(e){let{...t}=e;return(0,a.jsx)(o.z,{"data-slot":"dialog-trigger",...t})}function b(e){let{...t}=e;return(0,a.jsx)(r.Z,{"data-slot":"dialog-portal",...t})}function v(e){let{className:t,...n}=e;return(0,a.jsx)(s.X,{"data-slot":"dialog-overlay",className:(0,m.cn)("data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0 fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs",t),...n})}function x(e){let{className:t,children:n,showCloseButton:i=!0,...o}=e;return(0,a.jsxs)(b,{children:[(0,a.jsx)(v,{}),(0,a.jsxs)(l.h,{"data-slot":"dialog-content",className:(0,m.cn)("bg-popover text-popover-foreground ring-foreground
1/10 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl p-4 text-sm ring-1 duration-100 outline-none sm:max-w-sm",t),...o,children:[n,i&&(0,a.jsxs)(c.H,{"data-slot":"dialog-close",render:(0,a.jsx)(g.$,{variant:"ghost",className:"absolute top-2 right-2",size:"icon-sm"}),children:[(0,a.jsx)(p.n,{icon:h.bJi8,strokeWidth:2}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function k(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"dialog-header",className:(0,m.cn)("flex flex-col gap-2",t),...n})}function C(e){let{className:t,showCloseButton:n=!1,children:i,...o}=e;return(0,a.jsxs)("div",{"data-slot":"dialog-footer",className:(0,m.cn)("bg-muted/50 -mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t p-4 sm:flex-row sm:justify-end",t),...o,children:[i,n&&(0,a.jsx)(c.H,{render:(0,a.jsx)(g.$,{variant:"outline"}),children:"Close"})]})}function S(e){let{className:t,...n}=e;return(0,a.jsx)(d.L,{"data-slot":"dialog-title",className:(0,m.cn)("text-base leading-none font-medium",t),...n})}function w(e){let{className:t,...n}=e;return(0,a.jsx)(u.r,{"data-slot":"dialog-description",className:(0,m.cn)("text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3",t),...n})}n.d(t,{Cf:()=>x,Es:()=>C,L3:()=>S,c7:()=>k,lG:()=>f,rr:()=>w,zM:()=>y})},43660(e,t,n){n.d(t,{rI:()=>k,hO:()=>R,SQ:()=>S,I:()=>w,_2:()=>P,lp:()=>A,mB:()=>T,V0:()=>M,lv:()=>j,M5:()=>I,nV:()=>N,ty:()=>C});var a=n(23579),i=n(31371),o=n(77559),r=n(93334),s=n(77715),l=n(79607),c=n(91971),d=n(70219),u=n(28296),h=n(95381),p=n(63290),m=n(24168),g=n(95316),f=n(35279),y=n(31034),b=n(15691),v=n(71817),x=n(12591);function k(e){let{...t}=e;return(0,a.jsx)(o.i,{"data-slot":"dropdown-menu",...t})}function C(e){let{...t}=e;return(0,a.jsx)(r.c,{"data-slot":"dropdown-menu-trigger",...t})}function S(e){let{align:t="start",alignOffset:n=0,side:i="bottom",sideOffset:o=4,className:r,...d}=e;return(0,a.jsx)(s.g,{children:(0,a.jsx)(l.y,{className:"isolate z-50 outline-none",align:t,alignOffset:n,side:i,sideOffset:o,children:(0,a.jsx)(c._,{"data-slot":"dropdown-menu-content",className:(0,x.cn)("bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg p-1 shadow-md ring-1 duration-100 outline-none data-closed:overflow-hidden",r),...d})})})}function w(e){let{...t}=e;return(0,a.jsx)(d.r,{"data-slot":"dropdown-menu-group",...t})}function A(e){let{className:t,inset:n,...i}=e;return(0,a.jsx)(u.N,{"data-slot":"dropdown-menu-label","data-inset":n,className:(0,x.cn)("text-muted-foreground px-1.5 py-1 text-xs font-medium data-inset:pl-7",t),...i})}function P(e){let{className:t,inset:n,variant:o="default",onClick:r,onSelect:s,...l}=e,c=i.useCallback(e=>{r?.(e),e.defaultPrevented||s?.(e),e.defaultPrevented&&e.preventBaseUIHandler?.()},[r,s]);return(0,a.jsx)(h.D,{"data-slot":"dropdown-menu-item","data-inset":n,"data-variant":o,className:(0,x.cn)("group/dropdown-menu-item focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:*:[svg]:text-destructive relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),onClick:r||s?c:void 0,...l})}function j(e){let{...t}=e;return(0,a.jsx)(p.h,{"data-slot":"dropdown-menu-sub",...t})}function N(e){let{className:t,inset:n,children:i,...o}=e;return(0,a.jsxs)(m.f,{"data-slot":"dropdown-menu-sub-trigger","data-inset":n,className:(0,x.cn)("focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...o,children:[i,(0,a.jsx)(v.n,{icon:b.eXOi,strokeWidth:2,className:"ml-auto"})]})}function I(e){let{align:t="start",alignOffset:n=-3,side:i="right",sideOffset:o=0,className:r,...s}=e;return(0,a.jsx)(S,{"data-slot":"dropdown-menu-sub-content",className:(0,x.cn)("bg-popover text-popover-foreground ring-foreground
1/10 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 w-auto min-w-[96px] rounded-lg p-1 shadow-lg ring-1 duration-100",r),align:t,alignOffset:n,side:i,sideOffset:o,...s})}function R(e){let{className:t,children:n,checked:i,inset:o,...r}=e;return(0,a.jsxs)(g.s,{"data-slot":"dropdown-menu-checkbox-item","data-inset":o,className:(0,x.cn)("focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),checked:i,...r,children:[(0,a.jsx)("span",{className:"pointer-events-none absolute right-2 flex items-center justify-center","data-slot":"dropdown-menu-checkbox-item-indicator",children:(0,a.jsx)(f.F,{children:(0,a.jsx)(v.n,{icon:b.zQdu,strokeWidth:2})})}),n]})}function T(e){let{className:t,...n}=e;return(0,a.jsx)(y.w,{"data-slot":"dropdown-menu-separator",className:(0,x.cn)("bg-border -mx-1 my-1 h-px",t),...n})}function M(e){let{className:t,...n}=e;return(0,a.jsx)("span",{"data-slot":"dropdown-menu-shortcut",className:(0,x.cn)("text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest",t),...n})}},43021(e,t,n){var a=n(23579),i=n(86460),o=n(12591);function r(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"empty",className:(0,o.cn)("flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 roun
1ded-xl border-dashed p-6 text-center text-balance",t),...n})}function s(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"empty-header",className:(0,o.cn)("flex max-w-sm flex-col items-center gap-2",t),...n})}let l=(0,i.F)("mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",{variants:{variant:{default:"bg-transparent",icon:"flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4"}},defaultVariants:{variant:"default"}});function c(e){let{className:t,variant:n="default",...i}=e;return(0,a.jsx)("div",{"data-slot":"empty-icon","data-variant":n,className:(0,o.cn)(l({variant:n,className:t})),...i})}function d(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"empty-title",className:(0,o.cn)("text-sm font-medium tracking-tight",t),...n})}function u(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"empty-description",className:(0,o.cn)("text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4",t),...n})}function h(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"empty-content",className:(0,o.cn)("flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance",t),...n})}n.d(t,{FT:()=>s,HY:()=>h,Kr:()=>c,Ou:()=>u,Sv:()=>r,cz:()=>d})},28082(e,t,n){var a=n(23579),i=n(31371),o=n(32403),r=n(47387),s=n(72407),l=n(12591),c=n(41220);let d=i.createContext(null);function u(e,t){return`[data-form-root="${e}"]${t}`}function h(){let e=i.useContext(d),{control:t}=(0,o.xW)(),{errors:n,submitCount:a}=(0,o.lN)({control:t}),r=i.useRef(0);return i.useEffect(()=>{if(!e||0===a||!("object"==typeof n&&null!==n&&Object.keys(n).length>0)||r.current===a)return;r.current=a;let t=window.requestAnimationFrame(()=>{let t=document.querySelector(u(e.id,'[aria-invalid="true"]')),n=document.querySelector(u(e.id,'[data-slot="form-message"]')),a=t?n&&t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING?n:t:n;if(!a)return;let i=a.closest(u(e.id,'[data-slot="form-item"]')),o=i??a,r=a===t?t:i?.querySelector('[aria-invalid="true"], input, textarea, select, button, [tabindex]:not([tabindex="-1"])')??null;o.scrollIntoView({block:"center",behavior:"smooth"}),r?.focus({preventScroll:!0})});return()=>window.cancelAnimationFrame(t)},[n,e,a]),null}function p(e){let{children:t,...n}=e,r=i.useId(),s=i.useMemo(()=>`form-${r.replaceAll(/[^a-zA-Z0-9_-]/g,"_")}`,[r]);return(0,a.jsx)(d.Provider,{value:{id:s},children:(0,a.jsxs)(o.Op,{...n,children:[(0,a.jsx)(h,{}),t]})})}let m=i.createContext({}),g=()=>{let e=i.useContext(m),t=i.useContext(f),{getFieldState:n}=(0,o.xW)(),a=(0,o.lN)({name:e.name}),r=n(e.name,a);if(!e)throw Error("useFormField should be used within <FormField>");let{id:s}=t;return{id:s,name:e.name,formItemId:`${s}-form-item`,formDescriptionId:`${s}-form-item-description`,formMessageId:`${s}-form-item-message`,...r}},f=i.createContext({});function y(e){let{className:t,...n}=e,o=i.useId(),r=i.useContext(d);return(0,a.jsx)(f.Provider,{value:{id:o},children:(0,a.jsx)("div",{"data-slot":"form-item","data-form-root":r?.id,className:(0,l.cn)("grid gap-2",t),...n})})}function b(e){let{className:t,...n}=e,{error:i,formItemId:o}=g();return(0,a.jsx)(c.J,{"data-slot":"form-label","data-error":!!i,className:(0,l.cn)("data-[error=true]:text-destructive",t),htmlFor:o,...n})}function v(e){let{children:t,...n}=e,{error:a,formItemId:o,formDescriptionId:s,formMessageId:l}=g(),c=i.useContext(d);return(0,r.C)({render:t,props:{"data-slot":"form-control","data-form-root":c?.id,id:o,"aria-describedby":a?`${s} ${l}`:`${s}`,"aria-invalid":!!a,...n}})}function x(e){let{className:t,...n}=e,{formDescriptionId:i}=g();return(0,a.jsx)("p",{"data-slot":"form-description",id:i,className:(0,l.cn)("text-muted-foreground text-sm",t),...n})}function k(e){let{className:t,...n}=e,{error:o,formMessageId:r}=g(),c=i.useContext(d),{t:u}=(0,s.Bd)(),h=o?String(o?.message??""):n.children;if(!h)return null;let p="string"==typeof h?u(h):h;return(0,a.jsx)("p",{"data-slot":"form-message","data-form-root":c?.id,id:r,className:(0,l.cn)("text-destructive text-sm",t),...n,children:p})}n.d(t,{C5:()=>k,MJ:()=>v,Rr:()=>x,eI:()=>y,lR:()=>b,lV:()=>p},{zB:e=>{let{...t}=e;return(0,a.jsx)(m.Provider,{value:{name:t.name},children:(0,a.jsx)(o.xI,{...t})})}})},76076(e,t,n){var a=n(23579);n(31371);
1var i=n(86460),o=n(12591),r=n(66304),s=n(40382),l=n(69502);function c(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"input-group",role:"group",className:(0,o.cn)("group/input-group border-input has-disabled:bg-input/50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 relative flex h-8 w-full min-w-0 items-center rounded-lg border transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5",t),...n})}let d=(0,i.F)("flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-sm [&>svg:not([class*='size-'])]:size-4",{variants:{align:{"inline-start":"order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]","inline-end":"order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]","block-start":"order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2","block-end":"order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2"}},defaultVariants:{align:"inline-start"}});function u(e){let{className:t,align:n="inline-start",...i}=e;return(0,a.jsx)("div",{role:"group","data-slot":"input-group-addon","data-align":n,className:(0,o.cn)(d({align:n}),t),onClick:e=>{e.target.closest("button")||e.currentTarget.parentElement?.querySelector("input")?.focus()},...i})}let h=(0,i.F)("flex items-center gap-2 text-sm shadow-none",{variants:{size:{xs:"h-6 gap-1 rounded-md px-1.5 [&>svg:not([class*='size-'])]:size-3.5",sm:"","icon-xs":"size-6 rounded-md p-0 has-[>svg]:p-0","icon-sm":"size-8 p-0 has-[>svg]:p-0"}},defaultVariants:{size:"xs"}});function p(e){let{className:t,type:n="button",variant:i="ghost",size:s="xs",...l}=e;return(0,a.jsx)(r.$,{type:n,"data-size":s,variant:i,className:(0,o.cn)(h({size:s}),t),...l})}function m(e){let{className:t,...n}=e;return(0,a.jsx)(s.p,{"data-slot":"input-group-control",className:(0,o.cn)("flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent",t),...n})}function g(e){let{className:t,...n}=e;return(0,a.jsx)(l.T,{"data-slot":"input-group-control",className:(0,o.cn)("flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent",t),...n})}n.d(t,{Ik:()=>p,MG:()=>c,Sq:()=>u,iV:()=>m,oR:()=>g})},40382(e,t,n){var a=n(23579);n(31371);var i=n(8788),o=n(12591);function r(e){let{className:t,type:n,...r}=e;return(0,a.jsx)(i.p,{type:n,"data-slot":"input",className:(0,o.cn)("border-input file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 disabled:bg-input/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 h-8 w-full min-w-0 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-3 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 md:text-sm",t),...r})}n.d(t,{p:()=>r})}
1,41220(e,t,n){var a=n(23579);n(31371);var i=n(12591);function o(e){let{className:t,...n}=e;return(0,a.jsx)("label",{"data-slot":"label",className:(0,i.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",t),...n})}n.d(t,{J:()=>o})},63999(e,t,n){var a=n(23579),i=n(61407),o=n(42396),r=n(16522),s=n(12591);function l(e){let{children:t,className:n}=e;return(0,a.jsx)("div",{className:(0,s.cn)("prose prose-sm dark:prose-invert max-w-none","prose-headings:font-semibold prose-headings:tracking-tight","prose-h1:text-2xl prose-h2:text-xl prose-h3:text-lg","prose-p:leading-relaxed prose-p:my-2","prose-a:text-primary prose-a:no-underline hover:prose-a:underline","prose-code:bg-muted prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-code:before:content-none prose-code:after:content-none","prose-pre:bg-muted prose-pre:border","prose-blockquote:border-l-primary prose-blockquote:bg-muted/50 prose-blockquote:py-1","prose-ul:my-2 prose-ol:my-2 prose-li:my-1","prose-table:border prose-thead:bg-muted","prose-td:border prose-th:border prose-td:px-3 prose-th:px-3","prose-img:rounded-lg prose-img:shadow-sm","[&>*:first-child]:mt-0 [&>*:last-child]:mb-0","[overflow-wrap:anywhere] break-words",n),children:(0,a.jsx)(i.oz,{remarkPlugins:[r.A],rehypePlugins:[o.A],components:{a:e=>{let{node:t,...n}=e;return(0,a.jsx)("a",{...n,target:"_blank",rel:"noopener noreferrer"})}},children:t})})}n.d(t,{o:()=>l})},81361(e,t,n){var a=n(23579);n(31371);var i=n(91093),o=n(88749),r=n(70953),s=n(33501),l=n(93039),c=n(68985),d=n(12591);function u(e){let{...t}=e;return(0,a.jsx)(i.y,{"data-slot":"popover",...t})}function h(e){let{...t}=e;return(0,a.jsx)(o.W,{"data-slot":"popover-trigger",...t})}function p(e){let{className:t,align:n="center",alignOffset:i=0,side:o="bottom",sideOffset:c=4,collisionPadding:u,collisionBoundary:h,collisionAvoidance:p,...m}=e;return(0,a.jsx)(r.i,{children:(0,a.jsx)(s.U,{align:n,alignOffset:i,side:o,sideOffset:c,collisionPadding:u,collisionBoundary:h,collisionAvoidance:p,className:"isolate z-50",children:(0,a.jsx)(l.i,{"data-slot":"popover-content",className:(0,d.cn)("bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg p-2.5 text-sm shadow-md ring-1 outline-hidden duration-100",t),...m})})})}function m(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"popover-header",className:(0,d.cn)("flex flex-col gap-0.5 text-sm",t),...n})}function g(e){let{className:t,...n}=e;return(0,a.jsx)(c.e,{"data-slot":"popover-title",className:(0,d.cn)("font-medium",t),...n})}n.d(t,{AM:()=>u,DI:()=>m,Wv:()=>h,eO:()=>g,hl:()=>p})},94101(e,t,n){var a=n(23579),i=n(27871),o=n(25495),r=n(1911),s=n(12591);function l(e){let{className:t,children:n,value:o,...r}=e;return(0,a.jsxs)(i.w,{value:o,"data-slot":"progress",className:(0,s.cn)("flex flex-wrap gap-3",t),...r,children:[n,(0,a.jsx)(c,{children:(0,a.jsx)(d,{})})]})}function c(e){let{className:t,...n}=e;return(0,a.jsx)(o.X,{className:(0,s.cn)("bg-muted relative flex h-1 w-full items-center overflow-x-hidden rounded-full",t),"data-slot":"progress-track",...n})}function d(e){let{className:t,...n}=e;return(0,a.jsx)(r.Z,{"data-slot":"progress-indicator",className:(0,s.cn)("bg-primary h-full transition-all",t),...n})}n.d(t,{ke:()=>l})},88381(e,t,n){var a=n(23579),i=n(63932),o=n(40882),r=n(57560),s=n(67772),l=n(16),c=n(12591);function d(e){let{className:t,children:n,...s}=e;return(0,a.jsxs)(i.V,{"data-slot":"scroll-area",className:(0,c.cn)("relative",t),...s,children:[(0,a.jsx)(o.B,{"data-slot":"scroll-area-viewport",className:"focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",children:n}),(0,a.jsx)(u,{}),(0,a.jsx)(r.I,{})]})}function u(e){let{className:t,orientation:n="vertical",...i}=e;return(0,a.jsx)(s.V,{"data-slot":"scroll-area-scrollbar","data-orientation":n,orientation:n,className:(0,
1c.cn)("flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent",t),...i,children:(0,a.jsx)(l.l,{"data-slot":"scroll-area-thumb",className:"bg-border relative flex-1 rounded-full"})})}n.d(t,{$:()=>u,F:()=>d})},62036(e,t,n){var a=n(23579);n(31371);var i=n(575),o=n(15422),r=n(61072),s=n(94145),l=n(78453),c=n(98469),d=n(54147),u=n(92541),h=n(17063),p=n(50973),m=n(5225),g=n(85758),f=n(89548),y=n(95429),b=n(95775),v=n(15691),x=n(71817),k=n(12591);let C=o.H;function S(e){let{className:t,...n}=e;return(0,a.jsx)(r.s,{"data-slot":"select-group",className:(0,k.cn)("scroll-my-1 p-1",t),...n})}function w(e){let{className:t,...n}=e;return(0,a.jsx)(s.y,{"data-slot":"select-value",className:(0,k.cn)("flex flex-1 text-left",t),...n})}function A(e){let{className:t,size:n="default",children:i,...o}=e;return(0,a.jsxs)(l.b,{"data-slot":"select-trigger","data-size":n,className:(0,k.cn)("border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 flex w-fit items-center justify-between gap-1.5 rounded-lg border bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-md *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...o,children:[i,(0,a.jsx)(c.w,{render:(0,a.jsx)(x.n,{icon:v.$l62,strokeWidth:2,className:"text-muted-foreground pointer-events-none size-4"})})]})}function P(e){let{className:t,children:n,side:o="bottom",sideOffset:r=4,align:s="center",alignOffset:l=0,alignItemWithTrigger:c=!0,...m}=e,g=(0,i.Ub)("(max-width: 640px)"),f=(0,a.jsx)(d.l,{side:o,sideOffset:r,align:s,alignOffset:l,alignItemWithTrigger:c,className:"isolate z-50",children:(0,a.jsxs)(u.t,{"data-slot":"select-content","data-align-trigger":c,className:(0,k.cn)("bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg shadow-md ring-1 duration-100 data-[align-trigger=true]:animate-none",t),...m,children:[(0,a.jsx)(N,{}),(0,a.jsx)(h.B,{children:n}),(0,a.jsx)(I,{})]})});return g?f:(0,a.jsx)(p.V,{children:f})}function j(e){let{className:t,children:n,...i}=e;return(0,a.jsxs)(m.e,{"data-slot":"select-item",className:(0,k.cn)("focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",t),...i,children:[(0,a.jsx)(g.h,{className:"flex flex-1 shrink-0 gap-2 whitespace-nowrap",children:n}),(0,a.jsx)(f.h,{render:(0,a.jsx)("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center"}),children:(0,a.jsx)(x.n,{icon:v.zQdu,strokeWidth:2,className:"pointer-events-none"})})]})}function N(e){let{className:t,...n}=e;return(0,a.jsx)(y.w,{"data-slot":"select-scroll-up-button",className:(0,k.cn)("bg-popover top-0 z-10 flex w-full cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4",t),...n,children:(0,a.jsx)(x.n,{icon:v.p_kY,strokeWidth:2})})}function I(e){let{className:t,...n}=e;return(0,a.jsx)(b.d,{"data-slot":"select-scroll-down-button",className:(0,k.cn)("bg-popover bottom-0 z-10 flex w-full cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4",t),...n,children:(0,a.jsx)(x.n,{icon:v.eWiX,strokeWidth:2})})}n.d(t,{bq:()=>A,eb:()=>j,gC:()=>P,s3:()=>S,yv:()=>w},{l6:C})},51983(e,t,n){var a=n(23579),i=n(31034),o=n(12591);function r(e){let{className:t,orientation:n="horizontal",...r}=e;return(0,a.jsx)(i.w,{"data-slot":"separator",orientation:n,className:(0,o.cn)("bg-border shrink-0 data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",t),...r})}n.d(t,{w:()=>r})}
1,34915(e,t,n){var a=n(23579);n(31371);var i=n(547),o=n(14133),r=n(39653),s=n(94219),l=n(11491),c=n(50324),d=n(20049),u=n(18049),h=n(15691),p=n(71817),m=n(12591),g=n(66304);function f(e){let{...t}=e;return(0,a.jsx)(i.D,{"data-slot":"sheet",...t})}function y(e){let{...t}=e;return(0,a.jsx)(o.z,{"data-slot":"sheet-trigger",...t})}function b(e){let{...t}=e;return(0,a.jsx)(r.H,{"data-slot":"sheet-close",...t})}function v(e){let{...t}=e;return(0,a.jsx)(s.Z,{"data-slot":"sheet-portal",...t})}function x(e){let{className:t,...n}=e;return(0,a.jsx)(l.X,{"data-slot":"sheet-overlay",className:(0,m.cn)("fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs",t),...n})}function k(e){let{className:t,children:n,side:i="right",showCloseButton:o=!0,...s}=e;return(0,a.jsxs)(v,{children:[(0,a.jsx)(x,{}),(0,a.jsxs)(c.h,{"data-slot":"sheet-content","data-side":i,className:(0,m.cn)("bg-background text-foreground fixed z-50 flex flex-col gap-4 overflow-hidden bg-clip-padding text-sm shadow-none transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0","right"===i&&"inset-y-0 right-0 h-full w-3/4 border-l data-ending-style:translate-x-[2.5rem] data-starting-style:translate-x-[2.5rem] sm:max-w-sm","left"===i&&"inset-y-0 left-0 h-full w-3/4 border-r data-ending-style:translate-x-[-2.5rem] data-starting-style:translate-x-[-2.5rem] sm:max-w-sm","top"===i&&"inset-x-0 top-0 h-auto border-b data-ending-style:translate-y-[-2.5rem] data-starting-style:translate-y-[-2.5rem]","bottom"===i&&"inset-x-0 bottom-0 h-auto border-t data-ending-style:translate-y-[2.5rem] data-starting-style:translate-y-[2.5rem]",t),...s,children:[n,o&&(0,a.jsxs)(r.H,{"data-slot":"sheet-close",render:(0,a.jsx)(g.$,{variant:"ghost",className:"absolute top-3 right-3",size:"icon-sm"}),children:[(0,a.jsx)(p.n,{icon:h.bJi8,strokeWidth:2}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function C(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"sheet-header",className:(0,m.cn)("flex flex-col gap-0.5 p-4",t),...n})}function S(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"sheet-footer",className:(0,m.cn)("mt-auto flex flex-col gap-2 p-4",t),...n})}function w(e){let{className:t,...n}=e;return(0,a.jsx)(d.L,{"data-slot":"sheet-title",className:(0,m.cn)("text-foreground text-base font-medium",t),...n})}function A(e){let{className:t,...n}=e;return(0,a.jsx)(u.r,{"data-slot":"sheet-description",className:(0,m.cn)("text-muted-foreground text-sm",t),...n})}n.d(t,{CG:()=>y,Fm:()=>C,Qs:()=>A,XW:()=>S,cj:()=>f,h:()=>k,kN:()=>b,qp:()=>w})},84722(e,t,n){var a=n(23579),i=n(31371),o=n(53671),r=n(47387),s=n(15691),l=n(71817),c=n(86460),d=n(12591),u=n(30549),h=n(66304);n(40382),n(51983);var p=n(34915);n(27917);var m=n(95163);let g=i.createContext(null);function f(){let e=i.useContext(g);if(!e)throw Error("useSidebar must be used within a SidebarProvider.");return e}function y(e){let{defaultOpen:t=!0,open:n,onOpenChange:o,className:r,style:s,children:l,...c}=e,h=(0,u.a)(),[p,m]=i.useState(!1),[f,y]=i.useState(t),b=n??f,v=i.useCallback(e=>{let t="function"==typeof e?e(b):e;o?o(t):y(t),document.cookie=`sidebar_state=${t}; path=/; max-age=604800`},[o,b]),x=i.useCallback(()=>h?m(e=>!e):v(e=>!e),[h,v,m]);i.useEffect(()=>{let e=e=>{"b"===e.key&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),x())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[x]);let k=b?"expanded":"collapsed",C=i.useMemo(()=>({state:k,open:b,setOpen:v,isMobile:h,openMobile:p,setOpenMobile:m,toggleSidebar:x}),[k,b,v,h,p,m,x]);return(0,a.jsx)(g.Provider,{value:C,children:(0,a.jsx)("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":"13rem","--sidebar-width-icon":"2.75rem",...s},className:(0,d.cn)("group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full",r),...c,children:l})})}function b(e){let{side:t="left",variant:n="sidebar",collapsible:i="offcanvas",className:o,children:r,dir:s,...l}=e,{isMobile:c,state:u,openMobile:h,setOpenMobile:m}=f();return"none"===i?(0,a.jsx)("div",{"data-slot":"sidebar",className:(0,d.cn)("bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col",o),...l,children:r}):c?(0,a.jsx)(p.cj,{open:h,onOpenChange:m,...l,children:(0,a.jsxs)(p.h,{dir:s,"data-sidebar":"sidebar","data-slot":"sidebar","data-mobile":"true",className:"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden",style:{"--sidebar-width":"17rem"},side:t,children:[(0,a.jsxs)(p.Fm,{className:"sr-only",children:[(0,a.jsx)(p.qp,{children:"Sidebar"}),(0,a.jsx)(p.Qs,{children:"Displays the mobile sidebar."})]}),(0,a.jsx)("div",{className:"flex h-full w-full flex-col",children:r})]})}):(0,a.jsxs)("div",{className:"group peer text-sidebar-foreground hidden md:block","data-state":u,"data-collapsible":"collapsed"===u?i:"","data-variant":n,"data-side":t,"data-slot":"sidebar",children:[(0,a.jsx)("div",{"data-slot":"sidebar-gap",className:(0,d.cn)("relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear","group-data-[collapsible=offcanvas]:w-0","group-data-[side=right]:rotate-180","floating"===n||"inset"===n?"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon)")}),(0,a.jsx)("div",{"data-slot":"sidebar-container","data-side":t,className:(0,d.cn)("fixed top-[var(--app-header-height,0px)] bottom-0 z-10 hidden h-[calc(100svh-var(--app-header-height,0px))] w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex","floating"===n||"inset"===n?"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]":"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",o),...l,children:(0,a.jsx)("div",{"data-sidebar":"sidebar","data-slot":"sidebar-inner",className:"bg-sidebar group-data-[variant=floating]:ring-sidebar-border flex size-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1",children:r})})]})}function v(e){let{className:t,onClick:n,...i}=e,{toggleSidebar:o}=f();return(0,a.jsxs)(h.$,{"data-sidebar":"trigger","data-slot":"sidebar-tr
1igger",variant:"ghost",size:"icon-sm",className:(0,d.cn)(t),onClick:e=>{n?.(e),o()},...i,children:[(0,a.jsx)(l.n,{icon:s.j0KU,strokeWidth:2}),(0,a.jsx)("span",{className:"sr-only",children:"Toggle Sidebar"})]})}function x(e){let{className:t,...n}=e,{toggleSidebar:i}=f();return(0,a.jsx)("button",{"data-sidebar":"rail","data-slot":"sidebar-rail","aria-label":"Toggle Sidebar",tabIndex:-1,onClick:i,title:"Toggle Sidebar",className:(0,d.cn)("hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2","in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize","[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize","hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full","[[data-side=left][data-collapsible=offcanvas]_&]:-right-2","[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",t),...n})}function k(e){let{className:t,...n}=e;return(0,a.jsx)("main",{"data-slot":"sidebar-inset",className:(0,d.cn)("bg-background relative flex w-full flex-1 flex-col md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",t),...n})}function C(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:(0,d.cn)("flex flex-col gap-2 p-2",t),...n})}function S(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:(0,d.cn)("no-scrollbar flex min-h-0 flex-1 flex-col gap-0 overflow-auto group-data-[collapsible=icon]:overflow-hidden",t),...n})}function w(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:(0,d.cn)("relative flex w-full min-w-0 flex-col p-2",t),...n})}function A(e){let{className:t,render:n,...a}=e;return(0,r.C)({defaultTagName:"div",props:(0,o.v6)({className:(0,d.cn)("flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:pointer-events-none group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",t)},a),render:n,state:{slot:"sidebar-group-label",sidebar:"group-label"}})}function P(e){let{className:t,...n}=e;return(0,a.jsx)("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:(0,d.cn)("flex w-full min-w-0 flex-col gap-0",t),...n})}function j(e){let{className:t,...n}=e;return(0,a.jsx)("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:(0,d.cn)("group/menu-item relative",t),...n})}let N=(0,c.F)("peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate",{variants:{variant:{default:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"h-12 text-sm group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}});function I(e){let{render:t,isActive:n=!1,variant:i="default",size:s="default",tooltip:l,className:c,...u}=e,{isMobile:h,state:p}=f(),g=(0,r.C)({defaultTagName:"button",props:(0,o.v6)({className:(0,d.cn)(N({variant:i,size:s}),c)},u),render:l?(0,a.jsx)(m.k$,{render:t}):t,state:{slot:"sidebar-menu-button",sidebar:"menu-button",size:s,active:n}});return l?("string"==typeof l&&(l={children:l}),(0,a.jsx)(m.Bc,{delay:0,children:(0,a.jsxs)(m.m_,{children:[g,(0,a.jsx)(m.ZI,{side:"right",align:"center",hidden:"collapsed"!==p||h,...l})]})})):g}function R(e){let{className:t,...n}=e;return(0,a.jsx)("ul",{"data-slot":"sidebar-menu-sub","data-sidebar":"menu-sub",className:(0,d.cn)("border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden",t),...n})}function T(e){let{className:t,...n}=e;return(0,a.jsx)("li",{"data-slot":"sidebar-menu-sub-item","data-sidebar":"menu-sub-item",className:(0,d.cn)("group/menu-sub-item relative",t),...n})}function M(e){let{render:t,size:n="md",isActive:a=!1,className:i,...s}=e;return(0,r.C)({defaultTagName:"a",props:(0,o.v6)({className:(0,d.cn)("flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 text-sidebar-foreground ring-sidebar-ring outline-hidden group-data-[collapsible=icon]:hidden hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[size=md]:text-sm data-[size=sm]:text-xs data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground",i)},s),render:t,state:{slot:"sidebar-menu-sub-button",sidebar:"menu-sub-button",size:n,active:a}})}n.d(t,{Bx:()=>b,Cn:()=>w,Cp:()=>M,FX:()=>j,Fg:()=>T,GB:()=>y,Gh:()=>C,Uj:()=>I,Yv:()=>S,cL:()=>f,jM:()=>x,jj:()=>A,q9:()=>R,sF:()=>k,wZ:()=>P,x2:()=>v})}
1,27917(e,t,n){var a=n(23579),i=n(12591);function o(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"skeleton",className:(0,i.cn)("bg-muted animate-pulse rounded-md",t),...n})}n.d(t,{E:()=>o})},25920(e,t,n){var a=n(23579),i=n(58343),o=n(16753),r=n(12591);function s(e){let{className:t,size:n="default",...s}=e;return(0,a.jsx)(i.l,{"data-slot":"switch","data-size":n,className:(0,r.cn)("peer group/switch focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-3 aria-invalid:ring-3 data-disabled:cursor-not-allowed data-disabled:opacity-50 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px]",t),...s,children:(0,a.jsx)(o.p,{"data-slot":"switch-thumb",className:"bg-background dark:data-checked:bg-primary-foreground dark:data-unchecked:bg-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0"})})}n.d(t,{d:()=>s})},96084(e,t,n){var a=n(23579),i=n(24480),o=n(36055),r=n(43369),s=n(43049),l=n(86460),c=n(12591);function d(e){let{className:t,orientation:n="horizontal",...o}=e;return(0,a.jsx)(i.p,{"data-slot":"tabs","data-orientation":n,className:(0,c.cn)("group/tabs flex gap-2 data-horizontal:flex-col",t),...o})}let u=(0,l.F)("group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none",{variants:{variant:{default:"bg-muted",line:"gap-1 bg-transparent"}},defaultVariants:{variant:"default"}});function h(e){let{className:t,variant:n="default",...i}=e;return(0,a.jsx)(o.j,{"data-slot":"tabs-list","data-variant":n,className:(0,c.cn)(u({variant:n}),t),...i})}function p(e){let{className:t,...n}=e;return(0,a.jsx)(r.M,{"data-slot":"tabs-trigger",className:(0,c.cn)("text-foreground/60 hover:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4","group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent","data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground","after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100",t),...n})}function m(e){let{className:t,...n}=e;
1return(0,a.jsx)(s.R,{"data-slot":"tabs-content",className:(0,c.cn)("flex-1 text-sm outline-none",t),...n})}n.d(t,{Xi:()=>p,av:()=>m,j7:()=>h,tU:()=>d})},69502(e,t,n){var a=n(23579);n(31371);var i=n(12591);function o(e){let{className:t,...n}=e;return(0,a.jsx)("textarea",{"data-slot":"textarea",className:(0,i.cn)("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 disabled:bg-input/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 flex field-sizing-content min-h-16 w-full rounded-lg border bg-transparent px-2.5 py-2 text-base transition-colors outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 md:text-sm",t),...n})}n.d(t,{T:()=>o})},95163(e,t,n){var a=n(23579),i=n(35437),o=n(32441),r=n(96030),s=n(49923),l=n(96745),c=n(42817),d=n(85295),u=n(12591);function h(e){let{delay:t=0,...n}=e;return(0,a.jsx)(i.B,{"data-slot":"tooltip-provider",delay:t,...n})}function p(e){let{...t}=e;return(0,a.jsx)(o.s,{"data-slot":"tooltip",...t})}function m(e){let{...t}=e;return(0,a.jsx)(r.k,{"data-slot":"tooltip-trigger",...t})}function g(e){let{className:t,side:n="top",sideOffset:i=4,align:o="center",alignOffset:r=0,children:h,...p}=e;return(0,a.jsx)(s.K,{children:(0,a.jsx)(l.o,{align:o,alignOffset:r,side:n,sideOffset:i,className:"isolate z-50",children:(0,a.jsxs)(c.o,{"data-slot":"tooltip-content",className:(0,u.cn)("bg-foreground text-background data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md px-3 py-1.5 text-xs has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm",t),...p,children:[h,(0,a.jsx)(d.P,{className:"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5"})]})})})}n.d(t,{Bc:()=>h,ZI:()=>g,k$:()=>m,m_:()=>p})},93735(e,t,n){var a=n(23579),i=n(31371),o=n(8203),r=n(53693);let s=(0,i.createContext)(null);function l(e){let{children:t}=e,[n,l]=(0,i.useState)(()=>(0,r.Ri)("dir")||"ltr");return(0,i.useEffect)(()=>{document.documentElement.setAttribute("dir",n)},[n]),(0,a.jsx)(s,{value:{defaultDir:"ltr",dir:n,setDir:e=>{l(e),(0,r.TV)("dir",e,31536e3)},resetDir:()=>{l("ltr"),(0,r.zs)("dir")}},children:(0,a.jsx)(o.F,{direction:n,children:t})})}function c(){let e=(0,i.useContext)(s);if(!e)throw Error("useDirection must be used within a DirectionProvider");return e}n.d(t,{F:()=>l,j:()=>c})},62526(e,t,n){var a=n(23579),i=n(31371),o=n(53693);let r="layout_collapsible",s="layout_variant",l="inset",c="icon",d=(0,i.createContext)(null);function u(e){let{children:t}=e,[n,u]=(0,i.useState)(()=>(0,o.Ri)(r)||c),[h,p]=(0,i.useState)(()=>(0,o.Ri)(s)||l),m=e=>{u(e),(0,o.TV)(r,e,604800)},g=e=>{p(e),(0,o.TV)(s,e,604800)};return(0,a.jsx)(d,{value:{resetLayout:()=>{m(c),g(l)},defaultCollapsible:c,collapsible:n,setCollapsible:m,defaultVariant:l,variant:h,setVariant:g},children:t})}function h(){let e=(0,i.useContext)(d);if(!e)throw Error("useLayout must be used within a LayoutProvider");return e}n.d(t,{U:()=>u,g:()=>h})},61933(e,t,n){n.d(t,{Y:()=>x,S:()=>k}
1);var a=n(23579),i=n(31371),o=n(3707),r=n(55759),s=n(37177),l=n(95987),c=n(39769),d=n(79146),u=n(20637),h=n(72407),p=n(48639),m=n(88720),g=n(75257),f=n(8344),y=n(88381);function b(){let{t:e}=(0,h.Bd)(),t=(0,o.Z)(),{setTheme:n}=(0,p.D)(),{open:b,setOpen:v}=k(),{pathname:x}=(0,r.z)(),C=(0,m.k)(),S=(0,f.U)(x,e)??C.navGroups,w=i.useCallback(e=>{v(!1),e()},[v]);return(0,a.jsx)(g.Gj,{modal:!0,open:b,onOpenChange:v,children:(0,a.jsxs)(g.uB,{children:[(0,a.jsx)(g.G7,{placeholder:e("Type a command or search...")}),(0,a.jsx)(g.oI,{children:(0,a.jsxs)(y.F,{className:"h-72 pe-1",children:[(0,a.jsx)(g.xL,{children:e("No results found.")}),S.map(e=>(0,a.jsx)(g.L$,{heading:e.title,children:e.items.map((e,n)=>e.url?(0,a.jsxs)(g.h_,{value:e.title,onSelect:()=>{w(()=>t({to:e.url}))},children:[(0,a.jsx)("div",{className:"flex size-4 items-center justify-center",children:(0,a.jsx)(s.A,{className:"text-muted-foreground/80 size-2"})}),e.title]},`${e.url}-${n}`):e.items?.map((n,i)=>(0,a.jsxs)(g.h_,{value:`${e.title}-${n.url}`,onSelect:()=>{w(()=>t({to:n.url}))},children:[(0,a.jsx)("div",{className:"flex size-4 items-center justify-center",children:(0,a.jsx)(s.A,{className:"text-muted-foreground/80 size-2"})}),e.title," ",(0,a.jsx)(l.A,{})," ",n.title]},`${e.title}-${n.url}-${i}`)))},e.id||e.title)),(0,a.jsx)(g.fx,{}),(0,a.jsxs)(g.L$,{heading:"Theme",children:[(0,a.jsxs)(g.h_,{onSelect:()=>w(()=>n("light")),children:[(0,a.jsx)(c.A,{})," ",(0,a.jsx)("span",{children:e("Light")})]}),(0,a.jsxs)(g.h_,{onSelect:()=>w(()=>n("dark")),children:[(0,a.jsx)(d.A,{className:"scale-90"}),(0,a.jsx)("span",{children:e("Dark")})]}),(0,a.jsxs)(g.h_,{onSelect:()=>w(()=>n("system")),children:[(0,a.jsx)(u.A,{}),(0,a.jsx)("span",{children:e("System")})]})]})]})})]})})}let v=(0,i.createContext)(null);function x(e){let{children:t}=e,[n,o]=(0,i.useState)(!1);return(0,i.useEffect)(()=>{let e=e=>{"k"===e.key&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),o(e=>!e))};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[]),(0,a.jsxs)(v.Provider,{value:{open:n,setOpen:o},children:[t,(0,a.jsx)(b,{})]})}let k=()=>{let e=(0,i.useContext)(v);if(!e)throw Error("useSearch has to be used within SearchProvider");return e}},50067(e,t,n){var a=n(23579),i=n(31371),o=n(53693),r=n(84223);function s(e,t,n){let a=(0,o.Ri)(e);return a&&t.has(a)?a:n}function l(e,t){if("u"<typeof document)return;let n=document.body;n&&(null===t?n.removeAttribute(e):n.setAttribute(e,t))}let c={defaults:r.oi,customization:r.oi,setPreset:()=>{},setFont:()=>{},setRadius:()=>{},setScale:()=>{},setContentLayout:()=>{},resetCustomization:()=>{}},d=(0,i.createContext)(c);function u(e){let[t,n]=(0,i.useState)(()=>s(r.m1.preset,r.dX,r.oi.preset)),[c,u]=(0,i.useState)(()=>s(r.m1.font,r.XN,r.oi.font)),[h,p]=(0,i.useState)(()=>s(r.m1.radius,r.Ev,r.oi.radius)),[m,g]=(0,i.useState)(()=>s(r.m1.scale,r.oI,r.oi.scale)),[f,y]=(0,i.useState)(()=>s(r.m1.contentLayout,r.Se,r.oi.contentLayout));(0,i.useEffect)(()=>
1{l("data-theme-preset",t===r.oi.preset?null:t)},[t]),(0,i.useEffect)(()=>{l("data-theme-font",(0,r.HN)(c,t))},[c,t]),(0,i.useEffect)(()=>{l("data-theme-radius",h===r.oi.radius?null:h)},[h]),(0,i.useEffect)(()=>{l("data-theme-scale",m===r.oi.scale?null:m)},[m]),(0,i.useEffect)(()=>{l("data-theme-content-layout",f)},[f]);let b=(0,i.useCallback)(e=>{n(e),e===r.oi.preset?(0,o.zs)(r.m1.preset):(0,o.TV)(r.m1.preset,e,31536e3)},[]),v=(0,i.useCallback)(e=>{u(e),e===r.oi.font?(0,o.zs)(r.m1.font):(0,o.TV)(r.m1.font,e,31536e3)},[]),x=(0,i.useCallback)(e=>{p(e),e===r.oi.radius?(0,o.zs)(r.m1.radius):(0,o.TV)(r.m1.radius,e,31536e3)},[]),k=(0,i.useCallback)(e=>{g(e),e===r.oi.scale?(0,o.zs)(r.m1.scale):(0,o.TV)(r.m1.scale,e,31536e3)},[]),C=(0,i.useCallback)(e=>{y(e),e===r.oi.contentLayout?(0,o.zs)(r.m1.contentLayout):(0,o.TV)(r.m1.contentLayout,e,31536e3)},[]),S=(0,i.useCallback)(()=>{b(r.oi.preset),v(r.oi.font),x(r.oi.radius),k(r.oi.scale),C(r.oi.contentLayout)},[b,v,x,k,C]),w=(0,i.useMemo)(()=>({defaults:r.oi,customization:{preset:t,font:c,radius:h,scale:m,contentLayout:f},setPreset:b,setFont:v,setRadius:x,setScale:k,setContentLayout:C,resetCustomization:S}),[t,c,h,m,f,b,v,x,k,C,S]);return(0,a.jsx)(d.Provider,{value:w,children:e.children})}function h(){return(0,i.useContext)(d)}n.d(t,{A:()=>h,_:()=>u})},48639(e,t,n){var a=n(23579),i=n(31371),o=n(53693);let r="system",s=new Set(["dark","light","system"]),l=(0,i.createContext)({defaultTheme:r,resolvedTheme:"light",theme:r,setTheme:()=>null,resetTheme:()=>null});function c(){return"u"<typeof window?"light":window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function d(e,t){let n=(0,o.Ri)(e);return n&&s.has(n)?n:t}function u(e){let{children:t,defaultTheme:n=r,storageKey:s="vite-ui-theme",...u}=e,[h,p]=(0,i.useState)(()=>d(s,n)),[m,g]=(0,i.useState)(()=>{var e;return"system"===(e=d(s,n))?c():e});(0,i.useEffect)(()=>{let e=window.document.documentElement,t=window.matchMedia("(prefers-color-scheme: dark)"),n=()=>{let t="system"===h?c():h;e.classList.remove("light","dark"),e.classList.add(t),g(t)};return n(),t.addEventListener("change",n),()=>t.removeEventListener("change",n)},[h]);let f=(0,i.useCallback)(e=>{(0,o.TV)(s,e,31536e3),p(e)},[s]),y=(0,i.useCallback)(()=>{(0,o.zs)(s),p(n)},[n,s]),b=(0,i.useMemo)(()=>({defaultTheme:n,resolvedTheme:m,resetTheme:y,theme:h,setTheme:f}),[n,m,y,h,f]);return(0,a.jsx)(l,{value:b,...u,children:t})}n.d(t,{N:()=>u},{D:()=>{let e=(0,i.useContext)(l);if(!e)throw Error("useTheme must be used within a ThemeProvider");return e}})},32787(e,t,n){var a=n(82406);async function i(e){let t=e.turnstile??"";return(await a.FH.post(`/api/user/login?turnstile=${t}`,{username:e.username,password:e.password})).data}async function o(e){return(await a.FH.post("/api/user/login/2fa",e)).data}async function r(){return(await a.FH.get("/api/user/logout")).data}async function s(e,t){return(await a.FH.get("/api/reset_password",{params:{email:e,turnstile:t}})).data}async function l(){let e="u">typeof window?localStorage.getItem("aff")??"":"",t=await a.FH.get("/api/oauth/state",{params:{aff:e}});return t.data?.success?t.data.data:""}async function c(e){return(await a.FH.get("/api/oauth/wechat",{params:{code:e}})).data}async function d(e){return(await a.FH.post("/api/user/register",e,{params:{turnstile:e.turnstile??""}})).data}async function u(e,t){return(await a.FH.get("/api/verification",{params:{email:e,turnstile:t}})).data}n.d(t,{Cw:()=>c,J1:()=>s,Vd:()=>l,gA:()=>u,iD:()=>i,kz:()=>d,li:()=>o,ri:()=>r})},66970(e,t,n){function a(e){if("u">typeof window)try{window.localStorage.setItem("uid",String(e))}catch(e){console.error("Failed to save user ID:",e)}}function i(){if("u"<typeof window)return"";try{return window.localStorage.getItem("aff")??""}catch(e){return console.error("Failed to get affiliate code:",e),""}}function o(e){if("u">typeof window)try{window.localStorage.setItem("aff",e)}catch(e){console.error("Failed to save affiliate code:",e)}}n.d(t,{Es:()=>o,LC:()=>i,cq:()=>a})},50183(e,t,n){var a=n(87985),i=n(1855),o=n(76989),r=n(55936);async function s(){let e=await (0,o.PX)({p:1,size:50});if(!e.success)throw Error(e.message||"Failed to load API keys");let t=(e.data?.items??[]).find(e=>e.status===r.m7.ENABLED);if(!t)throw Error("No enabled API keys found. Create or enable one first.");let n=await (0,o.$8)(t.id);if(!n.success||!n.data?.key)throw Error(n.message||"Failed to load API key");return`sk-${n.data.key}`}function l(e){let t=(0,i.n)(e=>e.auth.user?.id);return(0,a.I)({queryKey:["chat-active-key",t],queryFn:s,enabled:e&&!!t,staleTime:3e5,gcTime:6e5})}n.d(t,{G:()=>s,f:()=>l})},96607(e,t,n){var a=n(31371),i=n(73405),o=n(10289);function r(){let{status:e}=(0,i.s)(),t=(0,a.useMemo)(()=>{let t;return(t=e?.server_address??e?.serverAddress??e?.data?.server_address??e?.data?.serverAddress)&&"string"==typeof t?t:"u">typeof window?window.location.origin:""},[e]);return{chatPresets:(0,a.useMemo)(()=>{let t=e?.Chats??e?.chats??e?.data?.Chats??e?.data?.chats??function(){if("u">typeof window)try{let e=window.localStorage.getItem("status");if(!e)return;let t=JSON.parse(e);return t?.chats??t?.Chats}catch{return}}();return(0,o.kJ)(t)},[e]),serverAddress:t}}n.d(t,{w:()=>r})},10289(e,t,n){n(55936);let a=/^https?:\/\//i;function i(e){if("u">typeof window&&"function"==typeof window.btoa)return window.btoa(e);let t="u">typeof globalThis?globalThis:void 0,n=t?.Buffer;return"function"==typeof n&&"function"==typeof n.from?n.from(e,"utf-8").toString("base64"):""}function o(e){return e.includes("{key}")||e.includes("{cherryConfig}")||e.includes("{aionuiConfig}")||e.includes("{deepchatConfig}")}function r(e){let t=e;if("string"==typeof e)try{t=JSON.parse(e)}catch{return[]}return Array.isArray(t)?t.map((e,t)=>{if(!e||"object"!=typeof e||Array.isArray(e)||1!==Object.keys(e).length)return null;let[n,i]=Object.entries(e)[0];if("string"!=typeof i||"string"!=typeof n)return null;let o=i.trim();return o?{id:String(t),name:n,url:o,type:a.test(o)?"web":o.toLowerCase().startsWith("fluent")?"fluent":"custom-protocol"}:null}).filter(e=>null!==e):[]}function s(e,t,n){return e.split(t).join(n)}function l(e){let t,{template:n,apiKey:a,serverAddress:o}=e,r=n,l=o||"",c=(t=(a||"").trim())?t.startsWith("sk-")?t:`sk-${t}`:"";return r.includes("{cherryConfig}")?s(r,"{cherryConfig}",encodeURIComponent(i(JSON.stringify({id:"new-api",baseUrl:l,apiKey:c})))):r.includes("{aionuiConfig}")?s(r,"{aionuiConfig}",encodeURIComponent(i(JSON.stringify({platform:"new-api",baseUrl:l,apiKey:c})))):r.includes("{deepchatConfig}")?s(r,"{deepchatConfig}",encodeURIComponent(i(JSON.stringify({id:"new-api",baseUrl:l,apiKey:c})))):(l&&(r=s(r,"{address}",encodeURIComponent(l))),c&&(r=s(r,"{key}",c)),r)}n.d(t,{I9:()=>o,Kf:()=>l,kJ:()=>r})},88646(e,t,n){let a=(0,n(2099).h)({sections:[{id:"overview",titleKey:"Overview",build:()=>null},{id:"models",titleKey:"Model Call Analytics",build:()=>null}
1,{id:"users",titleKey:"User Analytics",adminOnly:!0,build:()=>null}],defaultSection:"overview",basePath:"/dashboard",urlStyle:"path"}),i=a.sectionIds,o=a.defaultSection;n.d(t,{},{$F:o,qB:i})},12447(e,t,n){var a=n(23579),i=n(3707),o=n(62885),r=n(72407),s=n(12591),l=n(66304);function c(e){let{className:t,minimal:n=!1,error:c}=e,{t:d}=(0,r.Bd)(),u=(0,i.Z)(),{history:h}=(0,o.r)(),p=function(e){if("object"!=typeof e||null===e)return;let t=e.response;if("object"!=typeof t||null===t)return;let n=t.status;return"number"==typeof n?n:void 0}(c),m=429===p,g=m?d("Too many requests"):`${d("Oops! Something went wrong")} :')`,f=d(m?"Please wait a moment before trying again.":"Please try again later.");return(0,a.jsx)("div",{className:(0,s.cn)("h-svh w-full",t),children:(0,a.jsxs)("div",{className:"m-auto flex h-full w-full flex-col items-center justify-center gap-2",children:[!n&&(0,a.jsx)("h1",{className:"text-[7rem] leading-tight font-bold",children:p??500}),(0,a.jsx)("span",{className:"font-medium",children:g}),(0,a.jsxs)("p",{className:"text-muted-foreground text-center",children:[d("We apologize for the inconvenience.")," ",(0,a.jsx)("br",{})," ",f]}),!n&&(0,a.jsx)("p",{className:"text-muted-foreground text-center text-sm",children:d("If this keeps happening, please report it on GitHub Issues.")}),!n&&(0,a.jsxs)("div",{className:"mt-6 flex flex-wrap justify-center gap-4",children:[(0,a.jsx)(l.$,{variant:"outline",onClick:()=>h.go(-1),children:d("Go Back")}),(0,a.jsx)(l.$,{variant:"outline",render:(0,a.jsx)("a",{href:"https://github.com/QuantumNous/new-api/issues",target:"_blank",rel:"noopener noreferrer"}),children:d("Report an issue")}),(0,a.jsx)(l.$,{onClick:()=>u({to:"/"}),children:d("Back to Home")})]})]})})}n.d(t,{$:()=>c})},66563(e,t,n){var a=n(23579),i=n(3707),o=n(62885),r=n(72407),s=n(66304);function l(){let{t:e}=(0,r.Bd)(),t=(0,i.Z)(),{history:n}=(0,o.r)();return(0,a.jsx)("div",{className:"h-svh",children:(0,a.jsxs)("div",{className:"m-auto flex h-full w-full flex-col items-center justify-center gap-2",children:[(0,a.jsx)("h1",{className:"text-[7rem] leading-tight font-bold",children:"404"}),(0,a.jsx)("span",{className:"font-medium",children:e("Oops! Page Not Found!")}),(0,a.jsxs)("p",{className:"text-muted-foreground text-center",children:[e("It seems like the page you're looking for")," ",(0,a.jsx)("br",{}),e("does not exist or might have been removed.")]}),(0,a.jsxs)("div",{className:"mt-6 flex gap-4",children:[(0,a.jsx)(s.$,{variant:"outline",onClick:()=>n.go(-1),children:e("Go Back")}),(0,a.jsx)(s.$,{onClick:()=>t({to:"/"}),children:e("Back to Home")})]})]})})}n.d(t,{m:()=>l})},76989(e,t,n){var a=n(82406);async function i(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{p:t=1,size:n=10}=e;return(await a.FH.get(`/api/token/?p=${t}&size=${n}`)).data}async function o(e){let{keyword:t="",token:n="",p:i,size:o}=e,r=new URLSearchParams;return t&&r.set("keyword",t),n&&r.set("token",n),null!=i&&r.set("p",String(i)),null!=o&&r.set("size",String(o)),(await a.FH.get(`/api/token/search?${r.toString()}`)).data}async function r(e){return(await a.FH.get(`/api/token/${e}`)).data}async function s(e){return(await a.FH.post("/api/token/",e)).data}async function l(e){return(await a.FH.put("/api/token/",e)).data}async function c(e){return(await a.FH.delete(`/api/token/${e}/`)).data}async function d(e){return(await a.FH.post("/api/token/batch",{ids:e})).data}async function u(e,t){return(await a.FH.put("/api/token/?status_only=true",{id:e,status:t})).data}async function h(e){return(await a.FH.post(`/api/token/${e}/key`)).data}async function p(e){return(await a.FH.post("/api/token/batch/keys",{ids:e})).data}n.d(t,{$8:()=>h,CG:()=>r,Dw:()=>o,Iq:()=>s,JM:()=>u,Lh:()=>c,PX:()=>i,S0:()=>d,XW:()=>l,wD:()=>p})},55936(e,t,n){let a={ENABLED:1,DISABLED:2,EXPIRED:3,EXHAUSTED:4},i={[a.ENABLED]:{label:"Enabled",variant:"success",value:a.ENABLED},[a.DISABLED]:{label:"Disabled",variant:"neutral",value:a.DISABLED},[a.EXPIRED]:{label:"Expired",variant:"warning",value:a.EXPIRED},[a.EXHAUSTED]:{label:"Exhausted",variant:"danger",value:a.EXHAUSTED}},o=Object.values(i).map(e=>({label:e.label,value:String(e.value)}));n.d(t,{},{EG:i,F7:o,PL:{API_KEY_CREATED:"API Key created successfully",API_KEY_UPDATED:"API Key updated successfully",API_KEY_DELETED:"API Key deleted successfully",API_KEY_ENABLED:"API Key enabled successfully",API_KEY_DISABLED:"API Key disabled successfully"},UU:{UNEXPECTED:"An unexpected error occurred",LOAD_FAILED:"Failed to load API keys",SEARCH_FAILED:"Failed to search API keys",CREATE_FAILED:"Failed to create API key",UPDATE_FAILED:"Failed to update API key",DELETE_FAILED:"Failed to delete API key",BATCH_DELET
1E_FAILED:"Failed to delete API keys",STATUS_UPDATE_FAILED:"Failed to update API key status"},m7:a})},33655(e,t,n){var a=n(82406);async function i(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(await a.FH.get("/api/models/",{params:e})).data}async function o(e){return(await a.FH.get("/api/models/search",{params:e})).data}async function r(e){return(await a.FH.get(`/api/models/${e}`)).data}async function s(e){return(await a.FH.post("/api/models/",e)).data}async function l(e){return(await a.FH.put("/api/models/",e)).data}async function c(e,t){return(await a.FH.put("/api/models/?status_only=true",{id:e,status:t})).data}async function d(e){return(await a.FH.delete(`/api/models/${e}`)).data}async function u(e){return(await a.FH.get("/api/vendors/",{params:e||{page_size:1e3}})).data}async function h(e){return(await a.FH.post("/api/vendors/",e)).data}async function p(e){return(await a.FH.put("/api/vendors/",e)).data}async function m(e){return(await a.FH.post("/api/models/sync_upstream",e)).data}async function g(e){let t=new URLSearchParams;e?.locale&&t.set("locale",e.locale),e?.source&&t.set("source",e.source);let n=t.toString(),i=n?`/api/models/sync_upstream/preview?${n}`:"/api/models/sync_upstream/preview";return(await a.FH.get(i)).data}async function f(e){return m(e)}async function y(){return(await a.FH.get("/api/models/missing")).data}async function b(e){return(await a.FH.get("/api/prefill_group",{params:e?{type:e}:void 0})).data}async function v(e){return(await a.FH.post("/api/prefill_group",e)).data}async function x(e){return(await a.FH.put("/api/prefill_group",e)).data}async function k(e){return(await a.FH.delete(`/api/prefill_group/${e}`)).data}async function C(){return(await a.FH.get("/api/deployments/settings")).data}async function S(){return(await a.FH.post("/api/deployments/settings/test-connection",{},{skipErrorHandler:!0})).data}async function w(e){let t="string"==typeof e&&e.trim()?{api_key:e.trim()}:{};return(await a.FH.post("/api/deployments/settings/test-connection",t,{skipErrorHandler:!0})).data}async function A(e){return(await a.FH.get("/api/deployments/",{params:e})).data}async function P(e){return(await a.FH.get("/api/deployments/search",{params:e})).data}async function j(e){return(await a.FH.get(`/api/deployments/${e}`)).data}async function N(e){return(await a.FH.get(`/api/deployments/${e}/containers`)).data}async function I(e){return(await a.FH.delete(`/api/deployments/${e}`)).data}async function R(e,t){return(await a.FH.get(`/api/deployments/${e}/logs`,{params:t})).data}async function T(){return(await a.FH.get("/api/deployments/hardware-types")).data}async function M(e){return(await a.FH.get("/api/deployments/available-replicas",{params:e})).data}async function D(e){let t=(e.location_ids||[]).map(e=>Number(e)).filter(e=>Number.isInteger(e)&&e>0),n=Number(e.hardware_id),i=Number(e.duration_hours),o=Number(e.gpus_per_container),r=Number(e.replica_count),s="string"==typeof e.currency&&e.currency.trim()?e.currency.trim().toLowerCase():"usdc";return(await a.FH.post("/api/deployments/price-estimation",{location_ids:t,hardware_id:n,gpus_per_container:o,duration_hours:i,replica_count:r,currency:s,duration_type:"hour",duration_qty:i,hardware_qty:o})).data}async function O(e){return(await a.FH.post("/api/deployments/",e)).data}async function L(e,t){let n={...t};return null===t.traffic_port&&delete n.traffic_port,(await a.FH.put(`/api/deployments/${e}`,n)).data}async function E(e,t){return(await a.FH.put(`/api/deployments/${e}/name`,{name:t})).data}async function U(e,t){return(await a.FH.post(`/api/deployments/${e}/extend`,{duration_hours:t})).data}async function q(e){return(await a.FH.get("/api/deployments/check-name",{params:{name:e}})).data}n.d(t,{$v:()=>g,Ab:()=>E,B1:()=>R,BY:()=>C,De:()=>d,E1:()=>r,Jd:()=>M,Jn:()=>A,Kx:()=>v,Lw:()=>x,MG:()=>U,Q5:()=>l,RT:()=>f,VJ:()=>L,Vq:()=>k,YQ:()=>u,Yy:()=>O,Z7:()=>q,ZZ:()=>m,_d:()=>p,c9:()=>D,cN:()=>T,ck:()=>S,i8:()=>j,j6:()=>o,kQ:()=>s,ng:()=>y,r8:()=>P,rP:()=>w,rd:()=>I,sC:()=>N,vo:()=>c,xI:()=>b,zC:()=>h,zr:()=>i})},32714(e,t,n){let a=(0,n(2099).h)({sections:[{id:"metadata",titleKey:"Metadata",build:()=>null},{id:"deployments",titleKey:"Deployments",build:()=>null}],defaultSection:"metadata",basePath:"/models",urlStyle:"path"}),i=a.sectionIds,o=a.defaultSection;a.getSectionNavItems,n.d(t,{},{Fi:o,ev:i})},16684(e,t,n){let a=[{key:"p",field:"inputPrice",tierField:"input_unit_cost",label:"Input price",shortLabel:"Input",side:"input",isBase:!0},{key:"c",field:"outputPrice",tierField:"output_unit_cost",label:"Completion price",shortLabel:"Output",side:"output",isBase:!0},{key:"len",field:null,tierField:null,label:"Input length",shortLabel:"Length",side:"condition",isConditionOnly:!0},{key:"cr",field:"cacheReadPrice",tierField:"cache_read_unit_cost",label:"Cache read price",shortLabel:"Cache Read",side:"input",group:"cache"},{key:"cc",field:"cacheCreatePrice",tierField:"cache_create_unit_cost",label:"Cache create price",shortLabel:"Cache Write",side:"input",group:"cache"},{key:"cc1h",field:"cacheCreate1hPrice",tierField:"cache_create_1h_unit_cost",label:"Cache create (1h) price",shortLabel:"Cache Write (1h)",side:"input",group:"cache"},{key:"img",field:"imagePrice",tierField:"image_unit_cost",label:"Image input price",shortLabel:"Image In",side:"input",group:"media"},{key:"img_o",field:"imageOutputPrice",tierField:"image_output_unit_cost",label:"Image output price",shortLabel:"Image Out",side:"output",group:"media"},{key:"ai",field:"audioInputPrice",tierField:"audio_input_unit_cost",label:"Audio input price",shortLabel:"Audio In",side:"input",group:"media"},{key:"ao",field:"audioOutputPrice",tierField:"audio_output_unit_cost",label:"Audio output price",shortLabel:"Audio Out",side:"output",group:"media"}],i=a.filter(e=>!e.isConditionOnly);a.filter(e=>e.isBase||e.isConditionOnly).map(e=>e.key);let o=Object.fromEntries(i.map(e=>[e.key,e.field])),r=a.filter(e=>!e.isBase&&!e.isConditionOnly),s=r.map(e=>({field:e.tierField,exprVar:e.key})),l=RegExp(`\\b(${i.map(e=>e.key).join("|")})\\s*\\*\\s*([\\d.eE+-]+)`,"g"),c="time",d="contains",u="exists",h="range",p=["hour","minute","weekday","month","day"],m=/^-?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?$/;function g(e){if(!e)return[];try{let t,{body:n}=function(e){if(!e)return{version:1,body:""};let t=e.match(/^v(\d+):([\s\S]*)$/);return t?{version:Number(t[1]),body:t[2]}:{version:1,body:e}}
1(e),a=RegExp('(?:((?:(?:p|c|len)\\s*(?:<|<=|>|>=)\\s*[\\d.eE+]+)(?:\\s*&&\\s*(?:p|c|len)\\s*(?:<|<=|>|>=)\\s*[\\d.eE+]+)*)\\s*\\?\\s*)?tier\\("([^"]*)",\\s*([^)]+)\\)',"g"),i=[];for(;null!==(t=a.exec(n));){let e=t[1]||"",n=[];if(e)for(let t of e.split(/\s*&&\s*/)){let e=t.trim().match(/^(p|c|len)\s*(<|<=|>|>=)\s*([\d.eE+]+)$/);e&&n.push({var:e[1],op:e[2],value:Number(e[3])})}let a=function(e){let t,n={},a=RegExp(l.source,"g");for(;null!==(t=a.exec(e));)t[1]in n||(n[t[1]]=Number(t[2]));let i={};for(let[e,t]of Object.entries(o))i[t]=n[e]||0;return i}(t[3]);a.label=t[2],a.conditions=n,i.push(a)}return i}catch{return[]}}function f(e){return e?e.replace(/<[==]?|≤|<[==]?/g,"<").replace(/>[==]?|≥|>[==]?/g,">").replace(/\s+/g,"").toLowerCase():""}function y(e){let t=[],n=0,a=0;for(let i=0;i<e.length;i+=1){let o=e[i];"("===o&&(a+=1),")"===o&&(a-=1),0===a&&" * "===e.slice(i,i+3)&&(t.push(e.slice(n,i).trim()),n=i+3,i+=2)}return t.push(e.slice(n).trim()),t.filter(Boolean)}function b(e){let t=(e||"").trim();if(!t)return[];let n=y(t),a=[];for(let e of n){let t=function(e){let t=e.match(/^\((.+) \? ([\d.eE+-]+) : 1\)$/s);if(!t)return null;let n=t[1],a=t[2],i=function(e){let t=[],n=0,a=0;for(let i=0;i<e.length;i+=1){let o=e[i];"("===o&&(a+=1),")"===o&&(a-=1),0===a&&" && "===e.slice(i,i+4)&&(t.push(e.slice(n,i).trim()),n=i+4,i+=3)}return t.push(e.slice(n).trim()),t.filter(Boolean)}(n),o=[];for(let e of i){let t=function(e){let t,n=(t=e.match(/^(hour|minute|weekday|month|day)\("([^"]+)"\) >= ([\d.eE+-]+) \|\| \1\("\2"\) < ([\d.eE+-]+)$/))||(t=e.match(/^\((hour|minute|weekday|month|day)\("([^"]+)"\) >= ([\d.eE+-]+) \|\| \1\("\2"\) < ([\d.eE+-]+)\)$/))?{source:"time",timeFunc:t[1],timezone:t[2],mode:h,value:"",rangeStart:t[3],rangeEnd:t[4]}:(t=e.match(/^(hour|minute|weekday|month|day)\("([^"]+)"\) (==|>=|<) ([\d.eE+-]+)$/))?{source:"time",timeFunc:t[1],timezone:t[2],mode:({"==":"eq",">=":"gte","<":"lt"})[t[3]]||"eq",value:t[4],rangeStart:"",rangeEnd:""}:null;if(n)return n;let a=e.match(/^header\("([^"]+)"\) != ""$/);if(a)return{source:"header",path:a[1],mode:u,value:""};if(a=e.match(/^param\("([^"]+)"\) != nil$/))return{source:"param",path:a[1],mode:u,value:""};if(a=e.match(/^has\(header\("([^"]+)"\), ((?:"(?:[^"\\]|\\.)*"))\)$/))return{source:"header",path:a[1],mode:d,value:JSON.parse(a[2])};if((a=e.match(/^param\("([^"]+)"\) != nil && has\(param\("([^"]+)"\), ((?:"(?:[^"\\]|\\.)*"))\)$/))&&a[1]===a[2])return{source:"param",path:a[1],mode:d,value:JSON.parse(a[3])};if((a=e.match(/^param\("([^"]+)"\) != nil && param\("([^"]+)"\) (>|>=|<|<=) ([\d.eE+-]+)$/))&&a[1]===a[2])return{source:"param",path:a[1],mode:({">":"gt",">=":"gte","<":"lt","<=":"lte"})[a[3]],value:a[4]};if(a=e.match(/^(param|header)\("([^"]+)"\) == (.+)$/)){let e=function(e){let t=e.trim();if("true"===t||"false"===t||m.test(t))return t;try{return JSON.parse(t)}catch{return null}}(a[3]);return null===e?null:{source:a[1],path:a[2],mode:"eq",value:String(e)}}return null}(e.trim());if(!t)return null;o.push(t)}return 0===o.length?null:{conditions:o,multiplier:a}}(e);if(!t)return null;a.push(t)}return a}function v(e){let t=(e||"").trim();if(!t)return{billingExpr:"",requestRuleExpr:""};let n=y(t);if(n.length<=1)return{billingExpr:t,requestRuleExpr:""};let a=[],i=[];return(n.forEach(e=>{let t=b(e);t&&t.length>0?a.push(e):i.push(e)}),0===a.length||1!==i.length)?{billingExpr:t,requestRuleExpr:""}:{billingExpr:function(e){let t=(e||"").trim();for(;function(e){if(!e.startsWith("(")||!e.endsWith(")"))return!1;let t=0;for(let n=0;n<e.length;n+=1)if("("===e[n]&&(t+=1),")"===e[n]&&(t-=1),0===t&&n<e.length-1)return!1;return 0===t}(t);)t=t.slice(1,-1).trim();return t}(i[0]),requestRuleExpr:a.join(" * ")}}function x(e,t){let n=(e||"").trim(),a=(t||"").trim();return n?a?`(${n}) * ${a}`:n:""}function k(){return{source:"param",path:"",mode:"eq",value:""}}function C(){return{source:"time",timeFunc:"hour",timezone:"Asia/Shanghai",mode:"gte",value:"",rangeStart:"",rangeEnd:""}}function S(){return{conditions:[k()],multiplier:""}}function w(e){if(e===c)return[{value:"eq",labelKey:"Equals"},{value:"gte",labelKey:"Greater than or equal"},{value:"lt",labelKey:"Less than"},{value:h,labelKey:"Overnight range"}];let t=[{value:"eq",labelKey:"Equals"},{value:d,labelKey:"Contains"},{value:u,labelKey:"Exists"}];return"header"===e?t:[...t,{value:"gt",labelKey:"Greater than"},{value:"gte",labelKey:"Greater than or equal"},{value:"lt",labelKey:"Less than"},{value:"lte",labelKey:"Less than or equal"}]}function A(e){let t=e?.source==="time"?"time":e?.source==="header"?"header":"param";if("time"===t){var n;let t="string"==typeof(n=e?.timeFunc)&&p.includes(n)?e.timeFunc:"hour",a=w(c).some(t=>t.value===e?.mode)?e?.mode:"gte";return{source:"time",timeFunc:t,timezone:e?.timezone||"Asia/Shanghai",mode:a,value:e?.value==null?"":String(e.value),rangeStart:e?.rangeStart==null?"":String(e.rangeStart),rangeEnd:e?.rangeEnd==null?"":String(e.rangeEnd)}}let a=w(t).some(t=>t.value===e?.mode)?e?.mode:"eq";return{source:t,path:e?.path||"",mode:a,value:e?.value==null?"":String(e.value)}}function P(e,t){let n=String(t||"").trim();return e===d?JSON.stringify(n):"true"===n||"false"===n||m.test(n)?n:JSON.stringify(n)}function j(e){if("time"===e.source)return function(e){let t=A(e),{timeFunc:n,timezone:a,mode:i}=t,o=JSON.stringify(a),r=`${n}(${o})`;if(i===h){let e=t.rangeStart.trim(),n=t.rangeEnd.trim();return m.test(e)&&m.test(n)?`${r} >= ${e} || ${r} < ${n}`:""}let s=t.value.trim();return m.test(s)?`${r} ${({eq:"==",gte:">=",lt:"<"})[i]||"=="} ${s}`:""}(e);let t=A(e),n=t.path.trim();if(!n)return"";let a="header"===t.source?`header(${JSON.stringify(n)})`:`param(${JSON.stringify(n)})`;switch(t.mode){case u:return"header"===t.source?`${a} != ""`:`${a} != nil`;case d:return"header"===t.source?`has(${a}, ${P(t.mode,t.value)})`:`${a} != nil && has(${a}, ${P(t.mode,t.value)})`;case"gt":case"gte":case"lt":case"lte":{let e=String(t.value).trim();if(!m.test(e))return"";return`${a} != nil && ${a} ${({gt:">",gte:">
1=",lt:"<",lte:"<="})[t.mode]} ${e}`}default:return`${a} == ${P(t.mode,t.value)}`}}function N(e){let t=(e.multiplier||"").trim();if(!m.test(t))return"";let n=(e.conditions||[]).map(j).filter(Boolean);if(0===n.length)return"";let a=1===n.length?n[0]:n.map(e=>e.includes(" || ")?`(${e})`:e).join(" && ");return`(${a} ? ${t} : 1)`}function I(e){return(e||[]).map(N).filter(Boolean).join(" * ")}n.d(t,{Fy:()=>I,LU:()=>S,TS:()=>b,U8:()=>v,ZT:()=>w,f_:()=>k,oK:()=>g,qC:()=>C,wM:()=>f,yl:()=>x},{E2:s,I2:d,NT:[{value:"Asia/Shanghai",label:"UTC+8 Shanghai (Asia/Shanghai)"},{value:"UTC",label:"UTC"},{value:"America/New_York",label:"UTC-5 New York (America/New_York)"},{value:"America/Los_Angeles",label:"UTC-8 Los Angeles (America/Los_Angeles)"},{value:"America/Chicago",label:"UTC-6 Chicago (America/Chicago)"},{value:"Europe/London",label:"UTC+0 London (Europe/London)"},{value:"Europe/Berlin",label:"UTC+1 Berlin (Europe/Berlin)"},{value:"Asia/Tokyo",label:"UTC+9 Tokyo (Asia/Tokyo)"},{value:"Asia/Singapore",label:"UTC+8 Singapore (Asia/Singapore)"},{value:"Asia/Seoul",label:"UTC+9 Seoul (Asia/Seoul)"},{value:"Australia/Sydney",label:"UTC+10 Sydney (Australia/Sydney)"}],mq:i,s5:r,yG:p})},64294(e,t,n){let a={ENABLED:1,DISABLED:2,USED:3},i=Object.values(a).map(e=>String(e)),o={[a.ENABLED]:{labelKey:"Unused",variant:"success",value:a.ENABLED},[a.DISABLED]:{labelKey:"Disabled",variant:"neutral",value:a.DISABLED},[a.USED]:{labelKey:"Used",variant:"neutral",value:a.USED}},r="expired";function s(e){return[...Object.values(o).map(t=>({label:e(t.labelKey),value:String(t.value)})),{label:e("Expired"),value:r}]}let l={NAME_MIN_LENGTH:1,NAME_MAX_LENGTH:20,COUNT_MIN:1,COUNT_MAX:100};function c(e){return{NAME_LENGTH_INVALID:e("Name must be between {{min}} and {{max}} characters",{min:l.NAME_MIN_LENGTH,max:l.NAME_MAX_LENGTH}),COUNT_INVALID:e("Count must be between {{min}} and {{max}}",{min:l.COUNT_MIN,max:l.COUNT_MAX}),EXPIRED_TIME_INVALID:e("Expired time cannot be earlier than current time")}}n.d(t,{Wv:()=>c,gg:()=>s},{Dq:a,Ox:i,PL:{REDEMPTION_CREATED:"Redemption code(s) created successfully",REDEMPTION_UPDATED:"Redemption code updated successfully",REDEMPTION_DELETED:"Redemption code deleted successfully",REDEMPTION_ENABLED:"Redemption code enabled successfully",REDEMPTION_DISABLED:"Redemption code disabled successfully",COPY_SUCCESS:"Copied to clipboard"},Z0:r,oG:l,pz:o})},94730(e,t,n){var a=n(82406);async function i(){return(await a.FH.get("/api/setup",{params:{t:Date.now()}})).data}async function o(e){return(await a.FH.post("/api/setup",e)).data}function r(e,t){let{usageMode:n,...a}=e,i={SelfUseModeEnabled:"self"===n,DemoSiteEnabled:"demo"===n};return t?i:{...a,...i}}n.d(t,{OF:()=>o,YA:()=>i,s_:()=>r})},55830(e,t,n){var a=n(82406);async function i(){return(await a.FH.get("/api/option/")).data}async function o(e){return(await a.FH.put("/api/option/",e)).data}async function r(){return(await a.FH.post("/api/option/payment_compliance",{confirmed:!0})).data}async function s(e){return(await a.FH.delete("/api/log/",{params:{target_timestamp:e}})).data}async function l(){return(await a.FH.post("/api/option/rest_model_ratio")).data}async function c(){return(await a.FH.get("/api/ratio_sync/channels")).data}async function d(e){return(await a.FH.post("/api/ratio_sync/fetch",e)).data}n.d(t,{AQ:()=>s,P1:()=>l,Ss:()=>r,ck:()=>c,kw:()=>d,qE:()=>o,y:()=>i})},20176(e,t,n){n.d(t,{t0:()=>ef,aj:()=>eg,tQ:()=>eb,rT:()=>ev,xH:()=>ey});var a=n(23579),i=n(2099),o=n(31371),r=n(66586),s=n(32403),l=n(79159),c=n(72407),d=n(28082),u=n(25920),h=n(69502),p=n(54548),m=n(38390),g=n(16728),f=n(85971),y=n(90770);let b=r.Ik({PasswordLoginEnabled:r.zM(),PasswordRegisterEnabled:r.zM(),EmailVerificationEnabled:r.zM(),RegisterEnabled:r.zM(),EmailDomainRestrictionEnabled:r.zM(),EmailAliasRestrictionEnabled:r.zM(),EmailDomainWhitelist:r.Yj()});function v(e){let{defaultValues:t}=e,{t:n}=(0,c.Bd)(),i=(0,y.M)(),r=(0,o.useMemo)(()=>({...t,EmailDomainWhitelist:t.EmailDomainWhitelist.split(",").map(e=>e.trim()).filter(Boolean).join("\n")}),[t]),v=(0,s.mN)({resolver:(0,l.u)(b),defaultValues:r});(0,f.j)(v,r);let x=async e=>{let n=[];
1for(let a of(Object.entries(e).forEach(e=>{let[a,i]=e;if("EmailDomainWhitelist"===a){if("string"!=typeof i)return;let e=i.split("\n").map(e=>e.trim()).filter(Boolean).join(",");e!==t.EmailDomainWhitelist&&n.push({key:a,value:e})}else i!==t[a]&&n.push({key:a,value:i})}),n))await i.mutateAsync(a)};return(0,a.jsx)(g.X,{title:n("Basic Authentication"),children:(0,a.jsx)(d.lV,{...v,children:(0,a.jsxs)(p.yt,{onSubmit:v.handleSubmit(x),children:[(0,a.jsx)(m.S2,{onSave:v.handleSubmit(x),isSaving:i.isPending}),(0,a.jsx)(d.zB,{control:v.control,name:"PasswordLoginEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:n("Password Login")}),(0,a.jsx)(d.Rr,{children:n("Allow users to log in with password")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(d.zB,{control:v.control,name:"RegisterEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:n("Registration Enabled")}),(0,a.jsx)(d.Rr,{children:n("Allow new users to register")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(d.zB,{control:v.control,name:"PasswordRegisterEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:n("Password Registration")}),(0,a.jsx)(d.Rr,{children:n("Allow registration with password")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(d.zB,{control:v.control,name:"EmailVerificationEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:n("Email Verification")}),(0,a.jsx)(d.Rr,{children:n("Require email verification for new accounts")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(d.zB,{control:v.control,name:"EmailDomainRestrictionEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:n("Email Domain Restriction")}),(0,a.jsx)(d.Rr,{children:n("Only allow specific email domains")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(d.zB,{control:v.control,name:"EmailAliasRestrictionEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:n("Email Alias Restriction")}),(0,a.jsx)(d.Rr,{children:n("Block email aliases (e.g., [email protected])")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(d.zB,{control:v.control,name:"EmailDomainWhitelist",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:n("Email Domain Whitelist")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(h.T,{placeholder:n("example.com&#10;company.com"),rows:4,...t})}),(0,a.jsx)(d.Rr,{children:n("One domain per line (only used when domain restriction is enabled)")}),(0,a.jsx)(d.C5,{})]})}})]})})})}var x=n(40382);let k=r.Ik({TurnstileCheckEnabled:r.zM(),TurnstileSiteKey:r.Yj().optional(),TurnstileSecretKey:r.Yj().optional()});function C(e){let{defaultValues:t}=e,{t:n}=(0,c.Bd)(),i=(0,y.M)(),r=(0,s.mN)({resolver:(0,l.u)(k),defaultValues:t});(0,o.useEffect)(()=>{r.reset(t)},[t,r]);let h=async e=>{for(let[n,a]of Object.entries(e).filter(e=>{let[n,a]=e;return a!==t[n]}))await i.mutateAsync({key:n,value:a??""})};return(0,a.jsx)(g.X,{title:n("Bot Protection"),children:(0,a.jsx)(d.lV,{...r,children:(0,a.jsxs)(p.yt,{onSubmit:r.handleSubmit(h),autoComplete:"off",children:[(0,a.jsx)(m.S2,{onSave:r.handleSubmit(h),isSaving:i.isPending}),(0,a.jsx)(d.zB,{control:r.control,name:"TurnstileCheckEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:n("Enable Turnstile")}),(0,a.jsx)(d.Rr,{children:n("Protect login and registration with Cloudflare Turnstile")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(d.zB,{control:r.control,name:"TurnstileSiteKey",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:n("Site Key")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:n("Your Turnstile site key"),autoComplete:"off",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:r.control,name:"TurnstileSecretKey",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:n("Secret Key")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{type:"password",placeholder:n("Your Turnstile secret key"),autoComplete:"new-password",...t})}),(0,a.jsx)(d.C5,{})]})}})]})})})}var S=n(66304),w=n(62036),A=n(51983),P=n(97933),j=n(98309),N=n(57123),I=n(65172),R=n(36461),T=n(82406);async function M(){return(await T.FH.get("/api/custom-oauth-provider/")).data}async function D(e){return(await T.FH.post("/api/custom-oauth-provider/",e)).data}async function O(e,t){return(await T.FH.put(`/api/custom-oauth-provider/${e}`,t)).data}async function L(e){return(await T.FH.delete(`/api/custom-oauth-provider/${e}`)).data}async function E(e){return(await T.FH.post("/api/custom-oauth-provider/discovery",{well_known_url:e})).data}function U(){let e=(0,j.jE)();return{onSuccess:()=>
1{e.invalidateQueries({queryKey:["custom-oauth-providers"]}),e.invalidateQueries({queryKey:["status"]})}}}let q=r.Ik({name:r.Yj().min(1,"Name is required"),slug:r.Yj().min(1,"Slug is required").regex(/^[a-z0-9-]+$/,"Slug must only contain lowercase letters, numbers, and hyphens"),icon:r.Yj().optional().default(""),enabled:r.zM().default(!0),client_id:r.Yj().min(1,"Client ID is required"),client_secret:r.Yj().optional().default(""),authorization_endpoint:r.Yj().min(1,"Authorization endpoint is required"),token_endpoint:r.Yj().min(1,"Token endpoint is required"),user_info_endpoint:r.Yj().min(1,"User info endpoint is required"),scopes:r.Yj().optional().default(""),user_id_field:r.Yj().min(1,"User ID field is required"),username_field:r.Yj().optional().default(""),display_name_field:r.Yj().optional().default(""),email_field:r.Yj().optional().default(""),well_known:r.Yj().optional().default(""),auth_style:r.ai().int().min(0).max(2).default(0),access_policy:r.Yj().optional().default(""),access_denied_message:r.Yj().optional().default("")}),F=[{key:"github-enterprise",name:"GitHub Enterprise",icon:"github",authorization_endpoint:"/login/oauth/authorize",token_endpoint:"/login/oauth/access_token",user_info_endpoint:"/api/v3/user",scopes:"user:email",user_id_field:"id",username_field:"login",display_name_field:"name",email_field:"email",needsBaseUrl:!0},{key:"gitlab",name:"GitLab",icon:"gitlab",authorization_endpoint:"/oauth/authorize",token_endpoint:"/oauth/token",user_info_endpoint:"/api/v4/user",scopes:"openid profile email",user_id_field:"id",username_field:"username",display_name_field:"name",email_field:"email",needsBaseUrl:!0},{key:"gitea",name:"Gitea",icon:"gitea",authorization_endpoint:"/login/oauth/authorize",token_endpoint:"/login/oauth/access_token",user_info_endpoint:"/api/v1/user",scopes:"openid profile email",user_id_field:"id",username_field:"login",display_name_field:"full_name",email_field:"email",needsBaseUrl:!0},{key:"nextcloud",name:"Nextcloud",icon:"nextcloud",authorization_endpoint:"/apps/oauth2/authorize",token_endpoint:"/apps/oauth2/api/v1/token",user_info_endpoint:"/ocs/v2.php/cloud/user?format=json",scopes:"openid profile email",user_id_field:"ocs.data.id",username_field:"ocs.data.id",display_name_field:"ocs.data.displayname",email_field:"ocs.data.email",needsBaseUrl:!0},{key:"keycloak",name:"Keycloak",icon:"keycloak",authorization_endpoint:"/realms/{realm}/protocol/openid-connect/auth",token_endpoint:"/realms/{realm}/protocol/openid-connect/token",user_info_endpoint:"/realms/{realm}/protocol/openid-connect/userinfo",scopes:"openid profile email",user_id_field:"sub",username_field:"preferred_username",display_name_field:"name",email_field:"email",needsBaseUrl:!0},{key:"authentik",name:"Authentik",icon:"authentik",authorization_endpoint:"/application/o/authorize/",token_endpoint:"/application/o/token/",user_info_endpoint:"/application/o/userinfo/",scopes:"openid profile email",user_id_field:"sub",username_field:"preferred_username",display_name_field:"name",email_field:"email",needsBaseUrl:!0},{key:"ory",name:"ORY Hydra",icon:"openid",authorization_endpoint:"/oauth2/auth",token_endpoint:"/oauth2/token",user_info_endpoint:"/userinfo",scopes:"openid profile email",user_id_field:"sub",username_field:"preferred_username",display_name_field:"name",email_field:"email",needsBaseUrl:!0}],_=[{value:0,labelKey:"Auto Detect"},{value:1,labelKey:"Params (in body)"},{value:2,labelKey:"Header (Basic Auth)"}];var B=n(8273);function G(e){let{t}=(0,c.Bd)(),n=(0,N.n)({mutationFn:e=>E(e),onSuccess:e=>{e.success&&R.oR.success(I.Ay.t("OIDC endpoints discovered successfully"))},onError:e=>{R.oR.error(e.message||I.Ay.t("Failed to discover OIDC endpoints"))}}),i=async()=>{let a=e.form.getValues("well_known");if(!a)return void R.oR.error(t("Please enter a Well-Known URL first"));if(!a.startsWith("http://")&&!a.startsWith("https://"))return void R.oR.error(t("Well-Known URL must start with http:// or https://"));let i=await n.mutateAsync(a);if(i.success&&i.data?.discovery){let t=i.data.discovery;if(t.authorization_endpoint&&e.form.setValue("authorization_endpoint",t.authorization_endpoint,{shouldDirty:!0}),t.token_endpoint&&e.form.setValue("token_endpoint",t.token_endpoint,{shouldDirty:!0}),t.userinfo_endpoint&&e.form.setValue("user_info_endpoint",t.userinfo_endpoint,{shouldDirty:!0}),t.scopes_supported&&t.scopes_supported.length>0&&!e.form.getValues("scopes")){let n=t.scopes_supported.filter(e=>["openid","profile","email"].includes(e)).join(" ");n&&e.form.setValue("scopes",n,{shouldDirty:!0})}}};return(0,a.jsxs)(S.$,{type:"button",variant:"outline",size:"sm",onClick:i,disabled:n.isPending,children:[(0,a.jsx)(B.A,{className:"mr-1.5 h-3.5 w-3.5"}),n.isPending?t("Discovering..."):t("Auto-discover")]})}var z=n(41220);function K(e){let{t}=(0,c.Bd)(),[n,i]=(0,o.useState)(""),[r,s]=(0,o.useState)(""),l=(t,n)=>{let a=n.replace(/\/+$/,"");e.form.setValue("authorization_endpoint",a+t.authorization_endpoint,{shouldDirty:!0}),e.form.setValue("token_endpoint",a+t.token_endpoint,{shouldDirty:!0}),e.form.setValue("user_info_endpoint",a+t.user_info_endpoint,{shouldDirty:!0})};return(0,a.jsxs)(p.WY,{className:"space-y-3 border-dashed",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:t("Quick Setup from Preset")}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)(z.J,{children:t("Preset Template")}),(0,a.jsxs)(w.l6,{items:[...F.map(e=>({value:e.key,label:e.name}))],value:n,onValueChange:t=>{let n;return null!==t&&(i(t),void((n=F.find(e=>e.key===t))&&(e.form.setValue("name",n.name,{shouldDirty:!0}),e.form.setValue("slug",t.toLowerCase().replace(/\s+/g,"-"),{shouldDirty:!0}),e.form.setValue("icon",n.icon,{shouldDirty:!0}),e.form.setValue("scopes",n.scopes,{shouldDirty:!0}),e.form.setValue("user_id_field",n.user_id_field,{shouldDirty:!0}),e.form.setValue("username_field",n.username_field,{shouldDirty:!0}),e.form.setValue("display_name_field",n.display_name_field,{shouldDirty:!0}),e.form.setValue("email_field",n.email_field,{shouldDirty:!0}),r&&l(n,r))))},children:[(0,a.jsx)(w.bq,{className:"w-full",children:(0,a.jsx)(w.yv,{placeholder:t("Select a preset...")})}),(0,a.jsx)(w.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(w.s3,{children:F.map(e=>(0,a.jsx)(w.eb,{value:e.key,children:e.name},e.key))})})]})]}),(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)(z.J,{children:t("Base URL")}),(0,a.jsx)(x.p,{placeholder:t("https://your-server.example.com"),value:r,onChange:e=>(e=>{if(s(e),!n)return;let t=F.find(e=>e.key===n);t&&l(t,e)})(e.target.value)})]})]})]})}let W="custom-oauth-provider-form";function J(e){let t,n,{t:i}=(0,c.Bd)(),r=!!e.provider,m=(t=U(),(0,N.n)({mutationFn:e=>D(e),onSuccess:e=>{e.success&&(R.oR.success(I.Ay.t("Provider created successfully")),t.onSuccess())},onError:e=>{R.oR.error(e.message||I.Ay.t("Failed to create provider"))}})),g=(n=U(),(0,N.n)({mutationFn:e=>{let{id:t,data:n}=e;return O(t,n)},onSuccess:e=>{e.success&&(R.oR.success(I.Ay.t("Provider updated successfully")),n.onSuccess())},onError:e=>{R.oR.error(e.message||I.Ay.t("Failed to update provider"))}})),f=(0,s.mN)({resolver:(0,l.u)(q),defaultValues:{name:"",slug:"",icon:"",enabled:!0,client_id:"",client_secret:"",authorization_endpoint:"",token_endpoint:"",user_info_endpoint:"",scopes:"",user_id_field:"",username_field:"",display_name_field:"",email_field:"",well_known:"",auth_style:0,access_policy:"",access_de
1nied_message:""}});(0,o.useEffect)(()=>{e.open&&e.provider?f.reset({name:e.provider.name,slug:e.provider.slug,icon:e.provider.icon||"",enabled:e.provider.enabled,client_id:e.provider.client_id,client_secret:e.provider.client_secret||"",authorization_endpoint:e.provider.authorization_endpoint,token_endpoint:e.provider.token_endpoint,user_info_endpoint:e.provider.user_info_endpoint,scopes:e.provider.scopes||"",user_id_field:e.provider.user_id_field,username_field:e.provider.username_field||"",display_name_field:e.provider.display_name_field||"",email_field:e.provider.email_field||"",well_known:e.provider.well_known||"",auth_style:e.provider.auth_style??0,access_policy:e.provider.access_policy||"",access_denied_message:e.provider.access_denied_message||""}):e.open&&!e.provider&&f.reset({name:"",slug:"",icon:"",enabled:!0,client_id:"",client_secret:"",authorization_endpoint:"",token_endpoint:"",user_info_endpoint:"",scopes:"",user_id_field:"",username_field:"",display_name_field:"",email_field:"",well_known:"",auth_style:0,access_policy:"",access_denied_message:""})},[e.open,e.provider,f]);let y=async t=>{r&&e.provider?(await g.mutateAsync({id:e.provider.id,data:t})).success&&e.onOpenChange(!1):(await m.mutateAsync(t)).success&&e.onOpenChange(!1)},b=m.isPending||g.isPending;return(0,a.jsx)(P.l,{open:e.open,onOpenChange:e.onOpenChange,title:r?i("Edit OAuth Provider"):i("Add OAuth Provider"),description:r?i("Update the configuration for this custom OAuth provider."):i("Configure a new custom OAuth provider for user authentication."),contentClassName:"max-h-[85vh] overflow-y-auto sm:max-w-2xl",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(S.$,{type:"button",variant:"outline",onClick:()=>e.onOpenChange(!1),disabled:b,children:i("Cancel")}),(0,a.jsx)(S.$,{type:"submit",form:W,disabled:b,children:b?i("Saving..."):r?i("Update Provider"):i("Create Provider")})]}),children:(0,a.jsx)(d.lV,{...f,children:(0,a.jsxs)(p.yt,{id:W,onSubmit:f.handleSubmit(y),children:[!r&&(0,a.jsx)(K,{form:f}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:i("Basic Info")}),(0,a.jsx)(d.zB,{control:f.control,name:"enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:i("Enabled")}),(0,a.jsx)(d.Rr,{children:i("Allow users to sign in with this provider")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(d.zB,{control:f.control,name:"name",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Provider Name")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("e.g. My GitLab"),...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"slug",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Slug")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("e.g. my-gitlab"),...t})}),(0,a.jsx)(d.Rr,{children:i("Used in URLs and API routes")}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsx)(d.zB,{control:f.control,name:"icon",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Icon")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("Icon identifier (e.g. github, gitlab)"),...t})}),(0,a.jsx)(d.Rr,{children:i("Optional icon identifier for the login button")}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsx)(A.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:i("Credentials")}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(d.zB,{control:f.control,name:"client_id",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Client ID")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("OAuth Client ID"),autoComplete:"off",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"client_secret",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Client Secret")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{type:"password",placeholder:i("OAuth Client Secret"),autoComplete:"new-password",...t})}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsx)(d.zB,{control:f.control,name:"auth_style",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Auth Style")}),(0,a.jsxs)(w.l6,{items:[..._.map(e=>({value:String(e.value),label:i(e.labelKey)}))],value:String(t.value),onValueChange:e=>t.onChange(Number(e)),children:[(0,a.jsx)(d.MJ,{children:(0,a.jsx)(w.bq,{className:"w-full",children:(0,a.jsx)(w.yv,{})})}),(0,a.jsx)(w.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(w.s3,{children:_.map(e=>(0,a.jsx)(w.eb,{value:String(e.value),children:i(e.labelKey)},e.value))})})]}),(0,a.jsx)(d.Rr,{children:i("How client credentials are sent to the token endpoint")}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsx)(A.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:i("Endpoints")}),(0,a.jsx)(G,{form:f})]}),(0,a.jsx)(d.zB,{control:f.control,name:"well_known",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Well-Known URL")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("https://provider.com/.well-known/openid-configuration"),...t})}),(0,a.jsx)(d.Rr,{children:i('OIDC discovery URL. Click "Auto-discover" to fetch endpoints automatically.')}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"authorization_endpoint",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Authorization Endpoint")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:"https://provider.com/oauth/authorize",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"token_endpoint",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Token Endpoint")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:"https://provider.com/oauth/token",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"user_info_endpoint",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("User Info Endpoint")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:"https://provider.com/api/user",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"scopes",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Scopes")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("e.g. openid profile email"),...t})}),(0,a.jsx)(d.Rr,{children:i("Space-separated OAuth scopes")}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsx)(A.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:i("Field Mapping")}),(0,a.jsx)(d.Rr,{children:i("Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).")}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(d.zB,{control:f.control,name:"user_id_field",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("User ID Field")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:"id",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"username_field",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Username Field")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:"login",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"display_name_field",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Display Name Field")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:"name",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"email_field",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Email Field")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:"email",...t})}),(0,a.jsx)(d.C5,{})]})}})]})]}),(0,a.jsx)(A.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:i("Advanced")}),(0,a.jsx)(d.zB,{control:f.control,name:"access_policy",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Access Policy (JSON)")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(h.T,{placeholder:i("Optional JSON policy to restrict access based on user info fields"),className:"min-h-[80px] font-mono text-xs",...t})}),(0,a.jsx)(d.Rr,{children:i("JSON-based access control rules. Leave empty to allow all users.")}),(0,a.jsx)(d.C5,{})]})}}
1),(0,a.jsx)(d.zB,{control:f.control,name:"access_denied_message",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Access Denied Message")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("Custom message shown when access is denied"),...t})}),(0,a.jsx)(d.C5,{})]})}})]})]})})})}var V=n(85501),H=n(29422),$=n(57224),Q=n(2388),Y=n(68448),X=n(68165);function Z(e){let t,{t:n}=(0,c.Bd)(),i=(t=U(),(0,N.n)({mutationFn:e=>L(e),onSuccess:e=>{e.success&&(R.oR.success(I.Ay.t("Provider deleted successfully")),t.onSuccess())},onError:e=>{R.oR.error(e.message||I.Ay.t("Failed to delete provider"))}})),[r,s]=(0,o.useState)(null),l=async()=>{r&&(await i.mutateAsync(r.id),s(null))};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:n("Manage custom OAuth providers for user authentication")}),(0,a.jsxs)(S.$,{size:"sm",onClick:e.onCreate,children:[(0,a.jsx)(V.A,{className:"mr-1.5 h-4 w-4"}),n("Add Provider")]})]}),(0,a.jsx)(Y.hm,{data:e.providers,getRowKey:e=>e.id,emptyClassName:"text-sm",emptyContent:n("No custom OAuth providers configured yet."),columns:[{id:"icon",header:n("Icon"),cell:e=>e.icon?(0,a.jsx)("span",{className:"text-lg",children:e.icon}):(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:"--"})},{id:"name",header:n("Name"),cellClassName:"font-medium",cell:e=>e.name},{id:"slug",header:n("Slug"),cell:e=>(0,a.jsx)(X.Wh,{label:e.slug,variant:"neutral",copyable:!1})},{id:"status",header:n("Status"),cell:e=>(0,a.jsx)(X.Wh,{label:e.enabled?n("Enabled"):n("Disabled"),variant:e.enabled?"success":"neutral",copyable:!1})},{id:"client-id",header:n("Client ID"),cellClassName:"text-muted-foreground max-w-[120px] truncate font-mono",cell:e=>e.client_id},{id:"actions",header:n("Actions"),className:"text-right",cellClassName:"text-right",cell:t=>(0,a.jsxs)("div",{className:"flex justify-end gap-1",children:[(0,a.jsx)(S.$,{variant:"ghost",size:"sm",onClick:()=>e.onEdit(t),children:(0,a.jsx)(H.A,{className:"h-4 w-4"})}),(0,a.jsx)(S.$,{variant:"ghost",size:"sm",onClick:()=>s(t),children:(0,a.jsx)($.A,{className:"text-destructive h-4 w-4"})})]})}]}),(0,a.jsx)(Q.T,{open:!!r,onOpenChange:e=>!e&&s(null),title:n("Delete Provider"),desc:n('Are you sure you want to delete "{{name}}"? Users who authenticated with this provider will no longer be able to log in.',{name:r?.name||""}),confirmText:n("Delete"),destructive:!0,handleConfirm:l,isLoading:i.isPending})]})}var ee=n(87985);function et(){let{t:e}=(0,c.Bd)(),{data:t=[],isLoading:n}=(0,ee.I)({queryKey:["custom-oauth-providers"],queryFn:async()=>(await M()).data??[]}),[i,r]=(0,o.useState)(!1),[s,l]=(0,o.useState)(null);return n?(0,a.jsx)(g.X,{title:e("Custom OAuth Providers"),children:(0,a.jsx)("div",{className:"text-muted-foreground py-8 text-center text-sm",children:e("Loading...")})}):(0,a.jsxs)(g.X,{title:e("Custom OAuth Providers"),children:[(0,a.jsx)(Z,{providers:t,onEdit:e=>{l(e),r(!0)},onCreate:()=>{l(null),r(!0)}}),(0,a.jsx)(J,{open:i,onOpenChange:e=>{r(e),e||l(null)},provider:s})]})}var en=n(81927),ea=n(96084),ei=n(51028),eo=n(75684);let er=r.Ik({GitHubOAuthEnabled:r.zM(),GitHubClientId:r.Yj(),GitHubClientSecret:r.Yj(),discord:r.Ik({enabled:r.zM(),client_id:r.Yj(),client_secret:r.Yj()}),oidc:r.Ik({enabled:r.zM(),client_id:r.Yj(),client_secret:r.Yj(),well_known:r.Yj(),authorization_endpoint:r.Yj(),token_endpoint:r.Yj(),user_info_endpoint:r.Yj()}),TelegramOAuthEnabled:r.zM(),TelegramBotToken:r.Yj(),TelegramBotName:r.Yj(),LinuxDOOAuthEnabled:r.zM(),LinuxDOClientId:r.Yj(),LinuxDOClientSecret:r.Yj(),LinuxDOMinimumTrustLevel:r.Yj(),WeChatAuthEnabled:r.zM(),WeChatServerAddress:r.Yj(),WeChatServerToken:r.Yj(),WeChatAccountQRCodeImageURL:r.Yj()}),es="grid min-w-0 gap-x-5 gap-y-6 lg:grid-cols-2 [&>[data-slot=form-item]]:min-w-0 lg:[&>[data-slot=form-item]:has([data-slot=switch])]:col-span-2",el=e=>({GitHubOAuthEnabled:e.GitHubOAuthEnabled,GitHubClientId:e.GitHubClientId??"",GitHubClientSecret:e.GitHubClientSecret??"",discord:{enabled:e["discord.enabled"],client_id:e["discord.client_id"]??"",client_secret:e["discord.client_secret"]??""},oidc:{enabled:e["oidc.enabled"],client_id:e["oidc.client_id"]??"",client_secret:e["oidc.client_secret"]??"",well_known:e["oidc.well_known"]??"",authorization_endpoint:e["oidc.authorization_endpoint"]??"",token_endpoint:e["oidc.token_endpoint"]??"",user_info_endpoint:e["oidc.user_info_endpoint"]??""},TelegramOAuthEnabled:e.TelegramOAuthEnabled,TelegramBotToken:e.TelegramBotToken??"",TelegramBotName:e.TelegramBotName??"",LinuxDOOAuthEnabled:e.LinuxDOOAuthEnabled,LinuxDOClientId:e.LinuxDOClientId??"",LinuxDOClientSecret:e.LinuxDOClientSecret??"",LinuxDOMinimumTrustLevel:e.LinuxDOMinimumTrustLevel??"",WeChatAuthEnabled:e.WeChatAuthEnabled,WeChatServerAddress:e.WeChatServerAddress??"",WeChatServerToken:e.WeChatServerToken??"",WeChatAccountQRCodeImageURL:e.WeChatAccountQRCodeImageURL??""});function ec(e){let{t}=(0,c.Bd)(),n=(0,y.M)(),[i,r]=(0,o.useState)("github"),h=(0,o.useMemo)(()=>el(e.defaultValues),[e.defaultValues]),f=(0,s.mN)({resolver:(0,l.u)(er),defaultValues:h}),b=(0,o.useRef)(e.defaultValues),v=(0,o.useRef)(JSON.stringify(e.defaultValues));(0,o.useEffect)(()=>{let t=JSON.stringify(e.defaultValues);t!==v.current&&(b.current=e.defaultValues,v.current=t,f.reset(el(e.defaultValues)))},[e.defaultValues,f]);let k=async e=>{let a,i=e;if(e.oidc.well_known&&""!==e.oidc.well_known.trim()){let n=e.oidc.well_known.trim();if(!n.startsWith("http://")&&!n.startsWith("https://"))return void R.oR.error(t("Well-Known URL must start with http:// or https://"));try{let a=await en.A.create().get(n),o=a.data.authorization_endpoint||"",r=a.data.token_endpoint||"",s=a.data.userinfo_endpoint||"";i={...e,oidc:{...e.oidc,authorization_endpoint:o,token_endpoint:r,user_info_endpoint:s}},f.setValue("oidc.authorization_endpoint",o),f.setValue("oidc.token_endpoint",r),f.setValue("oidc.user_info_endpoint",s),R.oR.success(t("OIDC configuration fetched successfully"))}catch(e){console.error(e),R.oR.error(t("Failed to fetch OIDC configuration. Please check the URL and network status"));return}}let o={GitHubOAuthEnabled:(a=i).GitHubOAuthEnabled,GitHubClientId:a.GitHubClientId,GitHubClientSecret:a.GitHubClientSecret,"discord.enabled":a.discord.enabled,"discord.client_id":a.discord.client_id,"discord.client_secret":a.discord.client_secret,"oidc.enabled":a.oidc.enabled,"oidc.client_id":a.oidc.
1client_id,"oidc.client_secret":a.oidc.client_secret,"oidc.well_known":a.oidc.well_known,"oidc.authorization_endpoint":a.oidc.authorization_endpoint,"oidc.token_endpoint":a.oidc.token_endpoint,"oidc.user_info_endpoint":a.oidc.user_info_endpoint,TelegramOAuthEnabled:a.TelegramOAuthEnabled,TelegramBotToken:a.TelegramBotToken,TelegramBotName:a.TelegramBotName,LinuxDOOAuthEnabled:a.LinuxDOOAuthEnabled,LinuxDOClientId:a.LinuxDOClientId,LinuxDOClientSecret:a.LinuxDOClientSecret,LinuxDOMinimumTrustLevel:a.LinuxDOMinimumTrustLevel,WeChatAuthEnabled:a.WeChatAuthEnabled,WeChatServerAddress:a.WeChatServerAddress,WeChatServerToken:a.WeChatServerToken,WeChatAccountQRCodeImageURL:a.WeChatAccountQRCodeImageURL},r=Object.keys(o).filter(e=>o[e]!==b.current[e]);if(0===r.length)return void R.oR.info(t("No changes to save"));for(let e of r)await n.mutateAsync({key:e,value:o[e]});b.current=o,v.current=JSON.stringify(o),f.reset(el(o))};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eo.s,{when:f.formState.isDirty}),(0,a.jsx)(g.X,{title:t
1("OAuth Integrations"),children:(0,a.jsx)(d.lV,{...f,children:(0,a.jsxs)(p.yt,{onSubmit:f.handleSubmit(k),children:[(0,a.jsx)(m.S2,{onSave:f.handleSubmit(k),onReset:()=>{f.reset(el(b.current)),R.oR.success(t("Form reset to saved values"))},isSaving:n.isPending,isResetDisabled:!f.formState.isDirty}),(0,a.jsx)(ei._,{isDirty:f.formState.isDirty}),(0,a.jsxs)(ea.tU,{value:i,onValueChange:r,children:[(0,a.jsxs)(ea.j7,{className:"grid w-full grid-cols-6",children:[(0,a.jsx)(ea.Xi,{value:"github",children:t("GitHub")}),(0,a.jsx)(ea.Xi,{value:"discord",children:t("Discord")}),(0,a.jsx)(ea.Xi,{value:"oidc",children:t("OIDC")}),(0,a.jsx)(ea.Xi,{value:"telegram",children:t("Telegram")}),(0,a.jsx)(ea.Xi,{value:"linuxdo",children:t("LinuxDO")}),(0,a.jsx)(ea.Xi,{value:"wechat",children:t("WeChat")})]}),(0,a.jsxs)(ea.av,{value:"github",className:es,children:[(0,a.jsx)(d.zB,{control:f.control,name:"GitHubOAuthEnabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Enable GitHub OAuth")}),(0,a.jsx)(d.Rr,{children:t("Allow users to sign in with GitHub")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"GitHubClientId",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client ID")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:t("Your GitHub OAuth Client ID"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"GitHubClientSecret",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client Secret")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{type:"password",placeholder:t("Your GitHub OAuth Client Secret"),autoComplete:"new-password",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsxs)(ea.av,{value:"discord",className:es,children:[(0,a.jsx)(d.zB,{control:f.control,name:"discord.enabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Enable Discord OAuth")}),(0,a.jsx)(d.Rr,{children:t("Allow users to sign in with Discord")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"discord.client_id",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client ID")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:t("Your Discord OAuth Client ID"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"discord.client_secret",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client Secret")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{type:"password",placeholder:t("Your Discord OAuth Client Secret"),autoComplete:"new-password",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsxs)(ea.av,{value:"oidc",className:es,children:[(0,a.jsx)(d.zB,{control:f.control,name:"oidc.enabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Enable OIDC")}),(0,a.jsx)(d.Rr,{children:t("Allow users to sign in with OpenID Connect")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"oidc.client_id",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client ID")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:t("OIDC Client ID"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"oidc.client_secret",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client Secret")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{type:"password",placeholder:t("OIDC Client Secret"),autoComplete:"new-password",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"oidc.well_known",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Well-Known URL")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:t("https://provider.com/.well-known/openid-configuration"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.Rr,{children:t("Auto-discovers endpoints from the provider")}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"oidc.authorization_endpoint",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Authorization Endpoint (Optional)")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:t("Override auto-discovered endpoint"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"oidc.token_endpoint",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Token Endpoint (Optional)")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:t("Override auto-discovered endpoint"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"oidc.user_info_endpoint",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("User Info Endpoint (Optional)")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:t("Override auto-discovered endpoint"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsxs)(ea.av,{value:"telegram",className:es,children:[(0,a.jsx)(d.zB,{control:f.control,name:"TelegramOAuthEnabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Enable Telegram OAuth")}),(0,a.jsx)(d.Rr,{children:t("Allow users to sign in with Telegram")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"TelegramBotToken",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Bot Token")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{type:"password",placeholder:t("Your Telegram Bot Token"),autoComplete:"new-password",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"TelegramBotName",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Bot Name")}
1),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:t("Your Bot Name"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsxs)(ea.av,{value:"linuxdo",className:es,children:[(0,a.jsx)(d.zB,{control:f.control,name:"LinuxDOOAuthEnabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Enable LinuxDO OAuth")}),(0,a.jsx)(d.Rr,{children:t("Allow users to sign in with LinuxDO")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"LinuxDOClientId",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client ID")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:t("LinuxDO Client ID"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"LinuxDOClientSecret",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client Secret")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{type:"password",placeholder:t("LinuxDO Client Secret"),autoComplete:"new-password",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"LinuxDOMinimumTrustLevel",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Minimum Trust Level")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:"0",autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.Rr,{children:t("Minimum LinuxDO trust level required")}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsxs)(ea.av,{value:"wechat",className:es,children:[(0,a.jsx)(d.zB,{control:f.control,name:"WeChatAuthEnabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Enable WeChat Auth")}),(0,a.jsx)(d.Rr,{children:t("Allow users to sign in with WeChat")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"WeChatServerAddress",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Server Address")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:t("https://wechat-server.example.com"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"WeChatServerToken",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Server Token")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{type:"password",placeholder:t("Server Token"),autoComplete:"new-password",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:f.control,name:"WeChatAccountQRCodeImageURL",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("QR Code Image URL")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:t("https://example.com/qr-code.png"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}})]})]})]})})})]})}let ed=r.Ik({passkey:r.Ik({enabled:r.zM(),rp_display_name:r.Yj(),rp_id:r.Yj(),origins:r.Yj(),allow_insecure_origin:r.zM(),user_verification:r.k5(["required","preferred","discouraged"]),attachment_preference:r.k5(["none","platform","cross-platform"])})}),eu=e=>{let t;return{passkey:{enabled:e["passkey.enabled"],rp_display_name:e["passkey.rp_display_name"]??"",rp_id:e["passkey.rp_id"]??"",origins:(e["passkey.origins"]??"").split(",").map(e=>e.trim()).filter(Boolean).join("\n"),allow_insecure_origin:e["passkey.allow_insecure_origin"],user_verification:e["passkey.user_verification"],attachment_preference:""===(t=e["passkey.attachment_preference"])?"none":t}}};function eh(e){let{t}=(0,c.Bd)(),n=(0,y.M)(),i=(0,o.useMemo)(()=>eu(e.defaultValues),[e.defaultValues]),r=(0,s.mN)({resolver:(0,l.u)(ed),defaultValues:i}),f=(0,o.useRef)(e.defaultValues),b=(0,o.useRef)(JSON.stringify(e.defaultValues));(0,o.useEffect)(()=>{let t=JSON.stringify(e.defaultValues);t!==b.current&&(f.current=e.defaultValues,b.current=t,r.reset(eu(e.defaultValues)))},[e.defaultValues,r]);let v=async e=>{let a,i={"passkey.enabled":e.passkey.enabled,"passkey.rp_display_name":e.passkey.rp_display_name,"passkey.rp_id":e.passkey.rp_id,"passkey.origins":e.passkey.origins.split("\n").map(e=>
1e.trim()).filter(Boolean).join(","),"passkey.allow_insecure_origin":e.passkey.allow_insecure_origin,"passkey.user_verification":e.passkey.user_verification,"passkey.attachment_preference":"none"===(a=e.passkey.attachment_preference)?"":a},o=Object.keys(i).filter(e=>i[e]!==f.current[e]);if(0===o.length)return void R.oR.info(t("No changes to save"));for(let e of o)await n.mutateAsync({key:e,value:i[e]});f.current=i,b.current=JSON.stringify(i),r.reset(eu(i))};return(0,a.jsx)(g.X,{title:t("Passkey Authentication"),children:(0,a.jsx)(d.lV,{...r,children:(0,a.jsxs)(p.yt,{onSubmit:r.handleSubmit(v),children:[(0,a.jsx)(m.S2,{onSave:r.handleSubmit(v),isSaving:n.isPending}),(0,a.jsx)(d.zB,{control:r.control,name:"passkey.enabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Enable Passkey")}),(0,a.jsx)(d.Rr,{children:t("Allow users to register and sign in with Passkey (WebAuthn)")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:r.control,name:"passkey.rp_display_name",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Relying Party Display Name")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:t("e.g. New API Console"),value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.Rr,{children:t("Human-readable name shown to users during Passkey prompts.")}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:r.control,name:"passkey.rp_id",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Relying Party ID")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(x.p,{placeholder:t("e.g. example.com"),value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.Rr,{children:t("The effective domain for Passkey registration. Must match the current domain or be its parent domain.")}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:r.control,name:"passkey.user_verification",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("User Verification")}),(0,a.jsx)(d.MJ,{children:(0,a.jsxs)(w.l6,{items:[{value:"required",label:t("Required")},{value:"preferred",label:t("Recommended")},{value:"discouraged",label:t("Discouraged")}],value:n.value,onValueChange:n.onChange,children:[(0,a.jsx)(w.bq,{children:(0,a.jsx)(w.yv,{placeholder:t("Select requirement")})}),(0,a.jsx)(w.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(w.s3,{children:[(0,a.jsx)(w.eb,{value:"required",children:t("Required")}),(0,a.jsx)(w.eb,{value:"preferred",children:t("Recommended")}),(0,a.jsx)(w.eb,{value:"discouraged",children:t("Discouraged")})]})})]})}),(0,a.jsx)(d.Rr,{children:t("Controls whether user verification (biometrics/PIN) is required during Passkey flows.")}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:r.control,name:"passkey.attachment_preference",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Device Type Preference")}),(0,a.jsx)(d.MJ,{children:(0,a.jsxs)(w.l6,{items:[{value:"none",label:t("Unlimited")},{value:"platform",label:t("Built-in Device")},{value:"cross-platform",label:t("External Device")}],value:n.value,onValueChange:n.onChange,children:[(0,a.jsx)(w.bq,{children:(0,a.jsx)(w.yv,{placeholder:t("No preference")})}),(0,a.jsx)(w.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(w.s3,{children:[(0,a.jsx)(w.eb,{value:"none",children:t("Unlimited")}),(0,a.jsx)(w.eb,{value:"platform",children:t("Built-in Device")}),(0,a.jsx)(w.eb,{value:"cross-platform",children:t("External Device")})]})})]})}),(0,a.jsx)(d.Rr,{children:t("Built-in: phone fingerprint/face, or Windows Hello; External: USB security key")}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:r.control,name:"passkey.allow_insecure_origin",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Allow Insecure Origins")}),(0,a.jsx)(d.Rr,{children:t("Permit Passkey registration on non-HTTPS origins (only recommended for development)")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:r.control,name:"passkey.origins",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Allowed Origins")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(h.T,{rows:4,placeholder:t("https://example.com"),value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.Rr,{children:t("List of origins (one per line) allowed for Passkey registration and authentication.")}),(0,a.jsx)(d.C5,{})]})}})]})})})}let ep=[{id:"basic-auth",titleKey:"Basic Authentication",build:e=>(0,a.jsx)(v,{defaultValues:{PasswordLoginEnabled:e.PasswordLoginEnabled,PasswordRegisterEnabled:e.PasswordRegisterEnabled,EmailVerificationEnabled:e.EmailVerificationEnabled,RegisterEnabled:e.RegisterEnabled,EmailDomainRestrictionEnabled:e.EmailDomainRestrictionEnabled,EmailAliasRestrictionEnabled:e.EmailAliasRestrictionEnabled,EmailDomainWhitelist:e.EmailDomainWhitelist}})},{id:"oauth",titleKey:"OAuth Integrations",build:e=>(0,a.jsx)(ec,{defaultValues:{GitHubOAuthEnabled:e.GitHubOAuthEnabled,GitHubClientId:e.GitHubClientId,GitHubClientSecret:e.GitHubClientSecret,"discord.enabled":e["discord.enabled"],"discord.client_id":e["discord.client_id"],"discord.client_secret":e["discord.client_secret"],"oidc.enabled":e["oidc.enabled"],"oidc.client_id":e["oidc.client_id"],"oidc.client_secret":e["oidc.client_secret"],"oidc.well_known":e["oidc.well_known"],"oidc.authorization_endpoint":e["oidc.authorization_endpoint"],"oidc.token_endpoint":e["oidc.token_endpoint"],"oidc.user_info_endpoint":e["oidc.user_info_endpoint"],TelegramOAuthEnabled:e.TelegramOAuthEnabled,TelegramBotToken:e.TelegramBotToken,TelegramBotName:e.TelegramBotName,LinuxDOOAuthEnabled:e.LinuxDOOAuthEnabled,LinuxDOClientId:e.LinuxDOClientId,LinuxDOClientSecret:e.LinuxDOClientSecret,LinuxDOMinimumTrustLevel:e.LinuxDOMinimumTrustLevel,WeChatAuthEnabled:e.WeChatAuthEnabled,WeChatServerAddress:e.WeChatServerAddress,WeChatServerToken:e.WeChatServerToken,WeChatAccountQRCodeImageURL:e.WeChatAccountQRCodeImageURL}})}
1,{id:"passkey",titleKey:"Passkey Authentication",build:e=>(0,a.jsx)(eh,{defaultValues:{"passkey.enabled":e["passkey.enabled"],"passkey.rp_display_name":e["passkey.rp_display_name"],"passkey.rp_id":e["passkey.rp_id"],"passkey.origins":e["passkey.origins"],"passkey.allow_insecure_origin":e["passkey.allow_insecure_origin"],"passkey.user_verification":e["passkey.user_verification"],"passkey.attachment_preference":e["passkey.attachment_preference"]}})},{id:"bot-protection",titleKey:"Bot Protection",build:e=>(0,a.jsx)(C,{defaultValues:{TurnstileCheckEnabled:e.TurnstileCheckEnabled,TurnstileSiteKey:e.TurnstileSiteKey,TurnstileSecretKey:e.TurnstileSecretKey}})},{id:"custom-oauth",titleKey:"Custom OAuth",build:()=>(0,a.jsx)(et,{})}],em=(0,i.h)({sections:ep,defaultSection:"basic-auth",basePath:"/system-settings/auth",urlStyle:"path"}),eg=em.sectionIds,ef=em.defaultSection,ey=em.getSectionNavItems,eb=em.getSectionContent,ev=em.getSectionMeta},92625(e,t,n){n.d(t,{Is:()=>nV,dK:()=>nJ,qB:()=>n$,gv:()=>nQ,Eu:()=>nH});var a=n(23579),i=n(54679),o=n(66586),r=n(12220),s=n(32403),l=n(79159),c=n(72407),d=n(36461),u=n(28082),h=n(40382),p=n(25920),m=n(54548),g=n(38390),f=n(16728),y=n(90770);let b=o.Ik({enabled:o.zM(),minQuota:r.ai().int().min(0),maxQuota:r.ai().int().min(0)});function v(e){let{defaultValues:t}=e,{t:n}=(0,c.Bd)(),i=(0,y.M)(),o=(0,s.mN)({resolver:(0,l.u)(b),defaultValues:{enabled:t.enabled,minQuota:t.minQuota,maxQuota:t.maxQuota}}),{isDirty:r,isSubmitting:v}=o.formState,x=o.watch("enabled");async function k(e){let a=[];if(e.enabled!==t.enabled&&a.push({key:"checkin_setting.enabled",value:String(e.enabled)}),e.minQuota!==t.minQuota&&a.push({key:"checkin_setting.min_quota",value:String(e.minQuota)}),e.maxQuota!==t.maxQuota&&a.push({key:"checkin_setting.max_quota",value:String(e.maxQuota)}),0===a.length)return void d.oR.info(n("No changes to save"));for(let e of a)await i.mutateAsync(e);o.reset(e)}return(0,a.jsx)(f.X,{title:n("Check-in Settings"),children:(0,a.jsx)(u.lV,{...o,children:(0,a.jsxs)(m.yt,{onSubmit:o.handleSubmit(k),autoComplete:"off",children:[(0,a.jsx)(g.S2,{onSave:o.handleSubmit(k),isSaving:i.isPending||v,isSaveDisabled:!r,saveLabel:"Save check-in settings"}),(0,a.jsx)(u.zB,{control:o.control,name:"enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:n("Enable check-in feature")}),(0,a.jsx)(u.Rr,{children:n("Allow users to check in daily for random quota rewards")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange,disabled:i.isPending||v})})]})}}),x&&(0,a.jsxs)("div",{className:"grid gap-6 sm:grid-cols-2",children:[(0,a.jsx)(u.zB,{control:o.control,name:"minQuota",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:n("Minimum check-in quota")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",min:0,placeholder:n("1000"),...t})}),(0,a.jsx)(u.Rr,{children:n("Minimum quota amount awarded for check-in")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:o.control,name:"maxQuota",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:n("Maximum check-in quota")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",min:0,placeholder:n("10000"),...t})}),(0,a.jsx)(u.Rr,{children:n("Maximum quota amount awarded for check-in")}),(0,a.jsx)(u.C5,{})]})}})]})]})})})}var x=n(86947),k=n(89131),C=n(62036),S=n(51028),w=n(75684),A=n(37453),P=n(7906);function j(e){let{defaultValues:t}=e,{t:n}=(0,c.Bd)(),i=(0,y.M)(),s=o.Ik({QuotaPerUnit:r.ai().min(0,n("Value must be at least 0")),USDExchangeRate:r.ai().min(1e-4,n("Exchange rate must be greater than 0")),DisplayInCurrencyEnabled:o.zM(),DisplayTokenStatEnabled:o.zM(),general_setting:o.Ik({quota_display_type:o.k5(["USD","CNY","TOKENS","CUSTOM"]),custom_currency_symbol:o.Yj().max(8).optional(),custom_currency_exchange_rate:r.ai().min(1e-4,n("Exchange rate must be greater than 0")).optional()})}).superRefine((e,t)=>{"CUSTOM"===e.general_setting.quota_display_type&&(e.general_setting.custom_currency_symbol?.trim()||t.addIssue({code:x.eq.custom,path:["general_setting","custom_currency_symbol"],message:n("Custom currency symbol is required")}),null==e.general_setting.custom_currency_exchange_rate&&t.addIssue({code:x.eq.custom,path:["general_setting","custom_currency_exchange_rate"],message:n("Exchange rate is required")}))}),{form:d,handleSubmit:b,handleReset:v,isDirty:j,isSubmitting:N}=(0,A.T)({resolver:(0,l.u)(s),defaultValues:t,onSubmit:async(e,t)=>{for(let[e,n]of Object.entries(t)){if(null==n||"object"==typeof n)continue;let t=n;"boolean"==typeof n?t=String(n):"number"==typeof n&&(t=Number.isFinite(n)?String(n):"0"),await i.mutateAsync({key:e,value:t})}}}),I=d.watch("general_setting.quota_display_type")??"USD",R=d.watch("DisplayInCurrencyEnabled"),T="TOKENS"===I,M="TOKENS"===I||t.QuotaPerUnit!==k.tV.quotaPerUnit;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(w.s,{when:j}),(0,a.jsx)(f.X,{title:n("Pricing & Display"),children:(0,a.jsx)(u.lV,{...d,children:(0,a.jsxs)(m.yt,{onSubmit:b,children:[(0,a.jsx)(g.S2,{onSave:b,onReset:v,isSaving:i.isPending||N,isResetDisabled:!j}),(0,a.jsx)(S._,{isDirty:j}),M&&(0,a.jsx)(u.zB,{control:d.control,name:"QuotaPerUnit",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:n("Quota Per Unit")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",value:t.value,disabled:!0,name:t.name,onBlur:t.onBlur,ref:t.ref})}),(0,a.jsx)(u.Rr,{children:n("Number of tokens per unit quota")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:d.control,name:"general_setting.quota_display_type",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:n("Display Mode")}),(0,a.jsxs)(C.l6,{items:[{value:"USD",label:n("USD")},{value:"CNY",label:n("CNY")},{value:"CUSTOM",label:n("Custom Currency")},{value:"TOKENS",label:n("Tokens Only")}],value:t.value,onValueChange:t.onChange,children:[(0,a.jsx)(u.MJ,{children:(0,a.jsx)(C.bq,{children:(0,a.jsx)(C.yv,{placeholder:n("Select display mode")})})}),(0,a.jsx)(C.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(C.s3,{children:[(0,a.jsx)(C.eb,{value:"USD",children:n("USD")}),(0,a.jsx)(C.eb,{value:"CNY",children:n("CNY")}),(0,a.jsx)(C.eb,{value:"CUSTOM",children:n("Custom Currency")}),T&&(0,a.jsx)(C.eb,{value:"TOKENS",children:n("Tokens Only")})]})})]}),(0,a.jsx)(u.Rr,{children:n("Choose how quota values are shown to users")}),(0,a.jsx)(u.C5,{})]})}}),"TOKENS"!==I&&(0,a.jsx)(u.zB,{control:d.control,name:"USDExchangeRate",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:"CNY"===I?n("CNY per USD"):n("USD Exchange Rate")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",...(0,P.X)(t)})}),(0,a.jsx)(u.Rr,{children:n("Real exchange rate between USD and your payment gateway currency")}),(0,a.jsx)(u.C5,{})]})}}),"CUSTOM"===I&&(0,a.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,a.jsx)(u.zB,{control:d.control,name:"general_setting.custom_currency_symbol",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:n("Custom Currency Symbol")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"text",value:t.value??"",onChange:t.onChange,name:t.name,onBlur:t.onBlur,ref:t.ref,maxLength:8,placeholder:n("e.g. ¥ or HK$")})}),(0,a.jsx)(u.Rr,{children:n("Prefix used when displaying prices")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:d.control,name:"general_setting.custom_currency_exchange_rate",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:n("Units per USD")}
1),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",value:t.value??"",onChange:e=>t.onChange(""===e.target.value?void 0:e.target.valueAsNumber),name:t.name,onBlur:t.onBlur,ref:t.ref,placeholder:n("e.g. 8 means 1 USD = 8 units")})}),(0,a.jsx)(u.Rr,{children:n("Conversion rate from USD to your custom currency")}),(0,a.jsx)(u.C5,{})]})}})]}),!1===R&&(0,a.jsx)(u.zB,{control:d.control,name:"DisplayInCurrencyEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:n("Display in Currency")}),(0,a.jsx)(u.Rr,{children:"TOKENS"===I?n("Tokens-only mode will show raw quota values regardless of this toggle."):n("Show prices in currency instead of quota.")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(u.zB,{control:d.control,name:"DisplayTokenStatEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:n("Display Token Statistics")}),(0,a.jsx)(u.Rr,{children:n("Show token usage statistics in the UI")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})})})]})}var N=n(64792);let I=o.Ik({QuotaForNewUser:r.ai().min(0),PreConsumedQuota:r.ai().min(0),QuotaForInviter:r.ai().min(0),QuotaForInvitee:r.ai().min(0),TopUpLink:o.Yj(),general_setting:o.Ik({docs_link:o.Yj()}),quota_setting:o.Ik({enable_free_model_pre_consume:o.zM()})});function R(e){let{defaultValues:t,complianceConfirmed:n=!0}=e,{t:i}=(0,c.Bd)(),o=(0,y.M)(),r=e=>t=>{e(""===t.target.value?"":t.currentTarget.valueAsNumber)},{form:s,handleSubmit:d,isDirty:b,isSubmitting:v}=(0,A.T)({resolver:(0,l.u)(I),defaultValues:t,onSubmit:async(e,t)=>{for(let[e,n]of Object.entries(t))await o.mutateAsync({key:e,value:n})}});return(0,a.jsxs)(f.X,{title:i("Quota Settings"),children:[(0,a.jsx)(w.s,{when:b}),n?null:(0,a.jsx)(N.Fc,{variant:"destructive",children:(0,a.jsx)(N.TN,{children:i("Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.")})}),(0,a.jsx)(u.lV,{...s,children:(0,a.jsxs)(m.yt,{onSubmit:d,children:[(0,a.jsx)(g.S2,{onSave:d,isSaving:o.isPending||v}),(0,a.jsx)(S._,{isDirty:b}),(0,a.jsxs)(m.K1,{children:[(0,a.jsx)(u.zB,{control:s.control,name:"QuotaForNewUser",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:i("New User Quota")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",value:t.value??"",onChange:r(t.onChange),name:t.name,onBlur:t.onBlur,ref:t.ref})}),(0,a.jsx)(u.Rr,{children:i("Initial quota given to new users")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:s.control,name:"PreConsumedQuota",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:i("Pre-Consumed Quota")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",value:t.value??"",onChange:r(t.onChange),name:t.name,onBlur:t.onBlur,ref:t.ref})}),(0,a.jsx)(u.Rr,{children:i("Quota consumed before charging users")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:s.control,name:"QuotaForInviter",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:i("Inviter Reward")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",value:t.value??"",onChange:r(t.onChange),name:t.name,onBlur:t.onBlur,ref:t.ref})}),(0,a.jsx)(u.Rr,{children:i("Quota given to users who invite others")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:s.control,name:"QuotaForInvitee",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:i("Invitee Reward")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",value:t.value??"",onChange:r(t.onChange),name:t.name,onBlur:t.onBlur,ref:t.ref})}),(0,a.jsx)(u.Rr,{children:i("Quota given to invited users")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(m.vF,{span:"full",children:(0,a.jsx)(u.zB,{control:s.control,name:"quota_setting.enable_free_model_pre_consume",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:i("Pre-Consume for Free Models")}),(0,a.jsx)(u.Rr,{children:i("When enabled, zero-cost models also pre-consume quota before final settlement.")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange,disabled:o.isPending})})]})}})}),(0,a.jsx)(u.zB,{control:s.control,name:"TopUpLink",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:i("Top-Up Link")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:i("https://example.com/topup"),...t})}
1),(0,a.jsx)(u.Rr,{children:i("External link for users to purchase quota")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:s.control,name:"general_setting.docs_link",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:i("Documentation Link")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:i("https://docs.example.com"),...t})}),(0,a.jsx)(u.Rr,{children:i("Link to your documentation site")}),(0,a.jsx)(u.C5,{})]})}})]})]})})]})}var T=n(31371),M=n(98309),D=n(57123),O=n(11987),L=n(61402),E=n(97372),U=n(12591),q=n(66304),F=n(51983),_=n(69502),B=n(31759),G=n(4403),z=n(41220);function K(e){let{open:t,onOpenChange:n,title:i,description:o,items:r=[],checklist:s=[],requiredText:l="",requiredTextParts:d=[],inputPrompt:u,inputPlaceholder:p,mismatchHint:m,confirmText:g,cancelText:f,destructive:y=!0,isLoading:b=!1,onConfirm:v,className:x}=e,{t:k}=(0,c.Bd)(),[C,S]=(0,T.useState)([]),[w,A]=(0,T.useState)(""),[P,j]=(0,T.useState)([]),N=(0,T.useMemo)(()=>{let e=0;return d.map(t=>{if("input"===t.type){let n={...t,inputIndex:e};return e+=1,n}return t})},[d]),I=(0,T.useMemo)(()=>N.filter(e=>"input"===e.type).length,[N]),R=I>0,M=R?N.map(e=>e.text).join(""):l;(0,T.useEffect)(()=>{t&&(S(Array(s.length).fill(!1)),A(""),j(Array(I).fill("")))},[t,s.length,I]);let D=(0,T.useMemo)(()=>0===s.length||C.length===s.length&&C.every(e=>e),[C,s.length]),O=(0,T.useMemo)(()=>R?N.every(e=>"static"===e.type||P[e.inputIndex??0]?.trim()===e.text.trim()):!l||w.trim()===l.trim(),[R,N,l,w,P]),L=R?P.some(e=>""!==e.trim()):w.length>0,E=D&&O&&!b;return(0,a.jsx)(B.Lt,{open:t,onOpenChange:n,children:(0,a.jsxs)(B.EO,{className:(0,U.cn)("flex max-h-[min(88dvh,760px)] w-[calc(100vw-1.5rem)] !max-w-[44rem] grid-rows-none flex-col gap-0 overflow-hidden !p-0 sm:w-[min(44rem,calc(100vw-3rem))]",x),children:[(0,a.jsxs)(B.wd,{className:"shrink-0 px-4 pt-4 pb-3 text-left sm:px-6 sm:pt-6",children:[(0,a.jsx)(B.r7,{children:i}),o?(0,a.jsx)(B.$v,{render:(0,a.jsx)("div",{}),className:"mt-1 text-left leading-5",children:o}):null]}),(0,a.jsxs)("div",{className:"min-h-0 flex-1 space-y-4 overflow-y-auto px-4 pb-4 sm:px-6",children:[r.length>0?(0,a.jsx)("ol",{className:"border-border/70 bg-muted/30 text-foreground list-decimal space-y-2 rounded-lg border px-4 py-3 pl-8 text-sm leading-6 sm:px-5 sm:py-4 sm:pl-9",children:r.map(e=>(0,a.jsx)("li",{children:e},e))}):null,s.length>0?(0,a.jsx)("div",{className:"border-border/70 bg-muted/30 space-y-3 rounded-lg border p-3 sm:p-4",children:s.map((e,t)=>{let n=`risk-acknowledgement-${t}`;return(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)(G.S,{id:n,checked:C[t]??!1,onCheckedChange:e=>{var n;return n=!0===e,void S(e=>{let a=[...e];return a[t]=n,a})},className:"mt-0.5"}),(0,a.jsx)(z.J,{htmlFor:n,className:"text-muted-foreground text-sm leading-5 font-normal",children:e})]},e)})}):null,M?(0,a.jsxs)("div",{className:"border-destructive/30 bg-destructive/5 space-y-3 rounded-lg border p-3 sm:p-4",children:[(0,a.jsx)(z.J,{className:"text-sm font-medium",children:u??k("Please type the following text to confirm:")}),(0,a.jsx)("div",{className:"bg-background border-border rounded-md border px-3 py-2 font-mono text-sm break-all",children:M}),R?(0,a.jsx)("div",{className:"flex flex-wrap items-center gap-2",children:N.map((e,n)=>"static"===e.type?(0,a.jsx)("span",{className:"text-muted-foreground bg-background/70 border-border rounded-md border px-2 py-1.5 font-mono text-sm select-none",children:e.text},`static-${n}`):(0,a.jsx)(h.p,{value:P[e.inputIndex??0]??"",onChange:t=>{var n,a;return n=e.inputIndex??0,a=t.target.value,void j(e=>{let t=[...e];return t[n]=a,t})},placeholder:e.placeholder??e.text??p??k("Type the confirmation text here"),autoFocus:t&&0===e.inputIndex,onCopy:e=>e.preventDefault(),onCut:e=>e.preventDefault(),onPaste:e=>e.preventDefault(),onDrop:e=>e.preventDefault(),"aria-invalid":L&&!O,className:"w-full font-mono sm:w-64"},`input-${n}`))}):(0,a.jsx)(h.p,{value:w,onChange:e=>A(e.target.value),placeholder:p??k("Type the confirmation text here"),autoFocus:t,onCopy:e=>e.preventDefault(),onCut:e=>e.preventDefault(),onPaste:e=>e.preventDefault(),onDrop:e=>e.preventDefault(),"aria-invalid":L&&!O}),L&&!O?(0,a.jsx)("p",{className:"text-destructive text-xs",children:m??k("The entered text does not match the required text.")}):null]}):null]}),(0,a.jsxs)(B.ck,{className:"mx-0 mb-0 shrink-0 rounded-b-xl border-t p-3 sm:p-4",children:[(0,a.jsx)(B.Zr,{disabled:b,children:f??k("Cancel")}),(0,a.jsx)(q.$,{variant:y?"destructive":"default",disabled:!E,onClick:v,children:g??k("Confirm")})]})]})})}var W=n(55830),J=n(85501),V=n(29422),H=n(57224),$=n(68448),Q=n(68165),Y=n(7458),X=n(47682),Z=n(97933);let ee="amount-discount-form";function et(e){let{open:t,onOpenChange:n,onSave:i,editData:r}=e,{t:d}
1=(0,c.Bd)(),p=!!r,m=o.Ik({amount:o.ai().positive(d("Amount must be greater than 0")).int(d("Amount must be a whole number")),discountRate:o.ai().positive(d("Discount rate must be greater than 0")).max(1,d("Discount rate must be ≤ 1"))}),g=(0,s.mN)({resolver:(0,l.u)(m),defaultValues:{amount:0,discountRate:1}}),f=g.watch("discountRate"),y=(0,T.useMemo)(()=>!f||f>=1?0:Math.round((1-f)*100),[f]);return(0,T.useEffect)(()=>{r?g.reset(r):g.reset({amount:0,discountRate:1})},[r,g,t]),(0,a.jsx)(Z.l,{open:t,onOpenChange:n,title:p?d("Edit discount tier"):d("Add discount tier"),description:d("Set a discount rate for a specific recharge amount threshold."),contentClassName:"sm:max-w-[500px]",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(q.$,{type:"button",variant:"outline",onClick:()=>n(!1),children:d("Cancel")}),(0,a.jsx)(q.$,{type:"submit",form:ee,children:p?d("Update"):d("Add")})]}),children:(0,a.jsx)(u.lV,{...g,children:(0,a.jsxs)("form",{id:ee,onSubmit:g.handleSubmit(e=>{i({amount:e.amount,discountRate:e.discountRate}),g.reset(),n(!1)}),className:"space-y-4",children:[(0,a.jsx)(u.zB,{control:g.control,name:"amount",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:d("Recharge Amount (USD)")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"1",min:"1",placeholder:d("e.g., 100"),...t,onChange:e=>t.onChange(parseInt(e.target.value)||0),disabled:p})}),(0,a.jsx)(u.Rr,{children:p?d("Amount cannot be changed when editing."):d("Minimum recharge amount to qualify for this discount.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:g.control,name:"discountRate",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:d("Discount Rate")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",min:"0.01",max:"1",placeholder:d("e.g., 0.95"),...t,onChange:e=>t.onChange(parseFloat(e.target.value)||0)})}),(0,a.jsxs)(u.Rr,{children:[d("Final price multiplier (0.95 = 5% discount"),y>0&&(0,a.jsxs)("span",{className:"ml-1 font-medium text-green-600 dark:text-green-400",children:["= ",y,d("% off")]}),")"]}),(0,a.jsx)(u.C5,{})]})}})]})})})}function en(e){let{value:t,onChange:n}=e,{t:i}=(0,c.Bd)(),[o,r]=(0,T.useState)(!1),[s,l]=(0,T.useState)(null),d=(0,T.useMemo)(()=>Object.entries((0,Y.Cz)(t,{fallback:{},validator:X.LK,validatorMessage:"Amount discount must be a JSON object",context:"amount discounts"})).map(e=>{let[t,n]=e;return{amount:parseInt(t,10),discountRate:"number"==typeof n?n:parseFloat(String(n))}}).filter(e=>!isNaN(e.amount)&&!isNaN(e.discountRate)).sort((e,t)=>e.amount-t.amount),[t]),u=e=>{let a=(0,Y.Cz)(t,{fallback:{},validator:X.LK,silent:!0});delete a[e.toString()],n(JSON.stringify(a,null,2))},h=e=>{l(e),r(!0)},p=e=>{if(e>=1)return"0%";let t=Math.round((1-e)*100);return`${t}%`};return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:i("Configure discount rates based on recharge amounts")}),(0,a.jsxs)(q.$,{type:"button",onClick:e=>{e.preventDefault(),e.stopPropagation(),l(null),r(!0)},size:"sm",className:"w-full sm:w-auto",children:[(0,a.jsx)(J.A,{className:"h-4 w-4 sm:mr-2"}),(0,a.jsx)("span",{className:"sm:inline",children:i("Add discount tier")})]})]}),0===d.length?(0,a.jsx)("div",{className:"text-muted-foreground rounded-lg border border-dashed p-6 text-center text-sm",children:i('No discount tiers configured. Click "Add discount tier" to get started.')}):(0,a.jsxs)("div",{className:"rounded-md border",children:[(0,a.jsx)($.hm,{className:"hidden rounded-none border-0 sm:block",data:d,getRowKey:e=>e.amount,columns:[{id:"amount",header:i("Recharge Amount"),cell:e=>(0,a.jsxs)("span",{className:"font-mono text-sm",children:["$",e.amount]})},{id:"discount-rate",header:i("Discount Rate"),cell:e=>(0,a.jsx)("code",{className:"bg-muted rounded px-1.5 py-0.5 text-sm",children:e.discountRate.toFixed(2)})},{id:"discount",header:i("Discount"),cell:e=>(0,a.jsxs)(Q.Wh,{variant:e.discountRate<1?"info":"neutral",className:"font-mono",copyable:!1,children:[p(e.discountRate)," ",i("off")]})},{id:"actions",header:i("Actions"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),h(e)},children:(0,a.jsx)(V.A,{className:"h-4 w-4"})}),(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),u(e.amount)},children:(0,a.jsx)(H.A,{className:"h-4 w-4"})})]})}]}),(0,a.jsx)("div",{className:"divide-y sm:hidden",children:d.map(e=>(0,a.jsxs)("div",{className:"p-4",children:[(0,a.jsxs)("div",{className:"mb-3 flex items-start justify-between",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsxs)("div",{className:"mb-2 font-mono text-base font-medium",children:["$",e.amount]}),(0,a.jsxs)(Q.Wh,{variant:e.discountRate<1?"info":"neutral",className:"font-mono",copyable:!1,children:[p(e.discountRate)," ",i("off")]})]}),(0,a.jsxs)("div",{className:"flex gap-1",children:[(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),h(e)},children:(0,a.jsx)(V.A,{className:"h-4 w-4"})}),(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),u(e.amount)},children:(0,a.jsx)(H.A,{className:"h-4 w-4"})})]})]}),(0,a.jsxs)("div",{className:"text-sm",children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[i("Discount Rate:")," "]}),(0,a.jsx)("code",{className:"bg-muted rounded px-1.5 py-0.5 text-xs",children:e.discountRate.toFixed(2)})]})]},e.amount))})]}),(0,a.jsx)(et,{open:o,onOpenChange:r,onSave:e=>{let a=(0,Y.Cz)(t,{fallback:{},validator:X.LK,silent:!0});s&&s.amount!==e.amount&&delete a[s.amount.toString()],a[e.amount.toString()]=e.discountRate,n(JSON.stringify(a,null,2))},editData:s})]})}var ea=n(6631);function ei(e){let{value:t,onChange:n}=e,{t:i}=(0,c.Bd)(),[o,r]=(0,T.useState)(""),s=(0,T.useMemo)(()=>(0,Y.Cz)(t,{fallback:[],validator:X.cy,validatorMessage:i("Amount options must be a JSON array"),context:"amount options"}).filter(e=>"number"==typeof e||!isNaN(Number(e))).map(Number).sort((e,t)=>
1e-t),[t,i]),l=()=>{let e=parseFloat(o);if(!isNaN(e)&&!(e<=0))try{let t=[...s,e].filter((e,t,n)=>n.indexOf(e)===t).sort((e,t)=>e-t);n(JSON.stringify(t,null,2)),r("")}catch(e){console.error("Failed to add amount:",e)}};return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-muted-foreground mb-3 text-sm",children:i("Preset recharge amounts displayed to users")}),0===s.length?(0,a.jsx)("div",{className:"text-muted-foreground rounded-lg border border-dashed p-6 text-center text-sm",children:i("No amount options configured. Add amounts below to get started.")}):(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:s.map(e=>(0,a.jsxs)(Q.Wh,{variant:"neutral",className:"text-base",copyable:!1,children:[(0,a.jsxs)("span",{className:"font-mono",children:["$",e]}),(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"icon-sm",onClick:t=>{t.preventDefault(),t.stopPropagation();try{let t=s.filter(t=>t!==e);n(JSON.stringify(t,null,2))}catch(e){console.error("Failed to remove amount:",e)}},className:"hover:bg-muted-foreground/20 size-auto p-0.5","aria-label":i("Remove ${{amount}}",{amount:e}),children:(0,a.jsx)(ea.A,{className:"h-3.5 w-3.5"})})]},e))})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-end",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)(z.J,{htmlFor:"new-amount",className:"mb-2 block",children:i("Add new amount")}),(0,a.jsx)(h.p,{id:"new-amount",type:"number",step:"0.01",min:"0",placeholder:i("e.g., 100"),value:o,onChange:e=>r(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),l())}})]}),(0,a.jsxs)(q.$,{type:"button",onClick:e=>{e.preventDefault(),e.stopPropagation(),l()},disabled:!o||0>=parseFloat(o),className:"w-full sm:w-auto",children:[(0,a.jsx)(J.A,{className:"h-4 w-4 sm:mr-2"}),(0,a.jsx)("span",{className:"sm:inline",children:i("Add")})]})]})]})}var eo=n(8273),er=n(73);let es=o.Ik({name:o.Yj().min(1,"Product name is required"),productId:o.Yj().min(1,"Product ID is required"),price:o.ai().min(.01,"Price must be greater than 0"),quota:o.ai().min(1,"Quota must be at least 1"),currency:o.k5(["USD","EUR"])}),el="creem-product-form";function ec(e){let{open:t,onOpenChange:n,onSave:i,editData:o}=e,{t:r}=(0,c.Bd)(),d=!!o,p=(0,s.mN)({resolver:(0,l.u)(es),defaultValues:{name:"",productId:"",price:0,quota:0,currency:"USD"}});return(0,T.useEffect)(()=>{o?p.reset(o):p.reset({name:"",productId:"",price:0,quota:0,currency:"USD"})},[o,p,t]),(0,a.jsx)(Z.l,{open:t,onOpenChange:n,title:d?r("Edit product"):r("Add product"),description:r("Configure a Creem product for user recharge options."),contentClassName:"sm:max-w-[500px]",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(q.$,{type:"button",variant:"outline",onClick:()=>n(!1),children:r("Cancel")}),(0,a.jsx)(q.$,{type:"submit",form:el,children:d?r("Update"):r("Add")})]}),children:(0,a.jsx)(u.lV,{...p,children:(0,a.jsxs)("form",{id:el,onSubmit:p.handleSubmit(e=>{i({name:e.name,productId:e.productId,price:e.price,quota:e.quota,currency:e.currency}),p.reset(),n(!1)}),className:"space-y-4",children:[(0,a.jsx)(u.zB,{control:p.control,name:"name",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:r("Product Name")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:r("e.g., Basic Package"),...t})}),(0,a.jsx)(u.Rr,{children:r("Display name shown to users.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:p.control,name:"productId",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:r("Product ID")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:r("e.g., prod_xxx"),disabled:d,...t})}),(0,a.jsx)(u.Rr,{children:r("Creem product ID from your Creem dashboard.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,a.jsx)(u.zB,{control:p.control,name:"currency",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:r("Currency")}),(0,a.jsxs)(C.l6,{items:[{value:"USD",label:"USD ($)"},{value:"EUR",label:"EUR (€)"}],onValueChange:t.onChange,value:t.value,children:[(0,a.jsx)(u.MJ,{children:(0,a.jsx)(C.bq,{children:(0,a.jsx)(C.yv,{placeholder:r("Select currency")})})}),(0,a.jsx)(C.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(C.s3,{children:[(0,a.jsx)(C.eb,{value:"USD",children:"USD ($)"}),(0,a.jsx)(C.eb,{value:"EUR",children:"EUR (€)"})]})})]}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:p.control,name:"price",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:r("Price")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",min:.01,placeholder:"10.00",...(0,P.X)(t)})}),(0,a.jsx)(u.C5,{})]})}})]}),(0,a.jsx)(u.zB,{control:p.control,name:"quota",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:r("Quota")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",min:1,placeholder:r("e.g., 500000"),...(0,P.X)(t)})}),(0,a.jsx)(u.Rr,{children:r("Amount of quota to credit to user account.")}),(0,a.jsx)(u.C5,{})]})}})]})})})}function ed(e){let{value:t,onChange:n}=e,{t:i}=(0,c.Bd)(),[o,r]=(0,T.useState)(""),[s,l]=(0,T.useState)(!1),[d,u]=(0,T.useState)(null),p=(0,T.useMemo)(()=>(0,Y.Cz)(t,{fallback:[],validator:X.cy,validatorMessage:i("Creem products must be a JSON array"),context:"creem products"}).filter(e=>"object"==typeof e&&null!==e&&"name"in e&&"productId"in e&&"price"in e&&"quota"in e&&"currency"in e&&"string"==typeof e.name&&"string"==typeof e.productId&&"number"==typeof e.price&&"number"==typeof e.quota&&("USD"===e.currency||"EUR"===e.currency)),[t,i]),m=(0,T.useMemo)(()=>
1{if(!o)return p;let e=o.toLowerCase();return p.filter(t=>t.name.toLowerCase().includes(e)||t.productId.toLowerCase().includes(e))},[p,o]),g=e=>{n(JSON.stringify((0,Y.Cz)(t,{fallback:[],validator:X.cy,silent:!0}).filter(t=>!("object"==typeof t&&null!==t&&"productId"in t&&t.productId===e.productId)),null,2))},f=e=>{u(e),l(!0)};return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[(0,a.jsxs)("div",{className:"relative flex-1",children:[(0,a.jsx)(eo.A,{className:"text-muted-foreground absolute top-2.5 left-2.5 h-4 w-4"}),(0,a.jsx)(h.p,{placeholder:i("Search products..."),value:o,onChange:e=>r(e.target.value),className:"pl-9"})]}),(0,a.jsxs)(q.$,{type:"button",onClick:e=>{e.preventDefault(),e.stopPropagation(),u(null),l(!0)},className:"flex-1 sm:flex-none",children:[(0,a.jsx)(J.A,{className:"h-4 w-4 sm:mr-2"}),(0,a.jsx)("span",{className:"sm:inline",children:i("Add product")})]})]}),0===m.length?(0,a.jsx)("div",{className:"text-muted-foreground rounded-lg border border-dashed p-8 text-center text-sm",children:o?i("No products match your search"):i('No products configured. Click "Add product" to get started.')}):(0,a.jsxs)("div",{className:"rounded-md border",children:[(0,a.jsx)($.hm,{className:"hidden rounded-none border-0 md:block",data:m,getRowKey:e=>e.productId,columns:[{id:"name",header:i("Name"),cellClassName:"font-medium",cell:e=>e.name},{id:"product-id",header:i("Product ID"),cell:e=>(0,a.jsx)("code",{className:"bg-muted rounded px-1.5 py-0.5 text-sm",children:e.productId})},{id:"price",header:i("Price"),cell:e=>(0,a.jsx)("span",{className:"font-mono text-sm",children:(0,er.Bg)(e.price,e.currency)})},{id:"quota",header:i("Quota"),cell:e=>(0,a.jsx)("span",{className:"font-mono text-sm",children:(0,er.aE)(e.quota)})},{id:"actions",header:i("Actions"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),f(e)},children:(0,a.jsx)(V.A,{className:"h-4 w-4"})}),(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),g(e)},children:(0,a.jsx)(H.A,{className:"h-4 w-4"})})]})}]}),(0,a.jsx)("div",{className:"divide-y md:hidden",children:m.map(e=>(0,a.jsxs)("div",{className:"p-4",children:[(0,a.jsxs)("div",{className:"mb-3 flex items-start justify-between",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)("div",{className:"mb-1 font-medium",children:e.name}),(0,a.jsx)("code",{className:"bg-muted rounded px-1.5 py-0.5 text-xs",children:e.productId})]}),(0,a.jsxs)("div",{className:"flex gap-1",children:[(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),f(e)},children:(0,a.jsx)(V.A,{className:"h-4 w-4"})}),(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),g(e)},children:(0,a.jsx)(H.A,{className:"h-4 w-4"})})]})]}),(0,a.jsxs)("div",{className:"space-y-2 text-sm",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("span",{className:"text-muted-foreground min-w-16",children:[i("Price"),":"]}),(0,a.jsx)("span",{className:"font-mono",children:(0,er.Bg)(e.price,e.currency)})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("span",{className:"text-muted-foreground min-w-16",children:[i("Quota"),":"]}),(0,a.jsx)("span",{className:"font-mono",children:(0,er.aE)(e.quota)})]})]})]},e.productId))})]}),(0,a.jsx)(ec,{open:s,onOpenChange:l,onSave:e=>{let a=[...(0,Y.Cz)(t,{fallback:[],validator:X.cy,silent:!0})];if(d){let t=a.findIndex(e=>"object"==typeof e&&null!==e&&"productId"in e&&e.productId===d.productId);-1!==t?a[t]=e:a.push(e)}else a.push(e);n(JSON.stringify(a,null,2))},editData:d})]})}var eu=n(77670),eh=n(81361),ep=n(37133);let em="payment-method-form",eg=[{value:"alipay",label:"Alipay"},{value:"wxpay",label:"WeChat Pay"}
1,{value:"stripe",label:"Stripe"}],ef=[{value:"#1677FF",label:"Blue (Alipay)"},{value:"#07C160",label:"Green (WeChat)"},{value:"#635BFF",label:"Purple (Stripe)"},{value:"#1890FF",label:"Sky Blue"},{value:"#52C41A",label:"Lime Green"},{value:"black",label:"Black"},{value:"#FF4D4F",label:"Red"},{value:"#FFA940",label:"Orange"}].map(e=>{var t;let n=(t=e.value).includes("var(--")?null:t;return{...e,icon:n?(0,a.jsx)("div",{className:"size-4 rounded border",style:{backgroundColor:n}}):(0,a.jsx)("div",{className:"bg-muted size-4 rounded border"})}});function ey(e){let{open:t,onOpenChange:n,onSave:i,editData:r}=e,{t:d}=(0,c.Bd)(),p=!!r,m=o.Ik({name:o.Yj().min(1,d("Payment method name is required")),type:o.Yj().min(1,d("Payment method type is required")),color:o.Yj().min(1,d("Color is required")),min_topup:o.Yj().optional()}),g=(0,s.mN)({resolver:(0,l.u)(m),defaultValues:{name:"",type:"",color:"",min_topup:""}}),f=g.watch("color"),y=(0,T.useMemo)(()=>{if(!f)return null;try{if(f.includes("var(--"))return null;return f}catch{return null}},[f]);return(0,T.useEffect)(()=>{r?g.reset(r):g.reset({name:"",type:"",color:"",min_topup:""})},[r,g,t]),(0,a.jsx)(Z.l,{open:t,onOpenChange:n,title:p?d("Edit payment method"):d("Add payment method"),description:d("Configure a payment method for user recharge options."),contentClassName:"sm:max-w-[500px]",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(q.$,{type:"button",variant:"outline",onClick:()=>n(!1),children:d("Cancel")}),(0,a.jsx)(q.$,{type:"submit",form:em,children:p?d("Update"):d("Add")})]}),children:(0,a.jsx)(u.lV,{...g,children:(0,a.jsxs)("form",{id:em,onSubmit:g.handleSubmit(e=>{let t={name:e.name,type:e.type,color:e.color};e.min_topup&&""!==e.min_topup.trim()&&(t.min_topup=e.min_topup),i(t),g.reset(),n(!1)}),className:"space-y-4",children:[(0,a.jsx)(u.zB,{control:g.control,name:"name",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:d("Name")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:d("e.g., Alipay, WeChat"),...t})}),(0,a.jsx)(u.Rr,{children:d("Display name for this payment method.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:g.control,name:"type",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:d("Type")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(ep.G3,{options:eg,value:t.value,onValueChange:t.onChange,placeholder:d("Select or enter payment type"),searchPlaceholder:d("Search payment types..."),allowCustomValue:!0})}),(0,a.jsx)(u.Rr,{children:d("Select from presets or type custom identifier.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:g.control,name:"color",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:d("Color")}),(0,a.jsx)(u.MJ,{children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(ep.G3,{options:ef,value:t.value,onValueChange:t.onChange,placeholder:d("Select or enter color value"),searchPlaceholder:d("Search colors..."),allowCustomValue:!0,className:"flex-1"}),y&&(0,a.jsx)("div",{className:"size-9 shrink-0 rounded border",style:{backgroundColor:y},title:y})]})}),(0,a.jsx)(u.Rr,{children:d("Select preset or enter custom CSS color value.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:g.control,name:"min_topup",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:d("Minimum top-up (optional)")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",placeholder:d("e.g., 50"),...t})}),(0,a.jsx)(u.Rr,{children:d("Optional minimum recharge amount for this method.")}),(0,a.jsx)(u.C5,{})]})}})]})})})}let eb=[{name:"Alipay",template:{color:"rgba(var(--semi-blue-5), 1)",name:"支付宝",type:"alipay"}},{name:"WeChat Pay",template:{color:"rgba(var(--semi-green-5), 1)",name:"微信",type:"wxpay"}},{name:"Stripe",template:{color:"rgba(var(--semi-green-5), 1)",name:"Stripe",type:"stripe"}},{name:"Custom",template:{color:"black",min_topup:"50",name:"自定义1",type:"custom1"}}];function ev(e){let{value:t,onChange:n}=e,{t:i}=(0,c.Bd)(),[o,r]=(0,T.useState)(""),[s,l]=(0,T.useState)(!1),[d,u]=(0,T.useState)(null),p=(0,T.useMemo)(()=>(0,Y.Cz)(t,{fallback:[],validator:X.cy,validatorMessage:"Payment methods must be a JSON array",context:"payment methods"}).filter(e=>"object"==typeof e&&null!==e&&"name"in e&&"type"in e&&"color"in e&&"string"==typeof e.name&&"string"==typeof e.type&&"string"==typeof e.color),[t]),m=(0,T.useMemo)(()=>
1{if(!o)return p;let e=o.toLowerCase();return p.filter(t=>t.name.toLowerCase().includes(e)||t.type.toLowerCase().includes(e))},[p,o]),g=e=>{n(JSON.stringify((0,Y.Cz)(t,{fallback:[],validator:X.cy,silent:!0}).filter(t=>!("object"==typeof t&&null!==t&&"name"in t&&"type"in t&&t.name===e.name&&t.type===e.type)),null,2))},f=e=>{u(e),l(!0)},y=e=>e.includes("var(--")?null:e;return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[(0,a.jsxs)("div",{className:"relative flex-1",children:[(0,a.jsx)(eo.A,{className:"text-muted-foreground absolute top-2.5 left-2.5 h-4 w-4"}),(0,a.jsx)(h.p,{placeholder:i("Search payment methods..."),value:o,onChange:e=>r(e.target.value),className:"pl-9"})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsxs)(eh.AM,{children:[(0,a.jsxs)(eh.Wv,{render:(0,a.jsx)(q.$,{variant:"outline",className:"flex-1 sm:flex-none"}),children:[(0,a.jsx)(eu.A,{className:"h-4 w-4 sm:mr-2"}),(0,a.jsx)("span",{className:"sm:inline",children:i("Templates")})]}),(0,a.jsx)(eh.hl,{className:"w-60",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:i("Quick insert common payment methods")}),(0,a.jsx)("div",{className:"space-y-1",children:eb.map(e=>(0,a.jsxs)(q.$,{type:"button",variant:"ghost",className:"w-full justify-start text-sm",onClick:a=>{var i;let o;a.preventDefault(),a.stopPropagation(),i=e.template,(o=(0,Y.Cz)(t,{fallback:[],validator:X.cy,silent:!0})).some(e=>"object"==typeof e&&null!==e&&"type"in e&&"name"in e&&e.type===i.type&&e.name===i.name)||(o.push(i),n(JSON.stringify(o,null,2)))},children:[(0,a.jsx)(J.A,{className:"mr-2 h-3 w-3"}),e.name]},e.name))})]})})]}),(0,a.jsxs)(q.$,{type:"button",onClick:e=>{e.preventDefault(),e.stopPropagation(),u(null),l(!0)},className:"flex-1 sm:flex-none",children:[(0,a.jsx)(J.A,{className:"h-4 w-4 sm:mr-2"}),(0,a.jsx)("span",{className:"sm:inline",children:i("Add method")})]})]})]}),0===m.length?(0,a.jsx)("div",{className:"text-muted-foreground rounded-lg border border-dashed p-8 text-center text-sm",children:o?i("No payment methods match your search"):i('No payment methods configured. Click "Add method" or use templates to get started.')}):(0,a.jsxs)("div",{className:"rounded-md border",children:[(0,a.jsx)($.hm,{className:"hidden rounded-none border-0 md:block",data:m,getRowKey:(e,t)=>`${e.type}-${t}`,columns:[{id:"name",header:i("Name"),cellClassName:"font-medium",cell:e=>e.name},{id:"type",header:i("Type"),cell:e=>(0,a.jsx)("code",{className:"bg-muted rounded px-1.5 py-0.5 text-sm",children:e.type})},{id:"color",header:i("Color"),cell:e=>{let t=y(e.color);return(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[t&&(0,a.jsx)("div",{className:"size-5 shrink-0 rounded border",style:{backgroundColor:t}}),(0,a.jsx)("span",{className:"text-muted-foreground truncate font-mono text-sm",children:e.color})]})}},{id:"min-top-up",header:i("Min Top-up"),cell:e=>e.min_topup?(0,a.jsx)("span",{className:"font-mono text-sm",children:e.min_topup}):(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:"—"})},{id:"actions",header:i("Actions"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),f(e)},children:(0,a.jsx)(V.A,{className:"h-4 w-4"})}),(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),g(e)},children:(0,a.jsx)(H.A,{className:"h-4 w-4"})})]})}]}),(0,a.jsx)("div",{className:"divide-y md:hidden",children:m.map((e,t)=>{let n=y(e.color);return(0,a.jsxs)("div",{className:"p-4",children:[(0,a.jsxs)("div",{className:"mb-3 flex items-start justify-between",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)("div",{className:"mb-1 font-medium",children:e.name}),(0,a.jsx)("code",{className:"bg-muted rounded px-1.5 py-0.5 text-xs",children:e.type})]}),(0,a.jsxs)("div",{className:"flex gap-1",children:[(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),f(e)},children:(0,a.jsx)(V.A,{className:"h-4 w-4"})}),(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),g(e)},children:(0,a.jsx)(H.A,{className:"h-4 w-4"})})]})]}),(0,a.jsxs)("div",{className:"space-y-2 text-sm",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"text-muted-foreground min-w-20",children:i("Color:")}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[n&&(0,a.jsx)("div",{className:"size-5 shrink-0 rounded border",style:{backgroundColor:n}}),(0,a.jsx)("span",{className:"text-muted-foreground truncate font-mono text-xs",children:e.color})]})]}),e.min_topup&&(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"text-muted-foreground min-w-20",children:i("Min Top-up:")}),(0,a.jsx)("span",{className:"font-mono",children:e.min_topup})]})]})]},`${e.type}-${t}`)})})]}),(0,a.jsx)(ey,{open:s,onOpenChange:l,onSave:e=>{let a=[...(0,Y.Cz)(t,{fallback:[],validator:X.cy,silent:!0})];if(d){let t=a.findIndex(e=>"object"==typeof e&&null!==e&&"name"in e&&"type"in e&&e.name===d.name&&e.type===d.type);-1!==t?a[t]=e:a.push(e)}else a.push(e);n(JSON.stringify(a,null,2))},editData:d})]})}var ex=n(22097),ek=n(82406);async function eC(e,t){return(await ek.FH.post("/api/option/waffo-pancake/catalog",{merchant_id:e,private_key:t})).data}async function eS(e){return(await ek.FH.post("/api/option/waffo-pancake/
1pair",{merchant_id:e.merchantID,private_key:e.privateKey,return_url:e.returnURL})).data}async function ew(e){return(await ek.FH.post("/api/option/waffo-pancake/save",{merchant_id:e.merchantID,private_key:e.privateKey,return_url:e.returnURL,store_id:e.storeID,product_id:e.productID})).data}function eA(e){let t,{defaultValues:n,values:i,onValueChange:o,selectedBinding:r,savedBinding:s,onSelectedBindingChange:l}=e,{t:u}=(0,c.Bd)(),[p,m]=T.useState("idle"),[g,f]=T.useState([]),[y,b]=T.useState(!1),v=r.storeID,x=r.productID,k=s.storeID,S=s.productID,w=i.WaffoPancakeReturnURL,A=T.useRef(n),P=T.useMemo(()=>JSON.stringify(n),[n]),j=T.useRef(""),N=T.useRef(0),I=T.useRef(!1);T.useEffect(()=>{let e=JSON.parse(P);A.current=e,I.current||(I.current=!0,j.current=`${e.WaffoPancakeMerchantID.trim()}|${e.WaffoPancakePrivateKey.trim()}`)},[P]);let R=T.useMemo(()=>v?g.find(e=>e.id===v)?.onetimeProducts??[]:[],[g,v]),M=T.useMemo(()=>{let e=g.map(e=>({value:e.id,label:`${e.name} (${e.id})`}));return v&&!g.some(e=>e.id===v)&&e.push({value:v,label:v}),e},[g,v]),D=T.useMemo(()=>{let e=R.map(e=>({value:e.id,label:`${e.name} (${e.id})`}));return x&&!R.some(e=>e.id===x)&&e.push({value:x,label:x}),e},[R,x]),O=T.useCallback(async(e,t,n)=>{let a,i=++N.current;try{let n=await eC(e,t);if(i!==N.current)return;if(n?.message==="success"&&"object"==typeof n.data&&n.data)a=n.data.stores??[];else{let e="string"==typeof n?.data?n.data:void 0;d.oR.error(e?`${u("Credentials verification failed")}: ${e}`:u("Credentials verification failed — double-check Merchant ID and API private key.")),m("idle");return}}catch(e){if(i!==N.current)return;d.oR.error(`${u("Credentials verification failed")}: ${e instanceof Error?e.message:String(e)}`),m("idle");return}if(i===N.current){if(f(a),n)l({storeID:n.storeID??"",productID:n.productID??""});else{let e=a.find(e=>e.onetimeProducts.some(e=>e.id===S));if(e&&S)l({storeID:e.id,productID:S});else{let e=a.find(e=>e.onetimeProducts.length>0);e?l({storeID:e.id,productID:e.onetimeProducts[0].id}):l({storeID:"",productID:""})}}m("idle")}},[l,S,u]),L=i.WaffoPancakeMerchantID||"",E=i.WaffoPancakePrivateKey||"";T.useEffect(()=>{let e=L.trim(),t=E.trim();if(!e||!t)return;let n=`${e}|${t}`;if(n===j.current)return;let a=setTimeout(()=>{j.current=n,m("verifying"),O(e,t)},800);return()=>clearTimeout(a)},[L,E,O]);let U=T.useRef(!1);T.useEffect(()=>{if(U.current||!n.WaffoPancakeMerchantID.trim())return;U.current=!0;let e=window.setTimeout(()=>{m("verifying"),O("","")},0);return()=>window.clearTimeout(e)},[n.WaffoPancakeMerchantID,O]);let F=async()=>{let e,t;if(!H)return void d.oR.error(u("Fill in both Merchant ID and API Private Key before creating."));let{merchantID:a,privateKey:o}=(e=(i.WaffoPancakeMerchantID||"").trim(),t=(i.WaffoPancakePrivateKey||"").trim(),e!==(n.WaffoPancakeMerchantID||"").trim()||t.length>0?{merchantID:e,privateKey:t}:{merchantID:"",privateKey:""}),r=(0,ex.UC)(w.trim());if(r||window.confirm(u("Payment return URL is empty. Create the product without a SuccessURL redirect?"))){b(!0);try{let e=await eS({merchantID:a,privateKey:o,returnURL:r});if(e?.message==="success"&&"object"==typeof e.data&&e.data){let t=e.data;m("verifying"),await O(a,o,{storeID:t.store_id,productID:t.product_id}),d.oR.success(`${u("Store + product created")}: ${t.store_id} / ${t.product_id}`);return}let t=e&&"object"==typeof e.data&&null!==e.data?e.data:null;t?.orphan_store&&t.store_id&&(m("verifying"),await O(a,o,{storeID:t.store_id,productID:""}));let n=t?.error??("string"==typeof e?.data?e.data:void 0);d.oR.error(n?`${u("Creation failed")}: ${n}`:u("Creation failed"))}catch(e){d.oR.error(`${u("Creation failed")}: ${e instanceof Error?e.message:String(e)}`)}finally{b(!1)}}},B="verifying"===p,G=(n.WaffoPancakeMerchantID||"").trim(),K=L.trim(),W=E.trim(),J=K!==G||W.length>0,V=G.length>0,H=J?K.length>0&&W.length>0:V,$=g.length>0;return t=H?B?u("Verifying credentials and pulling stores from your Pancake account..."):$?u("Mint a fresh pair below — or pick an existing one further down. Click Save when ready."):u("No stores on this merchant yet. Set a return URL and click Create to mint your first pair."):u("Fill in the credentials above to begin."),(0,a.jsxs)("div",{className:"space-y-4 pt-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-medium",children:u("Waffo Pancake MoR")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:u("Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.")})]}),(0,a.jsxs)("div",{className:"grid min-w-0 gap-x-5 gap-y-4 lg:grid-cols-2",children:[(0,a.jsxs)("div",{className:"rounded-md bg-blue-50 p-4 text-sm text-blue-900 lg:col-span-2 dark:bg-blue-950 dar
1k:text-blue-100",children:[(0,a.jsx)("p",{className:"mb-2 font-medium",children:u("Webhook Configuration:")}),(0,a.jsxs)("ul",{className:"list-inside list-disc space-y-1",children:[(0,a.jsxs)("li",{children:[u("Webhook URL (Test):")," ",(0,a.jsx)("code",{className:"rounded bg-blue-100 px-1 py-0.5 text-xs dark:bg-blue-900",children:"<ServerAddress>/api/waffo-pancake/webhook/test"})]}),(0,a.jsxs)("li",{children:[u("Webhook URL (Production):")," ",(0,a.jsx)("code",{className:"rounded bg-blue-100 px-1 py-0.5 text-xs dark:bg-blue-900",children:"<ServerAddress>/api/waffo-pancake/webhook/prod"})]}),(0,a.jsx)("li",{children:u("Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.")}),(0,a.jsxs)("li",{children:[u("Configure at:")," ",(0,a.jsx)("a",{href:"https://pancake.waffo.ai/merchant/dashboard",target:"_blank",rel:"noreferrer",className:"underline hover:no-underline",children:u("Waffo Pancake Dashboard")})]})]})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:u("Merchant ID")}),(0,a.jsx)(h.p,{placeholder:"MER_xxx",autoComplete:"off",value:i.WaffoPancakeMerchantID,onChange:e=>o("WaffoPancakeMerchantID",e.target.value)})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:u("API Private Key")}),(0,a.jsx)(_.T,{rows:4,placeholder:u("Leave blank to keep the existing key"),autoComplete:"new-password",value:i.WaffoPancakePrivateKey,onChange:e=>o("WaffoPancakePrivateKey",e.target.value),className:"font-mono text-xs"}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:u("The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.")})]}),(0,a.jsxs)("div",{className:"space-y-4 pt-2 lg:col-span-2",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-medium",children:u("Bind a Pancake store + product")}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:t})]}),(0,a.jsxs)("div",{className:"rounded-md border border-blue-200 bg-blue-50 p-3 text-xs text-blue-900 dark:border-blue-900/60 dark:bg-blue-950/40 dark:text-blue-100",children:[(0,a.jsx)("p",{className:"mb-1 font-medium",children:u("Why only one store + product?")}),(0,a.jsxs)("ul",{className:"list-inside list-disc space-y-1",children:[(0,a.jsx)("li",{children:u("The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.")}),(0,a.jsx)("li",{children:u("The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.")}),(0,a.jsx)("li",{children:u('Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the "+ Create" button there).')})]})]}),(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)(z.J,{children:u("Payment return URL")}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(h.p,{placeholder:"https://example.com/console/topup",value:w,onChange:e=>o("WaffoPancakeReturnURL",e.target.value),className:"flex-1"}),(0,a.jsx)(q.$,{type:"button",variant:"outline",onClick:F,disabled:y||B||!H,className:"shrink-0",children:y?u("Creating..."):`+ ${u("Create")} new-api-store + new-api-charge-product`})]}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:u("Used as SuccessURL on the new product. You'll be prompted to confirm if left blank.")})]}),$?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"relative flex items-center py-1",children:[(0,a.jsx)("div",{className:"flex-1 border-t"}),(0,a.jsx)("span",{className:"text-muted-foreground px-3 text-[10px] font-medium tracking-[0.2em] uppercase",children:u("or pick existing")}),(0,a.jsx)("div",{className:"flex-1 border-t"})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:u("Store")}),(0,a.jsxs)(C.l6,{items:M,value:v,onValueChange:e=>{l({storeID:e??"",productID:""})},children:[(0,a.jsx)(C.bq,{className:"w-full",children:(0,a.jsx)(C.yv,{placeholder:u("Select a store")})}),(0,a.jsx)(C.gC,{children:M.map(e=>(0,a.jsx)(C.eb,{value:e.value,children:e.label},e.value))})]})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:u("Product")}),(0,a.jsxs)(C.l6,{items:D,value:x,onValueChange:e=>l(t=>({...t,productID:e??""})),disabled:!v||0===D.length,children:[(0,a.jsx)(C.bq,{className:"w-full",children:(0,a.jsx)(C.yv,{placeholder:u("Select a product")})}),(0,a.jsx)(C.gC,{children:D.map(e=>(0,a.jsx)(C.eb,{value:e.value,children:e.label},e.value))})]})]})]})]}):null,(0,a.jsx)("div",{className:"flex items-center gap-3",children:k||S?(0,a.jsxs)("div",{className:"text-muted-foreground flex flex-wrap gap-x-3 gap-y-1 text-xs",children:[k?(0,a.jsxs)("span",{children:[u("Bound store:")," ",(0,a.jsx)("code",{className:"bg-muted rounded px-1 py-0.5",children:k})]}):null,S?(0,a.jsxs)("span",{children:[u("Bound product:")," ",(0,a.jsx)("code",{className:"bg-muted rounded px-1 py-0.5",children:S})]}):null]}):null})]})]})]})}function eP(e){let{values:t,onValueChange:n,payMethods:i,onPayMethodsChange:o}=e,{t:r}=(0,c.Bd)(),s=(0,T.useRef)(null),[l,u]=(0,T.useState)(!1),[p,g]=(0,T.useState)(-1),[f,y]=(0,T.useState)({name:"",icon:"",payMethodType:"",payMethodName:""});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"space-y-4 pt-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-medium",children:r("Waffo Aggregator Gateway")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:r("Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.")})]}),(0,a.jsx)(N.Fc,{children:(0,a.jsx)(N.TN,{className:"text-xs",children:r("Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.")})}),(0,a.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,a.jsx)(m.ew,{checked:t.WaffoEnabled,onCheckedChange:e=>n("WaffoEnabled",e),label:r("Enable Waffo"),className:"border-b-0 py-0"}),(0,a.jsx)(m.ew,{checked:t.WaffoSandbox,onCheckedChange:e=>n("WaffoSandbox",e),label:r("Sandbox mode"),className:"border-b-0 py-0"})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:r("API Key (Production)")}),(0,a.jsx)(h.p,{type:"password",value:t.WaffoApiKey,onChange:e=>n("WaffoApiKey",e.target.value)})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:r("API Key (Sandbox)")}),(0,a.jsx)(h.p,{type:"password",value:t.WaffoSandboxApiKey,onChange:e=>n("WaffoSandboxApiKey",e.target.value)})]})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:r("Merchant ID")}
1),(0,a.jsx)(h.p,{value:t.WaffoMerchantId,onChange:e=>n("WaffoMerchantId",e.target.value)})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:r("RSA Private Key (Production)")}),(0,a.jsx)(_.T,{rows:3,value:t.WaffoPrivateKey,onChange:e=>n("WaffoPrivateKey",e.target.value),className:"font-mono text-xs"})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:r("RSA Private Key (Sandbox)")}),(0,a.jsx)(_.T,{rows:3,value:t.WaffoSandboxPrivateKey,onChange:e=>n("WaffoSandboxPrivateKey",e.target.value),className:"font-mono text-xs"})]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:r("Waffo Public Key (Production)")}),(0,a.jsx)(_.T,{rows:3,value:t.WaffoPublicCert,onChange:e=>n("WaffoPublicCert",e.target.value),className:"font-mono text-xs"})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:r("Waffo Public Key (Sandbox)")}),(0,a.jsx)(_.T,{rows:3,value:t.WaffoSandboxPublicCert,onChange:e=>n("WaffoSandboxPublicCert",e.target.value),className:"font-mono text-xs"})]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-3 gap-4",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:r("Currency")}),(0,a.jsx)(h.p,{value:t.WaffoCurrency,disabled:!0})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:r("Unit price (USD)")}),(0,a.jsx)(h.p,{type:"number",step:.1,min:0,value:t.WaffoUnitPrice,onChange:e=>n("WaffoUnitPrice",""===e.target.value?0:e.target.valueAsNumber)})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:r("Minimum top-up quantity")}),(0,a.jsx)(h.p,{type:"number",min:1,value:t.WaffoMinTopUp,onChange:e=>n("WaffoMinTopUp",""===e.target.value?1:e.target.valueAsNumber)})]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:r("Callback notification URL")}),(0,a.jsx)(h.p,{placeholder:"https://example.com/api/waffo/webhook",value:t.WaffoNotifyUrl,onChange:e=>n("WaffoNotifyUrl",e.target.value)})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:r("Payment return URL")}),(0,a.jsx)(h.p,{placeholder:"https://example.com/console/topup",value:t.WaffoReturnUrl,onChange:e=>n("WaffoReturnUrl",e.target.value)})]})]}),(0,a.jsx)(F.w,{}),(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("h4",{className:"font-medium",children:r("Payment Methods")}),(0,a.jsxs)(q.$,{type:"button",variant:"outline",size:"sm",onClick:()=>{g(-1),y({name:"",icon:"",payMethodType:"",payMethodName:""}),u(!0)},children:[(0,a.jsx)(J.A,{className:"mr-1 h-3 w-3"}),r("Add payment method")]})]}),(0,a.jsx)($.hm,{data:i,emptyClassName:"text-muted-foreground py-8",emptyContent:r("No payment methods configured"),columns:[{id:"name",header:r("Display name"),cell:e=>e.name},{id:"icon",header:r("Icon"),cell:e=>e.icon?(0,a.jsx)("img",{src:e.icon,alt:e.name,className:"h-6 w-6 rounded object-contain"}):(0,a.jsx)("span",{className:"text-muted-foreground",children:"-"})},{id:"type",header:r("Payment method type"),cell:e=>e.payMethodType||"-"},{id:"method",header:r("Payment method name"),cell:e=>e.payMethodName||"-"},{id:"actions",header:r("Actions"),className:"text-right",cellClassName:"text-right",cell:(e,t)=>(0,a.jsxs)("div",{className:"flex justify-end gap-1",children:[(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>{g(t),y({...i[t]}),u(!0)},children:(0,a.jsx)(V.A,{className:"h-3 w-3"})}),(0,a.jsx)(q.$,{type:"button",variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>o(e=>e.filter((e,n)=>n!==t)),children:(0,a.jsx)(H.A,{className:"h-3 w-3"})})]})}]})]}),(0,a.jsx)(Z.l,{open:l,onOpenChange:u,title:-1===p?r("Add payment method"):r("Edit payment method"),contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(q.$,{type:"button",variant:"outline",onClick:()=>u(!1),children:r("Cancel")}),(0,a.jsx)(q.$,{type:"button",onClick:()=>
1{if(!f.name.trim())return d.oR.error(r("Payment method name is required"));-1===p?o(e=>[...e,f]):o(e=>e.map((e,t)=>t===p?f:e)),u(!1)},children:r("Confirm")})]}),children:(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsxs)(z.J,{children:[r("Display name")," *"]}),(0,a.jsx)(h.p,{value:f.name,onChange:e=>y(t=>({...t,name:e.target.value}))})]}),(0,a.jsxs)("div",{className:"grid gap-2",children:[(0,a.jsx)(z.J,{children:r("Icon")}),(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[f.icon?(0,a.jsx)("img",{src:f.icon,alt:f.name||r("Icon"),className:"h-10 w-10 rounded border object-contain p-1"}):(0,a.jsx)("div",{className:"bg-muted text-muted-foreground flex h-10 w-10 items-center justify-center rounded border text-xs",children:r("Icon")}),(0,a.jsx)("input",{ref:s,type:"file",accept:"image/png,image/jpeg,image/svg+xml,image/webp",className:"hidden",onChange:e=>{let t=e.target.files?.[0];if(!t)return;if(t.size>102400){d.oR.error(r("Icon file must be 100 KB or smaller")),e.target.value="";return}let n=new FileReader;n.onload=e=>{y(t=>({...t,icon:"string"==typeof e.target?.result?e.target.result:""}))},n.readAsDataURL(t),e.target.value=""}}),(0,a.jsx)(q.$,{type:"button",variant:"outline",onClick:()=>s.current?.click(),children:r("Upload")}),f.icon?(0,a.jsx)(q.$,{type:"button",variant:"outline",onClick:()=>y(e=>({...e,icon:""})),children:r("Clear")}):null]}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:r("Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.")})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:r("Payment method type")}),(0,a.jsx)(h.p,{value:f.payMethodType,onChange:e=>y(t=>({...t,payMethodType:e.target.value})),placeholder:"CREDITCARD,DEBITCARD"})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:r("Payment method name")}),(0,a.jsx)(h.p,{value:f.payMethodName,onChange:e=>y(t=>({...t,payMethodName:e.target.value}))})]})]})})]})}let ej=o.Ik({PayAddress:o.Yj().refine(e=>{let t=e.trim();return!t||/^https?:\/\//.test(t)},"Provide a valid callback URL starting with http:// or https://"),EpayId:o.Yj(),EpayKey:o.Yj(),Price:r.ai().min(0),MinTopUp:r.ai().min(0),CustomCallbackAddress:o.Yj().refine(e=>{let t=e.trim();return!t||/^https?:\/\//.test(t)},"Provide a valid URL starting with http:// or https://"),PayMethods:o.Yj().superRefine((e,t)=>{let n=(0,ex.NI)(e);n&&t.addIssue({code:x.eq.custom,message:n})}),AmountOptions:o.Yj().superRefine((e,t)=>{let n=(0,ex.NI)(e,e=>Array.isArray(e));n&&t.addIssue({code:x.eq.custom,message:n})}),AmountDiscount:o.Yj().superRefine((e,t)=>{let n=(0,ex.NI)(e,e=>!!e&&"object"==typeof e&&!Array.isArray(e));n&&t.addIssue({code:x.eq.custom,message:n})}),StripeApiSecret:o.Yj(),StripeWebhookSecret:o.Yj(),StripePriceId:o.Yj(),StripeUnitPrice:r.ai().min(0),StripeMinTopUp:r.ai().min(0),StripePromotionCodesEnabled:o.zM(),CreemApiKey:o.Yj(),CreemWebhookSecret:o.Yj(),CreemTestMode:o.zM(),CreemProducts:o.Yj().superRefine((e,t)=>{let n=(0,ex.NI)(e,e=>Array.isArray(e));n&&t.addIssue({code:x.eq.custom,message:n})}),WaffoEnabled:o.zM(),WaffoApiKey:o.Yj(),WaffoPrivateKey:o.Yj(),WaffoPublicCert:o.Yj(),WaffoSandboxPublicCert:o.Yj(),WaffoSandboxApiKey:o.Yj(),WaffoSandboxPrivateKey:o.Yj(),WaffoSandbox:o.zM(),WaffoMerchantId:o.Yj(),WaffoCurrency:o.Yj(),WaffoUnitPrice:r.ai().min(0),WaffoMinTopUp:r.ai().min(1),WaffoNotifyUrl:o.Yj(),WaffoReturnUrl:o.Yj(),WaffoPancakeMerchantID:o.Yj(),WaffoPancakePrivateKey:o.Yj(),WaffoPancakeReturnURL:o.Yj()});function eN(e){try{let t=JSON.parse(e||"[]");return Array.isArray(t)?t:[]}catch{return[]}}function eI(e){let{defaultValues:t,waffoDefaultValues:n,waffoPancakeDefaultValues:i,waffoPancakeProvisionedStoreID:o,waffoPancakeProvisionedProductID:r,complianceDefaults:b}=e,{t:v}=(0,c.Bd)(),x=(0,M.jE)(),k=(0,y.M)(),C=T.useMemo(()=>({...t,...n,...i}),[t,n,i]),S=T.useRef(C),w=T.useMemo(()=>JSON.stringify(C),[C]),[A,j]=T.useState(!0),[I,R]=T.useState(!0),[B,G]=T.useState(!0),[z,J]=T.useState(!0),[V,H]=T.useState(!1),[$,Q]=T.useState(()=>eN(n.WaffoPayMethods)),[Y,X]=T.useState({storeID:o??"",productID:r??""}),[Z,ee]=T.useState({storeID:o??"",productID:r??""});T.useEffect(()=>{Q(eN(n.WaffoPayMethods))},[n.WaffoPayMethods]),T.useEffect(()=>{let e={storeID:o??"",productID:r??""};X(e),ee(e)},[r,o]);let et=T.useMemo(()=>[v("You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas."),v("You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization."),v("If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection."),v("You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties."),v("You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior."),v("You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.")],[v]),ea=v("I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior."),eo=T.useMemo(()=>[{type:"input",text:v("I have read and understood the above compliance reminder")},{type:"static",text:v(",")},{type:"input",text:v("acknowledge the related legal risks")},{type:"static",text:v(",and ")},{type:"input",text:v("confirm that I bear legal responsibility arising from deployment")},{type:"static",text:v("、")},{type:"input",text:v("operation and charging behavior")}],[v]),er=b.confirmed&&"v1"===b.termsVersion,es=(0,D.n)({mutationFn:W.Ss,onSuccess:e=>{e.success?(d.oR.success(v("Compliance confirmed successfully")),H(!1),x.invalidateQueries({queryKey:["system-options"]})):d.oR.error(e.message||v("Failed to confirm compliance"))},onError:e=>{d.oR.error(e.message||v("Failed to confirm compliance"))}}),el=(0,s.mN)({resolver:(0,l.u)(ej),mode:"onChange",defaultValues:{...C,PayMethods:(0,ex.oE)(C.PayMethods),Amou
1ntOptions:(0,ex.oE)(C.AmountOptions),AmountDiscount:(0,ex.oE)(C.AmountDiscount),CreemProducts:(0,ex.oE)(C.CreemProducts)}}),{isSubmitting:ec}=el.formState,eu=T.useCallback((e,t)=>{el.setValue(e,t,{shouldDirty:!0,shouldValidate:!0})},[el]),eh=T.useCallback((e,t)=>{eu(e,t)},[eu]),ep=T.useCallback((e,t)=>{eu(e,t)},[eu]);T.useEffect(()=>{let e=JSON.parse(w);S.current=e,el.reset({...e,PayMethods:(0,ex.oE)(e.PayMethods),AmountOptions:(0,ex.oE)(e.AmountOptions),AmountDiscount:(0,ex.oE)(e.AmountDiscount),CreemProducts:(0,ex.oE)(e.CreemProducts)})},[w,el]);let em=async e=>{let t={PayAddress:(0,ex.UC)(e.PayAddress),EpayId:e.EpayId.trim(),EpayKey:e.EpayKey.trim(),Price:e.Price,MinTopUp:e.MinTopUp,CustomCallbackAddress:(0,ex.UC)(e.CustomCallbackAddress),PayMethods:e.PayMethods.trim(),AmountOptions:e.AmountOptions.trim(),AmountDiscount:e.AmountDiscount.trim(),StripeApiSecret:e.StripeApiSecret.trim(),StripeWebhookSecret:e.StripeWebhookSecret.trim(),StripePriceId:e.StripePriceId.trim(),StripeUnitPrice:e.StripeUnitPrice,StripeMinTopUp:e.StripeMinTopUp,StripePromotionCodesEnabled:e.StripePromotionCodesEnabled,CreemApiKey:e.CreemApiKey.trim(),CreemWebhookSecret:e.CreemWebhookSecret.trim(),CreemTestMode:e.CreemTestMode,CreemProducts:e.CreemProducts.trim(),WaffoEnabled:e.WaffoEnabled,WaffoSandbox:e.WaffoSandbox,WaffoMerchantId:e.WaffoMerchantId.trim(),WaffoCurrency:e.WaffoCurrency.trim()||"USD",WaffoUnitPrice:e.WaffoUnitPrice,WaffoMinTopUp:e.WaffoMinTopUp,WaffoNotifyUrl:e.WaffoNotifyUrl.trim(),WaffoReturnUrl:e.WaffoReturnUrl.trim(),WaffoPublicCert:e.WaffoPublicCert.trim(),WaffoSandboxPublicCert:e.WaffoSandboxPublicCert.trim(),WaffoApiKey:e.WaffoApiKey.trim(),WaffoPrivateKey:e.WaffoPrivateKey.trim(),WaffoSandboxApiKey:e.WaffoSandboxApiKey.trim(),WaffoSandboxPrivateKey:e.WaffoSandboxPrivateKey.trim(),WaffoPayMethods:JSON.stringify($),WaffoPancakeMerchantID:e.WaffoPancakeMerchantID.trim(),WaffoPancakePrivateKey:e.WaffoPancakePrivateKey.trim(),WaffoPancakeReturnURL:(0,ex.UC)(e.WaffoPancakeReturnURL.trim())},a={PayAddress:(0,ex.UC)(S.current.PayAddress),EpayId:S.current.EpayId.trim(),EpayKey:S.current.EpayKey.trim(),Price:S.current.Price,MinTopUp:S.current.MinTopUp,CustomCallbackAddress:(0,ex.UC)(S.current.CustomCallbackAddress),PayMethods:S.current.PayMethods.trim(),AmountOptions:S.current.AmountOptions.trim(),AmountDiscount:S.current.AmountDiscount.trim(),StripeApiSecret:S.current.StripeApiSecret.trim(),StripeWebhookSecret:S.current.StripeWebhookSecret.trim(),StripePriceId:S.current.StripePriceId.trim(),StripeUnitPrice:S.current.StripeUnitPrice,StripeMinTopUp:S.current.StripeMinTopUp,StripePromotionCodesEnabled:S.current.StripePromotionCodesEnabled,CreemApiKey:S.current.CreemApiKey.trim(),CreemWebhookSecret:S.current.CreemWebhookSecret.trim(),CreemTestMode:S.current.CreemTestMode,CreemProducts:S.current.CreemProducts.trim(),WaffoEnabled:S.current.WaffoEnabled,WaffoSandbox:S.current.WaffoSandbox,WaffoMerchantId:S.current.WaffoMerchantId.trim(),WaffoCurrency:S.current.WaffoCurrency.trim()||"USD",WaffoUnitPrice:S.current.WaffoUnitPrice,WaffoMinTopUp:S.current.WaffoMinTopUp,WaffoNotifyUrl:S.current.WaffoNotifyUrl.trim(),WaffoReturnUrl:S.current.WaffoReturnUrl.trim(),WaffoPublicCert:S.current.WaffoPublicCert.trim(),WaffoSandboxPublicCert:S.current.WaffoSandboxPublicCert.trim(),WaffoApiKey:S.current.WaffoApiKey.trim(),WaffoPrivateKey:S.current.WaffoPrivateKey.trim(),WaffoSandboxApiKey:S.current.WaffoSandboxApiKey.trim(),WaffoSandboxPrivateKey:S.current.WaffoSandboxPrivateKey.trim(),WaffoPayMethods:JSON.stringify(eN(n.WaffoPayMethods)),WaffoPancakeMerchantID:S.current.WaffoPancakeMerchantID.trim(),WaffoPancakePrivateKey:S.current.WaffoPancakePrivateKey.trim(),WaffoPancakeReturnURL:(0,ex.UC)(S.current.WaffoPancakeReturnURL.trim())},i=[];t.PayAddress!==a.PayAddress&&i.push({key:"PayAddress",value:t.PayAddress}),t.EpayId!==a.EpayId&&i.push({key:"EpayId",value:t.EpayId}),t.EpayKey&&t.EpayKey!==a.EpayKey&&i.push({key:"EpayKey",value:t.EpayKey}),t.Price!==a.Price&&i.push({key:"Price",value:t.Price}),t.MinTopUp!==a.MinTopUp&&i.push({key:"MinTopUp",value:t.MinTopUp}),t.CustomCallbackAddress!==a.CustomCallbackAddress&&i.push({key:"CustomCallbackAddress",value:t.CustomCallbackAddress}),(0,ex.s$)(t.PayMethods)!==(0,ex.s$)(a.PayMethods)&&i.push({key:"PayMethods",value:t.PayMethods}),(0,ex.s$)(t.AmountOptions)!==(0,ex.s$)(a.AmountOptions)&&i.push({key:"payment_setting.amount_options",value:t.AmountOptions}),(0,ex.s$)(t.AmountDiscount)!==(0,ex.s$)(a.AmountDiscount)&&i.push({key:"payment_setting.amount_discount",value:t.AmountDiscount}),t.StripeApiSecret&&t.StripeApiSecret!==a.StripeApiSecret&&i.push({key:"StripeApiSecret",value:t.StripeApiSecret}),t.StripeWebhookSecret&&t.StripeWebhookSecret!==a.StripeWebhookSecret&&i.push({key:"StripeWebhookSecret",value:t.StripeWebhookSecret}),t.StripePriceId!==a.StripePriceId&&i.push({key:"StripePriceId",value:t.StripePriceId}),t.StripeUnitPrice!==a.StripeUnitPrice&&i.push({key:"StripeUnitPrice",value:t.StripeUnitPrice}),t.StripeMinTopUp!==a.StripeMinTopUp&&i.push({key:"StripeMinTopUp",value:t.StripeMinTopUp}),t.StripePromotionCodesEnabled!==a.StripePromotionCodesEnabled&&i.push({key:"StripePromotionCodesEnabled",value:t.StripePromotionCodesEnabled}),t.CreemApiKey&&t.CreemApiKey!==a.CreemApiKey&&i.push({key:"CreemApiKey",value:t.CreemApiKey}),t.CreemWebhookSecret&&t.CreemWebhookSecret!==a.CreemWebhookSecret&&i.push({key:"CreemWebhookSecret",value:t.CreemWebhookSecret}),t.CreemTestMode!==a.CreemTestMode&&i.push({key:"CreemTestMode",value:t.CreemTestMode}),(0,ex.s$)(t.CreemProducts)!==(0,ex.s$)(a.CreemProducts)&&i.push({key:"CreemProducts",value:t.CreemProducts}),t.WaffoEnabled!==a.WaffoEnabled&&i.push({key:"WaffoEnabled",value:t.WaffoEnabled}),t.WaffoSandbox!==a.WaffoSandbox&&i.push({key:"WaffoSandbox",value:t.WaffoSandbox}),t.WaffoMerchantId!==a.WaffoMerchantId&&i.push({key:"WaffoMerchantId",value:t.WaffoMerchantId}),t.WaffoCurrency!==a.WaffoCurrency&&i.push({key:"WaffoCurrency",value:t.WaffoCurrency}),t.WaffoUnitPrice!==a.WaffoUnitPrice&&i.push({key:"WaffoUnitPrice",value:t.WaffoUnitPrice}),t.WaffoMinTopUp!==a.WaffoMinTopUp&&i.push({key:"WaffoMinTopUp",value:t.WaffoMinTopUp}),t.WaffoNotifyUrl!==a.WaffoNotifyUrl&&i.push({key:"WaffoNotifyUrl",value:t.WaffoNotifyUrl}),t.WaffoReturnUrl!==a.WaffoReturnUrl&&i.push({key:"WaffoReturnUrl",value:t.WaffoReturnUrl}),t.WaffoPublicCert!==a.WaffoPublicCert&&i.push({key:"WaffoPublicCert",value:t.WaffoPublicCert}),t.WaffoSandboxPublicCert!==a.WaffoSandboxPublicCert&&i.push({key:"WaffoSandboxPublicCert",value:t.WaffoSandboxPublicCert}),t.WaffoApiKey&&i.push({key:"WaffoApiKey",value:t.WaffoApiKey}),t.WaffoPrivateKey&&i.push({key:"WaffoPrivateKey",value:t.WaffoPrivateKey}),t.WaffoSandboxApiKey&&i.push({key:"WaffoSandboxApiKey",value:t.WaffoSandboxApiKey}),t.WaffoSandboxPrivateKey&&i.push({key:"WaffoSandboxPrivateKey",value:t.WaffoSandboxPrivateKey}),(0,ex.s$)(t.WaffoPayMethods)!==(0,ex.s$)(a.WaffoPayMethods)&&i.push({key:"WaffoPayMethods",value:t.WaffoPayMethods});let o=t.WaffoPancakeMerchantID!==a.WaffoPancakeMerchantID||t.WaffoPancakePrivateKey.length>0||t.WaffoPancakeReturnURL!==a.WaffoPancakeReturnURL||Y.storeID!==Z.storeID||Y.productID!==Z.productID;if(0===i.length&&!o)return void d.oR.info(v("No changes to save"));for(let e of i)await k.mutateAsync(e);if(o){if(!t.WaffoPancakeMerchantID)return void d.oR.error(v("Merchant ID is required"));if(!Y.storeID||!Y.productID)return void d.oR.error(v("Pick or create both a 
1store and a product before saving."));try{let e=await ew({merchantID:t.WaffoPancakeMerchantID,privateKey:t.WaffoPancakePrivateKey,returnURL:t.WaffoPancakeReturnURL,storeID:Y.storeID,productID:Y.productID});if(e?.message==="success"&&"object"==typeof e.data&&e.data){let t=e.data,n={storeID:t.store_id,productID:t.product_id};ee(n),X(n),x.invalidateQueries({queryKey:["system-options"]}),d.oR.success(v("Waffo Pancake settings saved"));return}let n="string"==typeof e?.data?e.data:void 0;d.oR.error(n?`${v("Waffo Pancake save failed")}: ${n}`:v("Waffo Pancake save failed"))}catch(e){d.oR.error(`${v("Waffo Pancake save failed")}: ${e instanceof Error?e.message:String(e)}`)}}},eg=el.watch(),ef={WaffoEnabled:eg.WaffoEnabled,WaffoApiKey:eg.WaffoApiKey,WaffoPrivateKey:eg.WaffoPrivateKey,WaffoPublicCert:eg.WaffoPublicCert,WaffoSandboxPublicCert:eg.WaffoSandboxPublicCert,WaffoSandboxApiKey:eg.WaffoSandboxApiKey,WaffoSandboxPrivateKey:eg.WaffoSandboxPrivateKey,WaffoSandbox:eg.WaffoSandbox,WaffoMerchantId:eg.WaffoMerchantId,WaffoCurrency:eg.WaffoCurrency,WaffoUnitPrice:eg.WaffoUnitPrice,WaffoMinTopUp:eg.WaffoMinTopUp,WaffoNotifyUrl:eg.WaffoNotifyUrl,WaffoReturnUrl:eg.WaffoReturnUrl,WaffoPayMethods:JSON.stringify($)},ey={WaffoPancakeMerchantID:eg.WaffoPancakeMerchantID,WaffoPancakePrivateKey:eg.WaffoPancakePrivateKey,WaffoPancakeReturnURL:eg.WaffoPancakeReturnURL};return(0,a.jsxs)(f.X,{title:v("Payment Gateway"),children:[er?(0,a.jsxs)(N.Fc,{className:"mb-6",children:[(0,a.jsx)(N.XL,{children:v("Compliance confirmed")}),(0,a.jsx)(N.TN,{children:v("Confirmed at {{time}} by user #{{userId}}",{time:b.confirmedAt?new Date(1e3*b.confirmedAt).toLocaleString():"-",userId:b.confirmedBy||"-"})})]}):(0,a.jsxs)(N.Fc,{variant:"destructive",className:"mb-6",children:[(0,a.jsx)(O.A,{className:"h-4 w-4"}),(0,a.jsx)(N.XL,{children:v("Compliance confirmation required")}),(0,a.jsx)(N.TN,{children:(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsx)("p",{children:v("Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.")}),(0,a.jsx)("ol",{className:"list-decimal space-y-1 pl-5",children:et.map(e=>(0,a.jsx)("li",{children:e},e))})]})}),(0,a.jsx)(N.T2,{children:(0,a.jsx)(q.$,{type:"button",size:"sm",variant:"destructive",onClick:()=>H(!0),children:v("Confirm compliance")})})]}),(0,a.jsx)(K,{open:V,onOpenChange:H,title:v("Confirm compliance terms"),description:v("This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully."),items:et,requiredText:ea,requiredTextParts:eo,inputPrompt:v("Please type the following text to confirm:"),inputPlaceholder:v("Type the confirmation text here"),mismatchHint:v("The entered text does not match the required text."),confirmText:v("Confirm and enable"),isLoading:es.isPending,onConfirm:()=>es.mutate()}),(0,a.jsx)(u.lV,{...el,children:(0,a.jsxs)(m.yt,{onSubmit:el.handleSubmit(em),className:(0,U.cn)("gap-y-8",!er&&"pointer-events-none opacity-40"),"data-no-autosubmit":"true",children:[(0,a.jsx)(g.S2,{onSave:el.handleSubmit(em),isSaving:k.isPending||ec,saveLabel:"Save all settings"}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-medium",children:v("General Settings")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:v("Shared configuration for all payment gateways")})]}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2",children:[(0,a.jsx)(u.zB,{control:el.control,name:"Price",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Price (local currency / USD)")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",min:0,...(0,P.X)(t)})}),(0,a.jsx)(u.Rr,{children:v("How much to charge for each US dollar of balance (Epay)")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"MinTopUp",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Minimum top-up (USD)")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",min:0,...(0,P.X)(t)})}),(0,a.jsx)(u.Rr,{children:v("Smallest USD amount users can recharge (Epay)")}),(0,a.jsx)(u.C5,{})]})}})]}),(0,a.jsx)(u.zB,{control:el.control,name:"PayMethods",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsxs)("div",{className:"mb-2 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)(u.lR,{children:v("Payment methods")}),(0,a.jsx)(q.$,{type:"button",variant:"outline",size:"sm",onClick:()=>j(!A),className:"w-full sm:w-auto",children:A?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(L.A,{className:"mr-2 h-3 w-3"}),v("JSON Editor")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.A,{className:"mr-2 h-3 w-3"}),v("Visual Editor")]})})]}),(0,a.jsx)(u.MJ,{children:A?(0,a.jsx)(ev,{value:t.value,onChange:t.onChange}):(0,a.jsx)(_.T,{rows:4,placeholder:v('[{"name":"支付宝","type":"alipay","color":"#1677FF"}]'),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Configure available payment methods. Provide a JSON array.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2 md:items-start",children:[(0,a.jsx)(u.zB,{control:el.control,name:"AmountOptions",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsxs)("div",{className:"mb-2 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)(u.lR,{children:v("Top-up amount options")}),(0,a.jsx)(q.$,{type:"button",variant:"outline",size:"sm",onClick:()=>R(!I),className:"w-full sm:w-auto",children:I?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(L.A,{className:"mr-2 h-3 w-3"}),v("JSON Editor")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.A,{className:"mr-2 h-3 w-3"}),v("Visual Editor")]})})]}),(0,a.jsx)(u.MJ,{children:I?(0,a.jsx)(ei,{value:t.value,onChange:t.onChange}):(0,a.jsx)(_.T,{rows:4,placeholder:"[10, 20, 50, 100]",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Preset recharge amounts (JSON array)")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"AmountDiscount",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsxs)("div",{className:"mb-2 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)(u.lR,{children:v("Amount discount")}
1),(0,a.jsx)(q.$,{type:"button",variant:"outline",size:"sm",onClick:()=>G(!B),className:"w-full sm:w-auto",children:B?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(L.A,{className:"mr-2 h-3 w-3"}),v("JSON Editor")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.A,{className:"mr-2 h-3 w-3"}),v("Visual Editor")]})})]}),(0,a.jsx)(u.MJ,{children:B?(0,a.jsx)(en,{value:t.value,onChange:t.onChange}):(0,a.jsx)(_.T,{rows:4,placeholder:'{"100":0.95,"200":0.9}',...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Discount map by recharge amount (JSON object)")}),(0,a.jsx)(u.C5,{})]})}})]})]}),(0,a.jsx)(F.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-medium",children:v("Epay Gateway")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:v("Configuration for Epay payment integration")})]}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2",children:[(0,a.jsx)(u.zB,{control:el.control,name:"PayAddress",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Epay endpoint")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:v("https://pay.example.com"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Base address provided by your Epay service")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"CustomCallbackAddress",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Callback address")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:v("https://gateway.example.com"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Optional callback override. Leave blank to use server address")}),(0,a.jsx)(u.C5,{})]})}})]}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2",children:[(0,a.jsx)(u.zB,{control:el.control,name:"EpayId",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Epay merchant ID")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:"10001",autoComplete:"off",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"EpayKey",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Epay secret key")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"password",placeholder:v("Enter new key to update"),autoComplete:"new-password",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Leave blank unless rotating the secret")}),(0,a.jsx)(u.C5,{})]})}})]})]}),(0,a.jsx)(F.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-medium",children:v("Stripe Gateway")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:v("Configuration for Stripe payment integration")})]}),(0,a.jsxs)("div",{className:"rounded-md bg-blue-50 p-4 text-sm text-blue-900 dark:bg-blue-950 dark:text-blue-100",children:[(0,a.jsx)("p",{className:"mb-2 font-medium",children:v("Webhook Configuration:")}),(0,a.jsxs)("ul",{className:"list-inside list-disc space-y-1",children:[(0,a.jsxs)("li",{children:[v("Webhook URL:")," ",(0,a.jsx)("code",{className:"rounded bg-blue-100 px-1 py-0.5 text-xs dark:bg-blue-900",children:"<ServerAddress>/api/stripe/webhook"})]}),(0,a.jsxs)("li",{children:[v("Required events:")," ",(0,a.jsx)("code",{className:"rounded bg-blue-100 px-1 py-0.5 text-xs dark:bg-blue-900",children:v("checkout.session.completed")})," ",v("and")," ",(0,a.jsx)("code",{className:"rounded bg-blue-100 px-1 py-0.5 text-xs dark:bg-blue-900",children:v("checkout.session.expired")})]}),(0,a.jsxs)("li",{children:[v("Configure at:")," ",(0,a.jsx)("a",{href:"https://dashboard.stripe.com/developers",target:"_blank",rel:"noreferrer",className:"underline hover:no-underline",children:v("Stripe Dashboard")})]})]})]}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-3",children:[(0,a.jsx)(u.zB,{control:el.control,name:"StripeApiSecret",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("API secret")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"password",placeholder:v("sk_xxx or rk_xxx"),autoComplete:"new-password",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Stripe API key (leave blank unless updating)")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"StripeWebhookSecret",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Webhook secret")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"password",placeholder:v("whsec_xxx"),autoComplete:"new-password",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Webhook signing secret (leave blank unless updating)")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"StripePriceId",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Price ID")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:v("price_xxx"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Stripe product price ID")}),(0,a.jsx)(u.C5,{})]})}})]}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-3",children:[(0,a.jsx)(u.zB,{control:el.control,name:"StripeUnitPrice",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Unit price (local currency / USD)")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",min:0,...(0,P.X)(t)})}),(0,a.jsx)(u.Rr,{children:v("e.g., 8 means 8 local currency per USD")}
1),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"StripeMinTopUp",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Minimum top-up (USD)")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",min:0,...(0,P.X)(t)})}),(0,a.jsx)(u.Rr,{children:v("Minimum recharge amount in USD")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"StripePromotionCodesEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:v("Promotion codes")}),(0,a.jsx)(u.Rr,{children:v("Allow users to enter promo codes")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})]}),(0,a.jsx)(F.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-medium",children:v("Creem Gateway")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:v("Configuration for Creem payment integration")})]}),(0,a.jsxs)("div",{className:"rounded-md bg-blue-50 p-4 text-sm text-blue-900 dark:bg-blue-950 dark:text-blue-100",children:[(0,a.jsx)("p",{className:"mb-2 font-medium",children:v("Webhook Configuration:")}),(0,a.jsxs)("ul",{className:"list-inside list-disc space-y-1",children:[(0,a.jsxs)("li",{children:[v("Webhook URL:")," ",(0,a.jsx)("code",{className:"rounded bg-blue-100 px-1 py-0.5 text-xs dark:bg-blue-900",children:"<ServerAddress>/api/creem/webhook"})]}),(0,a.jsx)("li",{children:v("Configure in your Creem dashboard")})]})]}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2",children:[(0,a.jsx)(u.zB,{control:el.control,name:"CreemApiKey",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("API Key")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"password",placeholder:v("Enter Creem API key"),autoComplete:"new-password",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Creem API key (leave blank unless updating)")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"CreemWebhookSecret",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Webhook Secret")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"password",placeholder:v("Enter webhook secret"),autoComplete:"new-password",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Webhook signing secret (leave blank unless updating)")}),(0,a.jsx)(u.C5,{})]})}})]}),(0,a.jsx)(u.zB,{control:el.control,name:"CreemTestMode",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:v("Test Mode")}),(0,a.jsx)(u.Rr,{children:v("Enable test mode for Creem payments")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"CreemProducts",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsxs)("div",{className:"mb-2 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)(u.lR,{children:v("Products")}),(0,a.jsx)(q.$,{type:"button",variant:"outline",size:"sm",onClick:()=>J(!z),className:"w-full sm:w-auto",children:z?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(L.A,{className:"mr-2 h-3 w-3"}),v("JSON Editor")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.A,{className:"mr-2 h-3 w-3"}),v("Visual Editor")]})})]}),(0,a.jsx)(u.MJ,{children:z?(0,a.jsx)(ed,{value:t.value,onChange:t.onChange}):(0,a.jsx)(_.T,{rows:4,placeholder:'[{"name":"Basic","productId":"prod_xxx","price":10,"quota":500000,"currency":"USD"}]',...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Configure Creem products. Provide a JSON array.")}),(0,a.jsx)(u.C5,{})]})}})]}),(0,a.jsx)(F.w,{}),(0,a.jsx)(eA,{defaultValues:i,values:ey,onValueChange:ep,selectedBinding:Y,savedBinding:Z,onSelectedBindingChange:X}),(0,a.jsx)(F.w,{}),(0,a.jsx)(eP,{values:ef,onValueChange:eh,payMethods:$,onPayMethodsChange:Q})]})})]})}var eR=n(96084),eT=n(2388),eM=n(67180),eD=n(39640),eO=n(34915),eL=n(43713),eE=n(88939),eU=n(94924),eq=n(23962),eF=n(48726);let e_="relative shadow-sm ring-0 before:pointer-events-none before:absolute before:inset-0 before:rounded-xl before:border before:border-border/90",eB="border-b bg-muted/20",eG=0;function ez(){return eG+=1,`gpr_${eG}`}function eK(e){let t=Number(e);return Number.isFinite(t)?t:1}function eW(e,t){let n=(0,Y.jD)(e,{fallback:{},context:"group ratios"}),a=(0,Y.jD)(t,{fallback:{},context:"user usable groups"});return Array.from(new Set([...Object.keys(n),...Object.keys(a)])).map(e=>({_id:ez(),name:e,ratio:eK(n[e]),selectable:Object.prototype.hasOwnProperty.call(a,e),description:String(a[e]??"")}))}function eJ(e){let t={},n={};for(let a of e){let e=a.name.trim();e&&(t[e]=eK(a.ratio),a.selectable&&(n[e]=a.description))}return{GroupRatio:JSON.stringify(t,null,2),UserUsableGroups:JSON.stringify(n,null,2)}}let eV=(0,T.memo)(function(e){let{groupRatio:t,topupGroupRatio:n,userUsableGroups:i,groupGroupRatio:o,autoGroups:r,onChange:s}=e,{t:l}=(0,c.Bd)(),[d,u]=(0,T.useState)(!1),[p,m]=(0,T.useState)(null),[g,f]=(0,T.useState)(null),[y,b]=(0,T.useState)(!1),[v,x]=(0,T.useState)(""),[k,C]=(0,T.useState)(!1),[S,w]=(0,T.useState)(null),[A,P]=(0,T.useState)(null),[j,N]=(0,T.useState)(!1),[I,R]=(0,T.useState)(""),M=(0,T.useMemo)(()=>Object.entries((0,Y.jD)(n,{fallback:{},context:"topup group ratios"})).map(e=>{let[t,n]=e;return{name:t,value:String(n)}}),[n]),D=(0,T.useMemo)(()=>(0,Y.jD)(r,{fallback:[],context:"auto groups"}),[r]),O=(0,T.useMemo)(()=>Object.entries((0,Y.jD)(o,{fallback:{},context:"group-group ratios"})).map(e=>{let[t,n]=e;return{userGroup:t,overrides:Object.entries(n).map(e=>{let[t,n]=e;return{targetGroup:t,ratio:n}})}}),[o]),L=(e,t)=>{let n=[...D],a="up"===t?e-1:e+1;a<0||a>=n.length||([n[e],n[a]]=[n[a],n[e]],s("AutoGroups",JSON.stringify(n,null,2)))};return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(eH,{groupRatio:t,userUsableGroups:i,onChange:s}),(0,a.jsxs)(eq.Zp,{className:e_,children:[(0,a.jsxs)(eq.aR,{className:eB,children:[(0,a.jsx)(eq.ZB,{children:l("Top-up group ratios")}),(0,a.jsx)(eq.BT,{children:l("Multipliers for recharge pricing based on user groups.")})]}),(0,a.jsx)(eq.Wu,{children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)(q.$,{onClick:()=>{m("topupGroupRatio"),f(null),u(!0)},size:"sm",children:[(0,a.jsx)(J.A,{className:"mr-2 h-4 w-4"}),l("Add group")]}),M.length>0&&(0,a.jsx)($.hm,{data:M,getRowKey:e=>e.name,columns:[{id:"group",header:l("Group name"),cellClassName:"font-medium",cell:e=>e.name},{id:"multiplier",header:l("Multiplier"),cell:e=>e.value},{id:"actions",header:l("Actions"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,a.jsx)(q.$,{variant:"ghost",size:"sm",onClick:()=>{m("topupGroupRatio"),f(e),u(!0)},children:(0,a.jsx)(V.A,{className:"h-4 w-4"})}),(0,a.jsx)(q.$,{variant:"ghost",size:"sm",onClick:()=>{var t,a;let i,o;return t="topupGroupRatio",a=e.name,i=n,o=(0,Y.jD)(i,{fallback:{},silent:!0}),delete o[a],void s("TopupGroupRatio",JSON.stringify(o,null,2))},children:(0,a.jsx)(H.A,{className:"h-4 w-4"})})]})}]})]})})]}),(0,a.jsxs)(eq.Zp,{className:e_,children:[(0,a.jsxs)(eq.aR,{className:eB,children:[(0,a.jsx)(eq.ZB,{children:l("Inter-group ratio overrides")}),(0,a.jsx)(eq.BT,{children:l('Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using "edit_this" group tokens.')})]}),(0,a.jsx)(eq.Wu,{children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)(q.$,{onClick:()=>{R(""),N(!0)},size:"sm",children:[(0,a.jsx)(J.A,{className:"mr-2 h-4 w-4"}),l("Add user group")]}),O.length>0&&(0,a.jsx)("div",{className:"space-y-3",children:O.map(e=>(0,a.jsx)(eF.Nt,{children:(0,a.jsxs)("div",{className:"rounded-lg border",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between p-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(eF.R6,{render:(0,a.jsx)(q.$,{variant:"ghost",size:"sm"}),children:(0,a.jsx)(eE.A,{className:"h-4 w-4"})}),(0,a.jsx)("span",{className:"font-semibold",children:e.userGroup}),(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:l("{{count}} override",{count:e.overrides.length})})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(q.$,{variant:"ghost",size:"sm",onClick:()=>{w(e.userGroup),P(null),C(!0)},children:(0,a.jsx)(J.A,{className:"h-4 w-4"})}),(0,a.jsx)(q.$,{variant:"ghost",size:"sm",onClick:()=>{var t;let n;return t=e.userGroup,n=(0,Y.jD)(o,{fallback:{},silent:!0}),void(delete n[t],s("GroupGroupRatio",JSON.stringify(n,null,2)))},children:(0,a.jsx)(H.A,{className:"h-4 w-4"})})]})]}),(0,a.jsx)(eF.Ke,{children:e.overrides.length>0&&(0,a.jsx)("div",{className:"border-t",children:(0,a.jsx)($.hm,{className:"rounded-none border-0",data:e.overrides,getRowKey:e=>e.targetGroup,columns:[{id:"target-group",header:l("Target group"),cellClassName:"font-medium",cell:e=>e.targetGroup},{id:"ratio",header:l("Ratio"),cell:e=>e.ratio},{id:"actions",header:l("Actions"),className:"text-right",cellClassName:"text-right",cell:t=>(0,a.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,a.jsx)(q.$,{variant:"ghost",size:"sm",onClick:()=>{var n;return n=e.userGroup,void(w(n),P(t),C(!0))},children:(0,a.jsx)(V.A,{className:"h-4 w-4"})}),(0,a.jsx)(q.$,{variant:"ghost",size:"sm",onClick:()=>{var n,a;let i;return n=e.userGroup,a=t.targetGroup,void((i=(0,Y.jD)(o,{fallback:{},silent:!0}))[n]&&(delete i[n][a],0===Object.keys(i[n]).length&&delete i[n]),s("GroupGroupRatio",JSON.stringify(i,null,2)))},children:(0,a.jsx)(H.A,{className:"h-4 w-4"})})]})}]})})})]})},e.userGroup))})]})})]}),(0,a.jsxs)(eq.Zp,{className:e_,children:[(0,a.jsxs)(eq.aR,{className:eB,children:[(0,a.jsx)(eq.ZB,{children:l("Auto assignment order")}),(0,a.jsx)(eq.BT,{children:l("Priority order for automatic group assignment. New tokens rotate through this list.")})]}),(0,a.jsx)(eq.Wu,{children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)(q.$,{onClick:()=>{x(""),b(!0)},size:"sm",children:[(0,a.jsx)(J.A,{className:"mr-2 h-4 w-4"}),l("Add group")]}),D.length>0&&(0,a.jsx)("div",{className:"space-y-2",children:D.map((e,t)=>(0,a.jsxs)("div",{className:"flex items-center gap-2 rounded-md border p-3",children:[(0,a.jsx)(eU.A,{className:"text-muted-foreground h-4 w-4"}),(0,a.jsx)("span",{className:"flex-1 font-medium",children:e}),(0,a.jsxs)("div",{className:"flex gap-1",children:[(0,a.jsx)(q.$,{variant:"ghost",size:"sm",disabled:0===t,onClick:()=>L(t,"up"),children:"↑"}),(0,a.jsx)(q.$,{variant:"ghost",size:"sm",disabled:t===D.length-1,onClick:()=>L(t,"down"),children:"↓"}),(0,a.jsx)(q.$,{variant:"ghost",size:"sm",onClick:()=>
1{s("AutoGroups",JSON.stringify(D.filter((e,n)=>n!==t),null,2))},children:(0,a.jsx)(H.A,{className:"h-4 w-4"})})]})]},t))})]})})]}),(0,a.jsx)(e$,{open:d,onOpenChange:u,onSave:(e,a)=>{if(!p)return;let i="groupRatio"===p?t:n,o=(0,Y.jD)(i,{fallback:{},silent:!0});g&&g.name!==e&&delete o[g.name],o[e]=parseFloat(a),s("groupRatio"===p?"GroupRatio":"TopupGroupRatio",JSON.stringify(o,null,2)),u(!1)},editData:g,type:p}),(0,a.jsx)(Z.l,{open:y,onOpenChange:b,title:l("Add auto group"),description:l("Add a group identifier to the auto assignment list."),contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(q.$,{variant:"outline",onClick:()=>b(!1),children:l("Cancel")}),(0,a.jsx)(q.$,{onClick:()=>{v.trim()&&(s("AutoGroups",JSON.stringify([...D,v.trim()],null,2)),b(!1))},children:l("Add")})]}),children:(0,a.jsx)("div",{className:"space-y-4 py-4",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(z.J,{children:l("Group identifier")}),(0,a.jsx)(h.p,{value:v,onChange:e=>x(e.target.value),placeholder:l("default")})]})})}),(0,a.jsx)(Z.l,{open:j,onOpenChange:N,title:l("Add user group"),description:l("Create a new user group to configure ratio overrides for."),contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(q.$,{variant:"outline",onClick:()=>N(!1),children:l("Cancel")}),(0,a.jsx)(q.$,{onClick:()=>{if(!I.trim())return;let e=(0,Y.jD)(o,{fallback:{},silent:!0});e[I.trim()]||(e[I.trim()]={}),s("GroupGroupRatio",JSON.stringify(e,null,2)),N(!1)},children:l("Add")})]}),children:(0,a.jsx)("div",{className:"space-y-4 py-4",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(z.J,{children:l("User group name")}),(0,a.jsx)(h.p,{value:I,onChange:e=>R(e.target.value),placeholder:l("vip")})]})})}),(0,a.jsx)(eQ,{open:k,onOpenChange:C,onSave:(e,t,n)=>{if(!S)return;let a=(0,Y.jD)(o,{fallback:{},silent:!0});a[S]||(a[S]={}),n&&n!==e&&delete a[S][n],a[S][e]=t,s("GroupGroupRatio",JSON.stringify(a,null,2)),C(!1)},editData:A,userGroup:S})]})});function eH(e){let{groupRatio:t,userUsableGroups:n,onChange:i}=e,{t:o}=(0,c.Bd)(),[r,s]=(0,T.useState)(()=>eW(t,n));(0,T.useEffect)(()=>{let e=JSON.stringify({groupRatio:(0,Y.jD)(t,{fallback:{},silent:!0}),userUsableGroups:(0,Y.jD)(n,{fallback:{},silent:!0})});s(a=>{let i;return(i=eJ(a),JSON.stringify({groupRatio:(0,Y.jD)(i.GroupRatio,{fallback:{},silent:!0}),userUsableGroups:(0,Y.jD)(i.UserUsableGroups,{fallback:{},silent:!0})})===e)?a:eW(t,n)})},[t,n]);let l=(0,T.useCallback)(e=>{s(e);let t=eJ(e);i("GroupRatio",t.GroupRatio),i("UserUsableGroups",t.UserUsableGroups)},[i]),d=(0,T.useCallback)((e,t,n)=>{l(r.map(a=>a._id===e?{...a,[t]:n}:a))},[l,r]),u=(0,T.useCallback)(()=>{let e=new Set(r.map(e=>e.name)),t=1,n=`group_${t}`;for(;e.has(n);)t+=1,n=`group_${t}`;l([...r,{_id:ez(),name:n,ratio:1,selectable:!0,description:""}])},[l,r]),p=(0,T.useCallback)(e=>{l(r.filter(t=>t._id!==e))},[l,r]),m=(0,T.useMemo)(()=>{let e=new Map;for(let t of r){let n=t.name.trim();n&&e.set(n,(e.get(n)??0)+1)}return Array.from(e.entries()).filter(e=>{let[,t]=e;return t>1}).map(e=>{let[t]=e;return t})},[r]);return(0,a.jsxs)(eq.Zp,{className:e_,children:[(0,a.jsx)(eq.aR,{className:eB,children:(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(eq.ZB,{children:o("Pricing groups")}),(0,a.jsx)(eq.BT,{children:o("Edit billing ratios and user-selectable groups in one table.")})]}),(0,a.jsxs)(q.$,{onClick:u,size:"sm",className:"sm:self-start",children:[(0,a.jsx)(J.A,{className:"mr-2 h-4 w-4"}),o("Add group")]})]})}),(0,a.jsx)(eq.Wu,{children:(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsx)($.hm,{data:r,getRowKey:e=>e._id,emptyClassName:"text-muted-foreground h-20 text-sm",emptyContent:o("No groups yet. Add a group to get started."),columns:[{id:"group",header:o("Group name"),className:"min-w-40",cell:e=>(0,a.jsx)(h.p,{value:e.name,onChange:t=>d(e._id,"name",t.target.value),"aria-invalid":m.includes(e.name.trim())})},{id:"ratio",header:o("Ratio"),className:"w-28",cell:e=>(0,a.jsx)(h.p,{type:"number",min:0,step:.1,value:String(e.ratio),onChange:t=>d(e._id,"ratio",eK(t.target.value))})},{id:"selectable",header:o("User selectable"),className:"w-28 text-center",cell:e=>(0,a.jsx)("div",{className:"flex justify-center",children:(0,a.jsx)(G.S,{
1checked:e.selectable,onCheckedChange:t=>d(e._id,"selectable",!0===t),"aria-label":o("User selectable")})})},{id:"description",header:o("Description"),className:"min-w-56",cell:e=>e.selectable?(0,a.jsx)(h.p,{value:e.description,placeholder:o("Group description"),onChange:t=>d(e._id,"description",t.target.value)}):(0,a.jsx)("span",{className:"text-muted-foreground px-3 text-sm",children:"-"})},{id:"actions",header:o("Actions"),className:"w-16 text-right",cellClassName:"text-right",cell:e=>(0,a.jsx)(q.$,{variant:"ghost",size:"sm",onClick:()=>p(e._id),"aria-label":o("Delete"),children:(0,a.jsx)(H.A,{className:"h-4 w-4"})})}]}),m.length>0&&(0,a.jsx)("p",{className:"text-destructive text-sm",children:o("Duplicate group names: {{names}}",{names:m.join(", ")})})]})})]})}function e$(e){let{open:t,onOpenChange:n,onSave:i,editData:o,type:r}=e,{t:s}=(0,c.Bd)(),[l,d]=(0,T.useState)(""),[u,p]=(0,T.useState)(""),m=s("groupRatio"===r?"group ratio":"top-up ratio");return(0,T.useEffect)(()=>{if(!t){d(""),p("");return}d(o?.name??""),p(o?.value??"")},[o,t]),(0,a.jsx)(Z.l,{open:t,onOpenChange:n,title:s(o?"Edit {{title}}":"Add {{title}}",{title:m}),description:s("Configure the ratio for this group."),contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(q.$,{variant:"outline",onClick:()=>n(!1),children:s("Cancel")}),(0,a.jsx)(q.$,{onClick:()=>{l.trim()&&u.trim()&&(i(l.trim(),u.trim()),d(""),p(""))},children:s(o?"Update":"Add")})]}),children:(0,a.jsxs)("div",{className:"space-y-4 py-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(z.J,{children:s("Group name")}),(0,a.jsx)(h.p,{value:l,onChange:e=>d(e.target.value),placeholder:s("default"),disabled:!!o})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(z.J,{children:s("Ratio")}),(0,a.jsx)(h.p,{value:u,onChange:e=>{let t=e.target.value;""!==t&&isNaN(parseFloat(t))||p(t)},placeholder:"1.0"})]})]})})}function eQ(e){let{open:t,onOpenChange:n,onSave:i,editData:o,userGroup:r}=e,{t:s}=(0,c.Bd)(),[l,d]=(0,T.useState)(""),[u,p]=(0,T.useState)("");return(0,T.useEffect)(()=>{if(!t){d(""),p("");return}d(o?.targetGroup??""),p(o?String(o.ratio):"")},[o,t]),(0,a.jsx)(Z.l,{open:t,onOpenChange:n,title:s(o?"Edit ratio override":"Add ratio override"),description:r?s('Configure a custom ratio for "{{userGroup}}" users when using a specific token group.',{userGroup:r}):s("Configure a custom ratio for when users use a specific token group."),contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(q.$,{variant:"outline",onClick:()=>n(!1),children:s("Cancel")}),(0,a.jsx)(q.$,{onClick:()=>{if(!l.trim()||!u.trim())return;let e=parseFloat(u);isNaN(e)||(i(l.trim(),e,o?.targetGroup),d(""),p(""))},children:s(o?"Update":"Add")})]}),children:(0,a.jsxs)("div",{className:"space-y-4 py-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(z.J,{children:s("Target group")}),(0,a.jsx)(h.p,{value:l,onChange:e=>d(e.target.value),placeholder:s("edit_this"),disabled:!!o}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:s("The token group that will have a custom ratio")})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(z.J,{children:s("Ratio")}),(0,a.jsx)(h.p,{value:u,onChange:e=>{let t=e.target.value;""!==t&&isNaN(parseFloat(t))||p(t)},placeholder:"0.9"}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:s("Multiplier applied when {{userGroup}} uses {{targetGroup}}",{userGroup:r||s("this user group"),targetGroup:l||s("this token group")})})]})]})})}var eY=n(9244);let eX="remove",eZ="append",e0=0;function e1(){return`gsu_${++e0}`}let e2={add:{variant:"info",label:"Add (+:)"},[eX]:{variant:"danger",label:"Remove (-:)"},[eZ]:{variant:"neutral",label:"Append"}};function e5(e){let{t}=(0,c.Bd)(),[n,i]=(0,T.useState)(!1);return(0,a.jsx)(eF.Nt,{open:n,onOpenChange:i,children:(0,a.jsxs)("div",{className:"rounded-lg border",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between p-3",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(eF.R6,{render:(0,a.jsx)(q.$,{variant:"ghost",size:"sm",className:"h-6 w-6 p-0"}),children:n?(0,a.jsx)(eY.A,{className:"h-4 w-4"}):(0,a.jsx)(eE.A,{className:"h-4 w-4"})}),(0,a.jsx)("span",{className:"font-semibold",children:e.groupName}),(0,a.jsxs)(Q.Wh,{variant:"neutral",copyable:!1,children:[e.items.length," ",t("rules")]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1",children:[(0,a.jsx)(q.$,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:()=>e.onAdd(e.groupName),children:(0,a.jsx)(J.A,{className:"h-4 w-4"})}),(0,a.jsx)(q.$,{variant:"ghost",size:"sm",className:"text-destructive h-7 w-7 p-0",onClick:()=>e.onRemoveGroup(e.groupName),children:(0,a.jsx)(H.A,{className:"h-4 w-4"})})]})]}),(0,a.jsx)(eF.Ke,{children:(0,a.jsx)("div",{className:"space-y-2 border-t p-3",children:e.items.map(n=>(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)(C.l6,{items:[{value:"add",label:(0,a.jsx)(Q.Wh,{label:t(e2.add.label),variant:e2.add.variant,copyable:!1})},{value:eX,label:(0,a.jsx)(Q.Wh,{label:t(e2[eX].label),variant:e2[eX].variant,copyable:!1})},{value:eZ,label:(0,a.jsx)(Q.Wh,{label:t(e2[eZ].label),variant:e2[eZ].variant,copyable:!1})}],value:n.op,onValueChange:t=>null!==t&&e.onUpdate(n._id,"op",t),children:[(0,a.jsx)(C.bq,{className:"w-[130px]",children:(0,a.jsx)(C.yv,{children:(0,a.jsx)(Q.Wh,{label:t(e2[n.op].label),variant:e2[n.op].variant,copyable:!1})})}),(0,a.jsx)(C.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(C.s3,{children:[(0,a.jsx)(C.eb,{value:"add",children:(0,a.jsx)(Q.Wh,{label:t(e2.add.label),variant:e2.add.variant,copyable:!1})}),(0,a.jsx)(C.eb,{value:eX,children:(0,a.jsx)(Q.Wh,{label:t(e2[eX].label),variant:e2[eX].variant,copyable:!1})}),(0,a.jsx)(C.eb,{value:eZ,children:(0,a.jsx)(Q.Wh,{label:t(e2[eZ].label),variant:e2[eZ].variant,copyable:!1})})]})})]}),(0,a.jsx)(h.p,{className:"flex-1",value:n.targetGroup,placeholder:t("Group name"),onChange:t=>e.onUpdate(n._id,"targetGroup",t.target.value)}),n.op!==eX?(0,a.jsx)(h.p,{className:"flex-1",value:n.description,placeholder:t("Description"),onChange:t=>e.onUpdate(n._id,"description",t.target.value)}):(0,a.jsx)("div",{className:"text-muted-foreground flex-1 px-3 text-sm",children:"-"}),(0,a.jsx)(q.$,{variant:"ghost",size:"sm",className:"text-destructive h-8 w-8 p-0",onClick:()=>e.onRemove(n._id),children:(0,a.jsx)(H.A,{className:"h-4 w-4"})})]},n._id))})})]})})}function e4(e){let{t}=(0,c.Bd)(),[n,i]=(0,T.useState)(()=>(function(e){let t=[];for(let[n,a]of Object.entries(e))if("object"==typeof a&&null!==a)for(let[e,i]of Object.entries(a)){let{op:a,groupName:o}=e.startsWith("+:")?{op:"add",groupName:e.slice(2)}:e.startsWith("-:")?{op:eX,groupName:e.slice(2)}:{op:eZ,groupName:e};t.push({_id:e1(),userGroup:n,op:a,targetGroup:o,description:a===eX?"remove":"string"==typeof i?i:""})}return t})(function(e){if(!e||!e.trim())return{};try{return JSON.parse(e)}catch{return{}}}(e.value))),[o,r]=(0,T.useState)(""),{onChange:s}=e,l=(0,T.useCallback)(e=>{let t;i(e),s(0===Object.keys(t=function(e){let t={};for(let{userGroup:n,op:a,targetGroup:i,description:o}of e)n&&i&&(t[n]||(t[n]={}),t[n]["add"===a?`+:${i}`:a===eX?`-:${i}`:i]=o);return t}(e)).length?"{}":JSON.stringify(t,null,2))},[s]),d=(0,T.useCallback)((e,t,a)=>{l(n.map(n=>{if(n._id!==e)return n;let i={...n,[t]:a};return"op"===t&&a===eX?i.description="remove":"op"===t&&n.op===eX&&a!==eX&&"remove"===i.description&&(i.description=""),i}))},[n,l]),u=(0,T.useCallback)(e=>l(n.filter(t=>t._id!==e)),[n,l]),p=(0,T.useCallback)(e=>l(n.filter(t=>t.userGroup!==e)),[n,l]),m=(0,T.useCallback)(e=>{l([...n,{_id:e1(),userGroup:e,op:eZ,targetGroup:"",description:""}])},[n,l]),g=(0,T.useCallback)(()=>{let e=o.trim();e&&(l([...n,{_id:e1(),userGroup:e,op:eZ,targetGroup:"",description:""}]),r(""))},[n,l,o]),f=(0,T.useMemo)(()=>{let e={},t=[];
1for(let a of n)a.userGroup&&(e[a.userGroup]||(e[a.userGroup]=[],t.push(a.userGroup)),e[a.userGroup].push(a));return t.map(t=>({name:t,items:e[t]}))},[n]);return(0,a.jsxs)(eq.Zp,{className:"relative shadow-sm ring-0 before:pointer-events-none before:absolute before:inset-0 before:rounded-xl before:border before:border-border/90",children:[(0,a.jsxs)(eq.aR,{className:"border-b bg-muted/20",children:[(0,a.jsx)(eq.ZB,{children:t("Special usable group rules")}),(0,a.jsx)(eq.BT,{children:t("Define per-group rules to add, remove, or append selectable groups for specific user groups.")})]}),(0,a.jsx)(eq.Wu,{children:(0,a.jsxs)("div",{className:"space-y-3",children:[0===f.length?(0,a.jsx)("p",{className:"text-muted-foreground py-4 text-center text-sm",children:t("No rules yet. Add a group below to get started.")}):f.map(e=>(0,a.jsx)(e5,{groupName:e.name,items:e.items,onUpdate:d,onRemove:u,onAdd:m,onRemoveGroup:p},e.name)),(0,a.jsxs)("div",{className:"flex items-center justify-center gap-2 pt-2",children:[(0,a.jsx)(h.p,{className:"w-[200px]",value:o,placeholder:t("User group name"),onChange:e=>r(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),g())}}),(0,a.jsxs)(q.$,{variant:"outline",size:"sm",onClick:g,children:[(0,a.jsx)(J.A,{className:"mr-1 h-4 w-4"}),t("Add group rules")]})]})]})})]})}let e3=(0,T.memo)(function(e){let{form:t,onSave:n,isSaving:i}=e,{t:o}=(0,c.Bd)(),[r,s]=(0,T.useState)("visual"),[l,d]=(0,T.useState)(!1),h=(0,T.useCallback)((e,n)=>{t.setValue(e,n,{shouldValidate:!0,shouldDirty:!0})},[t]),f=(0,T.useCallback)(()=>{s(e=>"visual"===e?"json":"visual")},[]);return(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,a.jsxs)(q.$,{variant:"outline",size:"sm",onClick:()=>d(!0),children:[(0,a.jsx)(eM.A,{className:"mr-2 h-4 w-4"}),o("Usage guide")]}),(0,a.jsx)(q.$,{variant:"outline",size:"sm",onClick:f,children:"visual"===r?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(L.A,{className:"mr-2 h-4 w-4"}),o("Switch to JSON")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.A,{className:"mr-2 h-4 w-4"}),o("Switch to Visual")]})})]}),(0,a.jsx)(e8,{open:l,onOpenChange:d}),(0,a.jsxs)(u.lV,{...t,children:[(0,a.jsx)(g.cN,{children:(0,a.jsx)(q.$,{type:"button",size:"sm",onClick:t.handleSubmit(n),disabled:i,children:i?o("Saving..."):o("Save group ratios")})}),"visual"===r?(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsx)(eV,{groupRatio:t.watch("GroupRatio"),topupGroupRatio:t.watch("TopupGroupRatio"),userUsableGroups:t.watch("UserUsableGroups"),groupGroupRatio:t.watch("GroupGroupRatio"),autoGroups:t.watch("AutoGroups"),onChange:(e,t)=>
1h(e,t)}),(0,a.jsx)(e4,{value:t.watch("GroupSpecialUsableGroup"),onChange:e=>h("GroupSpecialUsableGroup",e)}),(0,a.jsx)(u.zB,{control:t.control,name:"DefaultUseAutoGroup",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:o("Default to auto groups")}),(0,a.jsx)(u.Rr,{children:o("When enabled, newly created tokens start in the first auto group.")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]}):(0,a.jsxs)(m.yt,{onSubmit:t.handleSubmit(n),children:[(0,a.jsx)(u.zB,{control:t.control,name:"GroupRatio",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:o("Group ratios")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(_.T,{rows:8,...t})}),(0,a.jsx)(u.Rr,{children:o("JSON map of group → ratio applied when the user selects the group explicitly.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:t.control,name:"TopupGroupRatio",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:o("Top-up group ratios")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(_.T,{rows:6,...t})}),(0,a.jsxs)(u.Rr,{children:[o("Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as"),' { "default": 1, "vip": 1.2 }',"."]}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:t.control,name:"UserUsableGroups",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:o("Selectable groups")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(_.T,{rows:6,...t})}),(0,a.jsx)(u.Rr,{children:o("JSON map of group → description exposed when users create API keys.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:t.control,name:"GroupGroupRatio",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:o("Inter-group overrides")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(_.T,{rows:8,...t})}),(0,a.jsxs)(u.Rr,{children:[o("Nested JSON: source group →")," ","{ targetGroup: ratio }"," ",o("to override billing when a user in one group uses a token of another group.")]}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:t.control,name:"AutoGroups",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:o("Auto assignment order")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(_.T,{rows:6,...t})}),(0,a.jsx)(u.Rr,{children:o("JSON array of group identifiers. When enabled below, new tokens rotate through this list.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:t.control,name:"GroupSpecialUsableGroup",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:o("Special usable group rules")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(_.T,{rows:8,...t})}),(0,a.jsx)(u.Rr,{children:o("Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:t.control,name:"DefaultUseAutoGroup",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:o("Default to auto groups")}),(0,a.jsx)(u.Rr,{children:o("When enabled, newly created tokens start in the first auto group.")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})]})]})});function e6(e){let{children:t}=e;return(0,a.jsx)("pre",{className:"bg-muted/60 overflow-x-auto rounded-lg border px-3 py-2 text-xs leading-6 whitespace-pre-wrap",children:t})}function e8(e){let{open:t,onOpenChange:n}=e,{t:i}=(0,c.Bd)();return(0,a.jsx)(eO.cj,{open:t,onOpenChange:n,children:(0,a.jsxs)(eO.h,{side:"right",className:(0,eL.jW)("sm:max-w-2xl"),children:[(0,a.jsxs)(eO.Fm,{className:(0,eL.Dt)(),children:[(0,a.jsx)(eO.qp,{children:i("Group pricing usage guide")}),(0,a.jsx)(eO.Qs,{children:i("Understand how user groups, token groups, ratios, and special rules work together.")})]}),(0,a.jsxs)("div",{className:(0,eL.e)("gap-5"),children:[(0,a.jsxs)("section",{className:"space-y-2",children:[(0,a.jsx)("h3",{className:"text-sm font-semibold",children:i("Core concepts")}),(0,a.jsxs)("div",{className:"text-muted-foreground space-y-2 text-sm leading-6",children:[(0,a.jsxs)("p",{children:[(0,a.jsx)("span",{className:"text-foreground font-medium",children:i("User group")}),": ",i("Assigned by administrators and used to represent a user level, such as default or vip.")]}),(0,a.jsxs)("p",{children:[(0,a.jsx)("span",{className:"text-foreground font-medium",children:i("Token group")}),": ",i("Selected when creating a token and used as the default billing group for API calls.")]}),(0,a.jsxs)("p",{children:[(0,a.jsx)("span",{className:"text-foreground font-medium",children:i("Ratio")}),": ",i("A billing multiplier. Lower ratios mean lower API call costs.")]}),(0,a.jsxs)("p",{children:[(0,a.jsx)("span",{className:"text-foreground font-medium",children:i("User selectable")}),": ",i("When enabled, users can pick this group when creating tokens.")
1]})]})]}),(0,a.jsxs)(eD.nD,{className:"rounded-lg border px-3",children:[(0,a.jsxs)(eD.As,{value:"groups",children:[(0,a.jsx)(eD.$m,{children:i("Pricing group example")}),(0,a.jsxs)(eD.ub,{className:"space-y-3",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.")}),(0,a.jsx)(e6,{children:`${i("Group name")}   ${i("Ratio")}   ${i("User selectable")}   ${i("Description")}
2standard     1.0     ${i("Yes")}               ${i("Standard price")}
3premium      0.5     ${i("Yes")}               ${i("Premium plan, half price")}
4vip          0.5     ${i("No")}                ${i("Assigned by administrator only")}`}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.")})]})]}),(0,a.jsxs)(eD.As,{value:"auto",children:[(0,a.jsx)(eD.$m,{children:i("Auto group behavior")}),(0,a.jsxs)(eD.ub,{className:"space-y-3",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.")}),(0,a.jsx)(e6,{children:'["default", "vip"]'}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("If default auto group is enabled, newly created tokens start with auto instead of an empty group.")})]})]}),(0,a.jsxs)(eD.As,{value:"special-ratio",children:[(0,a.jsx)(eD.$m,{children:i("Special ratio rules")}),(0,a.jsxs)(eD.ub,{className:"space-y-3",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("Special ratios override the token group ratio for specific user group and token group combinations.")}),(0,a.jsx)(e6,{children:`{
5  "vip": {
6    "standard": 0.8,
7    "premium": 0.3
8  }
9}`}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("Only configured combinations are overridden. All other calls keep the token group base ratio.")})]})]}),(0,a.jsxs)(eD.As,{value:"usable",children:[(0,a.jsx)(eD.$m,{children:i("Special usable group rules")}),(0,a.jsxs)(eD.ub,{className:"space-y-3",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("Special usable group rules can add, remove, or append selectable token groups for a specific user group.")}),(0,a.jsx)(e6,{children:`{
10  "vip": {
11    "+:premium": "${i("Premium plan, half price")}",
12    "-:default": "remove",
13    "special": "${i("Special group")}"
14  }
15}`}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.")})]})]})]})]})]})})}var e7=n(36862),e9=n(74242),te=n(61049),tt=n(20582),tn=n(31348);function ta(e){let{value:t,onChange:n,disabled:i,heightClassName:o="h-56 min-h-56 max-h-56",className:r,id:s,"aria-describedby":l,"aria-invalid":d,...u}=e,{t:h}=(0,c.Bd)(),p=(0,T.useRef)(null),[m,g]=(0,T.useState)(0),f=(0,T.useMemo)(()=>Array.from({length:Math.max(1,t.split("\n").length)},(e,t)=>t+1),[t]),y=(0,T.useMemo)(()=>{let e=t.trim();if(!e)return{valid:!0,message:h("JSON")};try{return JSON.parse(e),{valid:!0,message:h("JSON")}}catch{return{valid:!1,message:h("Invalid JSON")}}},[t,h]),b=function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t;n(e),window.requestAnimationFrame(()=>{p.current?.setSelectionRange(t,a)})};return(0,a.jsxs)("div",{className:(0,U.cn)("border-input bg-background focus-within:border-ring focus-within:ring-ring/50 overflow-hidden rounded-lg border transition-colors focus-within:ring-3",r),...u,children:[(0,a.jsxs)("div",{className:"bg-muted/30 flex h-8 items-center justify-between border-b px-2",children:[(0,a.jsxs)("div",{className:"text-muted-foreground flex min-w-0 items-center gap-1.5 text-xs font-medium",children:[(0,a.jsx)(te.A,{className:"h-3.5 w-3.5"}),(0,a.jsx)("span",{children:h("JSON")})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("span",{className:(0,U.cn)("flex items-center gap-1 text-xs",y.valid?"text-emerald-600":"text-destructive"),children:[y.valid?(0,a.jsx)(tt.A,{className:"h-3.5 w-3.5"}):(0,a.jsx)(tn.A,{className:"h-3.5 w-3.5"}),y.message]}),(0,a.jsxs)(q.$,{type:"button",variant:"ghost",size:"sm",className:"h-6 px-2 text-xs",onClick:()=>{let e=t.trim();if(e)try{n(JSON.stringify(JSON.parse(e),null,2))}catch{}},disabled:i||!y.valid||!t.trim(),children:[(0,a.jsx)(L.A,{className:"mr-1 h-3.5 w-3.5"}),h("Format JSON")]})]})]}),(0,a.jsxs)("div",{className:(0,U.cn)("relative flex overflow-hidden",o),children:[(0,a.jsx)("div",{className:"bg-muted/20 text-muted-foreground
15/70 relative w-10 shrink-0 overflow-hidden border-r font-mono text-xs leading-5 select-none",children:(0,a.jsx)("div",{className:"px-2 py-2 text-right",style:{transform:`translateY(-${m}px)`},children:f.map(e=>(0,a.jsx)("div",{children:e},e))})}),(0,a.jsx)(_.T,{ref:p,id:s,"aria-describedby":l,"aria-invalid":d,value:t,disabled:i,onChange:e=>n(e.target.value),onKeyDown:e=>{let n=e.currentTarget,a=n.selectionStart,i=n.selectionEnd,o=t.slice(a,i),r=t.slice(0,a),s=t.slice(i);if("Tab"===e.key){if(e.preventDefault(),a!==i&&o.includes("\n")){let n=t.lastIndexOf("\n",a-1)+1,o=t.slice(n,i).split("\n"),r=e.shiftKey?o.map(e=>e.startsWith("  ")?e.slice(2):e.startsWith("	")?e.slice(1):e).join("\n"):o.map(e=>`  ${e}`).join("\n");b(t.slice(0,n)+r+t.slice(i),n,n+r.length);return}if(e.shiftKey){let e=t.lastIndexOf("\n",a-1)+1;"  "===t.slice(e,e+2)&&b(t.slice(0,e)+t.slice(e+2),Math.max(e,a-2),Math.max(e,i-2));return}b(`${r}  ${s}`,a+2);return}if("Enter"===e.key){let n;e.preventDefault();let i=(n=t.lastIndexOf("\n",a-1)+1,t.slice(n,a).match(/^\s*/)?.[0]??""),o=r.trimEnd().at(-1),l=s.trimStart().at(0),c="{"===o||"["===o;if(c&&("{"===o&&"}"===l||"["===o&&"]"===l)){let e=`${i}  `,t=`
16${e}
17${i}`;b(`${r}${t}${s}`,a+1+e.length);return}let d=c?`${i}  `:i,u=`
18${d}`;b(`${r}${u}${s}`,a+u.length);return}let l={'"':'"',"{":"}","[":"]"};if(new Set(Object.values(l)).has(e.key)&&t[a]===e.key){e.preventDefault(),p.current?.setSelectionRange(a+1,a+1);return}if(l[e.key]){e.preventDefault();let t=l[e.key],n=`${e.key}${o}${t}`;b(`${r}${n}${s}`,a+1,a+1+o.length);return}if("Backspace"===e.key&&a===i&&a>0){let n=t[a-1],i=t[a];l[n]===i&&(e.preventDefault(),b(t.slice(0,a-1)+t.slice(a+1),a-1))}},onScroll:e=>g(e.currentTarget.scrollTop),className:(0,U.cn)("[field-sizing:fixed] resize-none overflow-auto rounded-none border-0 bg-transparent px-3 py-2 font-mono text-xs leading-5 shadow-none ring-0 outline-none focus-visible:ring-0",o),spellCheck:!1})]})]})}var ti=n(575),to=n(72094),tr=n(16684),ts=n(78416);function tl(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"field-group",className:(0,U.cn)("group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4",t),...n})}let tc=(0,n(86460).F)("group/field flex w-full gap-2 data-[invalid=true]:text-destructive",{variants:{orientation:{vertical:"flex-col *:w-full [&>.sr-only]:w-auto",horizontal:"flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",responsive:"flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"}},defaultVariants:{orientation:"vertical"}});function td(e){let{className:t,orientation:n="vertical",...i}=e;return(0,a.jsx)("div",{role:"group","data-slot":"field","data-orientation":n,className:(0,U.cn)(tc({orientation:n}),t),...i})}function tu(e){let{className:t,...n}=e;return(0,a.jsx)(z.J,{"data-slot":"field-label",className:(0,U.cn)("group/field-label peer/field-label has-data-checked:border-primary/30 has-data-checked:bg-primary/5 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10 flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5","has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col",t),...n})}function th(e){let{className:t,...n}=e;return(0,a.jsx)("p",{"data-slot":"field-description",className:(0,U.cn)("text-muted-foreground text-left text-sm leading-normal font-normal group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5","last:mt-0 nth-last-2:-mt-1","[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",t),...n})}var tp=n(76076);function tm(e){let t=function(e){if(""===e||null==e||!1===e)return null;let t=Number(e);return Number.isFinite(t)?t:null}(e);return null===t?"":Number.parseFloat((function(e){let t=Math.max(1e-12,Math.abs(e)*Number.EPSILON*8);for(let n=0;n<=8;n+=1){let a=function(e,t){let n=10**t;return Math.round(e*n)/n}(e,n);if(Math.abs(e-a)<=t)return a}return e})(t).toFixed(12)).toString()}let tg=/^(\d+(\.\d*)?|\.\d*)?$/,tf={completion:"",cache:"",createCache:"",image:"",audioInput:"",audioOutput:""},ty={completion:!1,cache:!1,createCache:!1,image:!1,audioInput:!1,audioOutput:!1},tb={completion:"completionRatio",cache:"cacheRatio",createCache:"createCacheRatio",image:"imageRatio",audioInput:"audioRatio",audioOutput:"audioCompletionRatio"},tv=[{key:"completion",titleKey:"Completion price",descriptionKey:"Output token price for generated tokens.",placeholder:"15"},{key:"cache",titleKey:"Cache read price",descriptionKey:"Token price for cache reads.",placeholder:"0.3"},{key:"createCache",titleKey:"Cache write price",descriptionKey:"Token price for creating cache entries.",placeholder:"3.75"},{key:"image",titleKey:"Image input price",descriptionKey:"Token price for image input.",placeholder:"2.5"},{key:"audioInput",titleKey:"Audio input price",descriptionKey:"Token price for audio input.",placeholder:"3.81"},{key:"audioOutput",titleKey:"Audio output price",descriptionKey:"Token price for audio output.",placeholder:"15.11"}];function tx(e){return""!==e&&null!=e&&!1!==e}function tk(e){if(!tx(e)&&0!==e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function tC(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=tk(e),i=tk(t);return null===a||null===i?n:tm(a*i)}function tS(e){return(0,a.jsxs)(tp.MG,{children:[(0,a.jsx)(tp.Sq,{children:"$"}),(0,a.jsx)(tp.iV,{inputMode:"decimal",value:e.value,placeholder:e.placeholder,disabled:e.disabled,onChange:t=>e.onChange(t.target.value)}),(0,a.jsx)(tp.Sq,{align:"inline-end",children:"$/1M"})]})}function tw(e){let{t}=(0,c.Bd)(),n=e.disabled||!e.enabled;return(0,a.jsxs)(m.WY,{className:(0,U.cn)("space-y-3",n&&"opacity-75"),"data-disabled":n||void 0,children:[(0,a.jsx)(m.ew,{checked:e.enabled,disabled:e.disabled,onCheckedChange:e.onEnabledChange,label:e.title,de
18scription:e.description,"aria-label":e.title}),(0,a.jsx)(tS,{value:e.value,placeholder:e.placeholder,disabled:n,onChange:e.onChange}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:t(e.enabled?"USD price per 1M tokens.":"Disabled lanes are omitted on save.")})]})}var tA=n(26067);let tP="timed",tj="generic";function tN(e){return e?.cache_mode===tP?tP:e?.cache_mode===tj?tj:Number(e?.cache_create_1h_unit_cost)>0?tP:tj}function tI(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{label:e.label??"",input_unit_cost:Number(e.input_unit_cost)||0,output_unit_cost:Number(e.output_unit_cost)||0,cache_mode:tN(e),conditions:Array.isArray(e.conditions)?e.conditions:[],...e,cache_read_unit_cost:Number(e.cache_read_unit_cost)||0,cache_create_unit_cost:Number(e.cache_create_unit_cost)||0,cache_create_1h_unit_cost:Number(e.cache_create_1h_unit_cost)||0,image_unit_cost:Number(e.image_unit_cost)||0,image_output_unit_cost:Number(e.image_output_unit_cost)||0,audio_input_unit_cost:Number(e.audio_input_unit_cost)||0,audio_output_unit_cost:Number(e.audio_output_unit_cost)||0}}function tR(){return{tiers:[tI({conditions:[],input_unit_cost:0,output_unit_cost:0,label:"base",cache_mode:tj})]}}function tT(e){return e&&Array.isArray(e.tiers)&&0!==e.tiers.length?{...e,tiers:e.tiers.map(e=>tI(e))}:tR()}function tM(e){return e&&0!==e.length?e.filter(e=>e.var&&e.op&&null!=e.value&&""!==e.value).map(e=>`${e.var} ${e.op} ${e.value}`).join(" && "):""}function tD(e){let t=[],n=Number(e.input_unit_cost)||0,a=Number(e.output_unit_cost)||0;for(let i of(t.push(`p * ${n}`),t.push(`c * ${a}`),tr.E2)){let n=Number(e[i.field])||0;0!==n&&t.push(`${i.exprVar} * ${n}`)}return t.join(" + ")}function tO(e){if(!e||!e.tiers||0===e.tiers.length)return"p * 0 + c * 0";let t=e.tiers;if(1===t.length){let e=t[0],n=e.label||"default",a=`tier("${n}", ${tD(e)})`,i=tM(e.conditions);return i?`${i} ? ${a} : p * 0 + c * 0`:a}let n=[];for(let e=0;e<t.length;e++){let a=t[e],i=a.label||`tier_${e+1}`,o=`tier("${i}", ${tD(a)})`,r=tM(a.conditions);e<t.length-1&&r?n.push(`${r} ? ${o}`):n.push(o)}return n.join(" : ")}function tL(e){if(!e)return null;try{let t,n=e,a=n.match(/^v\d+:([\s\S]*)$/);a&&(n=a[1]);let i=tr.E2.map(e=>e.exprVar).map(e=>`(?:\\s*\\+\\s*${e}\\s*\\*\\s*([\\d.eE+-]+))?`).join(""),o=`p\\s*\\*\\s*([\\d.eE+-]+)\\s*\\+\\s*c\\s*\\*\\s*([\\d.eE+-]+)${i}`,r=RegExp(`^tier\\("([^"]*)",\\s*${o}\\)$`),s=n.match(r);if(s){let e={conditions:[],input_unit_cost:Number(s[2]),output_unit_cost:Number(s[3]),label:s[1]};return tr.E2.forEach((t,n)=>{let a=s[4+n];null!=a&&(e[t.field]=Number(a))}),tT({tiers:[tI(e)]})}let l=RegExp(`(?:((?:(?:p|c|len)\\s*(?:<|<=|>|>=)\\s*[\\d.eE+]+)(?:\\s*&&\\s*(?:p|c|len)\\s*(?:<|<=|>|>=)\\s*[\\d.eE+]+)*)\\s*\\?\\s*)?tier\\("([^"]*)",\\s*${o}\\)`,"g"),c=[];for(;null!==(t=l.exec(n));){let e=t[1]||"",n=[];if(e)for(let t of e.split(/\s*&&\s*/)){let e=t.trim().match(/^(p|c|len)\s*(<|<=|>|>=)\s*([\d.eE+]+)$/);e&&n.push({var:e[1],op:e[2],value:Number(e[3])})}let a={conditions:n,input_unit_cost:Number(t[3]),output_unit_cost:Number(t[4]),label:t[2]},i=t;tr.E2.forEach((e,t)=>{let n=i[5+t];null!=n&&(a[e.field]=Number(n))}),c.push(tI(a))}if(0===c.length)return null;let d=tT({tiers:c});if(tO(d).replace(/\s+/g,"")!==n.replace(/\s+/g,""))return null;return d}catch{return null}}let tE=[{var:"cr",stateKey:"cacheReadTokens"},{var:"cc",stateKey:"cacheCreateTokens"},{var:"cc1h",stateKey:"cacheCreate1hTokens"},{var:"img",stateKey:"imageTokens"},{var:"img_o",stateKey:"imageOutputTokens"},{var:"ai",stateKey:"audioInputTokens"},{var:"ao",stateKey:"audioOutputTokens"}],tU=tr.s5.filter(e=>"cache"===e.group),tq=tr.s5.filter(e=>"media"===e.group),tF=[{value:"len",labelKey:"Full input length"},{value:"p",labelKey:"Billable input tokens"},{value:"c",labelKey:"Billable output tokens"}],t_=["<","<=",">",">="],tB=[{group:"Fixed price",presets:[{key:"flat",label:"Flat",expr:'tier("base", p * 2 + c * 4)'},{key:"claude-opus",label:"Claude Opus 4.6",expr:'tier("base", p * 5 + c * 25 + cr * 0.5 + cc * 6.25 + cc1h * 10)'},{key:"gpt-5.4",label:"GPT-5.4",expr:'len <= 272000 ? tier("standard", p * 2.5 + c * 15 + cr * 0.25) : tier("long_context", p * 5 + c * 22.5 + cr * 0.5)'}]},{group:"Tiered",presets:[{key:"claude-sonnet",label:"Claude Sonnet 4.5",expr:'len <= 200000 ? tier("standard", p * 3 + c * 15 + cr * 0.3 + cc * 3.75 + cc1h * 6) : tier("long_context", p * 6 + c * 22.5 + cr * 0.6 + cc * 7.5 + cc1h * 12)'}
18,{key:"qwen3-max",label:"Qwen3 Max",expr:'len <= 32000 ? tier("short", p * 1.2 + c * 6 + cr * 0.24 + cc * 1.5) : len <= 128000 ? tier("mid", p * 2.4 + c * 12 + cr * 0.48 + cc * 3) : tier("long", p * 3 + c * 15 + cr * 0.6 + cc * 3.75)'},{key:"glm-4.5-air",label:"GLM-4.5 Air",expr:'len < 32000 && c < 200 ? tier("short_output", p * 0.8 + c * 2 + cr * 0.16) : len < 32000 && c >= 200 ? tier("long_output", p * 0.8 + c * 6 + cr * 0.16) : tier("mid_context", p * 1.2 + c * 8 + cr * 0.24)'},{key:"doubao-seed-1.8",label:"Doubao Seed 1.8",expr:'len <= 32000 && c <= 200 ? tier("discount", p * 0.8 + c * 2 + cr * 0.16 + cc * 0.17) : len <= 32000 ? tier("short", p * 0.8 + c * 8 + cr * 0.16 + cc * 0.17) : len <= 128000 ? tier("mid", p * 1.2 + c * 16 + cr * 0.16 + cc * 0.17) : tier("long", p * 2.4 + c * 24 + cr * 0.16 + cc * 0.17)'}]},{group:"Multimodal",presets:[{key:"gpt-image-1-mini",label:"GPT Image 1 Mini",expr:'tier("base", p * 2 + c * 8 + img * 2.5)'},{key:"gemini-2.5-flash",label:"Gemini 2.5 Flash",expr:'tier("base", p * 0.3 + c * 2.5 + cr * 0.03 + ai * 1.0)'},{key:"gemini-3-pro-image",label:"Gemini 3 Pro Image",expr:'tier("base", p * 2 + c * 12 + img_o * 120)'},{key:"qwen3-omni-flash",label:"Qwen3 Omni Flash",expr:'tier("base", p * 0.43 + c * 3.06 + img * 0.78 + ai * 3.81 + ao * 15.11)'}]},{group:"Request rule",presets:[{key:"claude-opus-fast",label:"Claude Opus 4.6 Fast",expr:'tier("base", p * 5 + c * 25 + cr * 0.5 + cc * 6.25 + cc1h * 10)',requestRules:[{conditions:[{source:"header",path:"anthropic-beta",mode:tr.I2,value:"fast-mode-2026-02-01"}],multiplier:"6"}]},{key:"gpt-5.4-tiers",label:"GPT-5.4 Priority/Flex",expr:'len <= 272000 ? tier("standard", p * 2.5 + c * 15 + cr * 0.25) : tier("long_context", p * 5 + c * 22.5 + cr * 0.5)',requestRules:[{conditions:[{source:"param",path:"service_tier",mode:"eq",value:"priority"}],multiplier:"2"},{conditions:[{source:"param",path:"service_tier",mode:"eq",value:"flex"}],multiplier:"0.5"}]}]},{group:"Time-based",presets:[{key:"night-discount",label:"Night discount (50%)",expr:'tier("base", p * 3 + c * 15)',requestRules:[{conditions:[{source:"time",timeFunc:"hour",timezone:"Asia/Shanghai",mode:"range",value:"",rangeStart:"21",rangeEnd:"6"}],multiplier:"0.5"}]},{key:"weekend-discount",label:"Weekend discount (80%)",expr:'tier("base", p * 3 + c * 15)',requestRules:[{conditions:[{source:"time",timeFunc:"weekday",timezone:"Asia/Shanghai",mode:"eq",value:"0",rangeStart:"",rangeEnd:""}],multiplier:"0.8"},{conditions:[{source:"time",timeFunc:"weekday",timezone:"Asia/Shanghai",mode:"eq",value:"6",rangeStart:"",rangeEnd:""}],multiplier:"0.8"}]}]}];function tG(e){return Number(e)||0}function tz(e){return Number(e)||0}function tK(e){return""===e?"":"number"==typeof e?Number.isFinite(e)?String(e):"0":e}function tW(e){if(""===e.trim())return 0;let t=Number(e);return Number.isFinite(t)?t:0}function tJ(e){return""!==e.trim()&&0===tW(e)}function tV(e){let{value:t,onValueChange:n,selectZeroOnFocus:i=!0,onBlur:o,onFocus:r,onMouseUp:s,...l}=e,[c,d]=(0,T.useState)(()=>tK(t)),[u,p]=(0,T.useState)(!1);return(0,T.useEffect)(()=>{u||d(tK(t))},[u,t]),(0,a.jsx)(h.p,{...l,type:"number",value:c,onChange:e=>{let t=e.target.value;d(t),n(tW(t))},onFocus:e=>{p(!0),r?.(e),i&&tJ(e.currentTarget.value)&&e.currentTarget.select()},onMouseUp:e=>{s?.(e),i&&tJ(e.currentTarget.value)&&(e.preventDefault(),e.currentTarget.select())},onBlur:e=>{let t=tW(e.currentTarget.value);p(!1),d(String(t)),n(t),o?.(e)}})}function tH(e){let{condition:t,onChange:n,onRemove:i}=e,{t:o}=(0,c.Bd)(),r=tF.find(e=>e.value===t.var);return(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)(C.l6,{items:[...tF.map(e=>({value:e.value,label:o(e.labelKey)}))],value:t.var,onValueChange:e=>n({...t,var:e}),children:[(0,a.jsx)(C.bq,{className:"w-32",size:"sm",children:(0,a.jsx)(C.yv,{children:r?o(r.labelKey):t.var})}),(0,a.jsx)(C.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(C.s3,{children:tF.map(e=>(0,a.jsx)(C.eb,{value:e.value,children:o(e.labelKey)},e.value))})})]}),(0,a.jsxs)(C.l6,{items:t_.map(e=>({value:e,label:e})),value:t.op,onValueChange:e=>n({...t,op:e}),children:[(0,a.jsx)(C.bq,{className:"w-20",size:"sm",children:(0,a.jsx)(C.yv,{})}),(0,a.jsx)(C.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(C.s3,{children:t_.map(e=>(0,a.jsx)(C.eb,{value:e,children:e},e))})})]}),(0,a.jsx)(tV,{min:0,value:t.value,onValueChange:e=>n({...t,value:e}),placeholder:"tokens",className:"w-32"}),(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:function(e){if(null==e||""===e||Number.isNaN(Number(e)))return"";let t=Number(e);return 0===t?"= 0":t>
18=1e6?`= ${(t/1e6).toLocaleString()}M tokens`:t>=1e3?`= ${(t/1e3).toLocaleString()}K tokens`:`= ${t.toLocaleString()} tokens`}(t.value)}),(0,a.jsx)(q.$,{variant:"ghost",size:"icon",onClick:i,"aria-label":"remove",className:"ml-auto",children:(0,a.jsx)(H.A,{className:"text-destructive h-4 w-4"})})]})}function t$(e){let{label:t,hint:n,value:i,onChange:o}=e;return(0,a.jsxs)("div",{className:"w-36 space-y-0.5",children:[(0,a.jsx)(z.J,{className:"text-muted-foreground text-xs",children:t}),(0,a.jsx)(tV,{min:0,step:1e-6,value:Number.isFinite(i)?i:0,onValueChange:o,className:"h-8 w-full"}),n&&(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:n})]})}function tQ(e){let{tier:t,index:n,total:i,onChange:o,onRemove:r,onAddCondition:s}=e,{t:l}=(0,c.Bd)(),d=tN(t),u=(e,n)=>{o({...t,[e]:n})},p=tG(t.input_unit_cost),m=tG(t.output_unit_cost),g=tq.some(e=>tG(t[e.tierField]??0)>0),[f,y]=(0,T.useState)(g);(0,T.useEffect)(()=>{g&&y(!0)},[g]);let b=e=>{let n=e.tierField,i=tG(t[n]??0);return(0,a.jsx)(t$,{label:l(e.label),value:i,onChange:e=>u(n,tz(e))},e.key)};return(0,a.jsxs)("div",{className:"space-y-3 rounded-lg border p-3",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)(tA.E,{variant:"outline",children:[l("Tier")," ",n+1," / ",i]}),0===t.conditions.length&&(0,a.jsx)(tA.E,{variant:"secondary",children:l("Fallback tier")}),(0,a.jsx)(h.p,{value:t.label,onChange:e=>o({...t,label:e.target.value}),placeholder:l("Tier name"),className:"h-7 w-36"})]}),(0,a.jsx)(q.$,{variant:"ghost",size:"icon",onClick:r,disabled:i<=1,"aria-label":l("Remove tier"),children:(0,a.jsx)(H.A,{className:"text-destructive h-4 w-4"})})]}),(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsxs)("div",{className:"flex h-7 items-center justify-between",children:[(0,a.jsx)(z.J,{className:"text-xs font-medium",children:l("Tier conditions")}),(0,a.jsxs)(q.$,{variant:"ghost",size:"sm",onClick:s,disabled:t.conditions.length>=2,className:"h-7 px-2 text-xs",children:[(0,a.jsx)(J.A,{className:"mr-1 h-3 w-3"}),l("Add condition")]})]}),0===t.conditions.length?(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:l("Always matches (default tier).")}):t.conditions.map((e,n)=>(0,a.jsx)(tH,{condition:e,onChange:e=>{let a;(a=[...t.conditions])[n]=e,o({...t,conditions:a})},onRemove:()=>{o({...t,conditions:t.conditions.filter((e,t)=>t!==n)})}},n))]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,a.jsx)(z.J,{className:"text-sm font-semibold",children:l("Token prices")}),(0,a.jsx)("span",{className:"bg-muted text-muted-foreground rounded-md px-2 py-1 text-xs",children:"$/1M tokens"})]}),(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"flex flex-wrap gap-x-4 gap-y-2",children:[(0,a.jsx)(t$,{label:l("Input price"),value:p,onChange:e=>u("input_unit_cost",tz(e))}),(0,a.jsx)(t$,{label:l("Output price"),value:m,onChange:e=>u("output_unit_cost",tz(e))})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("div",{className:"flex h-7 items-center",children:(0,a.jsx)(eR.tU,{value:d,onValueChange:e=>null!==e&&void o({...t,cache_mode:e,cache_create_1h_unit_cost:"timed"===e?t.cache_create_1h_unit_cost??0:0}),children:(0,a.jsxs)(eR.j7,{className:"h-8",children:[(0,a.jsx)(eR.Xi,{value:tj,className:"px-2 text-xs",children:l("Generic cache")}),(0,a.jsx)(eR.Xi,{value:"timed",className:"px-2 text-xs",children:l("Time-sliced cache (Claude)")})]})})}),(0,a.jsx)("div",{className:"flex flex-wrap gap-x-4 gap-y-2",children:tU.map(e=>"cc1h"===e.key&&"timed"!==d?null:b(e))})]})]})]}),(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsxs)(q.$,{type:"button",variant:"ghost",size:"sm",className:"h-7 px-2 text-xs",onClick:()=>y(e=>!e),children:[(0,a.jsx)(eE.A,{className:(0,U.cn)("mr-1 h-3 w-3 transition-transform",f&&"rotate-180")}),l("Media pricing")]}),f&&(0,a.jsx)("div",{className:"flex flex-wrap gap-x-4 gap-y-2",children:tq.map(b)})]})]})}function tY(e){let{visualConfig:t,onChange:n}=e,{t:i}=(0,c.Bd)(),o=(0,T.useMemo)(()=>tT(t),[t]);return(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:i("Each tier supports up to 2 conditions. The last tier without conditions is the fallback.")}),o.tiers.map((e,t)=>(0,a.jsx)(tQ,{tier:e,index:t,total:o.tiers.length,onChange:e=>{let a;(a=[...o.tiers])[t]=tI(e),n({...o,tiers:a})},onRemove:()=>{let e;
18return e=o.tiers.filter((e,n)=>n!==t),void n({...o,tiers:e.length>0?e:o.tiers})},onAddCondition:()=>(e=>{let t=o.tiers[e];if(t.conditions.length>=2)return;let a=new Set(t.conditions.map(e=>e.var)).has("len")?"c":"len";n({...o,tiers:o.tiers.map((n,i)=>i===e?{...n,conditions:[...t.conditions,{var:a,op:"<",value:2e5}]}:n)})})(t)},t)),(0,a.jsxs)(q.$,{variant:"outline",size:"sm",className:"h-9 w-36 justify-center",onClick:()=>{let e=[...o.tiers],t=e.length-1;t>=0&&0===e[t].conditions.length&&(e[t]=tI({...e[t],conditions:[{var:"len",op:"<",value:2e5}]})),e.push(tI({label:`tier_${e.length+1}`,conditions:[],input_unit_cost:0,output_unit_cost:0})),n({...o,tiers:e})},children:[(0,a.jsx)(J.A,{className:"mr-2 h-4 w-4"}),i("Add tier")]})]})}function tX(e){let{exprString:t,onChange:n}=e,{t:i}=(0,c.Bd)();return(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsx)(N.Fc,{children:(0,a.jsxs)(N.TN,{className:"space-y-1 text-xs",children:[(0,a.jsxs)("div",{children:[i("Variables"),": ",(0,a.jsx)("code",{children:"len"}),", ",(0,a.jsx)("code",{children:"p"}),", ",(0,a.jsx)("code",{children:"c"}),","," ",(0,a.jsx)("code",{children:"cr"}),", ",(0,a.jsx)("code",{children:"cc"}),", ",(0,a.jsx)("code",{children:"cc1h"}),","," ",(0,a.jsx)("code",{children:"img"}),", ",(0,a.jsx)("code",{children:"img_o"}),", ",(0,a.jsx)("code",{children:"ai"}),","," ",(0,a.jsx)("code",{children:"ao"})]}),(0,a.jsxs)("div",{children:[i("Functions"),": ",(0,a.jsx)("code",{children:"tier(name, value)"}),", ",(0,a.jsx)("code",{children:"max"}),","," ",(0,a.jsx)("code",{children:"min"}),", ",(0,a.jsx)("code",{children:"ceil"}),", ",(0,a.jsx)("code",{children:"floor"}),","," ",(0,a.jsx)("code",{children:"abs"}),", ",(0,a.jsx)("code",{children:"header(name)"}),","," ",(0,a.jsx)("code",{children:"param(path)"}),", ",(0,a.jsx)("code",{children:"has(source, text)"})]})]})}),(0,a.jsx)(_.T,{value:t,onChange:e=>n(e.target.value),placeholder:'tier("base", p * 3 + c * 15)',rows:6,className:"font-mono text-xs",spellCheck:!1})]})}function tZ(e){let{condition:t,onChange:n,onRemove:i}=e,{t:o}=(0,c.Bd)(),r=(0,tr.ZT)(t.source),s=e=>{switch(e){case"eq":return o("Equals");case tr.I2:return o("Contains");case"exists":return o("Exists");case"gt":return o("Greater than");case"gte":return o("Greater than or equal");case"lt":return o("Less than");case"lte":return o("Less than or equal");case"range":return o("Overnight range");default:return e}},l=e=>{switch(e){case"hour":return o("Hour of day");case"minute":return o("Minute");case"weekday":return o("Weekday");case"month":return o("Month number");case"day":return o("Day of month");default:return e}},d="param"===t.source?o("Body param"):"header"===t.source?o("Header"):o("Time"),u=e=>{n({...t,mode:e})};return(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(C.l6,{items:[{value:"param",label:o("Body param")},{value:"header",label:o("Header")},{value:"time",label:o("Time")}],value:t.source,onValueChange:e=>null!==e&&void("time"===e?n((0,tr.qC)()):("header"===e||"param"===e)&&n({...(0,tr.f_)(),source:e})),children:[(0,a.jsx)(C.bq,{className:"w-28",size:"sm",children:(0,a.jsx)(C.yv,{children:d})}),(0,a.jsx)(C.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(C.s3,{children:[(0,a.jsx)(C.eb,{value:"param",children:o("Body param")}),(0,a.jsx)(C.eb,{value:"header",children:o("Header")}),(0,a.jsx)(C.eb,{value:"time",children:o("Time")})]})})]}),"time"===t.source?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(C.l6,{items:[...tr.yG.map(e=>({value:e,label:l(e)}))],value:t.timeFunc,onValueChange:e=>n({...t,timeFunc:e}),children:[(0,a.jsx)(C.bq,{className:"w-32",size:"sm",children:(0,a.jsx)(C.yv,{children:l(t.timeFunc)})}),(0,a.jsx)(C.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(C.s3,{children:tr.yG.map(e=>(0,a.jsx)(C.eb,{value:e,children:l(e)},e))})})]}),(0,a.jsxs)(C.l6,{items:[...tr.NT.map(e=>({value:e.value,label:e.label}))],value:t.timezone,onValueChange:e=>null!==e&&n({...t,timezone:e}),children:[(0,a.jsx)(C.bq,{className:"w-56",size:"sm",children:(0,a.jsx)(C.yv,{children:tr.NT.find(e=>e.value===t.timezone)?.label??t.timezone})}),(0,a.jsx)(C.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(C.s3,{children:tr.NT.map(e=>(0,a.jsx)(C.eb,{value:e.value,children:e.label},e.value))})})]}),(0,a.jsxs)(C.l6,{items:[...r.map(e=>({value:e.value,label:s(e.value)}))],value:t.mode,onValueChange:e=>null!==e&&u(e),children:[(0,a.jsx)(C.bq,{className:"w-32",size:"sm",children:(0,a.jsx)(C.yv,{children:s(t.mode)})}),(0,a.jsx)(C.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(C.s3,{children:r.map(e=>(0,a.jsx)(C.eb,{value:e.value,children:s(e.value)},e.value))})})]}),"range"===t.mode?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(tV,{value:t.rangeStart,onValueChange:e=>n({...t,rangeStart:String(e)}),placeholder:o("Start"),className:"w-20"}),(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:"~"}),(0,a.jsx)(tV,{value:t.rangeEnd,onValueChange:e=>n({...t,rangeEnd:String(e)}),placeholder:o("End"),className:"w-20"})]}):(0,a.jsx)(tV,{value:t.value,onValueChange:e=>n({...t,value:String(e)}),placeholder:o("Value"),className:"w-24"})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(h.p,{value:t.path,onChange:e=>n({...t,path:e.target.value}),placeholder:"header"===t.source?"X-Header-Name":"service_tier",className:"w-44"}),(0,a.jsxs)(C.l6,{items:[...r.map(e=>({value:e.value,label:s(e.value)}))],value:t.mode,onValueChange:e=>null!==e&&u(e),children:[(0,a.jsx)(C.bq,{className:"w-32",size:"sm",children:(0,a.jsx)(C.yv,{children:s(t.mode)})}),(0,a.jsx)(C.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(C.s3,{children:r.map(e=>(0,a.jsx)(C.eb,{value:e.value,children:s(e.value)},e.value))})})]}),"exists"!==t.mode&&(0,a.jsx)(h.p,{value:t.value,onChange:e=>n({...t,value:e.target.value}),placeholder:o("Value"),className:"w-44"})]}),(0,a.jsx)(q.$,{variant:"ghost",size:"icon",onClick:i,"aria-label":o("Remove c
18ondition"),className:"ml-auto",children:(0,a.jsx)(H.A,{className:"text-destructive h-4 w-4"})})]})}function t0(e){let{group:t,index:n,onChange:i,onRemove:o}=e,{t:r}=(0,c.Bd)(),s=e=>{i({...t,conditions:[...t.conditions,e?(0,tr.qC)():(0,tr.f_)()]})};return(0,a.jsxs)("div",{className:"bg-muted/30 space-y-3 rounded-md border p-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsxs)(tA.E,{variant:"outline",children:[r("Rule group")," #",n+1]}),(0,a.jsx)(q.$,{variant:"ghost",size:"icon",onClick:o,"aria-label":r("Remove rule group"),children:(0,a.jsx)(H.A,{className:"text-destructive h-4 w-4"})})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[t.conditions.map((e,n)=>(0,a.jsx)(tZ,{condition:e,onChange:e=>{let a;(a=[...t.conditions])[n]=e,i({...t,conditions:a})},onRemove:()=>i({...t,conditions:t.conditions.filter((e,t)=>t!==n)})},n)),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsxs)(q.$,{variant:"ghost",size:"sm",onClick:()=>s(!1),children:[(0,a.jsx)(J.A,{className:"mr-1 h-3 w-3"}),r("Add param/header")]}),(0,a.jsxs)(q.$,{variant:"ghost",size:"sm",onClick:()=>s(!0),children:[(0,a.jsx)(J.A,{className:"mr-1 h-3 w-3"}),r("Add time condition")]})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(z.J,{className:"text-xs",children:r("Multiplier")}),(0,a.jsx)(tV,{min:0,step:1e-6,value:t.multiplier,onValueChange:e=>i({...t,multiplier:String(e)}),className:"w-32",placeholder:"1.0"}),(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:r("Final cost = base × multiplier when conditions match")})]})]})}function t1(e){let{applyPreset:t}=e,{t:n}=(0,c.Bd)(),[i,o]=(0,T.useState)(!1),r=i?tB:tB.slice(0,2),s=tB.length>2;return(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"text-sm font-medium",children:n("Preset templates")}),s&&(0,a.jsx)(q.$,{variant:"ghost",size:"sm",className:"h-6 px-2 text-xs",onClick:()=>o(e=>!e),children:i?n("Collapse"):n("More templates...")})]}),(0,a.jsx)("div",{className:"space-y-1",children:r.map(e=>(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)(tA.E,{variant:"secondary",className:"min-w-[60px] justify-center",children:n(e.group)}),e.presets.map(e=>(0,a.jsx)(q.$,{variant:"outline",size:"sm",className:"h-7 text-xs",onClick:()=>t(e),children:e.label},e.key))]},e.group))})]})}function t2(e){let{effectiveExpr:t}=e,{t:n}=(0,c.Bd)(),[i,o]=(0,T.useState)(0),[r,s]=(0,T.useState)(0),[l,d]=(0,T.useState)({cacheReadTokens:0,cacheCreateTokens:0,cacheCreate1hTokens:0,imageTokens:0,imageOutputTokens:0,audioInputTokens:0,audioOutputTokens:0}),u=(0,T.useMemo)(()=>(function(e){if(!e)return!1;let t=tE.map(e=>e.var).join("|");return RegExp(`\\b(${t})\\b`).test(e)})(t),[t]),h=(0,T.useMemo)(()=>(function(e,t,n,a){try{if(!e||!e.trim())return{cost:0,matchedTier:"",error:null};let i="",o=a.cacheReadTokens||0,r=a.cacheCreateTokens||0,s=a.cacheCreate1hTokens||0,l={p:t,c:n,len:t+o+r+s,tier:(e,t)=>(i=e,t),max:Math.max,min:Math.min,abs:Math.abs,ceil:Math.ceil,floor:Math.floor};for(let e of tE)l[e.var]=a[e.stateKey]||0;let c=Function(...Object.keys(l),`"use strict"; return (${e});`);return{cost:Number(c(...Object.values(l)))||0,matchedTier:i,error:null}}catch(e){return{cost:0,matchedTier:"",error:e instanceof Error?e.message:String(e)}}})(t,i,r,l),[t,i,r,l]);return(0,a.jsxs)("div",{className:"bg-muted/30 space-y-3 rounded-md border p-3",children:[(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:n("Token estimator")}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:n("Enter token counts to preview the estimated cost (excluding group multipliers).")})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)(z.J,{className:"text-xs",children:n("Input tokens")}),(0,a.jsx)(tV,{min:0,value:i,onValueChange:o})]}),(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)(z.J,{className:"text-xs",children:n("Output tokens")}),(0,a.jsx)(tV,{min:0,value:r,onValueChange:s})]})]}),u&&(0,a.jsx)("div",{className:"grid grid-cols-2 gap-3",children:tr.s5.map(e=>{if(!e.field)return null;let t=e.field.replace("Price","Tokens");return(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)(z.J,{className:"text-xs",children:n(e.shortLabel)}),(0,a.jsx)(tV,{min:0,value:l[t],onValueChange:e=>d(n=>({...n,[t]:e}))})]},e.key)})}),(0,a.jsx)("div",{className:(0,U.cn)("rounded-md border p-3 text-sm",h.error?"border-destructive/50 bg-destructive/10 text-destructive":"border-primary/50 bg-primary/10"),children:h.error?(0,a.jsxs)("span",{children:[n("Expression error"),": ",h.error]}):(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("span",{className:"font-medium",children:[n("Estimated quota cost"),": ",h.cost.toLocaleStr
18ing()]}),h.matchedTier&&(0,a.jsxs)(tA.E,{variant:"outline",className:"text-xs",children:[n("Hit tier"),": ",h.matchedTier]})]})})]})}let t5=`You are an AI API billing expression design assistant. The user needs help designing a billing expression for an AI API gateway.
19
20## Expression Language
21
22Expressions are based on standard arithmetic with ternary operators.
23
24### Token Variables
25
26Input side:
27- p — input token count (for pricing). Automatically excludes sub-categories priced separately (e.g., if cr is used, cache tokens are deducted from p)
28- len — total input context length (for condition checks). Not affected by auto-exclusion; always reflects the full input length. Use in tier conditions
29- cr — cache-hit (read) token count
30- cc — cache-create token count (5-min TTL)
31- cc1h — cache-create token count (1-hour TTL, Claude-specific)
32- img — image input token count
33- ai — audio input token count
34
35Output side:
36- c — output token count. Also auto-excludes sub-categories priced separately
37- img_o — image output token count
38- ao — audio output token count
39
40### p/c Auto-exclusion
41
42p and c are fallback variables representing all tokens not separately priced in the expression. If the expression uses a sub-category variable (e.g., cr), those tokens are deducted from p to avoid double-billing. Unused sub-category tokens remain in p/c at base price.
43
44Important: len is NOT affected by auto-exclusion. Tier conditions should use len instead of p to prevent cache hits from lowering p and misidentifying the tier.
45
46### Built-in Functions
47
48- tier(name, value) — labels the billing tier; must wrap the cost expression
49- max(a, b), min(a, b) — maximum/minimum
50- ceil(x), floor(x), abs(x) — ceiling, floor, absolute value
51- header(name) — reads a request header
52- param(path) — reads a request body JSON path (gjson syntax)
53- has(source, substr) — substring check
54- hour(tz), minute(tz), weekday(tz), month(tz), day(tz) — time functions, tz is a timezone like "Asia/Shanghai"
55
56### Price Coefficients
57
58Numbers in the expression are $/1M tokens prices. For example, p * 2.5 means input $2.50/1M tokens.
59
60## Expression Examples
61
62Simple pricing:
63tier("base", p * 2.5 + c * 15)
64
65With cache:
66tier("base", p * 2.5 + c * 15 + cr * 0.25)
67
68Multi-tier (use len for conditions):
69len <= 200000
70  ? tier("standard", p * 3 + c * 15 + cr * 0.3 + cc * 3.75 + cc1h * 6)
71  : tier("long_context", p * 6 + c * 22.5 + cr * 0.6 + cc * 7.5 + cc1h * 12)
72
73Image model:
74tier("base", p * 2 + c * 8 + img * 2.5)
75
76Multimodal with audio:
77tier("base", p * 0.43 + c * 3.06 + img * 0.78 + ai * 3.81 + ao * 15.11)
78
79Three-tier example:
80len <= 128000
81  ? tier("standard", p * 1.1 + c * 4.4)
82  : (len <= 1000000
83    ? tier("medium", p * 2.2 + c * 8.8)
84    : tier("long", p * 4.4 + c * 17.6))
85
86## Rules
87
881. Every leaf branch must be wrapped in tier("name", cost_expr)
892. Use English tier names, e.g. "base", "standard", "long_context"
903. Use len for tier conditions (not p), supports <, <=, >, >=
914. Multi-tier uses nested ternary: cond1 ? tier(...) : (cond2 ? tier(...) : tier(...))
925. Price coefficients are the provider's official $/1M tokens prices
936. If cache/image/audio don't need separate pricing, omit those variables; their tokens are included in p/c automatically
94
95Please generate a billing expression based on the model information and pricing requirements provided.`;function t4(e){let{modelName:t}=e,{t:n}=(0,c.Bd)(),[i,o]=(0,T.useState)(!1),r=(0,T.useMemo)(()=>t?t5+`
96
97Current model: ${t}`:t5,[t]),s=(0,T.useCallback)(async()=>{try{await navigator.clipboard.writeText(r),d.oR.success(n("Copied to clipboard"))}catch{d.oR.error(n("Failed to copy"))}},[r,n]);return(0,a.jsxs)(eF.Nt,{open:i,onOpenChange:o,children:[(0,a.jsxs)(eF.R6,{render:(0,a.jsx)(q.$,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs"}),children:[(0,a.jsx)(to.A,{className:"mr-1.5 h-3 w-3"}),n("LLM prompt helper")]}),(0,a.jsx)(eF.Ke,{className:"mt-2",children:(0,a.jsxs)("div",{className:"bg-muted/30 rounded-md border p-3",children:[(0,a.jsxs)("div",{className:"mb-2 flex items-center justify-between",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:n("Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.")}),(0,a.jsxs)(q.$,{variant:"outline",size:"sm",className:"ml-3 shrink-0",onClick:s,children:[(0,a.jsx)(to.A,{className:"mr-1.5 h-3 w-3"}),n("Copy prompt")]})]}),(0,a.jsx)(_.T,{value:r,readOnly:!0,rows:8,className:"font-mono text-xs",spellCheck:!1})]})})]})}let t3=(0,T.memo)(function(e){let{modelName:t,billingExpr:n,requestRuleExpr:i,onBillingExprChange:o,onRequestRuleExprChange:r}=e,{t:s}=(0,c.Bd)(),[l,d]=(0,T.useState)("visual"),[u,h]=(0,T.useState)(()=>tL(n)),[p,m]=(0,T.useState)(()=>(0,tr.yl)(n||"",i||"")),[g,f]=(0,T.useState)(()=>(0,tr.TS)(i)||[]),y=(0,T.useRef)(!1);(0,T.useEffect)(()=>
97{if(y.current)return;y.current=!0;let e=tL(n);e?(h(e),d("visual")):n?(h(null),d("raw")):h(tR()),m((0,tr.yl)(n||"",i||"")),f((0,tr.TS)(i)||[])},[n,i]),(0,T.useEffect)(()=>{y.current=!1},[t]);let b=(0,T.useMemo)(()=>!i||null!==(0,tr.TS)(i),[i]),v=(0,T.useMemo)(()=>{if("visual"===l)return tO(u);let{billingExpr:e}=(0,tr.U8)(p);return e},[l,u,p]);(0,T.useEffect)(()=>{v!==n&&o(v)},[v,n,o]),(0,T.useEffect)(()=>{if("visual"!==l)return;let e=(0,tr.Fy)(g);e!==i&&r(e)},[l,g,i,r]);let x=(0,T.useCallback)(e=>{h(e)},[]),k=(0,T.useCallback)(e=>{m(e);let{requestRuleExpr:t}=(0,tr.U8)(e);r(t)},[r]),S=(0,T.useCallback)(e=>{if("visual"===e){let{billingExpr:e,requestRuleExpr:t}=(0,tr.U8)(p),n=tL(e);n?h(n):h(tR()),f((0,tr.TS)(t)||[]),r(t)}else{let e=tO(u),t=(0,tr.Fy)(g);m((0,tr.yl)(e,t)||e)}d(e)},[p,u,g,r]),w=(0,T.useCallback)(e=>{let t=e.requestRules||[],n=(0,tr.Fy)(t);m((0,tr.yl)(e.expr,n)||e.expr);let a=tL(e.expr);a?(h(a),d("visual")):(d("raw"),h(null)),f(t),r(n)},[r]),A=(0,T.useCallback)(e=>{f(e)},[]);return(0,a.jsxs)("div",{className:"space-y-5",children:[(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-end",children:[(0,a.jsxs)(td,{className:"gap-2",children:[(0,a.jsx)(tu,{children:s("Editor mode")}),(0,a.jsxs)(C.l6,{items:[{value:"visual",label:s("Visual editor")},{value:"raw",label:s("Expression editor")}],value:l,onValueChange:e=>S(e),children:[(0,a.jsx)(C.bq,{className:"w-full sm:w-56",size:"sm",children:(0,a.jsx)(C.yv,{})}),(0,a.jsx)(C.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(C.s3,{children:[(0,a.jsx)(C.eb,{value:"visual",children:s("Visual editor")}),(0,a.jsx)(C.eb,{value:"raw",children:s("Expression editor")})]})})]})]}),"raw"===l&&(0,a.jsx)("div",{className:"sm:pb-0.5",children:(0,a.jsx)(t4,{modelName:t})})]}),(0,a.jsx)(t1,{applyPreset:w}),(0,a.jsxs)("div",{className:"bg-muted/30 space-y-3 rounded-md border p-3",children:["visual"===l?(0,a.jsx)(tY,{visualConfig:u,onChange:x}):(0,a.jsx)(tX,{exprString:p,onChange:k}
97),"visual"===l&&(0,a.jsxs)("div",{className:"space-y-3 border-t pt-3",children:[(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:s("Request rule pricing")}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:s("When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.")})]}),i&&!b?(0,a.jsx)(N.Fc,{children:(0,a.jsx)(N.TN,{className:"text-xs",children:s("This expression is too complex for the visual editor. Please switch to expression mode to edit.")})}):(0,a.jsxs)(a.Fragment,{children:[g.map((e,t)=>(0,a.jsx)(t0,{group:e,index:t,onChange:e=>{let n=[...g];n[t]=e,A(n)},onRemove:()=>A(g.filter((e,n)=>n!==t))},t)),(0,a.jsxs)(q.$,{variant:"outline",size:"sm",className:"h-9 w-36 justify-center",onClick:()=>A([...g,(0,tr.LU)()]),children:[(0,a.jsx)(J.A,{className:"mr-2 h-4 w-4"}),s("Add rule group")]})]})]})]}),(0,a.jsx)(t2,{effectiveExpr:v})]})}),t6=(0,T.forwardRef)(function(e,t){let{open:n,onOpenChange:i,editData:o,onSave:r,isSaving:s}=e,{t:l}=(0,c.Bd)(),d=l(o?"Edit model pricing":"Add model pricing"),u=o?.name||l("New model");return(0,a.jsx)(eO.cj,{open:n,onOpenChange:i,children:(0,a.jsxs)(eO.h,{side:"right",className:(0,eL.jW)("sm:max-w-2xl"),children:[(0,a.jsxs)(eO.Fm,{className:"sr-only",children:[(0,a.jsx)(eO.qp,{children:d}),(0,a.jsx)(eO.Qs,{children:u})]}
97),(0,a.jsx)(t8,{ref:t,editData:o,onSave:r,isSaving:s,className:"h-full rounded-none border-0"})]})})}),t8=(0,T.forwardRef)(function(e,t){let{editData:n,className:i,onSave:r,isSaving:d}=e,{t:p}=(0,c.Bd)(),[m,g]=(0,T.useState)("per-token"),[f,y]=(0,T.useState)(""),[b,v]=(0,T.useState)({...tf}),[x,k]=(0,T.useState)({...ty}),[C,S]=(0,T.useState)(""),[w,A]=(0,T.useState)(""),P=!!n,j=(0,s.mN)({resolver:(0,l.u)(o.Ik({name:o.Yj().min(1,p("Model name is required")),price:o.Yj().optional(),ratio:o.Yj().optional(),cacheRatio:o.Yj().optional(),createCacheRatio:o.Yj().optional(),completionRatio:o.Yj().optional(),imageRatio:o.Yj().optional(),audioRatio:o.Yj().optional(),audioCompletionRatio:o.Yj().optional()})),defaultValues:{name:"",price:"",ratio:"",cacheRatio:"",createCacheRatio:"",completionRatio:"",imageRatio:"",audioRatio:"",audioCompletionRatio:""}});(0,T.useEffect)(()=>{let e=function(e){let t;if(!e)return{promptPrice:"",prices:{...tf},enabled:{...ty}};let n=null===(t=tk(e.ratio))?"":tm(2*t),a=tC(e.audioRatio,n),i={completion:tC(e.completionRatio,n),cache:tC(e.cacheRatio,n),createCache:tC(e.createCacheRatio,n),image:tC(e.imageRatio,n),audioInput:a,audioOutput:tC(e.audioCompletionRatio,a)};return{promptPrice:n,prices:i,enabled:{completion:tx(e.completionRatio),cache:tx(e.cacheRatio),createCache:tx(e.createCacheRatio),image:tx(e.imageRatio),audioInput:tx(e.audioRatio),audioOutput:tx(e.audioCompletionRatio)}}}(n);n?(j.reset({name:n.name,price:n.price||"",ratio:n.ratio||"",cacheRatio:n.cacheRatio||"",createCacheRatio:n.createCacheRatio||"",completionRatio:n.completionRatio||"",imageRatio:n.imageRatio||"",audioRatio:n.audioRatio||"",audioCompletionRatio:n.audioCompletionRatio||""}),g("tiered_expr"===n.billingMode?"tiered_expr":n.price?"per-request":"per-token"),S(n.billingExpr||""),A(n.requestRuleExpr||"")):(j.reset({name:"",price:"",ratio:"",cacheRatio:"",createCacheRatio:"",completionRatio:"",imageRatio:"",audioRatio:"",audioCompletionRatio:""}),g("per-token"),S(""),A("")),y(e.promptPrice),v(e.prices),k(e.enabled)},[n,j]);let I=(e,t)=>{j.setValue(e,t,{shouldDirty:!0,shouldValidate:!0})},R=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:b,i=tk(t);if(null===i)return"";if("audioOutput"===e){let e=tk(a.audioInput);return null===e||0===e?"":tm(i/e)}let o=tk(n);return null===o||0===o?"":tm(i/o)},M=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:f,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:b,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:x,a=tk(e);I("ratio",null!==a?tm(a/2):""),tv.forEach(a=>{let{key:i}=a,o=tb[i];n[i]?I(o,R(i,t[i],e,t)):I(o,"")})},D=j.watch(),O=(0,T.useMemo)(()=>(function(e,t,n,a,i,o,r,s){if("tiered_expr"===t){let e=(0,tr.yl)(n,a);return[{key:"mode",label:"BillingMode",value:"tiered_expr"},{key:"expr",label:s("Expression"),value:e||s("Empty"),multiline:!0}]}return"per-request"===t?[{key:"price",label:"ModelPrice",value:e.price||s("Empty")}]:[{key:"inputPrice",label:s("Input price"),value:i?`$${i}`:s("Empty")},{key:"completion",label:s("Completion price"),value:r.completion&&o.completion?`$${o.completion}`:s("Empty")},{key:"cache",label:s("Cache read price"),value:r.cache&&o.cache?`$${o.cache}`:s("Empty")},{key:"createCache",label:s("Cache write price"),value:r.createCache&&o.createCache?`$${o.createCache}`:s("Empty")},{key:"image",label:s("Image input price"),value:r.image&&o.image?`$${o.image}`:s("Empty")},{key:"audio",label:s("Audio input price"),value:r.audioInput&&o.audioInput?`$${o.audioInput}`:s("Empty")},{key:"audioCompletion",label:s("Audio output price"),value:r.audioOutput&&o.audioOutput?`$${o.audioOutput}`:s("Empty")}]})(D,m,C,w,f,b,x,p),[C,x,b,m,f,w,p,D]),L=(0,T.useMemo)(()=>{let e=[];return n?.price&&[n.ratio,n.completionRatio,n.cacheRatio,n.createCacheRatio,n.imageRatio,n.audioRatio,n.audioCompletionRatio].some(tx)&&e.push(p("This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.")),"per-token"===m&&null===tk(f)&&tv.some(e=>{let{key:t}=e;return x[t]&&tx(b[t])})&&e.push(p("Input price is required before saving dependent prices.")),"per-token"===m&&x.audioOutput&&!tx(b.audioInput)&&e.push(p("Audio output price requires an audio input price.")),e}
97,[n,x,b,m,f,p]),E=(0,T.useCallback)(()=>"per-token"===m&&null===tk(f)&&tv.some(e=>{let{key:t}=e;return x[t]&&tx(b[t])})?(j.setError("ratio",{message:p("Input price is required before saving dependent prices.")}),!1):"per-token"!==m||!x.audioOutput||!!tx(b.audioInput)||(j.setError("audioRatio",{message:p("Audio output price requires an audio input price.")}),!1),[j,x,b,m,f,p]),F=(0,T.useCallback)(e=>{let t={name:e.name.trim(),billingMode:m,price:e.price||"",ratio:e.ratio||"",cacheRatio:e.cacheRatio||"",createCacheRatio:e.createCacheRatio||"",completionRatio:e.completionRatio||"",imageRatio:e.imageRatio||"",audioRatio:e.audioRatio||"",audioCompletionRatio:e.audioCompletionRatio||""};return"tiered_expr"===m&&(t.billingExpr=C,t.requestRuleExpr=w),t},[C,m,w]);(0,T.useImperativeHandle)(t,()=>({commitDraft:async()=>await j.trigger()&&E()?F(j.getValues()):null}),[j,E,F]);let _=!!r;return(0,a.jsxs)("div",{className:(0,U.cn)("bg-background flex min-h-0 flex-1 flex-col overflow-hidden rounded-xl border",i),children:[(0,a.jsx)("div",{className:"border-b p-4",children:(0,a.jsx)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:(0,a.jsx)("div",{className:"min-w-0",children:(0,a.jsx)("h3",{className:"truncate text-base font-medium",children:P?p("Edit model pricing"):p("Add model pricing")})})})}),(0,a.jsx)(u.lV,{...j,children:(0,a.jsxs)("form",{onSubmit:e=>e.preventDefault(),className:"flex min-h-0 flex-1 flex-col",autoComplete:"off",children:[(0,a.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto p-4 pb-6",children:(0,a.jsxs)("div",{className:"grid items-start gap-4 xl:grid-cols-[minmax(0,1fr)_minmax(220px,260px)]",children:[(0,a.jsxs)(tl,{children:[L.length>0&&(0,a.jsxs)(N.Fc,{variant:"destructive",children:[(0,a.jsx)(ts.A,{"data-icon":"inline-start"}),(0,a.jsx)(N.TN,{children:(0,a.jsx)("div",{className:"flex flex-col gap-1",children:L.map(e=>(0,a.jsx)("span",{children:e},e))})})]}),(0,a.jsx)(u.zB,{control:j.control,name:"name",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:p("Model name")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:p("gpt-4"),...t,disabled:P})}),(0,a.jsx)(u.Rr,{children:p("The exact model identifier as used in API requests.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsxs)(eR.tU,{value:m,onValueChange:e=>{g(e),"tiered_expr"!==e||C||S('tier("base", p * 0 + c * 0)')},className:"gap-4",children:[(0,a.jsxs)(eR.j7,{className:"grid w-full grid-cols-3",children:[(0,a.jsx)(eR.Xi,{value:"per-token",children:p("Per-token")}),(0,a.jsx)(eR.Xi,{value:"per-request",children:p("Per-request")}),(0,a.jsx)(eR.Xi,{value:"tiered_expr",children:p("Expression")})]}),(0,a.jsx)(eR.av,{value:"per-token",className:"pt-0",children:(0,a.jsxs)(tl,{className:"gap-5",children:[(0,a.jsxs)(td,{children:[(0,a.jsx)(tu,{children:p("Input price")}),(0,a.jsx)(tS,{value:f,placeholder:"3",onChange:e=>{tg.test(e)&&(y(e),M(e,b,x))}}),(0,a.jsx)(th,{children:p("USD price per 1M input tokens.")})]}),(0,a.jsx)("div",{className:"grid gap-3 sm:grid-cols-[repeat(auto-fit,minmax(400px,1fr))]",children:tv.map(e=>{let t="audioOutput"===e.key&&(!x.audioInput||!tx(b.audioInput));return(0,a.jsx)(tw,{title:p(e.titleKey),description:p(e.descriptionKey),placeholder:e.placeholder,value:b[e.key],enabled:x[e.key],disabled:t,onEnabledChange:t=>{var n;let a,i;return n=e.key,a={...x,[n]:t},i=b,void(!t&&(i={...i,[n]:""}
97,I(tb[n],""),"audioInput"===n&&(a.audioOutput=!1,i.audioOutput="",I("audioCompletionRatio",""))),k(a),v(i),t&&I(tb[n],R(n,i[n],f,i)))},onChange:t=>((e,t)=>{if(!tg.test(t))return;let n={...b,[e]:t};v(n),x[e]&&I(tb[e],R(e,t,f,n)),"audioInput"===e&&x.audioOutput&&I("audioCompletionRatio",R("audioOutput",n.audioOutput,f,n))})(e.key,t)},e.key)})})]})}),(0,a.jsx)(eR.av,{value:"per-request",className:"pt-0",children:(0,a.jsx)(tl,{className:"gap-5",children:(0,a.jsx)(u.zB,{control:j.control,name:"price",render:e=>{let{field:t}=e;return(0,a.jsx)(u.eI,{className:"contents",children:(0,a.jsxs)(td,{children:[(0,a.jsx)(tu,{children:p("Fixed price")}),(0,a.jsx)(u.MJ,{children:(0,a.jsxs)(tp.MG,{children:[(0,a.jsx)(tp.Sq,{children:"$"}),(0,a.jsx)(tp.iV,{inputMode:"decimal",placeholder:"0.01",...t,onChange:e=>{let n=e.target.value;tg.test(n)&&t.onChange(n)}}),(0,a.jsx)(tp.Sq,{align:"inline-end",children:p("per request")})]})}),(0,a.jsx)(th,{children:p("Cost in USD per request, regardless of tokens used.")}),(0,a.jsx)(u.C5,{})]})})}})})}),(0,a.jsx)(eR.av,{value:"tiered_expr",className:"pt-0",children:(0,a.jsx)(tl,{className:"gap-5",children:(0,a.jsx)(t3,{modelName:D.name,billingExpr:C,requestRuleExpr:w,onBillingExprChange:S,onRequestRuleExprChange:A})})})]})]}),(0,a.jsxs)("aside",{className:"bg-muted/20 sticky top-0 rounded-lg border",children:[(0,a.jsx)("div",{className:"border-b px-3 py-2",children:(0,a.jsx)("div",{className:"text-sm font-medium",children:p("Preview")})}),(0,a.jsx)("div",{className:"divide-y",children:O.map(e=>(0,a.jsxs)("div",{className:"grid gap-1 px-3 py-2.5",children:[(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:e.label}),(0,a.jsx)("span",{className:(0,U.cn)("min-w-0 text-sm",e.multiline?"font-mono text-xs leading-5 break-words whitespace-pre-wrap":"truncate"),children:e.value})]},e.key))})]})]})}),_&&(0,a.jsx)("div",{className:"bg-background/95 supports-[backdrop-filter]:bg-background/80 shrink-0 border-t p-3 backdrop-blur",children:(0,a.jsx)("div",{className:"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",children:r&&(0,a.jsxs)(q.$,{type:"button",onClick:r,disabled:d,className:"w-full sm:w-auto",children:[(0,a.jsx)(e9.A,{"data-icon":"inline-start"}),d?p("Saving..."):p("Save model prices")]})})})]})})]})}),t7=e=>void 0!==e&&""!==e,t9=e=>{if(!t7(e))return null;let t=Number(e);return Number.isFinite(t)?t:null},ne=(e,t)=>{let n=t9(e),a=t?t9(t):2;return null===n||null===a?"":tm(n*a)},nt=(e,t)=>{if("tiered_expr"===e.billingMode){let n;return(n=(e.billingExpr?.match(/tier\(/g)||[]).length)>0?`${t("Tiered pricing")} \xb7 ${n} ${t("tiers")}`:t("Expression pricing")}if("per-request"===e.billingMode)return e.price?`$${e.price} / ${t("request")}`:t("Unset price");let n=ne(e.ratio);if(!n)return t("Unset price");let a=[e.completionRatio,e.cacheRatio,e.createCacheRatio,e.imageRatio,e.audioRatio,e.audioCompletionRatio].filter(t7).length;return a>0?`${t("Input")} $${n} \xb7 ${a} ${t("extras")}`:`${t("Input")} $${n}`},nn=e=>{let{modelPrice:t,modelRatio:n,cacheRatio:a,createCacheRatio:i,completionRatio:o,imageRatio:r,audioRatio:s,audioCompletionRatio:l,billingMode:c,billingExpr:d}=e,u=(0,Y.jD)(t,{fallback:{},context:"model prices"}),h=(0,Y.jD)(n,{fallback:{},context:"model ratios"}),p=(0,Y.jD)(a,{fallback:{},context:"cache ratios"}),m=(0,Y.jD)(i,{fallback:{},context:"create cache ratios"}),g=(0,Y.jD)(o,{fallback:{},context:"completion ratios"}),f=(0,Y.jD)(r,{fallback:{},context:"image ratios"}),y=(0,Y.jD)(s,{fallback:{},context:"audio ratios"}),b=(0,Y.jD)(l,{fallback:{},context:"audio completion ratios"}),v=(0,Y.jD)(c,{fallback:{},context:"billing mode"}),x=(0,Y.jD)(d,{fallback:{},context:"billing expression"});return Array.from(new Set([...Object.keys(u),...Object.keys(h),...Object.keys(p),...Object.keys(m),...Object.keys(g),...Object.keys(f),...Object.keys(y),...Object.keys(b),...Object.keys(v),...Object.keys(x)])).map(e=>{let t=u[e]?.toString()||"",n=h[e]?.toString()||"",a=p[e]?.toString()||"",i=m[e]?.toString()||"",o=g[e]?.toString()||"",r=f[e]?.toString()||"",s=y[e]?.toString()||"",l=b[e]?.toString()||"";if("tiered_expr"===v[e]){let c=x[e]||"",{billingExpr:d,requestRuleExpr:u}=(0,tr.U8)(c);return{name:e,billingMode:"tiered_expr",billingExpr:d,requestRuleExpr:u,price:t,ratio:n,cacheRatio:a,createCacheRatio:i,completionRatio:o,imageRatio:r,audioRatio:s,audioCompletionRatio:l,hasConflict:!1}}return{name:e,price:t,ratio:n,cacheRatio:a,createCacheRatio:i,completionRatio:o,imageRatio:r,audioRatio:s,audioCompletionRatio:l,billingMode:""!==t?"per-request":"per-token",hasConflict:""!==t&&(""!==n||""!==o||""!==a||""!==i||""!==r||""!==s||""!==l)}})},na=e=>e?JSON.stringify({price:e.price||"",ratio:e.ratio||"",cacheRatio:e.cacheRatio||"",createCacheRatio:e.createCacheRatio||"",completionRatio:e.completionRatio||"",imageRatio:e.imageRatio||"",audioRatio:e.audioRatio||"",audioCompletionRatio:e.audioCompletionRatio||"",billingMode:e.billingMode||"per-token",billingExpr:e.billingExpr||"",requestRuleExpr:e.requestRuleExpr||""}):"",ni="model-ratio-column-visibility",no=(0,T.forwardRef)(function(e,t){let{savedModelPrice:n,savedModelRatio:i,savedCacheRatio:o,savedCreateCacheRatio:r,savedCompletionRatio:s,savedImageRatio:l,savedAudioRatio:u,savedAudioCompletionRatio:h,savedBillingMode:p,savedBillingExpr:m,modelPrice:g,modelRatio:f,cacheRatio:y,createCacheRatio:b,completionRatio:v,imageRatio:x,audioRatio:k,audioCompletionRatio:C,billingMode:S,billingExpr:w,onChange:A,onSave:P,isSaving:j}=e,{t:N}=(0,c.Bd)(),I=(0,ti.Ub)("(max-width: 767px)"),[R,M]=(0,T.useState)(!1),[D,O]=(0,T.useState)(!1),[L,E]=(0,T.useState)(null),[U,F]=(0,T.useState)([]),[_,B
97]=(0,T.useState)([]),[z,K]=(0,T.useState)(""),[W,X]=(0,T.useState)({}),Z=(0,T.useRef)(null),[ee,et]=(0,T.useState)({pageIndex:0,pageSize:20}),[en,ea]=(0,T.useState)(()=>{let e=localStorage.getItem(ni);if(e)try{return(0,Y.jD)(e,{fallback:{cacheRatio:!1,createCacheRatio:!1,imageRatio:!1,audioRatio:!1,audioCompletionRatio:!1},silent:!0})}catch{}return{cacheRatio:!1,createCacheRatio:!1,imageRatio:!1,audioRatio:!1,audioCompletionRatio:!1}});(0,T.useEffect)(()=>{localStorage.setItem(ni,JSON.stringify(en))},[en]);let ei=(0,T.useMemo)(()=>{let e=nn({modelPrice:n,modelRatio:i,cacheRatio:o,createCacheRatio:r,completionRatio:s,imageRatio:l,audioRatio:u,audioCompletionRatio:h,billingMode:p,billingExpr:m}),t=nn({modelPrice:g,modelRatio:f,cacheRatio:y,createCacheRatio:b,completionRatio:v,imageRatio:x,audioRatio:k,audioCompletionRatio:C,billingMode:S,billingExpr:w}),a=new Map(e.map(e=>[e.name,e])),c=new Map(t.map(e=>[e.name,e]));return Array.from(new Set([...a.keys(),...c.keys()])).map(e=>{let t=a.get(e),n=c.get(e),i=t??n,o=na(t),r=na(n);return{...i,saved:t,draft:n,isDraftChanged:o!==r,isDraftDeleted:!!(t&&!n),isDraftNew:!!(!t&&n)}}).sort((e,t)=>e.name.localeCompare(t.name))},[n,i,o,r,s,l,u,h,p,m,g,f,y,b,v,x,k,C,S,w]),eo=(0,T.useMemo)(()=>ei.reduce((e,t)=>{let n="per-request"===t.billingMode||"tiered_expr"===t.billingMode?t.billingMode:"per-token";return e[n]+=1,e},{"per-token":0,"per-request":0,tiered_expr:0}),[ei]),er=(0,T.useCallback)(e=>{let t=e.draft??e.saved??e;E({name:t.name,price:t.price,ratio:t.ratio,cacheRatio:t.cacheRatio,createCacheRatio:t.createCacheRatio,completionRatio:t.completionRatio,imageRatio:t.imageRatio,audioRatio:t.audioRatio,audioCompletionRatio:t.audioCompletionRatio,billingMode:"tiered_expr"===t.billingMode?"tiered_expr":t.price&&""!==t.price?"per-request":"per-token",billingExpr:t.billingExpr,requestRuleExpr:t.requestRuleExpr}),O(!0),I&&M(!0)},[I]),es=(0,T.useCallback)(()=>{E(null),O(!0),I&&M(!0)},[I]),el=(0,T.useCallback)(e=>{K(t=>{let n="function"==typeof e?e(t):e;return n!==t&&(E(null),O(!1),M(!1)),n})},[]),ec=(0,T.useCallback)(e=>{let t=(0,Y.jD)(g,{fallback:{},silent:!0}),n=(0,Y.jD)(f,{fallback:{},silent:!0}),a=(0,Y.jD)(y,{fallback:{},silent:!0}),i=(0,Y.jD)(b,{fallback:{},silent:!0}),o=(0,Y.jD)(v,{fallback:{},silent:!0}),r=(0,Y.jD)(x,{fallback:{},silent:!0}),s=(0,Y.jD)(k,{fallback:{},silent:!0}),l=(0,Y.jD)(C,{fallback:{},silent:!0}),c=(0,Y.jD)(S,{fallback:{},silent:!0}),d=(0,Y.jD)(w,{fallback:{},silent:!0});delete t[e],delete n[e],delete a[e],delete i[e],delete o[e],delete r[e],delete s[e],delete l[e],delete c[e],delete d[e],A("ModelPrice",JSON.stringify(t,null,2)),A("ModelRatio",JSON.stringify(n,null,2)),A("CacheRatio",JSON.stringify(a,null,2)),A("CreateCacheRatio",JSON.stringify(i,null,2)),A("CompletionRatio",JSON.stringify(o,null,2)),A("ImageRatio",JSON.stringify(r,null,2)),A("AudioRatio",JSON.stringify(s,null,2)),A("AudioCompletionRatio",JSON.stringify(l,null,2)),A("billing_setting.billing_mode",JSON.stringify(c,null,2)),A("billing_setting.billing_expr",JSON.stringify(d,null,2))},[g,f,y,b,v,x,k,C,S,w,A]),ed=(0,T.useMemo)(()=>(function(e){let{onDelete:t,onEdit:n,t:i}=e;return[{id:"select",header:e=>{let{table:t}=e;return(0,a.jsx)(G.S,{checked:t.getIsAllPageRowsSelected(),indeterminate:t.getIsSomePageRowsSelected(),onCheckedChange:e=>t.toggleAllPageRowsSelected(!!e),"aria-label":i("Select all"),className:"translate-y-[2px]"})},cell:e=>{let{row:t}=e;return(0,a.jsx)(G.S,{checked:t.getIsSelected(),onCheckedChange:e=>t.toggleSelected(!!e),"aria-label":i("Select row"),className:"translate-y-[2px]"})},enableSorting:!1,enableHiding:!1,size:40},{accessorKey:"name",header:e=>{let{column:t}=e;return(0,a.jsx)($.wZ,{column:t,title:i("Model name")})},cell:e=>{let{row:t}=e;return(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2 font-medium",children:[(0,a.jsx)("span",{className:"min-w-0 truncate",children:t.getValue("name")}),"tiered_expr"===t.original.billingMode&&(0,a.jsx)(Q.Wh,{label:i("Tiered"),variant:"info",copyable:!1,className:"shrink-0"}),t.original.hasConflict&&(0,a.jsx)(Q.Wh,{label:i("Conflict"),variant:"danger",copyable:!1,className:"shrink-0"})]})},enableHiding:!1},{accessorKey:"billingMode",header:e=>{let{column:t}=e;return(0,a.jsx)($.wZ,{column:t,title:i("Mode")})},cell:e=>{var t,n;let{row:o}=e;return(0,a.jsx)(Q.Wh,{label:i("per-request"===(t=o.original.billingMode)?"Per-request":"tiered_expr"===t?"Expression":"Per-token"),variant:"per-request"===(n=o.original.billingMode)?"warning":"tiered_expr"===n?"info":"success",copyable:!1,showDot:!1,className:"-ml-1.5 px-0"})},filterFn:(e,t,n)=>{var a;return a=e.getValue(t),!Array.isArray(n)||0===n.length||n.includes(String(a))},meta:{label:i("Mode")}},{id:"priceSummary",header:e=>{let{column:t}=e;return(0,a.jsx)($.wZ,{column:t,title:i("Price summary")}
97)},cell:e=>{let{row:t}=e;return(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-1",children:[(0,a.jsx)("span",{className:"truncate font-medium",children:nt(t.original,i)}),(0,a.jsx)("span",{className:"text-muted-foreground truncate text-xs",children:((e,t)=>{if("tiered_expr"===e.billingMode)return t(e.requestRuleExpr?"Includes request rules":"Expression based");if("per-request"===e.billingMode)return t("Fixed request price");let n=ne(e.ratio);if(!n)return t("No base input price");let a=[e.completionRatio&&`${t("Output")} $${ne(e.completionRatio,n)}`,e.cacheRatio&&`${t("Cache")} $${ne(e.cacheRatio,n)}`,e.createCacheRatio&&`${t("Cache write")} $${ne(e.createCacheRatio,n)}`].filter(Boolean).slice(0,2);return a.length>0?a.join(" · "):t("Base input price only")})(t.original,i)})]})},sortingFn:(e,t)=>nt(e.original,i).localeCompare(nt(t.original,i)),meta:{label:i("Price summary")}},{id:"actions",header:()=>(0,a.jsx)("div",{children:i("Actions")}),cell:e=>{let{row:i}=e;return(0,a.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,a.jsx)(q.$,{variant:"ghost",size:"sm",onClick:()=>n(i.original),children:(0,a.jsx)(V.A,{})}),(0,a.jsx)(q.$,{variant:"ghost",size:"sm",onClick:()=>t(i.original.name),children:(0,a.jsx)(H.A,{})})]})},enableHiding:!1}]})({onDelete:ec,onEdit:er,t:N}),[er,ec,N]),{table:eu}=(0,$.uI)({data:ei,columns:ed,sorting:U,columnFilters:_,globalFilter:z,columnVisibility:en,pagination:ee,rowSelection:W,enableRowSelection:!0,onSortingChange:F,onColumnFiltersChange:B,onGlobalFilterChange:el,onColumnVisibilityChange:ea,onPaginationChange:et,onRowSelectionChange:X,autoResetPageIndex:!1,globalFilterFn:(e,t,n)=>{let a=String(n).toLowerCase();return e.original.name.toLowerCase().includes(a)}}),eh=(0,T.useCallback)(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[e.name],n=(0,Y.jD)(g,{fallback:{},silent:!0}),a=(0,Y.jD)(f,{fallback:{},silent:!0}),i=(0,Y.jD)(y,{fallback:{},silent:!0}),o=(0,Y.jD)(b,{fallback:{},silent:!0}),r=(0,Y.jD)(v,{fallback:{},silent:!0}),s=(0,Y.jD)(x,{fallback:{},silent:!0}),l=(0,Y.jD)(k,{fallback:{},silent:!0}),c=(0,Y.jD)(C,{fallback:{},silent:!0}),d=(0,Y.jD)(S,{fallback:{},silent:!0}),u=(0,Y.jD)(w,{fallback:{},silent:!0}),h=(e,t,n)=>{if(!n||""===n)return;let a=parseFloat(n);Number.isFinite(a)&&(e[t]=a)};t.forEach(t=>{if(delete n[t],delete a[t],delete i[t],delete o[t],delete r[t],delete s[t],delete l[t],delete c[t],delete d[t],delete u[t],"tiered_expr"===e.billingMode){let p=(0,tr.yl)(e.billingExpr||"",e.requestRuleExpr||"");p&&(d[t]="tiered_expr",u[t]=p),h(n,t,e.price),h(a,t,e.ratio),h(i,t,e.cacheRatio),h(o,t,e.createCacheRatio),h(r,t,e.completionRatio),h(s,t,e.imageRatio),h(l,t,e.audioRatio),h(c,t,e.audioCompletionRatio)}else e.price&&""!==e.price?h(n,t,e.price):(h(a,t,e.ratio),h(i,t,e.cacheRatio),h(o,t,e.createCacheRatio),h(r,t,e.completionRatio),h(s,t,e.imageRatio),h(l,t,e.audioRatio),h(c,t,e.audioCompletionRatio))}),A("ModelPrice",JSON.stringify(n,null,2)),A("ModelRatio",JSON.stringify(a,null,2)),A("CacheRatio",JSON.stringify(i,null,2)),A("CreateCacheRatio",JSON.stringify(o,null,2)),A("CompletionRatio",JSON.stringify(r,null,2)),A("ImageRatio",JSON.stringify(s,null,2)),A("AudioRatio",JSON.stringify(l,null,2)),A("AudioCompletionRatio",JSON.stringify(c,null,2)),A("billing_setting.billing_mode",JSON.stringify(d,null,2)),A("billing_setting.billing_expr",JSON.stringify(u,null,2))},[g,f,y,b,v,x,k,C,S,w,A]),ep=(0,T.useCallback)(()=>{if(!L)return void d.oR.error(N("Open a source model first"));let e=eu.getFilteredSelectedRowModel().rows.map(e=>e.original.name);0===e.length?d.oR.error(N("Select at least one target model")):(eh(L,e),eu.resetRowSelection(),d.oR.success(N("Applied {{name}} pricing to {{count}} models",{name:L.name,count:e.length})))},[L,eh,N,eu]);(0,T.useImperativeHandle)(t,()=>({commitOpenEditor:async()=>{if(!D||!Z.current)return!0;let e=await Z.current.commitDraft();return!!e&&(eh(e),E(e),!0)}}),[D,eh]);let em=eu.getRowModel().rows.length>0;return(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"grid h-[clamp(720px,calc(100vh-12rem),900px)] min-h-0 gap-4 md:grid-cols-[minmax(300px,0.72fr)_minmax(520px,1.28fr)] xl:grid-cols-[minmax(320px,0.68fr)_minmax(640px,1.32fr)
97]",children:[(0,a.jsxs)("div",{className:"flex min-h-0 min-w-0 flex-col gap-3",children:[(0,a.jsx)($.wk,{table:eu,searchPlaceholder:N("Search models..."),filters:[{columnId:"billingMode",title:N("Mode"),options:[{label:"Per-token",value:"per-token",count:eo["per-token"]},{label:"Per-request",value:"per-request",count:eo["per-request"]},{label:"Expression",value:"tiered_expr",count:eo.tiered_expr}]}],preActions:(0,a.jsxs)(q.$,{onClick:es,children:[(0,a.jsx)(J.A,{"data-icon":"inline-start"}),N("Add model")]})}),em?(0,a.jsx)($.Oz,{table:eu,containerClassName:"min-h-0 flex-1 rounded-md",tableContainerClassName:"h-full",tableClassName:"min-w-[852px] table-fixed",tableHeaderClassName:"[&_tr]:border-b-0",splitHeaderScrollClassName:"h-full",bodyContainerClassName:"[scrollbar-gutter:stable]",splitHeader:!0,pinnedColumns:[{columnId:"actions",side:"right",className:"w-24 min-w-24"}],colgroup:(0,a.jsxs)("colgroup",{children:[(0,a.jsx)("col",{className:"w-9"}),(0,a.jsx)("col",{className:"w-[300px]"}),(0,a.jsx)("col",{className:"w-[120px]"}),(0,a.jsx)("col",{className:"w-[300px]"}),(0,a.jsx)("col",{className:"w-24"})]}),renderRow:(e,t)=>{let{getCellClassName:n}=t;return(0,a.jsx)($.J2,{row:e,className:L?.name===e.original.name?"bg-muted/45 hover:bg-muted/50 data-[state=selected]:bg-muted group":"group",getColumnClassName:t=>"actions"===t&&L?.name===e.original.name?n(t,"bg-muted"):n(t),onClick:t=>{t.target.closest('button, [role="checkbox"]')||er(e.original)}},e.id)}}):(0,a.jsx)("div",{className:"text-muted-foreground rounded-lg border border-dashed p-8 text-center",children:eu.getState().globalFilter?N("No models match your search"):N("No models configured. Use Add model to get started.")}),em&&(0,a.jsx)($.Tw,{table:eu})]}),(0,a.jsx)("div",{className:"hidden min-h-0 min-w-0 md:block",children:D?(0,a.jsx)(t8,{ref:Z,editData:L,onSave:P,isSaving:j,className:"h-full min-h-0"}):(0,a.jsxs)("div",{className:"bg-card text-muted-foreground flex h-full min-h-0 flex-col items-center justify-center gap-3 rounded-xl border border-dashed p-6 text-center",children:[(0,a.jsx)("div",{className:"text-foreground text-base font-medium",children:N("Select a model to edit pricing")}),(0,a.jsx)("p",{className:"max-w-sm text-sm",children:N("Use the full-width table to scan prices, then select a row to edit it here.")}),(0,a.jsxs)(q.$,{variant:"outline",onClick:es,children:[(0,a.jsx)(J.A,{"data-icon":"inline-start"}),N("Add model")]})]})})]}),(0,a.jsx)($.Of,{table:eu,entityName:N("model"),children:(0,a.jsxs)(q.$,{size:"sm",disabled:!L,onClick:ep,children:[(0,a.jsx)(to.A,{"data-icon":"inline-start"}),L?N("Copy {{name}} pricing",{name:L.name}):N("Open a source model first")]})}),I&&(0,a.jsx)(t6,{ref:Z,open:R,onOpenChange:M,editData:L,onSave:P,isSaving:j})]})}),nr=(0,T.memo)(no,(e,t)=>e.modelPrice===t.modelPrice&&e.modelRatio===t.modelRatio&&e.cacheRatio===t.cacheRatio&&e.createCacheRatio===t.createCacheRatio&&e.completionRatio===t.completionRatio&&e.imageRatio===t.imageRatio&&e.audioRatio===t.audioRatio&&e.audioCompletionRatio===t.audioCompletionRatio&&e.billingMode===t.billingMode&&e.billingExpr===t.billingExpr&&e.onChange===t.onChange&&e.onSave===t.onSave&&e.isSaving===t.isSaving),ns=[{name:"ModelPrice",labelKey:"Model fixed pricing",descriptionKey:"JSON map of model → USD cost per request. Takes precedence over ratio based billing."},{name:"ModelRatio",labelKey:"Model ratio",descriptionKey:"JSON map of model → multiplier applied to quota billing."},{name:"CacheRatio",labelKey:"Prompt cache ratio",descriptionKey:"Optional ratio used when upstream cache hits occur."},{name:"CreateCacheRatio",labelKey:"Create cache ratio",descriptionKey:"Ratio applied when creating cache entries for supported models."},{name:"CompletionRatio",labelKey:"Completion ratio",descriptionKey:"Applies to custom completion endpoints. JSON map of model → ratio."},{name:"ImageRatio",labelKey:"Image ratio",descriptionKey:"Configure per-model ratio for image inputs or outputs."},{name:"AudioRatio",labelKey:"Audio ratio",descriptionKey:"Ratio applied to audio inputs where supported by the upstream model."},{name:"AudioCompletionRatio",labelKey:"Audio completion ratio",descriptionKey:"Ratio applied to audio completions for streaming models."}];function nl(e){return(0,a.jsx)(u.zB,{control:e.form.control,name:e.name,render:t=>{let{field:n}=t;return(0,a.jsxs)(u.eI,{className:"flex min-w-0 flex-col gap-2",children:[(0,a.jsx)(u.lR,{children:e.label}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(ta,{value:n.value,onChange:e=>n.onChange(e)}
97)}),(0,a.jsx)(u.Rr,{className:"text-xs leading-5",children:e.description}),(0,a.jsx)(u.C5,{})]})}})}let nc=(0,T.memo)(function(e){let{form:t,savedValues:n,onSave:i,onReset:o,isSaving:r,isResetting:s}=e,{t:l}=(0,c.Bd)(),[d,h]=(0,T.useState)("visual"),g=(0,T.useRef)(null),f=(0,T.useCallback)((e,n)=>{t.setValue(e,n,{shouldValidate:!0,shouldDirty:!0})},[t]),y=(0,T.useCallback)(()=>{h(e=>"visual"===e?"json":"visual")},[]),b=(0,T.useCallback)(async()=>{("visual"!==d||!1!==await g.current?.commitOpenEditor())&&await t.handleSubmit(i)()},[d,t,i]);return(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"flex flex-wrap justify-end gap-2",children:[(0,a.jsxs)(q.$,{type:"button",variant:"destructive",size:"sm",onClick:o,disabled:s,children:[(0,a.jsx)(e7.A,{"data-icon":"inline-start"}),l("Reset prices")]}),"json"===d&&(0,a.jsxs)(q.$,{type:"button",size:"sm",onClick:b,disabled:r,children:[(0,a.jsx)(e9.A,{"data-icon":"inline-start"}),r?l("Saving..."):l("Save model prices")]}),(0,a.jsx)(q.$,{variant:"outline",size:"sm",onClick:y,children:"visual"===d?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(L.A,{className:"mr-2 h-4 w-4"}),l("Switch to JSON")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.A,{className:"mr-2 h-4 w-4"}),l("Switch to Visual")]})})]}),(0,a.jsx)(u.lV,{...t,children:"visual"===d?(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsx)(nr,{ref:g,savedModelPrice:n.ModelPrice,savedModelRatio:n.ModelRatio,savedCacheRatio:n.CacheRatio,savedCreateCacheRatio:n.CreateCacheRatio,savedCompletionRatio:n.CompletionRatio,savedImageRatio:n.ImageRatio,savedAudioRatio:n.AudioRatio,savedAudioCompletionRatio:n.AudioCompletionRatio,savedBillingMode:n.BillingMode,savedBillingExpr:n.BillingExpr,modelPrice:t.watch("ModelPrice"),modelRatio:t.watch("ModelRatio"),cacheRatio:t.watch("CacheRatio"),createCacheRatio:t.watch("CreateCacheRatio"),completionRatio:t.watch("CompletionRatio"),imageRatio:t.watch("ImageRatio"),audioRatio:t.watch("AudioRatio"),audioCompletionRatio:t.watch("AudioCompletionRatio"),billingMode:t.watch("BillingMode"),billingExpr:t.watch("BillingExpr"),onSave:b,isSaving:r,onChange:(e,t)=>
97{f({"billing_setting.billing_mode":"BillingMode","billing_setting.billing_expr":"BillingExpr"}[e]||e,t)}}),(0,a.jsx)(u.zB,{control:t.control,name:"ExposeRatioEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:l("Expose ratio API")}),(0,a.jsx)(u.Rr,{children:l("Allow clients to query configured ratios via `/api/ratio`.")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]}):(0,a.jsxs)(m.yt,{onSubmit:t.handleSubmit(i),children:[(0,a.jsx)("div",{className:"grid min-w-0 gap-x-5 gap-y-8 lg:grid-cols-2 2xl:grid-cols-3",children:ns.map(e=>(0,a.jsx)(nl,{form:t,name:e.name,label:l(e.labelKey),description:l(e.descriptionKey)},e.name))}),(0,a.jsx)(u.zB,{control:t.control,name:"ExposeRatioEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:l("Expose ratio API")}),(0,a.jsx)(u.Rr,{children:l("Allow clients to query configured ratios via `/api/ratio`.")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})})]})}),nd={web_search:10,web_search_preview:10,"web_search_preview:gpt-4o*":25,"web_search_preview:gpt-4.1*":25,"web_search_preview:gpt-4o-mini*":25,"web_search_preview:gpt-4.1-mini*":25,file_search:2.5,google_search:14};function nu(e){let t={};for(let n of e){let e=n.key.trim();e&&(t[e]=Number(n.price)||0)}return t}function nh(e){return Object.entries(e).map((e,t)=>{let[n,a]=e;return{id:t+1,key:n,price:Number(a)||0}})}let np=(0,T.memo)(function(e){let{defaultValue:t}=e,{t:n}=(0,c.Bd)(),i=(0,y.M)(),[o,r]=(0,T.useState)("visual"),[s,l]=(0,T.useState)([]),[u,p]=(0,T.useState)(""),[m,g]=(0,T.useState)(""),[f,b]=(0,T.useState)(1);(0,T.useEffect)(()=>{let e=function(e){if(!e)return{...nd};try{let t=JSON.parse(e);if(t&&"object"==typeof t&&!Array.isArray(t)&&Object.keys(t).length>0)return t}catch{}return{...nd}}(t),n=nh(e);l(n),p(JSON.stringify(e,null,2)),g(""),b(n.length+1)},[t]);let v=(0,T.useMemo)(()=>nu(s),[s]),x=(0,T.useCallback)(e=>{l(e),p(JSON.stringify(nu(e),null,2)),g("")},[]),k=(0,T.useCallback)(e=>{p(e);try{let t=JSON.parse(e);if(!t||"object"!=typeof t||Array.isArray(t))return void g(n("JSON must be an object"));let a=nh(t);l(a),b(a.length+1),g("")}catch(e){g(e instanceof Error?e.message:n("Invalid JSON"))}},[n]),C=(0,T.useCallback)((e,t,n)=>{x(s.map(a=>a.id===e?{...a,[t]:n}:a))},[s,x]),S=(0,T.useCallback)(()=>{b(e=>e+1),x([...s,{id:f,key:"",price:0}])},[f,s,x]),w=(0,T.useCallback)(e=>{x(s.filter(t=>t.id!==e))},[s,x]),A=(0,T.useCallback)(()=>{let e=nh(nd);l(e),p(JSON.stringify(nd,null,2)),g(""),b(e.length+1)},[]),P=(0,T.useCallback)(async()=>{try{await navigator.clipboard.writeText(u),d.oR.success(n("Copied to clipboard"))}catch{d.oR.error(n("Failed to copy"))}},[u,n]),j=(0,T.useCallback)(async()=>{"json"===o&&m?d.oR.error(n("Please fix JSON errors before saving")):await i.mutateAsync({key:"tool_price_setting.prices",value:JSON.stringify(v)})},[v,o,m,n,i]),I=(0,T.useCallback)(()=>{r(e=>"visual"===e?"json":"visual")},[]);return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(N.Fc,{children:(0,a.jsxs)(N.TN,{className:"space-y-1 text-sm",children:[(0,a.jsx)("div",{children:n("Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.")}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"font-medium",children:[n("Format"),":"]})," ",(0,a.jsx)("code",{className:"bg-muted rounded px-1 py-0.5 text-xs",children:"web_search_preview"})," ",n("is the default price; "),(0,a.jsx)("code",{className:"bg-muted rounded px-1 py-0.5 text-xs",children:"web_search_preview:gpt-4o*"})," ",n("overrides for matching model prefix.")]})]})}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsx)("div",{className:"flex flex-wrap items-center gap-2",children:"visual"===o?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(q.$,{variant:"outline",size:"sm",onClick:S,children:[(0,a.jsx)(J.A,{className:"mr-2 h-4 w-4"}),n("Add")]}),(0,a.jsx)(q.$,{variant:"ghost",size:"sm",onClick:A,children:n("Restore defaults")})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(q.$,{variant:"ghost",size:"sm",onClick:P,children:[(0,a.jsx)(to.A,{className:"mr-2 h-4 w-4"}),n("Copy")]}),(0,a.jsx)(q.$,{variant:"ghost",size:"sm",onClick:A,children:n("Restore defaults")})]})}),(0,a.jsx)(q.$,{variant:"outline",size:"sm",onClick:I,children:"visual"===o?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(L.A,{className:"mr-2 h-4 w-4"}),n("Switch to JSON")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.A,{className:"mr-2 h-4 w-4"}),n("Switch to Visual")]})})]}
97),"visual"===o?(0,a.jsx)($.hm,{data:s,getRowKey:e=>e.id,emptyClassName:"text-muted-foreground py-8",emptyContent:n("No tools configured"),columns:[{id:"tool",header:n("Tool identifier"),cell:e=>(0,a.jsx)(h.p,{value:e.key,placeholder:"web_search_preview:gpt-4o*",onChange:t=>C(e.id,"key",t.target.value)})},{id:"price",header:n("Price ($/1K calls)"),className:"w-[200px]",cell:e=>(0,a.jsx)(h.p,{type:"number",min:0,step:.5,value:e.price,onChange:t=>C(e.id,"price",Number(t.target.value)||0)})},{id:"actions",header:n("Actions"),className:"w-[80px] text-right",cellClassName:"text-right",cell:e=>(0,a.jsx)(q.$,{variant:"ghost",size:"icon",onClick:()=>w(e.id),"aria-label":n("Delete"),children:(0,a.jsx)(H.A,{className:"text-destructive h-4 w-4"})})}]}):(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(_.T,{value:u,onChange:e=>k(e.target.value),className:"font-mono text-sm",rows:12,spellCheck:!1}),m&&(0,a.jsx)("p",{className:"text-destructive text-sm",children:m})]}),(0,a.jsx)("div",{className:"flex justify-end",children:(0,a.jsx)(q.$,{onClick:j,disabled:i.isPending||"json"===o&&!!m,children:n("Save tool prices")})})]})});var nm=n(87985),ng=n(35820),nf=n(36638);let ny="/api/pricing",nb="openrouter",nv=[{label:"pricing",value:"/api/pricing"},{label:"ratio_config",value:"/api/ratio_config"},{label:"OpenRouter",value:nb},{label:"custom",value:"custom"}],nx=[{label:"Model ratio",value:"model_ratio"},{label:"Completion ratio",value:"completion_ratio"},{label:"Cache ratio",value:"cache_ratio"},{label:"Create cache ratio",value:"create_cache_ratio"},{label:"Image ratio",value:"image_ratio"},{label:"Audio ratio",value:"audio_ratio"},{label:"Audio completion ratio",value:"audio_completion_ratio"},{label:"Fixed price",value:"model_price"},{label:"Expression billing",value:"billing_expr"}],nk={1:{label:"Enabled",variant:"success"},2:{label:"Disabled",variant:"danger"},3:{label:"Auto-Disabled",variant:"warning"}};function nC(e){return -100===e.id||-101===e.id}function nS(e){let{open:t,onOpenChange:n,channels:i,selectedChannelIds:o,onSelectedChannelIdsChange:r,channelEndpoints:s,onChannelEndpointsChange:l,onConfirm:d}=e,{t:u}=(0,c.Bd)(),[p,m]=(0,T.useState)(""),[g,f]=(0,T.useState)({});(0,T.useEffect)(()=>{if(!o.length)return void f({});let e=new Set(i.map(e=>e.id)),t={};o.forEach(n=>{e.has(n)&&(t[n.toString()]=!0)}),f(t)},[o,i]);let y=(0,T.useCallback)((e,t)=>{l({...s,[e]:t})},[s,l]),b=(0,T.useMemo)(()=>[{id:"select",header:e=>{let{table:t}=e;return(0,a.jsx)(G.S,{checked:t.getIsAllPageRowsSelected(),indeterminate:t.getIsSomePageRowsSelected(),onCheckedChange:e=>t.toggleAllPageRowsSelected(!!e),"aria-label":"Select all"})},cell:e=>{let{row:t}=e;return(0,a.jsx)(G.S,{checked:t.getIsSelected(),onCheckedChange:e=>t.toggleSelected(!!e),"aria-label":"Select row"})},enableSorting:!1,enableHiding:!1},{accessorKey:"name",header:u("Name"),cell:e=>{let{row:t}=e,n=t.getValue("name"),i=nC(t.original);return(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"font-medium",children:n}),i&&(0,a.jsx)(Q.Wh,{label:u("Official"),variant:"success",size:"sm",copyable:!1})]})}},{accessorKey:"base_url",header:u("Base URL"),cell:e=>{let{row:t}=e,n=t.getValue("base_url");return(0,a.jsx)("span",{className:"text-muted-foreground block max-w-xs truncate font-mono text-xs",title:n,children:n})}},{accessorKey:"status",header:u("Status"),cell:e=>{let{row:t}=e,n=nk[t.getValue("status")];return n?(0,a.jsx)(Q.Wh,{label:n.label,variant:n.variant,size:"sm",copyable:!1}):(0,a.jsx)(Q.Wh,{label:u("Unknown"),variant:"neutral",size:"sm",copyable:!1})}},{id:"endpoint",header:u("Sync Endpoint"),cell:e=>{let{row:t}=e,n=t.original,i=s[n.id]||ny,o=nv.find(e=>e.value===i)?i:"custom";return(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)(C.l6,{items:[...nv.map(e=>({value:e.value,label:e.label}))],value:o,onValueChange:e=>null!==e&&void("custom"===e?y(n.id,""):y(n.id,e)),children:[(0,a.jsx)(C.bq,{className:"h-8 w-32",children:(0,a.jsx)(C.yv,{})}),(0,a.jsx)(C.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(C.s3,{children:nv.map(e=>(0,a.jsx)(C.eb,{value:e.value,children:e.label},e.value))})})]}),"custom"===o&&(0,a.jsx)(h.p,{value:i,onChange:e=>y(n.id,e.target.value),placeholder:u("/your/endpoint"),className:"h-8 w-40 font-mono text-xs"})]})}}],[s,u,y]),v=(0,T.useMemo)(()=>
97{if(!p.trim())return i;let e=p.toLowerCase();return i.filter(t=>t.name.toLowerCase().includes(e)||t.base_url.toLowerCase().includes(e))},[i,p]),x=(0,T.useMemo)(()=>[...v].sort((e,t)=>{let n=nC(e),a=nC(t);return n&&!a?-1:!n&&a?1:0}),[v]),{table:k}=(0,$.uI)({data:x,columns:b,rowSelection:g,getRowId:e=>e.id.toString(),enableRowSelection:!0,onRowSelectionChange:f,initialPagination:{pageIndex:0,pageSize:10},withSortedRowModel:!1,withFacetedRowModel:!1});return(0,a.jsx)(Z.l,{open:t,onOpenChange:n,title:u("Select Sync Channels"),description:u("Choose channels to sync upstream ratio configurations from"),contentClassName:"flex max-h-[90vh] max-w-[calc(100%-2rem)] flex-col sm:max-w-[90vw] xl:max-w-[1400px]",contentHeight:"min(72vh, 720px)",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(q.$,{variant:"outline",onClick:()=>n(!1),children:u("Cancel")}),(0,a.jsx)(q.$,{onClick:()=>{let e=k.getSelectedRowModel().rows.map(e=>e.original.id);r(e),n(!1),d(e)},children:u("Confirm Selection")})]}),children:(0,a.jsxs)("div",{className:"flex flex-1 flex-col gap-4 overflow-hidden",children:[(0,a.jsx)("div",{className:"flex items-center gap-2",children:(0,a.jsxs)("div",{className:"relative flex-1",children:[(0,a.jsx)(eo.A,{className:"text-muted-foreground absolute top-1/2 left-2 h-4 w-4 -translate-y-1/2"}),(0,a.jsx)(h.p,{placeholder:u("Search by name or URL..."),value:p,onChange:e=>m(e.target.value),className:"ps-8"})]})}),(0,a.jsx)($.Oz,{table:k,containerClassName:"flex-1 overflow-auto rounded-md",emptyContent:u("No channels found"),emptyCellClassName:"h-24 text-center"}),(0,a.jsx)($.Tw,{table:k})]})})}function nw(e){let{open:t,onOpenChange:n,conflicts:i,onConfirm:o,isLoading:r=!1}=e,{t:s}=(0,c.Bd)();return(0,a.jsx)(B.Lt,{open:t,onOpenChange:n,children:(0,a.jsxs)(B.EO,{className:"max-w-4xl",children:[(0,a.jsxs)(B.wd,{children:[(0,a.jsx)(B.r7,{children:s("Confirm Billing Conflicts")}),(0,a.jsx)(B.$v,{children:s("The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.")})]}),(0,a.jsx)($.hm,{className:"max-h-96 overflow-y-auto",data:i,columns:[{id:"channel",header:s("Channel"),cellClassName:"font-medium",cell:e=>e.channel},{id:"model",header:s("Model"),cellClassName:"font-mono text-sm",cell:e=>e.model},{id:"current",header:s("Current Billing"),cell:e=>(0,a.jsx)("pre",{className:"text-sm whitespace-pre-wrap",children:e.current})},{id:"new",header:s("Change To"),cell:e=>(0,a.jsx)("pre",{className:"text-sm whitespace-pre-wrap",children:e.newVal})}]}),(0,a.jsxs)(B.ck,{children:[(0,a.jsx)(B.Zr,{disabled:r,children:s("Cancel")}),(0,a.jsx)(B.Rx,{onClick:o,disabled:r,children:s(r?"Applying...":"Confirm Changes")})]})]})})}let nA=["model_ratio","completion_ratio","cache_ratio","create_cache_ratio","image_ratio","audio_ratio","audio_completion_ratio"],nP=[...nA,"model_price","billing_mode","billing_expr"],nj=new Set([...nA,"model_price"]);function nN(e,t){let n=nx.find(t=>t.value===e);return n?t(n.label):e}function nI(e,t){let n=Object.keys(e),a=[...nP.filter(e=>n.includes(e)),...n.filter(e=>!nP.includes(e))];return t&&"__all__"!==t?a.filter(e=>e===t):a}function nR(e,t,n){let a=e.billing_expr?.upstreams?.[n];return"billing_expr"!==t&&null!=a&&"same"!==a?"billing_expr":t}function nT(e){return null!=e&&"same"!==e}var nM=n(30369),nD=n(95163);function nO(e){let{differences:t,resolutions:n,isDisabled:i,isSyncing:o,onSelectValue:r,onUnselectValue:s}=e,{t:l}=(0,c.Bd)(),[d,u]=(0,T.useState)(""),[p,m]=(0,T.useState)(""),g=(0,T.useMemo)(()=>Object.entries(t).map(e=>{let[t,n]=e,a=nA.some(e=>e in n);return{key:t,model:t,ratioTypes:n,billingConflict:"model_price"in n&&a}}),[t]),f=(0,T.useMemo)(()=>{let e=g;if(d.trim()){let t=d.toLowerCase();e=e.filter(e=>e.model.toLowerCase().includes(t))}return p&&"__all__"!==p&&(e=e.filter(e=>p in e.ratioTypes)),e},[g,d,p]),y=(0,T.useMemo)(()=>{let e=new Set;return f.forEach(t=>{nI(t.ratioTypes,p).forEach(n=>{Object.keys(t.ratioTypes[n]?.upstreams||{}).forEach(t=>e.add(t))})}),Array.from(e)},[f,p]),b=(0,T.useCallback)((e,t)=>{t.forEach(t=>
97{nI(t.ratioTypes,p).forEach(n=>{let a=t.ratioTypes[n]?.upstreams?.[e];nR(t.ratioTypes,n,e)===n&&nT(a)&&r(t.model,n,a,e)})})},[p,r]),v=(0,T.useCallback)((e,t)=>{t.forEach(t=>{nI(t.ratioTypes,p).forEach(n=>{t.ratioTypes[n]?.upstreams?.[e]!==void 0&&s(t.model,n)})})},[p,s]),x=function(e,t,n,i,o,r,s,l){let{t:d}=(0,c.Bd)();return(0,T.useMemo)(()=>[{accessorKey:"model",header:d("Model"),cell:e=>{let{row:t}=e,n=t.original.model;return(0,a.jsxs)("div",{className:"flex min-w-[180px] items-center gap-2",children:[(0,a.jsx)("span",{className:"font-medium",children:n}),t.original.billingConflict&&(0,a.jsx)(nD.Bc,{children:(0,a.jsxs)(nD.m_,{children:[(0,a.jsx)(nD.k$,{children:(0,a.jsx)(ts.A,{className:"h-3.5 w-3.5 shrink-0 text-amber-500"})}),(0,a.jsx)(nD.ZI,{children:(0,a.jsx)("p",{children:d("This model has both fixed price and ratio billing conflicts")})})]})})]})}},{id:"current",header:d("Current Price"),cell:e=>{let{row:t}=e,i=nI(t.original.ratioTypes,n);return(0,a.jsx)("div",{className:"flex min-w-[260px] flex-col gap-2",children:i.map(e=>{let n=t.original.ratioTypes[e]?.current;return(0,a.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[(0,a.jsx)(Q.Wh,{label:nN(e,d),autoColor:e,size:"sm",copyable:!1}),null==n?(0,a.jsx)(Q.Wh,{label:d("Not Set"),variant:"neutral",size:"sm",copyable:!1}):(0,a.jsx)(nD.Bc,{children:(0,a.jsxs)(nD.m_,{children:[(0,a.jsx)(nD.k$,{render:(0,a.jsx)(Q.Wh,{label:String(n),variant:"info",size:"sm",className:"max-w-[200px] truncate"})}),(0,a.jsx)(nD.ZI,{children:(0,a.jsx)("p",{className:"max-w-xs text-xs break-all",children:String(n)})})]})})]},e)})})}},...e.map(e=>({id:`upstream_${e}`,header:o=>{let{table:r}=o,c=r.getFilteredRowModel().rows.map(e=>e.original),d=0,u=0;c.forEach(a=>{nI(a.ratioTypes,n).forEach(n=>{let i=a.ratioTypes[n]?.upstreams?.[e];nR(a.ratioTypes,n,e)===n&&nT(i)&&(d++,t[a.model]?.[n]===i&&u++)})});let h=d>0&&u===d,p=u>0&&u<d;return(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[d>0&&(0,a.jsx)(G.S,{checked:h,indeterminate:p,disabled:i,onCheckedChange:t=>{t?s(e,c):l(e,c)}}),(0,a.jsx)("span",{className:"font-medium",children:e})]})},cell:s=>{let{row:l}=s,c=nI(l.original.ratioTypes,n).filter(t=>nR(l.original.ratioTypes,t,e)===t);return(0,a.jsx)("div",{className:"flex min-w-[280px] flex-col gap-2",children:c.map(n=>{let s=l.original.ratioTypes[n],c=s?.upstreams?.[e],u=s?.confidence?.[e]!==!1;return(0,a.jsxs)("div",{className:"flex min-w-0 items-start gap-2",children:[(0,a.jsx)(Q.Wh,{label:nN(n,d),autoColor:n,size:"sm",copyable:!1,className:"shrink-0"}),(0,a.jsx)("div",{className:"min-w-0 flex-1",children:function(e){let{upstreamVal:t,isConfident:n,isSelected:i,isDisabled:o,t:r}=e;if(null==t)return(0,a.jsx)(Q.Wh,{label:r("Not Set"),variant:"neutral",size:"sm",copyable:!1});if("same"===t)return(0,a.jsx)(Q.Wh,{label:r("Same as Local"),variant:"info",size:"sm",copyable:!1});let s=String(t);return(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsx)(G.S,{checked:i,disabled:o,onCheckedChange:t=>{t?e.onSelect():e.onUnselect()}}),(0,a.jsx)(nD.Bc,{children:(0,a.jsxs)(nD.m_,{children:[(0,a.jsx)(nD.k$,{render:(0,a.jsx)("span",{className:"inline-block max-w-[240px] cursor-default truncate font-mono text-sm"}),children:s}),(0,a.jsx)(nD.ZI,{children:(0,a.jsx)("p",{className:"max-w-xs text-xs break-all",children:s})})]})}),!n&&(0,a.jsx)(nD.Bc,{children:(0,a.jsxs)(nD.m_,{children:[(0,a.jsx)(nD.k$,{children:(0,a.jsx)(ts.A,{className:"h-3.5 w-3.5 shrink-0 text-amber-500"})}),(0,a.jsx)(nD.ZI,{children:(0,a.jsx)("p",{children:r("This data may be unreliable, use with caution")})})]})})]})}({upstreamVal:c,isConfident:u,isSelected:t[l.original.model]?.[n]===c,isDisabled:i,t:d,onSelect:()=>o(l.original.model,n,c,e),onUnselect:()=>r(l.original.model,n)})})]},n)})})}}))],[e,t,n,i,o,r,s,l,d])}(y,n,p,i,r,s,b,v),{table:k}=(0,$.uI)({data:f,columns:x,getRowId:e=>e.key,initialPagination:{pageIndex:0,pageSize:10},withFilteredRowModel:!1,withSortedRowModel:!1,withFacetedRowModel:!1});return 0===g.length?o?(0,a.jsxs)("div",{className:"flex h-64 flex-col items-center justify-center gap-3 rounded-md border",children:[(0,a.jsx)(nM.A,{className:"text-muted-foreground h-8 w-8 animate-spin"}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:l("Fetching upstream prices...")})]}):(0,a.jsx)("div",{className:"flex h-64 items-center justify-center rounded-md border",children:(0,a.jsxs)("div",{className:"text-center",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:l("No upstream price differences found")}),(0,a.jsx)("p",{className:"text-muted-foreground mt-1 text-xs",children:l("Select sync channels to compare prices")})]})}):(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center",children:[(0,a.jsxs)("div",{className:"relative flex-1",children:[(0,a.jsx)(eo.A,{className:"text-muted-foreground absolute top-1/2 left-2 h-4 w-4 -translate-y-1/2"}),(0,a.jsx)(h.p,{placeholder:l("Search model name..."),value:d,onChange:e=>u(e.target.value),disabled:i,className:"ps-8"})]}),(0,a.jsxs)(C.l6,{items:[{value:"__all__",label:l("All Types")},...nx.map(e=>({value:e.value,label:l(e.label)}))],value:p,onValueChange:e=>null!==e&&m(e),disabled:i,children:[(0,a.jsx)(C.bq,{className:"w-full sm:w-56",children:(0,a.jsx)(C.yv,{placeholder:l("Filter by price field")})}),(0,a.jsx)(C.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(C.s3,{children:[(0,a.jsx)(C.eb,{value:"__all__",children:l("All Types")}),nx.map(e=>(0,a.jsx)(C.eb,{value:e.value,children:l(e.label)},e.value))]})})]})]}),(0,a.jsx)($.Oz,{table:k,containerClassName:"rounded-md",tableContainerClassName:"overflow-x-auto",getColumnClassName:()=>"align-top",getRowClassName:()=>"align-top",emptyContent:l("No results found"),emptyCellClassName:"h-24 text-center"}),(0,a.jsx)($.Tw,{table:k})]})}function nL(e){return"model_price"===e?"price":"billing_mode"===e||"billing_expr"===e?"tiered":"ratio"}function nE(e){try{return JSON.parse(e||"{}")}catch{return{}}}function nU(e){let{modelRatios:t}=e,{t:n}=(0,c.Bd)(),i=(0,M.jE)(),[o,r]=(0,T.useState)(!1),[s,l]=(0,T.useState)(!1),[u,h]=(0,T.useState)([]),[p,m]=(0,T.useState)({}),[g,f]=(0,T.useState)({}),[y,b]=(0,T.useState)({}),[v,x]=(0,T.useState)([]),[k,C]=(0,T.useState)(!1),{data:S}=(0,nm.I)({queryKey:["upstream-channels"],queryFn:W.ck,enabled:o}),w=(0,T.useMemo)(()=>S?.data??[],[S?.data]);(0,T.useEffect)(()=>{0!==w.length&&m(e=>{let t=!1,n={...e};for(let e of w)!n[e.id]&&(n[e.id]=-101===e.id?"https://models.dev/api.json":-100===e.id?"/llm-metadata/api/newapi/ratio_config-v1-base.json":20===e.type?nb:ny,t=!0);return t?n:e})},[w]);let A=(0,D.n)({mutationFn:W.kw,onSuccess:e=>{if(!e.success)return void d.oR.error(e.message||n("Failed to fetch upstream prices"));let{differences:t,test_results:a}=e.data,i=a.filter(e=>"error"===e.status);if(i.length>0){let e=i.map(e=>`${e.name}: ${e.error}`).join(", ");d.oR.warning(n("Some channels failed: {{errorMsg}}",{errorMsg:e}))}f(t),b({}),0===Object.keys(t).length?d.oR.success(n("No price differences found")):d.oR.success(n("Upstream prices fetched successfully"))},onError:e=>{d.oR.error(e.message||n("Failed to fetch upstream prices"))}}),{mutate:P,isPending:j}=(0,D.n)({mutationFn:async e=>{for(let t of e)await (0,W.qE)(t)},onSuccess:()=>{d.oR.success(n("Prices synced successfully")),i.invalidateQueries({queryKey:["system-options"]}),f(e=>{let t={...e};
97return Object.entries(y).forEach(e=>{let[n,a]=e;Object.keys(a).forEach(e=>{t[n]?.[e]&&(delete t[n][e],0===Object.keys(t[n]).length&&delete t[n])})}),t}),b({})},onError:e=>{d.oR.error(e.message||n("Failed to sync prices"))}}),N=(0,T.useCallback)((e,t,n,a)=>{let i=g[e],o=a?nR(i||{},t,a):t,r=o===t?n:i?.[o]?.upstreams?.[a]??n,s=nL(o);b(t=>{let n={...t[e]||{}};if(Object.keys(n).forEach(e=>{"tiered"!==s&&"tiered"!==nL(e)&&nL(e)!==s&&delete n[e]}),n[o]=r,"tiered"===s&&a&&i){let e=i.billing_mode?.upstreams?.[a],t=i.billing_expr?.upstreams?.[a];null!=e&&"same"!==e?n.billing_mode=e:"billing_expr"===o&&(n.billing_mode="tiered_expr"),null!=t&&"same"!==t&&(n.billing_expr=t)}return{...t,[e]:n}})},[g]),I=(0,T.useCallback)((e,t)=>{b(n=>(function(e,t,n){if(!e[t])return e;let a={...e[t]};delete a[n],"billing_expr"===n&&delete a.billing_mode,"billing_mode"===n&&delete a.billing_expr;let i={...e};return 0===Object.keys(a).length?delete i[t]:i[t]=a,i})(n,e,t))},[]),R=(0,T.useMemo)(()=>({ModelRatio:nE(t.ModelRatio),CompletionRatio:nE(t.CompletionRatio),CacheRatio:nE(t.CacheRatio),CreateCacheRatio:nE(t.CreateCacheRatio),ImageRatio:nE(t.ImageRatio),AudioRatio:nE(t.AudioRatio),AudioCompletionRatio:nE(t.AudioCompletionRatio),ModelPrice:nE(t.ModelPrice),"billing_setting.billing_mode":nE(t["billing_setting.billing_mode"]),"billing_setting.billing_expr":nE(t["billing_setting.billing_expr"])}),[t]),O=(0,T.useCallback)(async e=>{let t={ModelRatio:{...e.ModelRatio},CompletionRatio:{...e.CompletionRatio},CacheRatio:{...e.CacheRatio},CreateCacheRatio:{...e.CreateCacheRatio},ImageRatio:{...e.ImageRatio},AudioRatio:{...e.AudioRatio},AudioCompletionRatio:{...e.AudioCompletionRatio},ModelPrice:{...e.ModelPrice},"billing_setting.billing_mode":{...e["billing_setting.billing_mode"]},"billing_setting.billing_expr":{...e["billing_setting.billing_expr"]}};Object.entries(y).forEach(e=>{let[n,a]=e,i=Object.keys(a),o=i.includes("model_price"),r=i.some(e=>nA.includes(e));o&&(delete t.ModelRatio[n],delete t.CompletionRatio[n],delete t.CacheRatio[n],delete t.CreateCacheRatio[n],delete t.ImageRatio[n],delete t.AudioRatio[n],delete t.AudioCompletionRatio[n]),r&&delete t.ModelPrice[n],Object.entries(a).forEach(e=>{let a,[i,o]=e;t[(a={billing_mode:"billing_setting.billing_mode",billing_expr:"billing_setting.billing_expr"})[i]?a[i]:i.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("")][n]=nj.has(i)?Number(o):o})});let n=Object.entries(t).map(e=>{let[t,n]=e;return{key:t,value:JSON.stringify(n,null,2)}});return new Promise(e=>{P(n,{onSuccess:()=>e(!0),onError:()=>e(!1)})})},[y,P]),L=async()=>{C(!0);try{await O(R)&&l(!1)}finally{C(!1)}},E=Object.keys(y).length>0,U=A.isPending||j||k;return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:(0,a.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row",children:[(0,a.jsxs)(q.$,{onClick:()=>{r(!0)},disabled:U,children:[(0,a.jsx)(ng.A,{className:"mr-2 h-4 w-4"}),n("Select Sync Channels")]}),(0,a.jsxs)(q.$,{variant:"secondary",onClick:()=>{let e=[],t=n("Fixed price"),a=n("Model ratio"),i=n("Completion ratio");if(Object.entries(y).forEach(n=>{let o,[r,s]=n,l=void 0!==R.ModelPrice[r]?"price":void 0!==R.ModelRatio[r]||void 0!==R.CompletionRatio[r]||void 0!==R.CacheRatio[r]||void 0!==R.CreateCacheRatio[r]||void 0!==R.ImageRatio[r]||void 0!==R.AudioRatio[r]||void 0!==R.AudioCompletionRatio[r]?"ratio":null,c=Object.keys(s);if(o="model_price"in s?"price":nA.some(e=>c.includes(e))?"ratio":"tiered",l&&"tiered"!==o&&l!==o){let n="price"===l?`${t}: ${R.ModelPrice[r]}`:`${a}: ${R.ModelRatio[r]??"-"}
98${i}: ${R.CompletionRatio[r]??"-"}`,d="price"===o?`${t}: ${s.model_price}`:`${a}: ${s.model_ratio??"-"}
99${i}: ${s.completion_ratio??"-"}`,u=c.map(e=>((e,t,n)=>{let a=g[e]?.[t]?.upstreams;if(!a)return"Unknown";let i=Object.entries(a).find(e=>{let[,t]=e;return t===n});return i?i[0]:"Unknown"})(r,e,s[e])).filter((e,t,n)=>n.indexOf(e)===t).join(", ");e.push({channel:u,model:r,current:n,newVal:d})}}),e.length>0){x(e),l(!0);return}d.oR.info(n("Syncing prices, please wait...")),O(R)},disabled:!E||U,children:[(j||k)&&(0,a.jsx)("span",{className:"mr-2 h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent"}),(0,a.jsx)(nf.A,{className:"mr-2 h-4 w-4"}),n("Apply Sync")]})]})}),(0,a.jsx)(nO,{differences:g,resolutions:y,isDisabled:U,isSyncing:A.isPending,onSelectValue:N,onUnselectValue:I}),(0,a.jsx)(nS,{open:o,onOpenChange:r,channels:w,selectedChannelIds:u,onSelectedChannelIdsChange:h,channelEndpoints:p,onChannelEndpointsChange:m,onConfirm:e=>{let t=w.filter(t=>e.includes(t.id));if(0===t.length)return void d.oR.warning(n("Please select at least one channel"));let a=t.map(e=>({id:e.id,name:e.name,base_url:e.base_url,endpoint:p[e.id]||ny}));
99A.mutate({upstreams:a,timeout:10})}}),(0,a.jsx)(nw,{open:s,onOpenChange:l,conflicts:v,onConfirm:L,isLoading:k})]})}var nq=n(54088);function nF(e,t){return o.Yj().superRefine((n,a)=>{let i=(0,nq.En)(n,t);i.valid||a.addIssue({code:x.eq.custom,message:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Invalid JSON";if(!t)return e(n);if("required"===t.type)return e("Value is required");if("structure"===t.type)return e("Invalid JSON"===n?"JSON structure is invalid":n);let a=[t.line&&t.column?e("JSON is invalid at line {{line}}, column {{column}}.",{line:t.line,column:t.column}):void 0!==t.position?e("JSON is invalid at position {{position}}.",{position:t.position}):e("JSON is invalid. Please check the syntax.")];return t.missingCommaLine&&a.push(e("Check line {{line}} for a missing comma.",{line:t.missingCommaLine})),a.join(" ")}(e,i.error,i.message)})})}function n_(e){let{modelDefaults:t,groupDefaults:n,toolPricesDefault:i,titleKey:r="Pricing Ratios",visibleTabs:u=["models","groups","tool-prices","upstream-sync"]}=e,{t:h}=(0,c.Bd)(),p=(0,y.M)(),m=(0,M.jE)(),[b,v]=(0,T.useState)(!1),x=(0,D.n)({mutationFn:W.P1,onSuccess:e=>{e.success?(d.oR.success(h("Model prices reset successfully")),m.invali
99dateQueries({queryKey:["system-options"]}),v(!1)):d.oR.error(e.message||h("Failed to reset model ratios"))},onError:e=>{d.oR.error(e.message||h("Failed to reset model ratios"))}}),k=(0,T.useRef)({ModelPrice:(0,nq.Nr)(t.ModelPrice),ModelRatio:(0,nq.Nr)(t.ModelRatio),CacheRatio:(0,nq.Nr)(t.CacheRatio),CreateCacheRatio:(0,nq.Nr)(t.CreateCacheRatio),CompletionRatio:(0,nq.Nr)(t.CompletionRatio),ImageRatio:(0,nq.Nr)(t.ImageRatio),AudioRatio:(0,nq.Nr)(t.AudioRatio),AudioCompletionRatio:(0,nq.Nr)(t.AudioCompletionRatio),ExposeRatioEnabled:t.ExposeRatioEnabled,BillingMode:(0,nq.Nr)(t.BillingMode),BillingExpr:(0,nq.Nr)(t.BillingExpr)}),[C,S]=(0,T.useState)(k.current),w=(0,T.useRef)({GroupRatio:(0,nq.Nr)(n.GroupRatio),TopupGroupRatio:(0,nq.Nr)(n.TopupGroupRatio),UserUsableGroups:(0,nq.Nr)(n.UserUsableGroups),GroupGroupRatio:(0,nq.Nr)(n.GroupGroupRatio),AutoGroups:(0,nq.Nr)(n.AutoGroups),DefaultUseAutoGroup:n.DefaultUseAutoGroup,GroupSpecialUsableGroup:(0,nq.Nr)(n.GroupSpecialUsableGroup)}),A=(0,T.useMemo)(()=>o.Ik({ModelPrice:nF(h),ModelRatio:nF(h),CacheRatio:nF(h),CreateCacheRatio:nF(h),CompletionRatio:nF(h),ImageRatio:nF(h),AudioRatio:nF(h),AudioCompletionRatio:nF(h),ExposeRatioEnabled:o.zM(),BillingMode:nF(h),BillingExpr:nF(h)}),[h]),P=(0,T.useMemo)(()=>o.Ik({GroupRatio:nF(h),TopupGroupRatio:nF(h),UserUsableGroups:nF(h),GroupGroupRatio:nF(h),AutoGroups:nF(h,{predicate:e=>Array.isArray(e)&&e.every(e=>"string"==typeof e),predicateMessage:"Expected a JSON array of group identifiers"}),DefaultUseAutoGroup:o.zM(),GroupSpecialUsableGroup:nF(h)}),[h]),j=(0,s.mN)({resolver:(0,l.u)(A),mode:"onChange",defaultValues:{...t,ModelPrice:(0,nq.ZY)(t.ModelPrice),ModelRatio:(0,nq.ZY)(t.ModelRatio),CacheRatio:(0,nq.ZY)(t.CacheRatio),CreateCacheRatio:(0,nq.ZY)(t.CreateCacheRatio),CompletionRatio:(0,nq.ZY)(t.CompletionRatio),ImageRatio:(0,nq.ZY)(t.ImageRatio),AudioRatio:(0,nq.ZY)(t.AudioRatio),AudioCompletionRatio:(0,nq.ZY)(t.AudioCompletionRatio),BillingMode:(0,nq.ZY)(t.BillingMode),BillingExpr:(0,nq.ZY)(t.BillingExpr)}}),N=(0,s.mN)({resolver:(0,l.u)(P),mode:"onChange",defaultValues:{...n,GroupRatio:(0,nq.ZY)(n.GroupRatio),TopupGroupRatio:(0,nq.ZY)(n.TopupGroupRatio),UserUsableGroups:(0,nq.ZY)(n.UserUsableGroups),GroupGroupRatio:(0,nq.ZY)(n.GroupGroupRatio),AutoGroups:(0,nq.ZY)(n.AutoGroups),GroupSpecialUsableGroup:(0,nq.ZY)(n.GroupSpecialUsableGroup)}});(0,T.useEffect)(()=>{k.current={ModelPrice:(0,nq.Nr)(t.ModelPrice),ModelRatio:(0,nq.Nr)(t.ModelRatio),CacheRatio:(0,nq.Nr)(t.CacheRatio),CreateCacheRatio:(0,nq.Nr)(t.CreateCacheRatio),CompletionRatio:(0,nq.Nr)(t.CompletionRatio),ImageRatio:(0,nq.Nr)(t.ImageRatio),AudioRatio:(0,nq.Nr)(t.AudioRatio),AudioCompletionRatio:(0,nq.Nr)(t.AudioCompletionRatio),ExposeRatioEnabled:t.ExposeRatioEnabled,BillingMode:(0,nq.Nr)(t.BillingMode),BillingExpr:(0,nq.Nr)(t.BillingExpr)},S(k.current),j.reset({...t,ModelPrice:(0,nq.ZY)(t.ModelPrice),ModelRatio:(0,nq.ZY)(t.ModelRatio),CacheRatio:(0,nq.ZY)(t.CacheRatio),CreateCacheRatio:(0,nq.ZY)(t.CreateCacheRatio),CompletionRatio:(0,nq.ZY)(t.CompletionRatio),ImageRatio:(0,nq.ZY)(t.ImageRatio),AudioRatio:(0,nq.ZY)(t.AudioRatio),AudioCompletionRatio:(0,nq.ZY)(t.AudioCompletionRatio),BillingMode:(0,nq.ZY)(t.BillingMode),BillingExpr:(0,nq.ZY)(t.BillingExpr)})},[t,j]),(0,T.useEffect)(()=>{w.current={GroupRatio:(0,nq.Nr)(n.GroupRatio),TopupGroupRatio:(0,nq.Nr)(n.TopupGroupRatio),UserUsableGroups:(0,nq.Nr)(n.UserUsableGroups),GroupGroupRatio:(0,nq.Nr)(n.GroupGroupRatio),AutoGroups:(0,nq.Nr)(n.AutoGroups),DefaultUseAutoGroup:n.DefaultUseAutoGroup,GroupSpecialUsableGroup:(0,nq.Nr)(n.GroupSpecialUsableGroup)},N.reset({...n,GroupRatio:(0,nq.ZY)(n.GroupRatio),TopupGroupRatio:(0,nq.ZY)(n.TopupGroupRatio),UserUsableGroups:(0,nq.ZY)(n.UserUsableGroups),GroupGroupRatio:(0,nq.ZY)(n.GroupGroupRatio),AutoGroups:(0,nq.ZY)(n.AutoGroups),GroupSpecialUsableGroup:(0,nq.ZY)(n.GroupSpecialUsableGroup)})},[n,N]);let I=(0,T.useCallback)(async e=>{let t={ModelPrice:(0,nq.Nr)(e.ModelPrice),ModelRatio:(0,nq.Nr)(e.ModelRatio),CacheRatio:(0,nq.Nr)(e.CacheRatio),CreateCacheRatio:(0,nq.Nr)(e.CreateCacheRatio),CompletionRatio:(0,nq.Nr)(e.CompletionRatio),ImageRatio:(0,nq.Nr)(e.ImageRatio),AudioRatio:(0,nq.Nr)(e.AudioRatio),AudioCompletionRatio:(0,nq.Nr)(e.AudioCompletionRatio),ExposeRatioEnabled:e.ExposeRatioEnabled,BillingMode:(0,nq.Nr)(e.BillingMode),BillingExpr:(0,nq.Nr)(e.BillingExpr)},n={BillingMode:"billing_setting.billing_mode",BillingExpr:"billing_setting.billing_expr"},a=Object.keys(t).filter(e=>t[e]!==k.current[e]);if(0===a.length)return void d.oR.info(h("No model price changes to save"));for(let e of a){let a=n[e]||e;await p.mutateAsync({key:a,value:t[e]})}k.current=t,S(t)},[h,p]),R=(0,T.useCallback)(async e=>{let t={GroupRatio:(0,nq.Nr)(e.GroupRatio),TopupGroupRatio:(0,nq.Nr)(e.TopupGroupRatio),UserUsableGroups:(0,nq.Nr)(e.UserUsableGroups),GroupGroupRatio:(0,nq.Nr)(e.GroupGroupRatio),AutoGroups:(0,nq.Nr)(e.AutoGroups),DefaultUseAutoGroup:e.DefaultUseAutoGroup,GroupSpecialUsableGroup:(0,nq.Nr)(e.GroupSpecialUsableGroup)},n={GroupSpecialUsableGroup:"group_ratio_setting.group_special_usable_group"};for(let e of Object.keys(t).filter(e=>t[e]!==w.current[e])){let a=n[e]||e;await p.mutateAsync({key:a,value:t[e]})}},[p]),O=(0,T.useCallback)(()=>{v(!0)},[]),{mutate:L}=x,E=(0,T.useCallback)(()=>{L()},[L]),U={models:"Model prices",groups:"Group ratios","tool-prices":"Tool prices","upstream-sync":"Upstream price sync"},q={1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3",4:"grid-cols-4"}[u.length]??"grid-cols-4",F=u[0]??"models",_=e=>"models"===e?(0,a.jsx)(nc,{form:j,savedValues:C,onSave:I,onReset:O,isSaving:p.isPending,isResetting:x.isPending}):"groups"===e?(0,a.jsx)(e3,{form:N,onSave:R,isSaving:p.isPending}):"tool-prices"===e?(0,a.jsx)(np,{defaultValue:i}):(0,a.jsx)(nU,{modelRatios:{ModelPrice:t.ModelPrice,ModelRatio:t.ModelRatio,CompletionRatio:t.CompletionRatio,CacheRatio:t.CacheRatio,CreateCacheRatio:t.CreateCacheRatio,ImageRatio:t.ImageRatio,AudioRatio:t.AudioRatio,AudioCompletionRatio:t.AudioCompletionRatio,"billing_setting.billing_mode":t.BillingMode,"billing_setting.billing_expr":t.BillingExpr}});return(0,a.jsxs)(a.Fragment,{children:[1===u.length?(0,a.jsx)(f.X,{title:h(r),children:_(F)}):(0,a.jsxs)(eR.tU,{defaultValue:F,className:"space-y-6",children:[(0,a.jsx)(g.d1,{children:(0,a.jsx)(eR.j7,{className:`grid w-fit max-w-full ${q}`,children:u.map(e=>(0,a.jsx)(eR.Xi,{value:e,children:h(U[e])},e))})}),(0,a.jsx)(f.X,{title:h(r),children:u.map(e=>(0,a.jsx)(eR.av,{value:e,children:_(e)},e))})]}),(0,a.jsx)(eT.T,{open:b,onOpenChange:v,title:h("Reset all model prices?"),desc:h("This will clear custom pricing ratios and revert to upstream defaults."),destructive:!0,isLoading:x.isPending,handleConfirm:E,confirmText:h("Reset")})]})}var nB=n(2099);let nG=e=>({ModelPrice:e.ModelPrice,ModelRatio:e.ModelRatio,CacheRatio:e.CacheRatio,CreateCacheRatio:e.CreateCacheRatio,CompletionRatio:e.CompletionRatio,ImageRatio:e.ImageRatio,AudioRatio:e.AudioRatio,AudioCompletionRatio:e.AudioCompletionRatio,ExposeRatioEnabled:e.ExposeRatioEnabled,BillingMode:e["billing_setting.billing_mode"],BillingExpr:e["billing_setting.billing_expr"]}),nz=e=>({TopupGroupRatio:e.TopupGroupRatio,GroupRatio:e.GroupRatio,UserUsableGroups:e.UserUsableGroups,GroupGroupRatio:e.GroupGroupRatio,AutoGroups:e.AutoGroups,DefaultUseAutoGroup:e.DefaultUseAutoGroup,GroupSpecialUsableGroup:e["group_ratio_setting.group_special_usable_group"]}),nK=[{id:"quota",titleKey:"Quota Settings",build:e=>(0,a.jsx)(R,{defaultValues:{QuotaForNewUser:e.QuotaForNewUser,PreConsumedQuota:e.PreConsumedQuota,QuotaForInviter:e.QuotaForInviter,QuotaForInvitee:e.QuotaForInvitee,TopUpLink:e.TopUpLink,general_setting:{docs_link:e["general_setting.docs_link"]},quota_setting:{enable_free_model_pre_consume:e["quota_setting.enable_free_model_pre_consume"]}},complianceConfirmed:(e["payment_setting.compliance_confirmed"]??!1)&&"v1"===e["payment_setting.compliance_terms_version"]})},{id:"currency",titleKey:"Currency & Display",build:e=>(0,a.jsx)(j,{defaultValues:{QuotaPerUnit:e.QuotaPerUnit,USDExchangeRate:e.USDExchangeRate,DisplayInCurrencyEnabled:e.DisplayInCurrencyEnabled,DisplayTokenStatEnabled:e.DisplayTokenStatEnabled,general_setting:{quota_display_type:(0,i.LC)(e["general_setting.quota_display_type"]),custom_currency_symbol:e["general_setting.custom_currency_symbol"]??"¤",custom_currency_exchange_rate:e["general_setting.custom_currency_exchange_rate"]??1}}})},{id:"model-pricing",titleKey:"Model Pricing",build:e=>(0,a.jsx)(n_,{titleKey:"Model Pricing",modelDefaults:nG(e),groupDefaults:nz(e),toolPricesDefault:e["tool_price_setting.prices"],visibleTabs:["models","tool-prices","upstream-sync"]})}
99,{id:"group-pricing",titleKey:"Group Pricing",build:e=>(0,a.jsx)(n_,{titleKey:"Group Pricing",modelDefaults:nG(e),groupDefaults:nz(e),toolPricesDefault:e["tool_price_setting.prices"],visibleTabs:["groups"]})},{id:"payment",titleKey:"Payment Gateway",build:e=>(0,a.jsx)(eI,{defaultValues:{PayAddress:e.PayAddress,EpayId:e.EpayId,EpayKey:e.EpayKey,Price:e.Price,MinTopUp:e.MinTopUp,CustomCallbackAddress:e.CustomCallbackAddress,PayMethods:e.PayMethods,AmountOptions:e["payment_setting.amount_options"],AmountDiscount:e["payment_setting.amount_discount"],StripeApiSecret:e.StripeApiSecret,StripeWebhookSecret:e.StripeWebhookSecret,StripePriceId:e.StripePriceId,StripeUnitPrice:e.StripeUnitPrice,StripeMinTopUp:e.StripeMinTopUp,StripePromotionCodesEnabled:e.StripePromotionCodesEnabled,CreemApiKey:e.CreemApiKey,CreemWebhookSecret:e.CreemWebhookSecret,CreemTestMode:e.CreemTestMode,CreemProducts:e.CreemProducts},waffoDefaultValues:{WaffoEnabled:e.WaffoEnabled??!1,WaffoApiKey:e.WaffoApiKey??"",WaffoPrivateKey:e.WaffoPrivateKey??"",WaffoPublicCert:e.WaffoPublicCert??"",WaffoSandboxPublicCert:e.WaffoSandboxPublicCert??"",WaffoSandboxApiKey:e.WaffoSandboxApiKey??"",WaffoSandboxPrivateKey:e.WaffoSandboxPrivateKey??"",WaffoSandbox:e.WaffoSandbox??!1,WaffoMerchantId:e.WaffoMerchantId??"",WaffoCurrency:e.WaffoCurrency??"USD",WaffoUnitPrice:e.WaffoUnitPrice??1,WaffoMinTopUp:e.WaffoMinTopUp??1,WaffoNotifyUrl:e.WaffoNotifyUrl??"",WaffoReturnUrl:e.WaffoReturnUrl??"",WaffoPayMethods:e.WaffoPayMethods??"[]"},waffoPancakeDefaultValues:{WaffoPancakeMerchantID:e.WaffoPancakeMerchantID??"",WaffoPancakePrivateKey:e.WaffoPancakePrivateKey??"",WaffoPancakeReturnURL:e.WaffoPancakeReturnURL??""},waffoPancakeProvisionedStoreID:e.WaffoPancakeStoreID??"",waffoPancakeProvisionedProductID:e.WaffoPancakeProductID??"",complianceDefaults:{confirmed:e["payment_setting.compliance_confirmed"]??!1,termsVersion:e["payment_setting.compliance_terms_version"]??"",confirmedAt:e["payment_setting.compliance_confirmed_at"]??0,confirmedBy:e["payment_setting.compliance_confirmed_by"]??0}})},{id:"checkin",titleKey:"Check-in Rewards",build:e=>(0,a.jsx)(v,{defaultValues:{enabled:e["checkin_setting.enabled"],minQuota:e["checkin_setting.min_quota"],maxQuota:e["checkin_setting.max_quota"]}})}],nW=(0,nB.h)({sections:nK,defaultSection:"quota",basePath:"/system-settings/billing",urlStyle:"path"}),nJ=nW.sectionIds,nV=nW.defaultSection,nH=nW.getSectionNavItems,n$=nW.getSectionContent,nQ=nW.getSectionMeta},51028(e,t,n){var a=n(23579),i=n(72407),o=n(38390);function r(e){let{isDirty:t,message:n}=e,{t:r}=(0,i.Bd)();return t?(0,a.jsx)(o.d1,{children:(0,a.jsxs)("span",{className:"inline-flex h-5 items-center gap-1.5 rounded-full bg-amber-500/10 px-2 text-[11px] font-medium whitespace-nowrap text-amber-700 ring-1 ring-amber-500/20 ring-inset dark:bg-amber-400/10 dark:text-amber-300 dark:ring-amber-400/20",children:[(0,a.jsx)("span",{className:"size-1.5 rounded-full bg-amber-500 dark:bg-amber-300"}),r(n||"Unsaved changes")]})}):null}n.d(t,{_:()=>r})},75684(e,t,n){var a=n(23579),i=n(31371),o=n(90340),r=n(72407),s=n(2388);function l(e){let{when:t,title:n,message:l}=e,{t:c}=(0,r.Bd)(),d=n??c("Unsaved changes"),u=l??c("You have unsaved changes. Are you sure you want to leave?"),h=(0,o.K)({condition:t}),[p,m]=(0,i.useState)(!1);return(0,i.useEffect)(()=>{"blocked"===h.status&&m(!0)},[h.status]),(0,i.useEffect)(()=>{if(!t)return;let e=e=>(e.preventDefault(),e.returnValue="","");return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[t]),(0,a.jsx)(s.T,{open:p,onOpenChange:e=>{e||(m(!1),h.reset?.())},title:d,desc:u,confirmText:c("Leave"),cancelBtnText:c("Stay"),destructive:!0,handleConfirm:()=>{m(!1),h.proceed?.()}})}n.d(t,{s:()=>l})},54548(e,t,n){var a=n(23579),i=n(12591),o=n(28082),r=n(41220),s=n(25920);let l="flex min-w-0 flex-row items-center justify-between gap-4 border-b py-2.5 last:border-b-0";function c(e){return(0,a.jsx)("div",{"data-settings-form-span":"full",className:(0,i.cn)("grid min-w-0 gap-x-5 gap-y-6 lg:grid-cols-2",e.className),children:e.children})}function d(e){return(0,a.jsx)("div",{"data-settings-form-span":"full"===e.span?"full":void 0,className:(0,i.cn)("min-w-0","full"===e.span&&"lg:col-span-2",e.className),children:e.children})}function u(e){let{className:t,...n}=e;return(0,a.jsx)(o.eI,{"data-settings-form-span":"full",className:(0,i.cn)(l,t),...n})}function h(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-settings-form-span":"full",className:(0,i.cn)(l,t),...n})}function p(e){let{checked:t,onCheckedChange:n,label:i,description:o,disabled:l,className:c,...d}=e;return(0,a.jsxs)(h,{className:c,...d,children:[(0,a.jsxs)(m,{children:[(0,a.jsx)(r.J,{className:"text-sm font-medium",children:i}),o?(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:o}):null]}),(0,a.jsx)(s.d,{checked:t,onCheckedChange:n,disabled:l})]})}function m(e){return(0,a.jsx)("div",{className:(0,i.cn)("min-w-0 space-y-0.5",e.className),children:e.children})}function g(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-settings-form-span":"full",className:(0,i.cn)("bg-muted/20 min-w-0 space-y-3 rounded-xl border px-3 py-2.5",t),...n})}function f(e){let{className:t,...n}=e;return(0,a.jsx)("div",{className:(0,i.cn)("border-border/70 ml-2 min-w-0 border-l pl-3",t),...n})}function y(e){let{className:t,...n}=e;return(0,a.jsx)("form",{className:(0,i.cn)("grid min-w-0 gap-x-5 gap-y-6 lg:grid-cols-2","lg:[&>*:not([data-slot=form-item])]:col-span-2","lg:[&>[data-settings-form-span=full]]:col-span-2","lg:[&>[data-slot=alert]]:col-span-2","[&>[data-slot=form-item]]:min-w-0","lg:[&>[data-slot=form-item]:has(textarea)]:col-span-2","lg:[&>[data-slot=form-item]:has([data-slot=switch])]:col-span-2",t),...n})}n.d(t,{H:()=>u,K1:()=>c,KF:()=>f,WY:()=>g,ew:()=>p,vF:()=>d,yt:()=>y,z$:()=>m})},38390(e,t,n){var a=n(23579),i=n(31371),o=n(36862),r=n(74242),s=n(23338),l=n(72407),c=n(66304);let d=(0,i.createContext)({actionsContainer:null,titleStatusContainer:null,suppressSectionHeader:!1});function u(e){return(0,a.jsx)(d.Provider,{value:{actionsContainer:e.actionsContainer,titleStatusContainer:e.titleStatusContainer??null,suppressSectionHeader:e.suppressSectionHeader??!0},children:e.children})}function h(){return(0,i.useContext)(d).suppressSectionHeader}function p(e){let{titleStatusContainer:t}=(0,i.useContext)(d);return t?(0,s.createPortal)(e.children,t):null}function m(e){let{actionsContainer:t}=(0,i.useContext)(d);return t?(0,s.createPortal)((0,a.jsx)("div",{className:"flex flex-wrap items-center justify-end gap-2",children:e.children}),t):null}function g(e){let{t}=(0,l.Bd)(),n=e.isSaving?e.savingLabel??"Saving...":e.saveLabel??"Save Changes";return(0,a.jsxs)(m,{children:[e.onReset&&(0,a.jsxs)(c.$,{type:"button",size:"sm",variant:e.resetVariant??"outline",onClick:e.onReset,disabled:e.isResetDisabled||e.isSaving,children:[(0,a.jsx)(o.A,{"data-icon":"inl
99ine-start"}),(0,a.jsx)("span",{children:t(e.resetLabel??"Reset")})]}),(0,a.jsxs)(c.$,{ref:e.saveButtonRef,type:"button",size:"sm",onClick:e.onSave,disabled:e.isSaving||e.isSaveDisabled,children:[(0,a.jsx)(r.A,{"data-icon":"inline-start"}),(0,a.jsx)("span",{children:t(n)})]})]})}n.d(t,{If:()=>h,S2:()=>g,ab:()=>u,cN:()=>m,d1:()=>p})},16728(e,t,n){var a=n(23579),i=n(12591),o=n(38390);function r(e){let{title:t,titleProps:n,children:r,className:s}=e,l=(0,o.If)();return(0,a.jsxs)("section",{className:(0,i.cn)("flex flex-col gap-4",s),children:[!l&&(0,a.jsx)("div",{className:"flex flex-col gap-1",children:(0,a.jsx)("h3",{...n,className:(0,i.cn)("text-base font-semibold",n?.className),children:t})}),r]})}n.d(t,{X:()=>r})},8876(e,t,n){n.d(t,{Ku:()=>eh,PS:()=>eu,YD:()=>em,UO:()=>eg,ey:()=>ep});var a=n(23579),i=n(2099),o=n(31371),r=n(66586),s=n(32403),l=n(79159),c=n(85501),d=n(57224),u=n(74242),h=n(55982),p=n(72407),m=n(36461),g=n(21683),f=n(31759),y=n(66304),b=n(4403),v=n(28082),x=n(40382),k=n(62036),C=n(69502),S=n(68448),w=n(83814),A=n(97933),P=n(68165),j=n(54548),N=n(16728),I=n(90770);let R=r.Ik({content:r.Yj().min(1,"Content is required").max(500,"Content must be less than 500 characters"),publishDate:r.Yj().min(1,"Publish date is required"),type:r.k5(["default","ongoing","success","warning","error"]),extra:r.Yj().max(100,"Extra must be less than 100 characters").optional()}),T="announcement-form",M=[{value:"default",label:"Default",color:"bg-gray-500",badgeVariant:"neutral"},{value:"ongoing",label:"Ongoing",color:"bg-blue-500",badgeVariant:"info"},{value:"success",label:"Success",color:"bg-green-500",badgeVariant:"success"},{value:"warning",label:"Warning",color:"bg-orange-500",badgeVariant:"warning"},{value:"error",label:"Error",color:"bg-red-500",badgeVariant:"danger"}];function D(e){let{enabled:t,data:n}=e,{t:i}=(0,p.Bd)(),r=(0,I.M)(),[D,O]=(0,o.useState)([]),[L,E]=(0,o.useState)(t),[U,q]=(0,o.useState)(!1),[F,_]=(0,o.useState)([]),[B,G]=(0,o.useState)(!1),[z,K]=(0,o.useState)(!1),[W,J]=(0,o.useState)(null),[V,H]=(0,o.useState)("single"),$=(0,s.mN)({resolver:(0,l.u)(R),defaultValues:{content:"",publishDate:new Date().toISOString(),type:"default",extra:""}});(0,o.useEffect)(()=>{try{let e=JSON.parse(n||"[]");Array.isArray(e)&&O(e.map((e,t)=>({...e,id:e.id||t+1})))}catch{O([])}},[n]),(0,o.useEffect)(()=>{E(t)},[t]);let Q=async e=>{try{await r.mutateAsync({key:"console_setting.announcements_enabled",value:e}),E(e),m.oR.success(i("Setting saved"))}catch{m.oR.error(i("Failed to update setting"))}},Y=async()=>{try{await r.mutateAsync({key:"console_setting.announcements",value:JSON.stringify(D)}),q(!1),m.oR.success(i("Announcements saved successfully"))}catch{m.oR.error(i("Failed to save announcements"))}},X=(0,o.useMemo)(()=>[...D].sort((e,t)=>new Date(t.publishDate).getTime()-new Date(e.publishDate).getTime()),[D]);return(0,a.jsxs)(N.X,{title:i("Announcements"),children:[(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(y.$,{onClick:()=>{J(null),$.reset({content:"",publishDate:new Date().toISOString(),type:"default",extra:""}),G(!0)},size:"sm",children:[(0,a.jsx)(c.A,{className:"mr-2 h-4 w-4"}),i("Add Announcement")]}),(0,a.jsxs)(y.$,{onClick:()=>{0===F.length?m.oR.error(i("Please select items to delete")):(H("batch"),K(!0))},size:"sm",variant:"destructive",disabled:0===F.length,children:[(0,a.jsx)(d.A,{className:"mr-2 h-4 w-4"}),i("Delete ("),F.length,")"]}),(0,a.jsxs)(y.$,{onClick:Y,size:"sm",variant:"secondary",disabled:!U||r.isPending,children:[(0,a.jsx)(u.A,{className:"mr-2 h-4 w-4"}),r.isPending?i("Saving..."):i("Save Settings")]})]}),(0,a.jsx)(j.ew,{checked:L,onCheckedChange:Q,label:i("Enabled"),className:"border-b-0 py-0"})]}),(0,a.jsx)(S.hm,{data:X,getRowKey:e=>e.id,emptyContent:i('No announcements yet. Click "Add Announcement" to create one.'),columns:[{id:"select",header:(0,a.jsx)(b.S,{checked:F.length===D.length&&D.length>0,onCheckedChange:e=>{_(e?D.map(e=>e.id):[])}}),className:"w-12",cell:e=>(0,a.jsx)(b.S,{checked:F.includes(e.id),onCheckedChange:t=>{var n;return n=e.id,void _(e=>t?[...e,n]:e.filter(e=>e!==n))}})},{id:"content",header:i("Content"),cellClassName:"max-w-xs truncate",cell:e=>e.content},{id:"publish-date",header:i("Publish Date"),cell:e=>{var t;let n,i,o,r,s;return(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsx)("span",{className:"text-sm font-medium",children:(t=e.publishDate,n=new Date,i=new Date(t),s=Math.floor((r=Math.floor((o=Math.floor((n.getTime()-i.getTime())/6e4))/60))/24),o<60?`${o}m ago`:r<24?`${r}h ago`:`${s}d ago`)}),(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:(0,g.A)(e.publishDate).format("YYYY-MM-DD HH:mm:ss")})]})}},{id:"type",header:i("Type"),cell:e=>(0,a.jsx)(P.Wh,{label:M.find(t=>t.value===e.type)?.label,variant:M.find(t=>t.value===e.type)?.badgeVariant??"neutral",copyable:!1})},{id:"extra",header:i("Extra"),cellClassName:"text-muted-foreground max-w-xs truncate",cell:e=>e.extra||"-"},{id:"actions",header:i("Actions"),className:"w-32",cell:e=>(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(y.$,{onClick:()=>{J(e),$.reset({content:e.content,publishDate:e.publishDate,type:e.type,extra:e.extra||""}),G(!0)},size:"sm",variant:"ghost",children:(0,a.jsx)(h.A,{className:"h-4 w-4"})}),(0,a.jsx)(y.$,{onClick:()=>{J(e),H("single"),K(!0)},size:"sm",variant:"ghost",children:(0,a.jsx)(d.A,{className:"h-4 w-4"})})]})}]})]}),(0,a.jsx)(A.l,{open:B,onOpenChange:G,title:W?i("Edit Announcement"):i("Add Announcement"),description:i("Create or update system announcements for the dashboard"),
99contentClassName:"max-w-2xl",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(y.$,{type:"button",variant:"outline",onClick:()=>G(!1),children:i("Cancel")}),(0,a.jsx)(y.$,{type:"submit",form:T,children:W?i("Update"):i("Add")})]}),children:(0,a.jsx)(v.lV,{...$,children:(0,a.jsxs)("form",{id:T,onSubmit:$.handleSubmit(e=>{if(W)O(t=>t.map(t=>t.id===W.id?{...t,...e}:t)),m.oR.success(i('Announcement updated. Click "Save Settings" to apply.'));else{let t=Math.max(...D.map(e=>e.id),0)+1;O(n=>[...n,{id:t,...e}]),m.oR.success(i('Announcement added. Click "Save Settings" to apply.'))}q(!0),G(!1)}),className:"space-y-4",children:[(0,a.jsx)(v.zB,{control:$.control,name:"content",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:i("Content")}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(C.T,{placeholder:i("Enter announcement content (supports Markdown/HTML)"),rows:4,...t})}),(0,a.jsx)(v.Rr,{children:i("Maximum 500 characters. Supports Markdown and HTML.")}),(0,a.jsx)(v.C5,{})]})}}),(0,a.jsx)(v.zB,{control:$.control,name:"publishDate",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:i("Publish Date")}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(w.K,{value:t.value?new Date(t.value):void 0,onChange:e=>t.onChange(e?e.toISOString():""),placeholder:i("Select publish date")})}),(0,a.jsx)(v.Rr,{children:i("Date and time when this announcement should be displayed")}),(0,a.jsx)(v.C5,{})]})}}),(0,a.jsx)(v.zB,{control:$.control,name:"type",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:i("Type")}),(0,a.jsxs)(k.l6,{items:[...M.map(e=>({value:e.value,label:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:`h-3 w-3 rounded-full ${e.color}`}),e.label]})}))],onValueChange:t.onChange,value:t.value,children:[(0,a.jsx)(v.MJ,{children:(0,a.jsx)(k.bq,{children:(0,a.jsx)(k.yv,{placeholder:i("Select announcement type")})})}),(0,a.jsx)(k.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(k.s3,{children:M.map(e=>(0,a.jsx)(k.eb,{value:e.value,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:`h-3 w-3 rounded-full ${e.color}`}),e.label]})},e.value))})})]}),(0,a.jsx)(v.C5,{})]})}}),(0,a.jsx)(v.zB,{control:$.control,name:"extra",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:i("Extra Notes (Optional)")}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("Additional information"),...t})}),(0,a.jsx)(v.Rr,{children:i("Optional supplementary information (max 100 characters)")}),(0,a.jsx)(v.C5,{})]})}})]})})}),(0,a.jsx)(f.Lt,{open:z,onOpenChange:K,children:(0,a.jsxs)(f.EO,{children:[(0,a.jsxs)(f.wd,{children:[(0,a.jsx)(f.r7,{children:i("Are you sure?")}),(0,a.jsx)(f.$v,{children:"single"===V?"This announcement will be removed from the list.":`${F.length} announcements will be removed from the list.`})]}),(0,a.jsxs)(f.ck,{children:[(0,a.jsx)(f.Zr,{children:i("Cancel")}),(0,a.jsx)(f.Rx,{onClick:()=>{"single"===V&&W?(O(e=>e.filter(e=>e.id!==W.id)),q(!0),m.oR.success(i('Announcement deleted. Click "Save Settings" to apply.'))):"batch"===V&&(O(e=>e.filter(e=>!F.includes(e.id))),_([]),q(!0),m.oR.success(i('{{count}} announcements deleted. Click "Save Settings" to apply.',{count:F.length}))),K(!1),J(null)},children:i("Delete")})]})]})})]})}var O=n(8208);let L="api-info-form",E=[{value:"blue",label:"Blue"},{value:"green",label:"Green"},{value:"cyan",label:"Cyan"},{value:"purple",label:"Purple"},{value:"pink",label:"Pink"},{value:"red",label:"Red"},{value:"orange",label:"Orange"},{value:"amber",label:"Amber"},{value:"yellow",label:"Yellow"},{value:"lime",label:"Lime"},{value:"teal",label:"Teal"},{value:"indigo",label:"Indigo"},{value:"violet",label:"Violet"},{value:"slate",label:"Slate"}];function U(e){let{enabled:t,data:n}=e,{t:i}=(0,p.Bd)(),g=(0,I.M)(),C=r.Ik({url:r.Yj().url(i("Must be a valid URL")),route:r.Yj().min(1,i("Route is required")),description:r.Yj().min(1,i("Description is required")),color:r.Yj().min(1,i("Color is required"))}),[w,R]=(0,o.useState)([]),[T,M]=(0,o.useState)(t),[D,U]=(0,o.useState)(!1),[q,F]=(0,o.useState)([]),[_,B
99]=(0,o.useState)(!1),[G,z]=(0,o.useState)(!1),[K,W]=(0,o.useState)(null),[J,V]=(0,o.useState)("single"),H=(0,s.mN)({resolver:(0,l.u)(C),defaultValues:{url:"",route:"",description:"",color:"blue"}});(0,o.useEffect)(()=>{try{let e=JSON.parse(n||"[]");Array.isArray(e)&&R(e.map((e,t)=>({...e,id:e.id||t+1})))}catch{R([])}},[n]),(0,o.useEffect)(()=>{M(t)},[t]);let $=async e=>{try{await g.mutateAsync({key:"console_setting.api_info_enabled",value:e}),M(e),m.oR.success(i("Setting saved"))}catch{m.oR.error(i("Failed to update setting"))}},Q=async()=>{try{(await g.mutateAsync({key:"console_setting.api_info",value:JSON.stringify(w)})).success&&U(!1)}catch{m.oR.error(i("Failed to save API info"))}};return(0,a.jsxs)(N.X,{title:i("API Addresses"),children:[(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(y.$,{onClick:()=>{W(null),H.reset({url:"",route:"",description:"",color:"blue"}),B(!0)},size:"sm",children:[(0,a.jsx)(c.A,{className:"mr-2 h-4 w-4"}),i("Add API")]}),(0,a.jsxs)(y.$,{onClick:()=>{0===q.length?m.oR.error(i("Please select items to delete")):(V("batch"),z(!0))},size:"sm",variant:"destructive",disabled:0===q.length,children:[(0,a.jsx)(d.A,{className:"mr-2 h-4 w-4"}),i("Delete ("),q.length,")"]}),(0,a.jsxs)(y.$,{onClick:Q,size:"sm",variant:"secondary",disabled:!D||g.isPending,children:[(0,a.jsx)(u.A,{className:"mr-2 h-4 w-4"}),g.isPending?i("Saving..."):i("Save Settings")]})]}),(0,a.jsx)(j.ew,{checked:T,onCheckedChange:$,label:i("Enabled"),className:"border-b-0 py-0"})]}),(0,a.jsx)(S.hm,{data:w,getRowKey:e=>e.id,emptyContent:i('No API Domains yet. Click "Add API" to create one.'),columns:[{id:"select",header:(0,a.jsx)(b.S,{checked:q.length===w.length&&w.length>0,onCheckedChange:e=>{F(e?w.map(e=>e.id):[])}}),className:"w-12",cell:e=>(0,a.jsx)(b.S,{checked:q.includes(e.id),onCheckedChange:t=>{var n;return n=e.id,void F(e=>t?[...e,n]:e.filter(e=>e!==n))}})},{id:"url",header:i("URL"),cellClassName:"max-w-xs truncate font-mono text-sm",cell:e=>(0,a.jsx)(P.Wh,{label:e.url,variant:"neutral",copyable:!1})},{id:"route",header:i("Route"),cell:e=>(0,a.jsx)(P.Wh,{label:e.route,variant:"neutral",copyable:!1})},{id:"description",header:i("Description"),cellClassName:"max-w-xs truncate",cell:e=>e.description},{id:"color",header:i("Color"),cell:e=>{let t;return(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:`h-4 w-4 rounded-full ${(t=e.color,(0,O.Hl)(t))}`}),(0,a.jsx)("span",{className:"text-sm capitalize",children:e.color})]})}},{id:"actions",header:i("Actions"),className:"w-32",cell:e=>(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(y.$,{onClick:()=>{W(e),H.reset({url:e.url,route:e.route,description:e.description,color:e.color}),B(!0)},size:"sm",variant:"ghost",children:(0,a.jsx)(h.A,{className:"h-4 w-4"})}),(0,a.jsx)(y.$,{onClick:()=>{W(e),V("single"),z(!0)},size:"sm",variant:"ghost",children:(0,a.jsx)(d.A,{className:"h-4 w-4"})})]})}]})]}),(0,a.jsx)(A.l,{open:_,onOpenChange:B,title:K?i("Edit API Shortcut"):i("Add API Shortcut"),description:i("Configure API documentation links for the dashboard"),
99contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(y.$,{type:"button",variant:"outline",onClick:()=>B(!1),children:i("Cancel")}),(0,a.jsx)(y.$,{type:"submit",form:L,children:K?i("Update"):i("Add")})]}),children:(0,a.jsx)(v.lV,{...H,children:(0,a.jsxs)("form",{id:L,onSubmit:H.handleSubmit(e=>{if(K)R(t=>t.map(t=>t.id===K.id?{...t,...e}:t)),m.oR.success(i('API info updated. Click "Save Settings" to apply.'));else{let t=Math.max(...w.map(e=>e.id),0)+1;R(n=>[...n,{id:t,...e}]),m.oR.success(i('API info added. Click "Save Settings" to apply.'))}U(!0),B(!1)}),className:"space-y-4",children:[(0,a.jsx)(v.zB,{control:H.control,name:"url",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:i("API URL")}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("https://api.example.com"),...t})}),(0,a.jsx)(v.C5,{})]})}}),(0,a.jsx)(v.zB,{control:H.control,name:"route",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:i("Route Description")}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("e.g., CN2 GIA"),...t})}),(0,a.jsx)(v.C5,{})]})}}),(0,a.jsx)(v.zB,{control:H.control,name:"description",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:i("Description")}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("e.g., Recommended for China Mainland Users"),...t})}),(0,a.jsx)(v.C5,{})]})}}),(0,a.jsx)(v.zB,{control:H.control,name:"color",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:i("Badge Color")}),(0,a.jsxs)(k.l6,{items:[...E.map(e=>({value:e.value,label:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:`h-4 w-4 rounded-full ${(0,O.Hl)(e.value)}`}),e.label]})}))],onValueChange:t.onChange,value:t.value,children:[(0,a.jsx)(v.MJ,{children:(0,a.jsx)(k.bq,{children:(0,a.jsx)(k.yv,{placeholder:i("Select a color")})})}),(0,a.jsx)(k.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(k.s3,{children:E.map(e=>(0,a.jsx)(k.eb,{value:e.value,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:`h-4 w-4 rounded-full ${(0,O.Hl)(e.value)}`}),e.label]})},e.value))})})]}),(0,a.jsx)(v.Rr,{children:i("Visual indicator color for the API card")}),(0,a.jsx)(v.C5,{})]})}})]})})}),(0,a.jsx)(f.Lt,{open:G,onOpenChange:z,children:(0,a.jsxs)(f.EO,{children:[(0,a.jsxs)(f.wd,{children:[(0,a.jsx)(f.r7,{children:i("Are you sure?")}),(0,a.jsx)(f.$v,{children:"single"===J?"This API shortcut will be removed from the list.":`${q.length} API shortcuts will be removed from the list.`})]}),(0,a.jsxs)(f.ck,{children:[(0,a.jsx)(f.Zr,{children:i("Cancel")}),(0,a.jsx)(f.Rx,{onClick:()=>{"single"===J&&K?(R(e=>e.filter(e=>e.id!==K.id)),U(!0),m.oR.success(i('API info deleted. Click "Save Settings" to apply.'))):"batch"===J&&(R(e=>e.filter(e=>!q.includes(e.id))),F([]),U(!0),m.oR.success(i('{{count}} API entries deleted. Click "Save Settings" to apply.',{count:q.length}))),z(!1),W(null)},children:i("Delete")})]})]})})]})}var q=n(86947),F=n(96084),_=n(38390),B=n(8273),G=n(29422),z=n(7458),K=n(47682);let W="chat-dialog-form";function J(e){let{open:t,onOpenChange:n,onSave:i,editData:c}=e,{t:d}=(0,p.Bd)(),u=!!c,h=r.Ik({name:r.Yj().min(1,d("Chat client name is required")),url:r.Yj().min(1,d("URL is required"))}),m=(0,s.mN)({resolver:(0,l.u)(h),defaultValues:{name:"",url:""}});return(0,o.useEffect)(()=>{c?m.reset(c):m.reset({name:"",url:""})},[c,m,t]),(0,a.jsx)(A.l,{open:t,onOpenChange:n,title:u?d("Edit chat preset"):d("Add chat preset"),description:d("Configure a predefined chat link for end users."),contentClassName:"sm:max-w-[500px]",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(y.$,{type:"button",variant:"outline",onClick:()=>n(!1),children:d("Cancel")}),(0,a.jsx)(y.$,{type:"submit",form:W,children:u?d("Update"):d("Add")})]}),children:(0,a.jsx)(v.lV,{...m,children:(0,a.jsxs)("form",{id:W,onSubmit:m.handleSubmit(e=>{i(e),m.reset(),n(!1)}),className:"space-y-4",children:[(0,a.jsx)(v.zB,{control:m.control,name:"name",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:d("Chat Client Name")}
99),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(x.p,{placeholder:d("Please enter chat client name"),...t})}),(0,a.jsx)(v.Rr,{children:d("Display name for this chat client.")}),(0,a.jsx)(v.C5,{})]})}}),(0,a.jsx)(v.zB,{control:m.control,name:"url",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:d("URL")}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(x.p,{placeholder:d("Please enter the URL"),...t})}),(0,a.jsx)(v.Rr,{children:d("The URL for this chat client.")}),(0,a.jsx)(v.C5,{})]})}})]})})})}function V(e){let{value:t,onChange:n}=e,{t:i}=(0,p.Bd)(),[r,s]=(0,o.useState)(""),[l,u]=(0,o.useState)(!1),[h,m]=(0,o.useState)(null),g=(0,o.useMemo)(()=>(0,z.Cz)(t,{fallback:[],validator:K.cy,validatorMessage:"Chats must be a JSON array",context:"chats"}).map(e=>{if("object"==typeof e&&null!==e&&!Array.isArray(e)){let t=Object.entries(e);if(1===t.length){let[e,n]=t[0];return{name:e,url:String(n)}}}return null}).filter(e=>null!==e),[t]),f=(0,o.useMemo)(()=>{if(!r)return g;let e=r.toLowerCase();return g.filter(t=>t.name.toLowerCase().includes(e)||t.url.toLowerCase().includes(e))},[g,r]);return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-4",children:[(0,a.jsxs)("div",{className:"relative flex-1",children:[(0,a.jsx)(B.A,{className:"text-muted-foreground absolute top-2.5 left-2.5 h-4 w-4"}),(0,a.jsx)(x.p,{placeholder:i("Search chat presets..."),value:r,onChange:e=>s(e.target.value),className:"pl-9"})]}),(0,a.jsxs)(y.$,{onClick:()=>{m(null),u(!0)},children:[(0,a.jsx)(c.A,{className:"mr-2 h-4 w-4"}),i("Add chat preset")]})]}),(0,a.jsx)(S.hm,{data:f,getRowKey:e=>e.name,emptyContent:i(r?"No chat presets match your search":'No chat presets configured. Click "Add chat preset" to get started.'),columns:[{id:"name",header:i("Chat Client Name"),cellClassName:"font-medium",cell:e=>e.name},{id:"url",header:i("URL"),cellClassName:"max-w-md truncate font-mono text-sm",cell:e=>e.url},{id:"actions",header:i("Actions"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,a.jsx)(y.$,{variant:"ghost",size:"sm",onClick:()=>{m(e),u(!0)},children:(0,a.jsx)(G.A,{className:"h-4 w-4"})}),(0,a.jsx)(y.$,{variant:"ghost",size:"sm",onClick:()=>{var a;return a=e.name,void n(JSON.stringify((0,z.Cz)(t,{fallback:[],validator:K.cy,silent:!0}).filter(e=>"object"!=typeof e||null===e||!!Array.isArray(e)||!Object.keys(e).includes(a)),null,2))},children:(0,a.jsx)(d.A,{className:"h-4 w-4"})})]})}]}),(0,a.jsx)(J,{open:l,onOpenChange:u,onSave:e=>{let a=[...(0,z.Cz)(t,{fallback:[],validator:K.cy,silent:!0})];h&&(a=a.filter(e=>"object"!=typeof e||null===e||!!Array.isArray(e)||!Object.keys(e).includes(h.name))),a.push({[e.name]:e.url}),n(JSON.stringify(a,null,2))},editData:h})]})}function H(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"[]",n=e&&e.trim()?e:t;try{let e=JSON.parse(n);return JSON.stringify(e,null,2)}catch{return n}}function $(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"[]",n=e&&e.trim()?e:t;try{let e=JSON.parse(n);return JSON.stringify(e)}catch{return n.trim()}}function Q(e){let{defaultValue:t}=e,{t:n}=(0,p.Bd)(),i=(0,I.M)(),[c,d]=(0,o.useState)("visual"),u=r.Ik({Chats:r.Yj().superRefine((e,t)=>{try{let a=JSON.parse(e||"[]");if(!Array.isArray(a))return void t.addIssue({code:q.eq.custom,message:n("Expected a JSON array.")});for(let e of a){if(null===e||"object"!=typeof e||Array.isArray(e))return void t.addIssue({code:q.eq.custom,message:n("Each item must be an object with a single key-value pair.")});let a=Object.entries(e);if(1!==a.length)return void t.addIssue({code:q.eq.custom,message:n("Each item must have exactly one key-value pair.")})}}catch{t.addIssue({code:q.eq.custom,message:n("Invalid JSON string.")})}})}),h=H(t,"[]"),m=(0,s.mN)({resolver:(0,l.u)(u),mode:"onChange",defaultValues:{Chats:h}}),g=(0,o.useRef)($(t,"[]"));(0,o.useEffect)(()=>{m.reset({Chats:H(t,"[]")}),g.current=$(t,"[]")},[t,m]);let f=async e=>{let t=$(e.Chats,"[]");t!==g.current&&await i.mutateAsync({key:"Chats",value:t})};return(0,a.jsx)(N.X,{title:n("Chat Presets"),children:(0,a.jsx)(v.lV,{...m,children:(0,a.jsxs)(j.yt,{onSubmit:m.handleSubmit(f),children:[(0,a.jsx)(_.S2,{onSave:m.handleSubmit(f),isSaving:i.isPending,saveLabel:"Save chat settings"}
99),(0,a.jsxs)(F.tU,{value:c,onValueChange:e=>d(e),children:[(0,a.jsxs)(F.j7,{className:"grid w-full grid-cols-2",children:[(0,a.jsx)(F.Xi,{value:"visual",children:n("Visual")}),(0,a.jsx)(F.Xi,{value:"json",children:n("JSON")})]}),(0,a.jsx)(F.av,{value:"visual",className:"mt-6",children:(0,a.jsx)(v.zB,{control:m.control,name:"Chats",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.MJ,{children:(0,a.jsx)(V,{value:t.value,onChange:t.onChange})}),(0,a.jsx)(v.C5,{})]})}})}),(0,a.jsx)(F.av,{value:"json",className:"mt-6",children:(0,a.jsx)(v.zB,{control:m.control,name:"Chats",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:n("Chat configuration JSON")}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(C.T,{rows:12,placeholder:n('[{"ChatGPT":"https://chat.openai.com"},{"Lobe Chat":"https://chat-preview.lobehub.com/?settings={...}"}]'),...t})}),(0,a.jsx)(v.Rr,{children:n("Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.")}),(0,a.jsx)(v.C5,{})]})}})})]})]})})})}var Y=n(25920),X=n(7906);let Z=r.Ik({DataExportEnabled:r.zM(),DataExportInterval:r.ai().int().min(1).max(1440),DataExportDefaultTime:r.k5(["hour","day","week"])}),ee=[{label:"Hour",value:"hour"},{label:"Day",value:"day"},{label:"Week",value:"week"}];function et(e){let{defaultValues:t}=e,{t:n}=(0,p.Bd)(),i=(0,I.M)(),r=(0,s.mN)({resolver:(0,l.u)(Z),defaultValues:t});(0,o.useEffect)(()=>{r.reset(t)},[t,r]);let c=async e=>{for(let[n,a]of Object.entries(e).filter(e=>{let[n,a]=e;return a!==t[n]}))await i.mutateAsync({key:n,value:a})},d=r.watch("DataExportEnabled");
99return(0,a.jsx)(N.X,{title:n("Data Dashboard"),children:(0,a.jsx)(v.lV,{...r,children:(0,a.jsxs)(j.yt,{onSubmit:r.handleSubmit(c),children:[(0,a.jsx)(_.S2,{onSave:r.handleSubmit(c),isSaving:i.isPending}),(0,a.jsx)(v.zB,{control:r.control,name:"DataExportEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(j.H,{children:[(0,a.jsx)(j.z$,{children:(0,a.jsx)(v.lR,{children:n("Enable Data Dashboard")})}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(Y.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsxs)("div",{className:"grid gap-6 sm:grid-cols-2",children:[(0,a.jsx)(v.zB,{control:r.control,name:"DataExportInterval",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:n("Refresh interval (minutes)")}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(x.p,{type:"number",min:1,max:1440,step:1,...(0,X.X)(t),disabled:!d})}),(0,a.jsx)(v.Rr,{children:n("Keep this above 1 minute to avoid heavy database load")}),(0,a.jsx)(v.C5,{})]})}}),(0,a.jsx)(v.zB,{control:r.control,name:"DataExportDefaultTime",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:n("Default time granularity")}),(0,a.jsxs)(k.l6,{items:[...ee.map(e=>({value:e.value,label:n(e.label)}))],onValueChange:t.onChange,value:t.value,disabled:!d,children:[(0,a.jsx)(v.MJ,{children:(0,a.jsx)(k.bq,{children:(0,a.jsx)(k.yv,{placeholder:n("Select granularity")})})}),(0,a.jsx)(k.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(k.s3,{children:ee.map(e=>(0,a.jsx)(k.eb,{value:e.value,children:n(e.label)},e.value))})})]}),(0,a.jsx)(v.Rr,{children:n("UI granularity only &mdash; data is still aggregated hourly")}),(0,a.jsx)(v.C5,{})]})}})]})]})})})}let en=r.Ik({DrawingEnabled:r.zM(),MjNotifyEnabled:r.zM(),MjAccountFilterEnabled:r.zM(),MjForwardUrlEnabled:r.zM(),MjModeClearEnabled:r.zM(),MjActionCheckSuccessEnabled:r.zM()});function ea(e){let{defaultValues:t}=e,{t:n}=(0,p.Bd)(),i=(0,I.M)(),r=(0,s.mN)({resolver:(0,l.u)(en),defaultValues:t});(0,o.useEffect)(()=>{r.reset(t)},[t,r]);let c=async e=>{for(let[n,a]of Object.entries(e).filter(e=>{let[n,a]=e;return a!==t[n]}))await i.mutateAsync({key:n,value:a})},d=[{name:"DrawingEnabled",label:n("Enable drawing features"),description:n("Required to expose Midjourney-style image generation to end users.")},{name:"MjNotifyEnabled",label:n("Allow upstream callbacks"),description:n("When enabled, Midjourney callbacks are accepted (reveals server IP).")},{name:"MjAccountFilterEnabled",label:n("Allow accountFilter parameter"),description:n("Keep enabled if you need to proxy requests for different upstream accounts.")},{name:"MjForwardUrlEnabled",label:n("Rewrite callback URLs to the local server"),description:n("Automatically replaces upstream callback URLs with the server address.")},{name:"MjModeClearEnabled",label:n("Clear mode flags in prompts"),description:n("Removes Midjourney flags such as --fast, --relax, and --turbo from user prompts.")},{name:"MjActionCheckSuccessEnabled",label:n("Require job success before follow-up actions"),description:n("Users must wait for a successful drawing before upscales or variations.")}];return(0,a.jsx)(N.X,{title:n("Drawing"),children:(0,a.jsx)(v.lV,{...r,children:(0,a.jsxs)(j.yt,{onSubmit:r.handleSubmit(c),children:[(0,a.jsx)(_.S2,{onSave:r.handleSubmit(c),isSaving:i.isPending,saveLabel:"Save drawing settings"}),(0,a.jsx)("div",{className:"space-y-4",children:d.map(e=>(0,a.jsx)(v.zB,{control:r.control,name:e.name,render:t=>{let{field:n}=t;return(0,a.jsxs)(j.H,{children:[(0,a.jsxs)(j.z$,{children:[(0,a.jsx)(v.lR,{children:e.label}),(0,a.jsx)(v.Rr,{children:e.description})]}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(Y.d,{checked:n.value,onCheckedChange:n.onChange})}),(0,a.jsx)(v.C5,{})]})}},e.name))})]})})})}let ei=r.Ik({question:r.Yj().min(1,"Question is required").max(200,"Question must be less than 200 characters"),answer:r.Yj().min(1,"Answer is required").max(1e3,"Answer must be less than 1000 characters")}),eo="faq-form";function er(e){let{enabled:t,data:n}=e,{t:i}=(0,p.Bd)(),r=(0,I.M)(),[g,k]=(0,o.useState)([]),[w,P]=(0,o.useState)(t),[R,T]=(0,o.useState)(!1),[M,D]=(0,o.useState)([]),[O,L]=(0,o.useState)(!1),[E,U]=(0,o.useState)(!1),[q,F]=(0,o.useState)(null),[_,B]=(0,o.useState)("single"),G=(0,s.mN)({resolver:(0,l.u)(ei),defaultValues:{question:"",answer:""}});(0,o.useEffect)(()=>{try{let e=JSON.parse(n||"[]");Array.isArray(e)&&k(e.map((e,t)=>({...e,id:e.id||t+1})))}catch{k([])}},[n]),(0,o.useEffect)(()=>{P(t)},[t]);let z=async e=>{try{await r.mutateAsync({key:"console_setting.faq_enabled",value:e}),P(e),m.oR.success(i("Setting saved"))}catch{m.oR.error(i("Failed to update setting"))}},K=async()=>{try{await r.mutateAsync({key:"console_setting.faq",value:JSON.stringify(g)}),T(!1),m.oR.success(i("FAQ saved successfully"))}catch{m.oR.error(i("Failed to save FAQ"))}};return(0,a.jsxs)(N.X,{title:i("FAQ"),children:[(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(y.$,{onClick:()=>{F(null),G.reset({question:"",answer:""}),L(!0)},size:"sm",children:[(0,a.jsx)(c.A,{className:"mr-2 h-4 w-4"}),i("Add FAQ")]}),(0,a.jsxs)(y.$,{onClick:()=>{0===M.length?m.oR.error(i("Please select items to delete")):(B("batch"),U(!0))},size:"sm",variant:"destructive",disabled:0===M.length,children:[(0,a.jsx)(d.A,{className:"mr-2 h-4 w-4"}),i("Delete ("),M.length,")"]}),(0,a.jsxs)(y.$,{onClick:K,size:"sm",variant:"secondary",disabled:!R||r.isPending,children:[(0,a.jsx)(u.A,{className:"mr-2 h-4 w-4"}),r.isPending?i("Saving..."):i("Save Settings")]})]}),(0,a.jsx)(j.ew,{checked:w,onCheckedChange:z,label:i("Enabled"),className:"border-b-0 py-0"})]}),(0,a.jsx)(S.hm,{data:g,getRowKey:e=>e.id,emptyContent:i('No FAQ entries yet. Click "Add FAQ" to create one.'),columns:[{id:"select",header:(0,a.jsx)(b.S,{checked:M.length===g.length&&g.length>0,onCheckedChange:e=>{D(e?g.map(e=>e.id):[])}}),className:"w-12",cell:e=>(0,a.jsx)(b.S,{checked:M.includes(e.id),onCheckedChange:t=>{var n;return n=e.id,void D(e=>t?[...e,n]:e.filter(e=>e!==n))}})},{id:"question",header:i("Question"),cellClassName:"max-w-xs truncate font-medium",cell:e=>e.question},{id:"answer",header:i("Answer"),cellClassName:"text-muted-foreground max-w-md truncate",cell:e=>e.answer},{id:"actions",header:i("Actions"),className:"w-32",cell:e=>(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(y.$,{onClick:()=>{F(e),G.reset({question:e.question,answer:e.answer}),L(!0)},size:"sm",variant:"ghost",children:(0,a.jsx)(h.A,{className:"h-4 w-4"})}),(0,a.jsx)(y.$,{onClick:()=>{F(e),B("single"),U(!0)},size:"sm",variant:"ghost",children:(0,a.jsx)(d.A,{className:"h-4 w-4"})})]})}]})]}),(0,a.jsx)(A.l,{open:O,onOpenChange:L,title:q?i("Edit FAQ"):i("Add FAQ"),description:i("Create or update frequently asked questions for users"),contentClassName:"max-w-2xl",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(y.$,{type:"button",variant:"outline",onClick:()=>L(!1),children:i("Cancel")}),(0,a.jsx)(y.$,{type:"submit",form:eo,children:q?i("Update"):i("Add")})]}),children:(0,a.jsx)(v.lV,{...G,children:(0,a.jsxs)("form",{id:eo,onSubmit:G.handleSubmit(e=>{if(q)k(t=>t.map(t=>
99t.id===q.id?{...t,...e}:t)),m.oR.success(i('FAQ updated. Click "Save Settings" to apply.'));else{let t=Math.max(...g.map(e=>e.id),0)+1;k(n=>[...n,{id:t,...e}]),m.oR.success(i('FAQ added. Click "Save Settings" to apply.'))}T(!0),L(!1)}),className:"space-y-4",children:[(0,a.jsx)(v.zB,{control:G.control,name:"question",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:i("Question")}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("How to reset my quota?"),...t})}),(0,a.jsx)(v.Rr,{children:i("Maximum 200 characters")}),(0,a.jsx)(v.C5,{})]})}}),(0,a.jsx)(v.zB,{control:G.control,name:"answer",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:i("Answer")}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(C.T,{placeholder:i("Visit Settings → General and adjust quota options..."),rows:8,...t})}),(0,a.jsx)(v.Rr,{children:i("Maximum 1000 characters. Supports Markdown and HTML.")}),(0,a.jsx)(v.C5,{})]})}})]})})}),(0,a.jsx)(f.Lt,{open:E,onOpenChange:U,children:(0,a.jsxs)(f.EO,{children:[(0,a.jsxs)(f.wd,{children:[(0,a.jsx)(f.r7,{children:i("Are you sure?")}),(0,a.jsx)(f.$v,{children:"single"===_?"This FAQ entry will be removed from the list.":`${M.length} FAQ entries will be removed from the list.`})]}),(0,a.jsxs)(f.ck,{children:[(0,a.jsx)(f.Zr,{children:i("Cancel")}),(0,a.jsx)(f.Rx,{onClick:()=>{"single"===_&&q?(k(e=>e.filter(e=>e.id!==q.id)),T(!0),m.oR.success(i('FAQ deleted. Click "Save Settings" to apply.'))):"batch"===_&&(k(e=>e.filter(e=>!M.includes(e.id))),D([]),T(!0),m.oR.success(i('{{count}} FAQs deleted. Click "Save Settings" to apply.',{count:M.length}))),U(!1),F(null)},children:i("Delete")})]})]})})]})}let es="uptime-kuma-form";function el(e){let{enabled:t,data:n}=e,{t:i}=(0,p.Bd)(),g=(0,I.M)(),k=r.Ik({categoryName:r.Yj().min(1,{error:i("Category name is required")}).max(50,{error:i("Category name must be less than 50 characters")}),url:r.Yj().url({error:i("Must be a valid URL")}),slug:r.Yj().min(1,{error:i("Slug is required")}).max(100,{error:i("Slug must be less than 100 characters")}).regex(/^[a-zA-Z0-9_-]+$/,{error:i("Slug can only contain letters, numbers, hyphens, and underscores")})}),[C,w]=(0,o.useState)([]),[P,R]=(0,o.useState)(t),[T,M]=(0,o.useState)(!1),[D,O]=(0,o.useState)([]),[L,E]=(0,o.useState)(!1),[U,q]=(0,o.useState)(!1),[F,_]=(0,o.useState)(null),[B,G]=(0,o.useState)("single"),z=(0,s.mN)({resolver:(0,l.u)(k),defaultValues:{categoryName:"",url:"",slug:""}});(0,o.useEffect)(()=>{try{let e=JSON.parse(n||"[]");Array.isArray(e)&&w(e.map((e,t)=>({...e,id:e.id||t+1})))}catch{w([])}},[n]),(0,o.useEffect)(()=>{R(t)},[t]);let K=async e=>{try{await g.mutateAsync({key:"console_setting.uptime_kuma_enabled",value:e}),R(e),m.oR.success(i("Setting saved"))}catch{m.oR.error(i("Failed to update setting"))}},W=async()=>{try{await g.mutateAsync({key:"console_setting.uptime_kuma_groups",value:JSON.stringify(C)}),M(!1),m.oR.success(i("Uptime Kuma groups saved successfully"))}catch{m.oR.error(i("Failed to save Uptime Kuma groups"))}};return(0,a.jsxs)(N.X,{title:i("Uptime Kuma"),children:[(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(y.$,{onClick:()=>{_(null),z.reset({categoryName:"",url:"",slug:""}),E(!0)},size:"sm",children:[(0,a.jsx)(c.A,{className:"mr-2 h-4 w-4"}),i("Add Group")]}),(0,a.jsxs)(y.$,{onClick:()=>{0===D.length?m.oR.error(i("Please select items to delete")):(G("batch"),q(!0))},size:"sm",variant:"destructive",disabled:0===D.length,children:[(0,a.jsx)(d.A,{className:"mr-2 h-4 w-4"}),i("Delete ("),D.length,")"]}),(0,a.jsxs)(y.$,{onClick:W,size:"sm",variant:"secondary",disabled:!T||g.isPending,children:[(0,a.jsx)(u.A,{className:"mr-2 h-4 w-4"}),g.isPending?i("Saving..."):i("Save Settings")]})]}),(0,a.jsx)(j.ew,{checked:P,onCheckedChange:K,label:i("Enabled"),className:"border-b-0 py-0"})]}),(0,a.jsx)(S.hm,{data:C,getRowKey:e=>e.id,emptyContent:i('No Uptime Kuma groups yet. Click "Add Group" to create one.'),columns:[{id:"select",header:(0,a.jsx)(b.S,{checked:D.length===C.length&&C.length>0,onCheckedChange:e=>{O(e?C.map(e=>e.id):[])}}),className:"w-12",cell:e=>(0,a.jsx)(b.S,{checked:D.includes(e.id),onCheckedChange:t=>{var n;return n=e.id,void O(e=>t?[...e,n]:e.filter(e=>e!==n))}})},{id:"category",header:i("Category Name"),cellClassName:"font-medium",cell:e=>e.categoryName},{id:"url",header:i("Uptime Kuma URL"),cellClassName:"text-primary max-w-xs truncate font-mono text-sm",cell:e=>e.url},{id:"slug",header:i("Status Page Slug"),cellClassName:"text-muted-foreground font-mono text-sm",cell:e=>e.slug},{id:"actions",header:i("Actions"),className:"w-32",cell:e=>(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(y.$,{onClick:()=>{_(e),z.reset({categoryName:e.categoryName,url:e.url,slug:e.slug}),E(!0)},size:"sm",variant:"ghost",children:(0,a.jsx)(h.A,{className:"h-4 w-4"})}),(0,a.jsx)(y.$,{onClick:()=>{_(e),G("single"),q(!0)},size:"sm",variant:"ghost",children:(0,a.jsx)(d.A,{className:"h-4 w-4"})})]})}]})]}),(0,a.jsx)(A.l,{open:L,onOpenChange:E,title:F?i("Edit Uptime Kuma Group"):i("Add Uptime Kuma Group"),description:i("Configure monitoring status page groups for the dashboard"),
99contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(y.$,{type:"button",variant:"outline",onClick:()=>E(!1),children:i("Cancel")}),(0,a.jsx)(y.$,{type:"submit",form:es,children:F?i("Update"):i("Add")})]}),children:(0,a.jsx)(v.lV,{...z,children:(0,a.jsxs)("form",{id:es,onSubmit:z.handleSubmit(e=>{if(F)w(t=>t.map(t=>t.id===F.id?{...t,...e}:t)),m.oR.success(i('Group updated. Click "Save Settings" to apply.'));else{let t=Math.max(...C.map(e=>e.id),0)+1;w(n=>[...n,{id:t,...e}]),m.oR.success(i('Group added. Click "Save Settings" to apply.'))}M(!0),E(!1)}),className:"space-y-4",children:[(0,a.jsx)(v.zB,{control:z.control,name:"categoryName",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:i("Category Name")}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("e.g., Core APIs, OpenAI, Claude"),...t})}),(0,a.jsx)(v.Rr,{children:i("Display name for this monitoring group (max 50 characters)")}),(0,a.jsx)(v.C5,{})]})}}),(0,a.jsx)(v.zB,{control:z.control,name:"url",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:i("Uptime Kuma URL")}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("https://status.example.com"),...t})}),(0,a.jsx)(v.Rr,{children:i("Base URL of your Uptime Kuma instance")}),(0,a.jsx)(v.C5,{})]})}}),(0,a.jsx)(v.zB,{control:z.control,name:"slug",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.eI,{children:[(0,a.jsx)(v.lR,{children:i("Status Page Slug")}),(0,a.jsx)(v.MJ,{children:(0,a.jsx)(x.p,{placeholder:i("my-status"),...t})}),(0,a.jsxs)(v.Rr,{children:[i("The slug is appended to the URL:")," ","{url}",i("/status/"),"{slug}"]}),(0,a.jsx)(v.C5,{})]})}})]})})}),(0,a.jsx)(f.Lt,{open:U,onOpenChange:q,children:(0,a.jsxs)(f.EO,{children:[(0,a.jsxs)(f.wd,{children:[(0,a.jsx)(f.r7,{children:i("Are you sure?")}),(0,a.jsx)(f.$v,{children:"single"===B?"This Uptime Kuma group will be removed from the list.":`${D.length} Uptime Kuma groups will be removed from the list.`})]}),(0,a.jsxs)(f.ck,{children:[(0,a.jsx)(f.Zr,{children:i("Cancel")}),(0,a.jsx)(f.Rx,{onClick:()=>{"single"===B&&F?(w(e=>e.filter(e=>e.id!==F.id)),M(!0),m.oR.success(i('Group deleted. Click "Save Settings" to apply.'))):"batch"===B&&(w(e=>e.filter(e=>!D.includes(e.id))),O([]),M(!0),m.oR.success(i('{{count}} groups deleted. Click "Save Settings" to apply.',{count:D.length}))),q(!1),_(null)},children:i("Delete")})]})]})})]})}let ec=[{id:"dashboard",titleKey:"Data Dashboard",build:e=>{var t;return(0,a.jsx)(et,{defaultValues:{DataExportEnabled:e.DataExportEnabled,DataExportInterval:e.DataExportInterval,DataExportDefaultTime:"week"===(t=e.DataExportDefaultTime)||"hour"===t||"day"===t?t:"hour"}})}},{id:"announcements",titleKey:"Announcements",build:e=>(0,a.jsx)(D,{enabled:e["console_setting.announcements_enabled"],data:e["console_setting.announcements"]})},{id:"api-info",titleKey:"API Addresses",build:e=>(0,a.jsx)(U,{enabled:e["console_setting.api_info_enabled"],data:e["console_setting.api_info"]})},{id:"faq",titleKey:"FAQ",build:e=>(0,a.jsx)(er,{enabled:e["console_setting.faq_enabled"],data:e["console_setting.faq"]})},{id:"uptime-kuma",titleKey:"Uptime Kuma",build:e=>(0,a.jsx)(el,{enabled:e["console_setting.uptime_kuma_enabled"],data:e["console_setting.uptime_kuma_groups"]})},{id:"chat",titleKey:"Chat Presets",build:e=>(0,a.jsx)(Q,{defaultValue:e.Chats})},{id:"drawing",titleKey:"Drawing",build:e=>(0,a.jsx)(ea,{defaultValues:{DrawingEnabled:e.DrawingEnabled,MjNotifyEnabled:e.MjNotifyEnabled,MjAccountFilterEnabled:e.MjAccountFilterEnabled,MjForwardUrlEnabled:e.MjForwardUrlEnabled,MjModeClearEnabled:e.MjModeClearEnabled,MjActionCheckSuccessEnabled:e.MjActionCheckSuccessEnabled}})}],ed=(0,i.h)({sections:ec,defaultSection:"dashboard",basePath:"/system-settings/content",urlStyle:"path"}),eu=ed.sectionIds,eh=ed.defaultSection,ep=ed.getSectionNavItems,em=ed.getSectionContent,eg=ed.getSectionMeta},18648(e,t,n){var a=n(82406);async function i(){return(await a.FH.get("/api/option/channel_affinity_cache",{disableDuplicate:!0})).data}async function o(){return(await a.FH.delete("/api/option/channel_affinity_cache",{params:{all:!0}})).data}async function r(e){return(await a.FH.delete("/api/option/channel_affinity_cache",{params:{rule_name:e}})).data}async function s(e){return(await a.FH.get("/api/log/channel_affinity_usage_cache",{params:e,disableDuplicate:!0})).data}n.d(t,{A4:()=>r,Mb:()=>s,QS:()=>i,pc:()=>o})},85971(e,t,n){var a=n(31371);function i(e,t){let n=(0,a.useRef)(null);(0,a.useEffect)(()=>
99{if(!t)return;let a=JSON.stringify(t);a!==n.current&&(e.reset(t),n.current=a)},[t,e])}n.d(t,{j:()=>i})},37453(e,t,n){var a=n(31371),i=n(32403),o=n(65172),r=n(36461);function s(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function l(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return s(e)?Object.entries(e).forEach(e=>{let[a,i]=e,o=t?`${t}.${a}`:a;if(s(i))return void l(i,o,n);if(Array.isArray(i)){n[o]=i;return}n[o]=i}):"string"==typeof t&&(n[t]=e),n}function c(e){let{onSubmit:t,compareValues:n,defaultValues:c,...d}=e,u=(0,a.useMemo)(()=>(function e(t){if(!t||!s(t))return t;let n={};return Object.entries(t).forEach(t=>{let[a,i]=t;if(a.includes(".")){let e,t;return void(e=a.split("."),t=n,e.forEach((n,a)=>{if(a===e.length-1){t[n]=i;return}let o=t[n];if(s(o)){t=o;return}t[n]={},t=t[n]}))}if(s(i)){n[a]=e(i);return}n[a]=i}),n})(c),[c]),h=(0,i.mN)({...d,defaultValues:u}),p=(0,a.useRef)(u??{}),m=(0,a.useRef)(l(u??{})),g=(0,a.useRef)(JSON.stringify(m.current));(0,a.useEffect)(()=>{if(!u)return;let e=l(u),t=JSON.stringify(e);t!==g.current&&(m.current=e,p.current=u,g.current=t,h.reset(u))},[u,h]);let f=n||((e,t)=>e===t||(Array.isArray(e)&&Array.isArray(t)?JSON.stringify(e)===JSON.stringify(t):typeof e==typeof t&&!!e&&!!t&&"object"==typeof e&&"object"==typeof t&&JSON.stringify(e)===JSON.stringify(t))),y=async e=>{let n=Object.entries(function e(t,n,a){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return!0===t?"string"==typeof a&&(i[a]=n):t&&"object"==typeof t&&Object.entries(t).forEach(t=>{let[o,r]=t,l=a?`${a}.${o}`:o,c=n&&(s(n)||Array.isArray(n))?n[o]:void 0;if(!0===r){i[l]=c;return}r&&"object"==typeof r&&e(r,c,l,i)}),i}(h.formState.dirtyFields,e)).filter(e=>{let[t,n]=e;return!f(n,m.current[t])});if(0===n.length)return void r.oR.info(o.Ay.t("No changes to save"));let a=n.reduce((e,t)=>{let[n,a]=t;return e[n]=a,e},{});await t(e,a);let i=l(e);m.current=i,p.current=e,g.current=JSON.stringify(i),h.reset(e)};return{form:h,handleSubmit:h.handleSubmit(y),handleReset:()=>{h.reset(p.current),r.oR.success(o.Ay.t("Form reset to saved values"))},isDirty:h.formState.isDirty,isSubmitting:h.formState.isSubmitting}}n.d(t,{T:()=>c})},90770(e,t,n){var a=n(98309),i=n(57123),o=n(65172),r=n(36461),s=n(55830);let l=["theme.frontend","HeaderNavModules","SidebarModulesAdmin","Notice","LogConsumeEnabled","QuotaPerUnit","USDExchangeRate","DisplayInCurrencyEnabled","DisplayTokenStatEnabled","general_setting.quota_display_type","general_setting.custom_currency_symbol","general_setting.custom_currency_exchange_rate"];function c(){let e=(0,a.jE)();return(0,i.n)({mutationFn:e=>(0,s.qE)(e),onSuccess:(t,n)=>{if(t.success){if(e.invalidateQueries({queryKey:["system-options"]}),l.includes(n.key)){e.invalidateQueries({queryKey:["status"]});try{window.localStorage.removeItem("status")}catch{}}r.oR.success(o.Ay.t("Setting updated successfully"))}else r.oR.error(t.message||o.Ay.t("Failed to update setting"))},onError:e=>{r.oR.error(e.message||o.Ay.t("Failed to update setting"))}})}n.d(t,{M:()=>c})},22097(e,t,n){function a(e){let t=e.trim();return t?t.replace(/\/+$/,""):""}function i(e){let t=e.trim();if(!t)return"";try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}}function o(e){let t=e.trim();if(!t)return"";try{return JSON.stringify(JSON.parse(t))}catch{return t}}function r(e,t){let n=e.trim();if(!n)return null;try{let e=JSON.parse(n);if(t&&!t(e))return"JSON structure is invalid";return null}catch(i){if(!(i instanceof Error))return"Invalid JSON";let e=function(e,t){if(!(e instanceof Error))return{};let n=e.message,a=n.match(/at position (\d+)/i);if(a){let e=parseInt(a[1],10),n=t.substring(0,e).split("\n");return{line:n.length,column:n[n.length-1].length+1}}let i=n.match(/at line (\d+) column (\d+)/i);return i?{line:parseInt(i[1],10),column:parseInt(i[2],10)}:{}}(i,n),t=i.message,a=t.includes("Expected ','")||t.includes("Expected property name")||t.includes("Unexpected string");if(e.line&&e.column){let n="";return a&&e.line>1&&(n=` (check line ${e.line-1} for missing comma)`),`Error at line ${e.line}, column ${e.column}: ${t}${n}`}return t}}n.d(t,{NI:()=>r,UC:()=>a,oE:()=>i,s$:()=>o})},60414(e,t,n){n.d(t,{Fi:()=>eS,ev:()=>eC,Fs:()=>eA,L5:()=>eP,dj:()=>ew});var a=n(23579),i=n(31371),o=n(85501),r=n(40977),s=n(52093),l=n(6631),c=n(55982),d=n(57224),u=n(72407),h=n(36461),p=n(64792),m=n(66304),g=n(43660),f=n(40382),y=n(41220),b=n(51983),v=n(69502),x=n(68448),k=n(97933),C=n(68165),S=n(54548),w=n(38390),A=n(16728),P=n(90770),j=n(18648);function N(e){return{operations:[{mode:"pass_headers",value:[...e],keep_origin:!0}]}}let I={codexCli:{name:"codex cli trace",model_regex:["^gpt-.*$"],path_regex:["/v1/responses"],key_sources:[{t
99ype:"gjson",path:"prompt_cache_key"}],param_override_template:N(["Originator","Session_id","User-Agent","X-Codex-Beta-Features","X-Codex-Turn-Metadata"]),value_regex:"",ttl_seconds:0,skip_retry_on_failure:!0,include_using_group:!0,include_model_name:!1,include_rule_name:!0},claudeCli:{name:"claude cli trace",model_regex:["^claude-.*$"],path_regex:["/v1/messages"],key_sources:[{type:"gjson",path:"metadata.user_id"}],param_override_template:N(["X-Stainless-Arch","X-Stainless-Lang","X-Stainless-Os","X-Stainless-Package-Version","X-Stainless-Retry-Count","X-Stainless-Runtime","X-Stainless-Runtime-Version","X-Stainless-Timeout","User-Agent","X-App","Anthropic-Beta","Anthropic-Dangerous-Direct-Browser-Access","Anthropic-Version"]),value_regex:"",ttl_seconds:0,skip_retry_on_failure:!0,include_using_group:!0,include_model_name:!1,include_rule_name:!0}};var R=n(32403),T=n(48726),M=n(62036);let D=["context_int","context_string","request_header","gjson"],O=["id","token_id","token_key","token_group","group","username","user_group","user_email","specific_channel_id"],L="channel-affinity-rule-form";function E(e){return e.split("\n").map(e=>e.trim()).filter(e=>e.length>0)}function U(e){let t=e?.type||"gjson";return"gjson"===t?{type:t,key:"",path:e?.path||""}:{type:t,key:e?.key||"",path:""}}function q(e){let{t}=(0,u.Bd)(),n=!!e.rule?.name,[r,s]=(0,i.useState)([{type:"gjson",path:""}]),[l,c]=(0,i.useState)(!1),p=(0,R.mN)({defaultValues:{name:"",model_regex_text:"",path_regex_text:"",user_agent_include_text:"",value_regex:"",ttl_seconds:0,skip_retry_on_failure:!1,include_using_group:!0,include_model_name:!1,include_rule_name:!0,param_override_template_json:""}}),g=e=>{p.reset({name:e.name||"",model_regex_text:(e.model_regex||[]).join("\n"),path_regex_text:(e.path_regex||[]).join("\n"),user_agent_include_text:(e.user_agent_include||[]).join("\n"),value_regex:e.value_regex||"",ttl_seconds:e.ttl_seconds||0,skip_retry_on_failure:!!e.skip_retry_on_failure,include_using_group:e.include_using_group??!0,include_model_name:!!e.include_model_name,include_rule_name:e.include_rule_name??!0,param_override_template_json:e.param_override_template?JSON.stringify(e.param_override_template,null,2):""});let t=(e.key_sources||[]).map(U);s(t.length>0?t:[{type:"gjson",path:""}]),e.param_override_template&&c(!0)};return(0,i.useEffect)(()=>{e.open&&(e.rule?g(e.rule):e.templateKey&&I[e.templateKey]?g(I[e.templateKey]):(p.reset({name:"",model_regex_text:"",path_regex_text:"",user_agent_include_text:"",value_regex:"",ttl_seconds:0,skip_retry_on_failure:!1,include_using_group:!0,include_model_name:!1,include_rule_name:!0,param_override_template_json:""}),s([{type:"gjson",path:""}])))},[e.open,e.rule,e.templateKey]),(0,a.jsx)(k.l,{open:e.open,onOpenChange:e.onOpenChange,title:n?t("Edit Rule"):t("Add Rule"),contentClassName:"max-w-2xl",contentHeight:"auto",bodyClassName:"pr-2",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(m.$,{type:"button",variant:"outline",onClick:()=>e.onOpenChange(!1),children:t("Cancel")}),(0,a.jsx)(m.$,{type:"submit",form:L,children:t("Save")})]}),children:(0,a.jsxs)("form",{id:L,onSubmit:p.handleSubmit(n=>{let a=E(n.model_regex_text);if(0===a.length)return void h.oR.error(t("At least one model regex pattern is required"));let i=r.map(U).filter(e=>e.type&&("gjson"===e.type?e.path:e.key));if(0===i.length)return void h.oR.error(t("At least one valid key source is required"));let o=null;if(n.param_override_template_json.trim())try{let e=JSON.parse(n.param_override_template_json);if("object"!=typeof e||Array.isArray(e)||null===e)return void h.oR.error(t("Parameter override template must be a JSON object"));o=e}catch{h.oR.error(t("Invalid JSON in parameter override template"));return}let s={id:e.rule?.id,name:n.name.trim(),model_regex:a,path_regex:E(n.path_regex_text),user_agent_include:E(n.user_agent_include_text),key_sources:i,value_regex:n.value_regex.trim(),ttl_seconds:Number(n.ttl_seconds||0),skip_retry_on_failure:n.skip_retry_on_failure,include_using_group:n.include_using_group,include_model_name:n.include_model_name,include_rule_name:n.include_rule_name,param_override_template:o};e.onSave(s),e.onOpenChange(!1)}),className:"min-w-0 space-y-4 overflow-x-clip",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsxs)(y.J,{children:[t("Name")," *"]}),(0,a.jsx)(f.p,{placeholder:"prefer-by-conversation-id",...p.register("name",{required:!0})})]}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsxs)(y.J,{children:[t("Model Regex (one per line)")," *"]}),(0,a.jsx)(v.T,{rows:4,placeholder:"^gpt-4o.*$\n^claude-3.*$",...p.register("model_regex_text",{required:!0})})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(y.J,{children:t("Path Regex (one per line)")}),(0,a.jsx)(v.T,{rows:4,placeholder:"/v1/chat/completions",...p.register("path_regex_text")})]})]}),(0,a.jsx)(S.ew,{checked:p.watch("skip_retry_on_failure"),onCheckedChange:e=>p.setValue("skip_retry_on_failure",e),label:t("Skip retry on failure")}
99),(0,a.jsx)(b.w,{}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"mb-2 flex items-center justify-between",children:[(0,a.jsx)(y.J,{children:t("Key Sources")}),(0,a.jsxs)(m.$,{type:"button",variant:"outline",size:"sm",onClick:()=>s(e=>[...e,{type:"gjson",path:""}]),children:[(0,a.jsx)(o.A,{className:"mr-1 h-3 w-3"}),t("Add")]})]}),(0,a.jsxs)("p",{className:"text-muted-foreground mb-2 text-xs",children:[t("Common Keys"),": ",O.join(", ")]}),(0,a.jsx)("div",{className:"space-y-2",children:r.map((e,t)=>(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-2 sm:flex-row sm:items-center",children:[(0,a.jsxs)(M.l6,{items:[...D.map(e=>({value:e,label:e}))],value:e.type,onValueChange:n=>{if(null===n)return;let a=[...r];a[t]=U({...e,type:n}),s(a)},children:[(0,a.jsx)(M.bq,{className:"w-full sm:w-[160px]",children:(0,a.jsx)(M.yv,{})}),(0,a.jsx)(M.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(M.s3,{children:D.map(e=>(0,a.jsx)(M.eb,{value:e,children:e},e))})})]}),(0,a.jsx)(f.p,{className:"min-w-0 flex-1",placeholder:"gjson"===e.type?"metadata.conversation_id":"user_id",value:"gjson"===e.type?e.path||"":e.key||"",onChange:n=>{let a=[...r];"gjson"===e.type?a[t]={...e,path:n.target.value}:a[t]={...e,key:n.target.value},s(a)}}),(0,a.jsx)(m.$,{type:"button",variant:"ghost",size:"icon",onClick:()=>s(e=>e.filter((e,n)=>n!==t)),children:(0,a.jsx)(d.A,{className:"h-4 w-4"})})]},t))})]}),(0,a.jsx)(b.w,{}),(0,a.jsxs)(T.Nt,{open:l,onOpenChange:c,children:[(0,a.jsxs)(T.R6,{render:(0,a.jsx)(m.$,{type:"button",variant:"ghost",className:"w-full justify-start"}),children:[l?"▼":"▶"," ",t("Advanced Settings")]}),(0,a.jsxs)(T.Ke,{className:"space-y-3 pt-2",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(y.J,{children:t("User-Agent include (one per line)")}),(0,a.jsx)(v.T,{rows:3,placeholder:"curl\nPostmanRuntime",...p.register("user_agent_include_text")})]}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(y.J,{children:t("Value Regex")}),(0,a.jsx)(f.p,{placeholder:"^[-0-9A-Za-z._:]{1,128}$",...p.register("value_regex")})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(y.J,{children:t("TTL (seconds, 0 = default)")}),(0,a.jsx)(f.p,{type:"number",min:0,...p.register("ttl_seconds")})]})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(y.J,{children:t("Parameter Override Template (JSON)")}),(0,a.jsx)(v.T,{rows:5,placeholder:'{"operations": [...]}',...p.register("param_override_template_json"),className:"font-mono text-xs"})]}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-3",children:[(0,a.jsx)(S.ew,{checked:p.watch("include_using_group"),onCheckedChange:e=>p.setValue("include_using_group",e),label:t("Include Group"),className:"border-b-0 py-0"}),(0,a.jsx)(S.ew,{checked:p.watch("include_model_name"),onCheckedChange:e=>p.setValue("include_model_name",e),label:t("Include Model"),className:"border-b-0 py-0"}),(0,a.jsx)(S.ew,{checked:p.watch("include_rule_name"),onCheckedChange:e=>p.setValue("include_rule_name",e),label:t("Include Rule Name"),className:"border-b-0 py-0"})]})]})]})]})})}function F(e){try{let t=JSON.parse(e||"[]");if(!Array.isArray(t))return[];return t.map((e,t)=>({id:t,...e}))}catch{return[]}}function _(e){return(0,a.jsx)(C.M8,{items:e.items,max:2,getKey:e=>e,renderItem:e=>(0,a.jsx)(C.Wh,{label:e,variant:"neutral",size:"sm",copyable:!1})})}function B(e){let{t}=(0,u.Bd)();return(0,a.jsx)(k.l,{open:e.open,onOpenChange:e.onOpenChange,title:e.title,contentClassName:"sm:max-w-md",contentHeight:"auto",bodyClassName:"flex items-start",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(m.$,{variant:"outline",onClick:()=>e.onOpenChange(!1),children:t("Cancel")}),(0,a.jsx)(m.$,{variant:e.destructive?"destructive":"default",onClick:e.handleConfirm,children:t("Continue")})]}),children:(0,a.jsx)("div",{className:"text-muted-foreground text-sm",children:e.desc})})}function G(e){let{t}=(0,u.Bd)(),n=(0,P.M)(),[k,N]=(0,i.useState)(e.defaultValues["channel_affinity_setting.enabled"]),[R,T]=(0,i.useState)(e.defaultValues["channel_affinity_setting.switch_on_success"]),[M,D]=(0,i.useState)(e.defaultValues["channel_affinity_setting.keep_on_channel_disabled"]),[O,L]=(0,i.useState)(e.defaultValues["channel_affinity_setting.max_entries"]),[E,U]=(0,i.useState)(e.defaultValues["channel_affinity_setting.default_ttl_seconds"]),[G,z]=(0,i.useState)(()=>F(e.defaultValues["channel_affinity_setting.rules"])),[K,W]=(0,i.useState)("visual"),[J,V]=(0,i.useState)(()=>JSON.stringify(F(e.defaultValues["channel_affinity_setting.rules"]).map(e=>{let{id:t,...n}=e;return n}),null,2)),[H,$]=(0,i.useState)(null),[Q,Y]=(0,i.useState)(!1),[X,Z]=(0,i.useState)(!1),[ee,et]=(0,i.useState)(!1),[en,ea]=(0,i.useState)(null),[ei,eo]=(0,i.useState)(null),[er,es]=(0,i.useState)(!1),[el,ec]=(0,i.useState)(null),[ed,eu]=(0,i.useState)(!1);(0,i.useEffect)(()=>{N(e.defaultValues["channel_affinity_setting.enabled"]),T(e.defaultValues["channel_affinity_setting.switch_on_success"]),D(e.defaultValues["channel_affinity_setting.keep_on_channel_disabled"]),L(e.defaultValues["channel_affinity_setting.max_entries"]),U(e.defaultValues["channel_affinity_setting.default_ttl_seconds"]);let t=F(e.defaultValues["channel_affinity_setting.rules"]);z(t),V(JSON.stringify(t.map(e=>{let{id:t,...n}=e;return n}),null,2))},[e.defaultValues]);let eh=(0,i.useCallback)(async()=>{Y(!0);try{let e=await (0,j.QS)();e.success&&$(e.data||null)}catch{h.oR.error(t("Failed to refresh cache stats"))}finally{Y(!1)}},[t]);(0,i.useEffect)(()=>{eh()},[eh]);let ep=()=>{let e=new Set(G.map(e=>(e.name||"").trim()).filter(e=>e.length>0)),n=Object.values(I).map(t=>{let n=JSON.parse(JSON.stringify(t)),a=function(e,t){let n=(t||"").trim()||"rule";if(!e.has(n))return n;for(let t=2;t<1e3;t++){let a=`${n}-${t}`;if(!e.has(a))return a}return`${n}-${Date.now()}`}(e,t.name);return e.add(a),{...n,name:a}});z(e=>[...e,...n].map((e,t)=>({...e,id:t}
99))),h.oR.success(t("Templates appended")),eu(!1)},em=async()=>{let a;if("json"===K)try{let e=JSON.parse(J);if(!Array.isArray(e))return void h.oR.error(t("Rules JSON must be an array"));a=JSON.stringify(e)}catch{h.oR.error(t("Invalid rules JSON format"));return}else a=JSON.stringify(G.map(e=>{let{id:t,...n}=e;return n}));Z(!0);try{let i=[];k!==e.defaultValues["channel_affinity_setting.enabled"]&&i.push({key:"channel_affinity_setting.enabled",value:String(k)}),R!==e.defaultValues["channel_affinity_setting.switch_on_success"]&&i.push({key:"channel_affinity_setting.switch_on_success",value:String(R)}),M!==e.defaultValues["channel_affinity_setting.keep_on_channel_disabled"]&&i.push({key:"channel_affinity_setting.keep_on_channel_disabled",value:String(M)}),O!==e.defaultValues["channel_affinity_setting.max_entries"]&&i.push({key:"channel_affinity_setting.max_entries",value:String(O)}),E!==e.defaultValues["channel_affinity_setting.default_ttl_seconds"]&&i.push({key:"channel_affinity_setting.default_ttl_seconds",value:String(E)});let o=e.defaultValues["channel_affinity_setting.rules"],r=(()=>{try{return JSON.stringify(JSON.parse(o||"[]"))}catch{return"[]"}})();if(a!==r&&i.push({key:"channel_affinity_setting.rules",value:a}),0===i.length)return void h.oR.info(t("No changes"));for(let e of i)await n.mutateAsync(e);h.oR.success(t("Saved successfully"))}catch{h.oR.error(t("Failed to save"))}finally{Z(!1)}},eg=async()=>{(await (0,j.pc)()).success&&(h.oR.success(t("Cleared")),eh()),es(!1)},ef=async()=>{el&&((await (0,j.A4)(el)).success&&(h.oR.success(t("Cleared")),eh()),ec(null))};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(A.X,{title:t("Channel Affinity"),children:[(0,a.jsx)(p.Fc,{children:(0,a.jsx)(p.TN,{className:"text-xs",children:t("Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.")})}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:[(0,a.jsx)(S.ew,{checked:k,onCheckedChange:N,label:t("Enable"),className:"border-b-0 py-0"}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(y.J,{children:t("Max Entries")}),(0,a.jsx)(f.p,{type:"number",min:0,value:O,onChange:e=>L(Number(e.target.value))})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(y.J,{children:t("Default TTL (seconds)")}),(0,a.jsx)(f.p,{type:"number",min:0,value:E,onChange:e=>U(Number(e.target.value))})]})]}),(0,a.jsx)(S.ew,{checked:R,onCheckedChange:T,label:t("Switch affinity on success"),description:t("If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.")}),(0,a.jsx)(S.ew,{checked:M,onCheckedChange:D,label:t("Keep affinity when channel is disabled"),description:t("When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel.")}),(0,a.jsx)(b.w,{}),(0,a.jsxs)(w.cN,{children:[(0,a.jsx)(m.$,{variant:"visual"===K?"default":"outline",size:"sm",onClick:"json"===K?()=>{try{let e=JSON.parse(J);if(!Array.isArray(e))return void h.oR.error(t("Rules JSON must be an array"));z(e.map((e,t)=>({id:t,...e}))),W("visual")}catch{h.oR.error(t("Invalid rules JSON format"))}}:void 0,children:t("Visual")}),(0,a.jsx)(m.$,{variant:"json"===K?"default":"outline",size:"sm",onClick:"visual"===K?()=>{V(JSON.stringify(G.map(e=>{let{id:t,...n}=e;return n}),null,2)),W("json")}:void 0,children:"JSON"}),(0,a.jsxs)(g.rI,{children:[(0,a.jsxs)(g.ty,{render:(0,a.jsx)(m.$,{variant:"outline",size:"sm"}),children:[(0,a.jsx)(o.A,{className:"mr-1 h-3 w-3"}),t("Add Rule")]}),(0,a.jsxs)(g.SQ,{children:[(0,a.jsx)(g._2,{onClick:()=>{ea(null),eo(null),et(!0)},children:t("Blank Rule")}),(0,a.jsx)(g._2,{onClick:()=>{ea(null),eo("codexCli"),et(!0)},children:"Codex CLI"}),(0,a.jsx)(g._2,{onClick:()=>{ea(null),eo("claudeCli"),et(!0)},children:"Claude CLI"})]})]}),(0,a.jsxs)(m.$,{variant:"outline",size:"sm",onClick:()=>{0===G.length?ep():eu(!0)},children:[(0,a.jsx)(r.A,{className:"mr-1 h-3 w-3"}),t("Fill Templates")]}),(0,a.jsx)(m.$,{size:"sm",onClick:em,disabled:X,children:X?t("Saving..."):t("Save")}),(0,a.jsxs)(m.$,{variant:"outline",size:"sm",onClick:eh,disabled:Q,children:[(0,a.jsx)(s.A,{className:`mr-1 h-3 w-3 ${Q?"animate-spin":""}`}),t("Refresh Cache")]}),(0,a.jsx)(m.$,{variant:"destructive",size:"sm",onClick:()=>es(!0),children:t("Clear All Cache")}),H&&(0,a.jsxs)("span",{className:"text-muted-foreground text-xs",children:[t("Cache Entries"),": ",H.total," /"," ",H.cache_capacity]})]}
99),"visual"===K?(0,a.jsx)(x.hm,{tableClassName:"min-w-max",data:G,emptyClassName:"text-muted-foreground py-8",emptyContent:t("No rules yet"),columns:[{id:"name",header:t("Name"),cellClassName:"font-medium",cell:e=>e.name||"-"},{id:"model-regex",header:t("Model Regex"),cell:e=>(0,a.jsx)(_,{items:e.model_regex||[]})},{id:"key-sources",header:t("Key Sources"),cell:e=>(0,a.jsx)(_,{items:(e.key_sources||[]).map(e=>`${e.type}:${"gjson"===e.type?e.path:e.key}`)})},{id:"ttl",header:t("TTL"),cell:e=>e.ttl_seconds||"-"},{id:"retry",header:t("Retry"),cell:e=>(0,a.jsx)(C.Wh,{label:e.skip_retry_on_failure?t("No Retry"):t("Retry"),variant:e.skip_retry_on_failure?"danger":"neutral",copyable:!1})},{id:"scope",header:t("Scope"),cell:e=>{let n=[e.include_using_group&&t("Group"),e.include_model_name&&t("Model"),e.include_rule_name&&t("Rule")].filter(Boolean);return 0===n.length?"-":(0,a.jsx)(_,{items:n})}},{id:"cache",header:t("Cache"),cell:e=>e.include_rule_name&&H?.by_rule_name?H.by_rule_name[e.name]||0:"N/A"},{id:"actions",header:t("Actions"),className:"text-right",cellClassName:"text-right",cell:(e,n)=>(0,a.jsxs)("div",{className:"flex justify-end gap-1",children:[e.include_rule_name&&(0,a.jsx)(m.$,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>ec(e.name),title:t("Clear cache for this rule"),children:(0,a.jsx)(l.A,{className:"h-3 w-3"})}),(0,a.jsx)(m.$,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>{ea(e),eo(null),et(!0)},children:(0,a.jsx)(c.A,{className:"h-3 w-3"})}),(0,a.jsx)(m.$,{variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>{z(e=>e.filter((e,t)=>t!==n).map((e,t)=>({...e,id:t}))),h.oR.success(t("Deleted successfully"))},children:(0,a.jsx)(d.A,{className:"h-3 w-3"})})]})}]}):(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(y.J,{children:t("Rules JSON")}),(0,a.jsx)(v.T,{className:"min-h-[300px] font-mono text-xs",value:J,onChange:e=>V(e.target.value)})]})]}),(0,a.jsx)(q,{open:ee,onOpenChange:et,rule:en,onSave:e=>{z(t=>{let n=t.findIndex(t=>t.id===e.id||e.name&&t.name===en?.name);if(n>=0){let a=[...t];return a[n]={...e,id:n},a}return[...t,{...e,id:t.length}]}),ea(null)},templateKey:ei}),(0,a.jsx)(B,{open:er,onOpenChange:es,title:t("Confirm clearing all channel affinity cache"),desc:t("This will delete all channel affinity cache entries still in memory."),handleConfirm:eg,destructive:!0}),null!==el&&(0,a.jsx)(B,{open:!0,onOpenChange:e=>!e&&ec(null),title:t("Confirm clearing cache for this rule"),desc:`${t("Rule")}: ${el}`,handleConfirm:ef,destructive:!0}),(0,a.jsx)(B,{open:ed,onOpenChange:eu,title:t("Fill Codex CLI / Claude CLI Templates"),desc:t("This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list."),handleConfirm:ep})]})}var z=n(66586),K=n(79159),W=n(30369),J=n(20582),V=n(37846),H=n(28082),$=n(25920),Q=n(33655);let Y=z.Ik({enabled:z.zM(),apiKey:z.Yj().optional()});function X(e){let{defaultValues:t}=e,{t:n}=(0,u.Bd)(),o=(0,P.M)(),r=(0,R.mN)({resolver:(0,K.u)(Y),defaultValues:{enabled:t.enabled,apiKey:t.apiKey??""}}),{isDirty:s,isSubmitting:l}=r.formState,c=r.watch("enabled"),[d,g]=(0,i.useState)({loading:!1,ok:null,error:null});async function y(e){let a=[];if(e.enabled!==t.enabled&&a.push({key:"model_deployment.ionet.enabled",value:String(e.enabled)}),(e.apiKey||"")!==(t.apiKey||"")&&a.push({key:"model_deployment.ionet.api_key",value:String(e.apiKey||"")}),0===a.length)return void h.oR.info(n("No changes to save"));for(let e of a)await o.mutateAsync(e);r.reset(e)}let b=async()=>{g({loading:!0,ok:null,error:null});try{let e=r.getValues("apiKey"),t=await (0,Q.rP)(e);if(t?.success)return void g({loading:!1,ok:!0,error:null});g({loading:!1,ok:!1,error:t?.message||n("Connection failed")})}catch(e){g({loading:!1,ok:!1,error:e instanceof Error?e.message:n("Connection failed")})}};return(0,a.jsx)(A.X,{title:n("io.net Deployments"),children:(0,a.jsx)(H.lV,{...r,children:(0,a.jsxs)(S.yt,{onSubmit:r.handleSubmit(y),autoComplete:"off",children:[(0,a.jsx)(w.S2,{onSave:r.handleSubmit(y),isSaving:o.isPending||l,isSaveDisabled:!s,saveLabel:"Save io.net settings"}),(0,a.jsx)(H.zB,{control:r.control,name:"enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(S.H,{children:[(0,a.jsxs)(S.z$,{children:[(0,a.jsx)(H.lR,{children:n("Enable io.net deployments")}),(0,a.jsx)(H.Rr,{children:n("Enable io.net model deployment service in console")})]}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)($.d,{checked:t.value,onCheckedChange:e=>t.onChange(e),disabled:o.isPending||l})})]})}}),c?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(H.zB,{control:r.control,name:"apiKey",render:e=>{let{field:t}=e;return(0,a.jsxs)(H.eI,{children:[(0,a.jsx)(H.lR,{children:n("io.net API Key")}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(H.MJ,{children:(0,a.jsx)(f.p,{type:"password",placeholder:n("Enter API Key"),autoComplete:"off",...t})}),(0,a.jsxs)(m.$,{type:"button",variant:"secondary",onClick:b,disabled:d.loading||o.isPending,className:"shrink-0",children:[d.loading?(0,a.jsx)(W.A,{className:"me-2 size-4 animate-spin"}):null,n("Test Connection")]})]}),(0,a.jsx)(H.Rr,{children:n("Used to authenticate with io.net deployment API")}),(0,a.jsx)(H.C5,{})]})}}),(0,a.jsxs)(p.Fc,{variant:"default",children:[(0,a.jsx)(p.XL,{children:n("How to get an io.net API Key")}),(0,a.jsx)(p.TN,{children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("ul",{className:"list-disc space-y-1 pl-5",children:[(0,a.jsx)("li",{children:n("Open the io.net console API Keys page")}),(0,a.jsx)("li",{children:n("Set Project to io.cloud when creating/selecting key")}),(0,a.jsx)("li",{children:n("Copy the key and paste it here")})]}),(0,a.jsx)(m.$,{type:"button",variant:"outline",onClick:()=>window.open("https://ai.io.net/ai/api-keys","_blank"),children:n("Go to io.net API Keys")})]})})]}),!0===d.ok?(0,a.jsxs)(p.Fc,{variant:"default",className:"flex items-center gap-2",children:[(0,a.jsx)(J.A,{className:"size-4 text-green-600"}),(0,a.jsxs)("div",{children:[(0,a.jsx)(p.XL,{children:n("Connection successful")}),(0,a.jsx)(p.TN,{children:n("Connected to io.net service normally.")})]})]}):null,!1===d.ok&&d.error?(0,a.jsxs)(p.Fc,{variant:"destructive",className:"flex items-center gap-2",children:[(0,a.jsx)(V.A,{className:"size-4"}),(0,a.jsxs)("div",{children:[(0,a.jsx)(p.XL,{children:n("Connection failed")}),(0,a.jsx)(p.TN,{children:n(d.error)})]})]}):null]}):null]})})})}var Z=n(2099),ee=n(86947),et=n(12220),en=n(54088);let ea=z.Ik({claude:z.Ik({model_headers_settings:z.Yj().superRefine((e,t)=>
99{let n=(0,en.En)(e);n.valid||t.addIssue({code:ee.eq.custom,message:n.message||"Invalid JSON"})}),default_max_tokens:z.Yj().superRefine((e,t)=>{let n=(0,en.En)(e);n.valid||t.addIssue({code:ee.eq.custom,message:n.message||"Invalid JSON"})}),thinking_adapter_enabled:z.zM(),thinking_adapter_budget_tokens_percentage:et.ai().min(.1,{message:"Must be at least 0.1"}).max(1,{message:"Must be 1 or less"})})});function ei(e){let{defaultValues:t}=e,{t:n}=(0,u.Bd)(),o=(0,P.M)(),r=(0,i.useRef)({"claude.model_headers_settings":(0,en.Nr)(t.claude.model_headers_settings),"claude.default_max_tokens":(0,en.Nr)(t.claude.default_max_tokens),"claude.thinking_adapter_enabled":t.claude.thinking_adapter_enabled,"claude.thinking_adapter_budget_tokens_percentage":Number(t.claude.thinking_adapter_budget_tokens_percentage)}),s=e=>({claude:{model_headers_settings:(0,en.ZY)(e.claude.model_headers_settings),default_max_tokens:(0,en.ZY)(e.claude.default_max_tokens),thinking_adapter_enabled:e.claude.thinking_adapter_enabled,thinking_adapter_budget_tokens_percentage:e.claude.thinking_adapter_budget_tokens_percentage}}),l=(0,R.mN)({resolver:(0,K.u)(ea),defaultValues:s(t)});(0,i.useEffect)(()=>{r.current={"claude.model_headers_settings":(0,en.Nr)(t.claude.model_headers_settings),"claude.default_max_tokens":(0,en.Nr)(t.claude.default_max_tokens),"claude.thinking_adapter_enabled":t.claude.thinking_adapter_enabled,"claude.thinking_adapter_budget_tokens_percentage":Number(t.claude.thinking_adapter_budget_tokens_percentage)},l.reset(s(t))},[t,l]);let c=async e=>{let t={"claude.model_headers_settings":(0,en.Nr)(e.claude.model_headers_settings),"claude.default_max_tokens":(0,en.Nr)(e.claude.default_max_tokens),"claude.thinking_adapter_enabled":e.claude.thinking_adapter_enabled,"claude.thinking_adapter_budget_tokens_percentage":e.claude.thinking_adapter_budget_tokens_percentage},a=Object.keys(t).filter(e=>t[e]!==r.current[e]);if(0===a.length)return void h.oR.info(n("No changes to save"));for(let e of a)await o.mutateAsync({key:e,value:t[e]})};return(0,a.jsx)(A.X,{title:n("Claude"),children:(0,a.jsx)(H.lV,{...l,children:(0,a.jsxs)(S.yt,{onSubmit:l.handleSubmit(c),children:[(0,a.jsx)(w.S2,{onSave:l.handleSubmit(c),isSaving:o.isPending}),(0,a.jsx)(H.zB,{control:l.control,name:"claude.model_headers_settings",render:e=>{let{field:t}=e;return(0,a.jsxs)(H.eI,{children:[(0,a.jsx)(H.lR,{children:n("Request Header Overrides")}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)(v.T,{rows:8,...t})}),(0,a.jsx)(H.Rr,{children:n("Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.")}),(0,a.jsx)(H.C5,{})]})}}),(0,a.jsx)(H.zB,{control:l.control,name:"claude.default_max_tokens",render:e=>{let{field:t}=e;return(0,a.jsxs)(H.eI,{children:[(0,a.jsx)(H.lR,{children:n("Default Max Tokens")}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)(v.T,{rows:8,...t})}),(0,a.jsxs)(H.Rr,{children:[n("Example")," ",'{ "default": 8192, "claude-3-haiku-20240307": 4096, "claude-3-opus-20240229": 4096, "claude-3-7-sonnet-20250219-thinking": 8192 }']}),(0,a.jsx)(H.C5,{})]})}}),(0,a.jsxs)(S.WY,{children:[(0,a.jsx)(H.zB,{control:l.control,name:"claude.thinking_adapter_enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(S.H,{children:[(0,a.jsxs)(S.z$,{children:[(0,a.jsx)(H.lR,{children:n("Thinking Suffix Adapter")}),(0,a.jsx)(H.Rr,{children:n("Adapt `-thinking` suffix requests to Anthropic native thinking behavior while keeping billing predictable.")})]}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)($.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(H.zB,{control:l.control,name:"claude.thinking_adapter_budget_tokens_percentage",render:e=>{let{field:t}=e;return(0,a.jsxs)(H.eI,{children:[(0,a.jsx)(H.lR,{children:n("Budget Tokens Ratio")}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)(f.p,{...t,value:String(t.value??""),onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(H.Rr,{children:n("Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.")}),(0,a.jsx)(H.C5,{})]})}})]})]})})})}let eo=z.Ik({gemini:z.Ik({safety_settings:z.Yj().superRefine((e,t)=>{let n=(0,en.En)(e);n.valid||t.addIssue({code:ee.eq.custom,message:n.message||"Invalid JSON"})}),version_settings:z.Yj().superRefine((e,t)=>
99{let n=(0,en.En)(e);n.valid||t.addIssue({code:ee.eq.custom,message:n.message||"Invalid JSON"})}),supported_imagine_models:z.Yj().superRefine((e,t)=>{let n=(0,en.En)(e,{predicate:e=>Array.isArray(e)&&e.every(e=>"string"==typeof e),predicateMessage:"Expected a JSON array of model identifiers"});n.valid||t.addIssue({code:ee.eq.custom,message:n.message||"Invalid JSON array"})}),thinking_adapter_enabled:z.zM(),thinking_adapter_budget_tokens_percentage:et.ai().min(.002,{message:"Must be at least 0.002"}).max(1,{message:"Must be 1 or less"}),function_call_thought_signature_enabled:z.zM(),remove_function_response_id_enabled:z.zM()})});function er(e){let{defaultValues:t}=e,{t:n}=(0,u.Bd)(),o=(0,P.M)(),r=(0,i.useRef)({"gemini.safety_settings":(0,en.Nr)(t.gemini.safety_settings),"gemini.version_settings":(0,en.Nr)(t.gemini.version_settings),"gemini.supported_imagine_models":(0,en.Nr)(t.gemini.supported_imagine_models),"gemini.thinking_adapter_enabled":t.gemini.thinking_adapter_enabled,"gemini.thinking_adapter_budget_tokens_percentage":Number(t.gemini.thinking_adapter_budget_tokens_percentage),"gemini.function_call_thought_signature_enabled":t.gemini.function_call_thought_signature_enabled??!0,"gemini.remove_function_response_id_enabled":t.gemini.remove_function_response_id_enabled??!0}),s=e=>({gemini:{safety_settings:(0,en.ZY)(e.gemini.safety_settings),version_settings:(0,en.ZY)(e.gemini.version_settings),supported_imagine_models:(0,en.ZY)(e.gemini.supported_imagine_models),thinking_adapter_enabled:e.gemini.thinking_adapter_enabled,thinking_adapter_budget_tokens_percentage:e.gemini.thinking_adapter_budget_tokens_percentage,function_call_thought_signature_enabled:e.gemini.function_call_thought_signature_enabled??!0,remove_function_response_id_enabled:e.gemini.remove_function_response_id_enabled??!0}}),l=(0,R.mN)({resolver:(0,K.u)(eo),defaultValues:s(t)});(0,i.useEffect)(()=>{r.current={"gemini.safety_settings":(0,en.Nr)(t.gemini.safety_settings),"gemini.version_settings":(0,en.Nr)(t.gemini.version_settings),"gemini.supported_imagine_models":(0,en.Nr)(t.gemini.supported_imagine_models),"gemini.thinking_adapter_enabled":t.gemini.thinking_adapter_enabled,"gemini.thinking_adapter_budget_tokens_percentage":Number(t.gemini.thinking_adapter_budget_tokens_percentage),"gemini.function_call_thought_signature_enabled":t.gemini.function_call_thought_signature_enabled??!0,"gemini.remove_function_response_id_enabled":t.gemini.remove_function_response_id_enabled??!0},l.reset(s(t))},[t,l]);let c=l.watch("gemini.thinking_adapter_enabled"),d=async e=>{let t={"gemini.safety_settings":(0,en.Nr)(e.gemini.safety_settings),"gemini.version_settings":(0,en.Nr)(e.gemini.version_settings),"gemini.supported_imagine_models":(0,en.Nr)(e.gemini.supported_imagine_models),"gemini.thinking_adapter_enabled":e.gemini.thinking_adapter_enabled,"gemini.thinking_adapter_budget_tokens_percentage":e.gemini.thinking_adapter_budget_tokens_percentage,"gemini.function_call_thought_signature_enabled":e.gemini.function_call_thought_signature_enabled,"gemini.remove_function_response_id_enabled":e.gemini.remove_function_response_id_enabled},a=Object.keys(t).filter(e=>t[e]!==r.current[e]);if(0===a.length)return void h.oR.info(n("No changes to save"));for(let e of a)await o.mutateAsync({key:e,value:t[e]})},p=(0,i.useMemo)(()=>JSON.stringify(["gemini-2.0-flash-exp-image-generation"],null,2),[]);return(0,a.jsx)(A.X,{title:n("Gemini"),children:(0,a.jsx)(H.lV,{...l,children:(0,a.jsxs)(S.yt,{onSubmit:l.handleSubmit(d),children:[(0,a.jsx)(w.S2,{onSave:l.handleSubmit(d),isSaving:o.isPending}),(0,a.jsx)(H.zB,{control:l.control,name:"gemini.safety_settings",render:e=>{let{field:t}=e;return(0,a.jsxs)(H.eI,{children:[(0,a.jsx)(H.lR,{children:n("Safety Settings")}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)(v.T,{rows:8,...t})}),(0,a.jsx)(H.Rr,{children:n("Provide per-category safety overrides as JSON. Use `default` for fallback values.")}),(0,a.jsx)(H.C5,{})]})}}),(0,a.jsx)(H.zB,{control:l.control,name:"gemini.version_settings",render:e=>{let{field:t}=e;return(0,a.jsxs)(H.eI,{children:[(0,a.jsx)(H.lR,{children:n("Version Overrides")}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)(v.T,{rows:8,...t})}),(0,a.jsx)(H.Rr,{children:n("Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.")}),(0,a.jsx)(H.C5,{})]})}}),(0,a.jsx)(H.zB,{control:l.control,name:"gemini.supported_imagine_models",render:e=>{let{field:t}=e;return(0,a.jsxs)(H.eI,{children:[(0,a.jsx)(H.lR,{children:n("Supported Imagine Models")}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)(v.T,{rows:6,placeholder:p,...t})}),(0,a.jsx)(H.Rr,{children:n("Accepts a JSON array of model identifiers that support the Imagine API.")}),(0,a.jsx)(H.C5,{})]})}}),(0,a.jsxs)(S.WY,{children:[(0,a.jsx)(H.zB,{control:l.control,name:"gemini.thinking_adapter_enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(S.H,{children:[(0,a.jsxs)(S.z$,{children:[(0,a.jsx)(H.lR,{children:n("Thinking Suffix Adapter")}),(0,a.jsxs)(H.Rr,{children:[n("Supports `-thinking`, `-thinking-"),"{{budget}}",n("`, and `-nothinking` suffixes while routing to the correct Gemini variant.")]})]}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)($.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(H.zB,{control:l.control,name:"gemini.thinking_adapter_budget_tokens_percentage",render:e=>{let{field:t}=e;return(0,a.jsxs)(H.eI,{children:[(0,a.jsx)(H.lR,{children:n("Budget Tokens Ratio")}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)(f.p,{...t,value:String(t.value??""),onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(H.Rr,{children:n("Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.")}),(0,a.jsx)(H.C5,{})]})}}),!c&&(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:n("Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.")})]}),(0,a.jsx)(H.zB,{control:l.control,name:"gemini.function_call_thought_signature_enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(S.H,{children:[(0,a.jsxs)(S.z$,{children:[(0,a.jsx)(H.lR,{children:n("Enable FunctionCall thoughtSignature Fill")}),(0,a.jsx)(H.Rr,{children:n("Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format")})]}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)($.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(H.zB,{control:l.control,name:"gemini.remove_function_response_id_enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(S.H,{children:[(0,a.jsxs)(S.z$,{children:[(0,a.jsx)(H.lR,{children:n("Remove functionResponse.id field")}),(0,a.jsx)(H.Rr,{children:n("Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.")})]}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)($.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})})})}let es=JSON.stringify(["moonshotai/kimi-k2-thinking","kimi-k2-thinking"],null,2),el=JSON.stringify({enabled:!0,all_channels:!1,channel_ids:[1,2],model_patterns:["^gpt-4o.*$","^gpt-5.*$"]},null,2),ec=JSON.stringify({enabled:!0,all_channels:!0,model_patterns:["^gpt-4o.*$","^gpt-5.*$"]},null,2),ed=z.Yj().refine(e=>{let t=e.trim();if(!t)return!0;try{return JSON.parse(t),!0}catch{return!1}},"Invalid JSON format"),eu=z.Ik({global:z.Ik({pass_through_request_enabled:z.zM(),thinking_model_blacklist:ed,chat_completions_to_responses_policy:ed}),general_setting:z.Ik({ping_interval_enabled:z.zM(),ping_interval_seconds:et.ai().min(1)})}),eh=e=>({"global.pass_through_request_enabled":e.global.pass_through_request_enabled,"global.thinking_model_blacklist":ep(e.global.thinking_model_blacklist,"[]"),"global.chat_completions_to_responses_policy":ep(e.global.chat_completions_to_responses_policy,"{}"),"general_setting.ping_interval_enabled":e.general_setting.ping_interval_enabled,"general_setting.ping_interval_seconds":e.general_setting.ping_interval_seconds});function ep(e,t){return(e??"").toString().trim()||t}function em(e){let{defaultValues:t}=e,{t:n}=(0,u.Bd)(),o=(0,P.M)(),r=(0,R.mN)({resolver:(0,K.u)(eu),defaultValues:t});(0,i.useEffect)(()=>{r.reset(t)},[t,r]);let s=r.watch("general_setting.ping_interval_enabled"),l=e=>{let t=r.getValues(e);if(t&&t.trim())try{let n=JSON.stringify(JSON.parse(t),null,2);r.setValue(e,n,{shouldDirty:!0})}catch{h.oR.error(n("Invalid JSON format"))}},c=async e=>{let a=eh(t),i=Object.entries(eh(e)).filter(e=>{let[t,n]=e;return n!==a[t]});if(0===i.length)return void h.oR.info(n("No changes to save"));
99for(let[e,t]of i)await o.mutateAsync({key:e,value:t})};return(0,a.jsx)(A.X,{title:n("Global Model Configuration"),children:(0,a.jsx)(H.lV,{...r,children:(0,a.jsxs)(S.yt,{onSubmit:r.handleSubmit(c),children:[(0,a.jsx)(w.S2,{onSave:r.handleSubmit(c),isSaving:o.isPending}),(0,a.jsx)(H.zB,{control:r.control,name:"global.pass_through_request_enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(S.H,{children:[(0,a.jsxs)(S.z$,{children:[(0,a.jsx)(H.lR,{children:n("Enable Request Passthrough")}),(0,a.jsx)(H.Rr,{children:n("Forward requests directly to upstream providers without any post-processing.")})]}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)($.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(H.zB,{control:r.control,name:"global.thinking_model_blacklist",render:e=>{let{field:t}=e;return(0,a.jsxs)(H.eI,{children:[(0,a.jsx)(H.lR,{children:n("Models that skip thinking suffix processing")}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)(v.T,{rows:4,placeholder:`${n("Example:")}
100${es}`,...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(H.Rr,{children:n("Models listed here will not automatically append or remove -thinking / -nothinking suffixes.")}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:(0,a.jsx)(m.$,{type:"button",variant:"outline",size:"sm",onClick:()=>l("global.thinking_model_blacklist"),children:n("Format JSON")})}),(0,a.jsx)(H.C5,{})]})}}),(0,a.jsx)(b.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("h3",{className:"text-base font-semibold",children:n("ChatCompletions -> Responses Compatibility")}),(0,a.jsx)(C.Wh,{label:n("Preview"),variant:"neutral",copyable:!1})]}),(0,a.jsxs)(p.Fc,{children:[(0,a.jsx)(p.XL,{children:n("Warning")}),(0,a.jsx)(p.TN,{children:n("This feature is experimental. Configuration format and behavior may change.")})]}),(0,a.jsx)(H.zB,{control:r.control,name:"global.chat_completions_to_responses_policy",render:e=>{let{field:t}=e;return(0,a.jsxs)(H.eI,{children:[(0,a.jsx)(H.lR,{children:n("Policy JSON")}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)(v.T,{rows:8,placeholder:`${n("Example (specific channels):")}
101${el}
102
103${n("Example (all channels):")}
104${ec}`,...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(H.Rr,{children:n("Empty value will be saved as {}.")}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsx)(m.$,{type:"button",variant:"outline",size:"sm",onClick:()=>r.setValue("global.chat_completions_to_responses_policy",el,{shouldDirty:!0}),children:n("Fill example (specific channels)")}),(0,a.jsx)(m.$,{type:"button",variant:"outline",size:"sm",onClick:()=>r.setValue("global.chat_completions_to_responses_policy",ec,{shouldDirty:!0}),children:n("Fill example (all channels)")}),(0,a.jsx)(m.$,{type:"button",variant:"outline",size:"sm",onClick:()=>l("global.chat_completions_to_responses_policy"),children:n("Format JSON")})]}),(0,a.jsx)(H.C5,{})]})}})]}),(0,a.jsx)(b.w,{}),(0,a.jsx)(H.zB,{control:r.control,name:"general_setting.ping_interval_enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(S.H,{children:[(0,a.jsxs)(S.z$,{children:[(0,a.jsx)(H.lR,{children:n("Keep-alive Ping")}),(0,a.jsx)(H.Rr,{children:n("Periodically send ping frames to keep streaming connections active.")})]}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)($.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(H.zB,{control:r.control,name:"general_setting.ping_interval_seconds",render:e=>{let{field:t}=e;return(0,a.jsxs)(H.eI,{children:[(0,a.jsx)(H.lR,{children:n("Ping Interval (seconds)")}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)(f.p,{type:"number",min:1,disabled:!s,className:"w-24",value:void 0===t.value||null===t.value?"":String(t.value),onChange:e=>t.onChange(e.target.value),onBlur:t.onBlur,name:t.name,ref:t.ref})}),(0,a.jsx)(H.Rr,{children:n("Recommended to keep this high to avoid upstream throttling.")}),(0,a.jsx)(H.C5,{})]})}})]})})})}var eg=n(7906);let ef=z.Ik({grok:z.Ik({violation_deduction_enabled:z.zM(),violation_deduction_amount:et.ai().min(0)})}),ey=e=>({grok:{violation_deduction_enabled:e["grok.violation_deduction_enabled"],violation_deduction_amount:e["grok.violation_deduction_amount"]}});function eb(e){let{t}=(0,u.Bd)(),n=(0,P.M)(),o=(0,i.useMemo)(()=>ey(e.defaultValues),[e.defaultValues]),r=(0,R.mN)({resolver:(0,K.u)(ef),defaultValues:o}),s=(0,i.useRef)(e.defaultValues),l=(0,i.useRef)(JSON.stringify(e.defaultValues));(0,i.useEffect)(()=>{let t=JSON.stringify(e.defaultValues);t!==l.current&&(s.current=e.defaultValues,l.current=t,r.reset(ey(e.defaultValues)))},[e.defaultValues,r]);let c=async e=>{let a={"grok.violation_deduction_enabled":e.grok.violation_deduction_enabled,"grok.violation_deduction_amount":e.grok.violation_deduction_amount},i=Object.keys(a).filter(e=>a[e]!==s.current[e]);if(0===i.length)return void h.oR.info(t("No changes to save"));for(let e of i)await n.mutateAsync({key:e,value:a[e]});s.current=a,l.current=JSON.stringify(a),r.reset(ey(a))},d=r.watch("grok.violation_deduction_enabled");return(0,a.jsx)(A.X,{title:t("Grok Settings"),children:(0,a.jsx)(H.lV,{...r,children:(0,a.jsxs)(S.yt,{onSubmit:r.handleSubmit(c),children:[(0,a.jsx)(w.S2,{onSave:r.handleSubmit(c),isSaving:n.isPending}),(0,a.jsx)(H.zB,{control:r.control,name:"grok.violation_deduction_enabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(S.H,{children:[(0,a.jsxs)(S.z$,{children:[(0,a.jsx)(H.lR,{children:t("Enable violation deduction")}),(0,a.jsxs)(H.Rr,{children:[t("When enabled, violation requests will incur additional charges.")," ",(0,a.jsx)("a",{href:"https://docs.x.ai/docs/models#usage-guidelines-violation-fee",target:"_blank",rel:"noreferrer",className:"underline",children:t("Official documentation")})]})]}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)($.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(H.zB,{control:r.control,name:"grok.violation_deduction_amount",render:e=>{let{field:n}=e;return(0,a.jsxs)(H.eI,{className:"max-w-xs",children:[(0,a.jsx)(H.lR,{children:t("Violation deduction amount")}),(0,a.jsx)(H.MJ,{children:(0,a.jsx)(f.p,{type:"number",step:.01,min:0,...(0,eg.X)(n),disabled:!d})}),(0,a.jsx)(H.Rr,{children:t("Base amount. Actual deduction = base amount × system group rate.")}),(0,a.jsx)(H.C5,{})]})}})]})})})}function ev(e,t){let n=(e??"").toString().trim();if(!n)return t;try{return JSON.stringify(JSON.parse(n),null,2)}catch{return t}}let ex=[{id:"global",titleKey:"Global Model Configuration",build:e=>(0,a.jsx)(em,{defaultValues:{global:{pass_through_request_enabled:e["global.pass_through_request_enabled"],thinking_model_blacklist:ev(e["global.thinking_model_blacklist"],"[]"),chat_completions_to_responses_policy:ev(e["global.chat_completions_to_responses_policy"],"{}")},general_setting:{ping_interval_enabled:e["general_setting.ping_interval_enabled"],ping_interval_seconds:e["general_setting.ping_interval_seconds"]}}})},{id:"gemini",titleKey:"Gemini",build:e=>(0,a.jsx)(er,{defaultValues:{gemini:{safety_settings:e["gemini.safety_settings"],version_settings:e["gemini.version_settings"],supported_imagine_models:e["gemini.supported_imagine_models"],thinking_adapter_enabled:e["gemini.thinking_adapter_enabled"],thinking_adapter_budget_tokens_percentage:e["gemini.thinking_adapter_budget_tokens_percentage"],function_call_thought_signature_enabled:e["gemini.function_call_thought_signature_enabled"],remove_function_response_id_enabled:e["gemini.remove_function_response_id_enabled"]}}})},{id:"claude",titleKey:"Claude",build:e=>(0,a.jsx)(ei,{defaultValues:{claude:{model_headers_settings:e["claude.model_headers_settings"],default_max_tokens:e["claude.default_max_tokens"],thinking_adapter_enabled:e["claude.thinking_adapter_enabled"],thinking_adapter_budget_tokens_percentage:e["claude.thinking_adapter_budget_tokens_percentage"]}}})},{id:"grok",titleKey:"Grok",build:e=>(0,a.jsx)(eb,{defaultValues:{"grok.violation_deduction_enabled":e["grok.violation_deduction_enabled"]??!0,"grok.violation_deduction_amount":e["grok.violation_deduction_amount"]??.05}})},{id:"channel-affinity",titleKey:"Channel Affinity",build:e=>(0,a.jsx)(G,{defaultValues:{"channel_affinity_setting.enabled":e["channel_affinity_setting.enabled"],"channel_affinity_setting.switch_on_success":e["channel_affinity_setting.switch_on_success"],"channel_affinity_setting.keep_on_channel_disabled":e["channel_affinity_setting.keep_on_channel_disabled"],"channel_affinity_setting.max_entries":e["channel_affinity_setting.max_entries"],"channel_affinity_setting.default_ttl_seconds":e["channel_affinity_setting.default_ttl_seconds"],"channel_affinity_setting.rules":e["channel_affinity_setting.rules"]}})},{id:"model-deployment",titleKey:"Model Deployment",build:e=>(0,a.jsx)(X,{defaultValues:{enabled:e["model_deployment.ionet.enabled"],apiKey:e["model_deployment.ionet.api_key"]}})}],ek=(0,Z.h)({sections:ex,defaultSection:"global",basePath:"/system-settings/models",urlStyle:"path"}),eC=ek.sectionIds,eS=ek.defaultSection,ew=ek.getSectionNavItems,eA=ek.getSectionContent,eP=ek.getSectionMeta},54088(e,t,n){function a(e){if(!e||!e.trim())return"";try{let t=JSON.parse(e);return JSON.stringify(t,null,2)}catch{return e}}function i(e){let t=e.trim();if(!t)return"";try{let e=JSON.parse(t);return JSON.stringify(e)}catch{return t}}function o(e,t){if(!(e instanceof Error))return{};let n=e.message,a=n.match(/at position (\d+)/i);if(a){let e=parseInt(a[1],10),n=t.substring(0,e).split("\n");return{line:n.length,column:n[n.length-1].length+1,position:e}}let i=n.match(/at line (\d+) column (\d+)/i);return i?{line:parseInt(i[1],10),column:parseInt(i[2],10)}:{}}function r(e,t){if(!(e instanceof Error))return{type:"syntax"};let n=o(e,t),a=e.message,i=(a.includes("Expected ','")||a.includes("Expected property name")||a.includes("Unexpected string"))&&n.line&&n.line>1?n.line-1:void 0;return{type:"syntax",...n,missingCommaLine:i}}function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{allowEmpty:n=!0,predicate:a,predicateMessage:i}=t,s=e.trim();if(!s)return{valid:n,message:n?void 0:"Value is required",error:n?void 0:{type:"required"}};try{let e=JSON.parse(s);if(a&&!a(e))return{valid:!1,message:i||"JSON structure is invali
104d",error:{type:"structure"}};return{valid:!0}}catch(e){return{valid:!1,message:function(e,t){if(!(e instanceof Error))return"Invalid JSON";let n=o(e,t),a=e.message,i=r(e,t);if(n.line&&n.column){let e="";return i.missingCommaLine&&(e=` (check line ${i.missingCommaLine} for missing comma)`),`Error at line ${n.line}, column ${n.column}: ${a}${e}`}return void 0!==n.position?`Error at position ${n.position}: ${a}`:a}(e,s),error:r(e,s)}}}n.d(t,{En:()=>s,Nr:()=>i,ZY:()=>a})},13830(e,t,n){n.d(t,{Tn:()=>el,UK:()=>es,xM:()=>ed,Z8:()=>eu,bK:()=>ec});var a=n(23579),i=n(66586),o=n(12220),r=n(32403),s=n(79159),l=n(72407),c=n(28082),d=n(40382),u=n(25920),h=n(54548),p=n(38390),m=n(16728),g=n(85971),f=n(90770),y=n(7906);let b=i.Ik({RetryTimes:o.ai().min(0).max(10),DefaultCollapseSidebar:i.zM(),DemoSiteEnabled:i.zM(),SelfUseModeEnabled:i.zM()});function v(e){let{defaultValues:t}=e,{t:n}=(0,l.Bd)(),i=(0,f.M)(),o=(0,r.mN)({resolver:(0,s.u)(b),defaultValues:t});(0,g.j)(o,t);let v=async e=>{for(let[n,a]of Object.entries(e).filter(e=>{let[n,a]=e;return a!==t[n]}))await i.mutateAsync({key:n,value:a})};return(0,a.jsx)(m.X,{title:n("System Behavior"),children:(0,a.jsx)(c.lV,{...o,children:(0,a.jsxs)(h.yt,{onSubmit:o.handleSubmit(v),children:[(0,a.jsx)(p.S2,{onSave:o.handleSubmit(v),isSaving:i.isPending}),(0,a.jsx)(c.zB,{control:o.control,name:"RetryTimes",render:e=>{let{field:t}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:n("Retry Times")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{type:"number",min:"0",max:"10",...(0,y.X)(t)})}),(0,a.jsx)(c.Rr,{children:n("Number of times to retry failed requests (0-10)")}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsx)(c.zB,{control:o.control,name:"DefaultCollapseSidebar",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.H,{children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(c.lR,{children:n("Default Collapse Sidebar")}),(0,a.jsx)(c.Rr,{children:n("Sidebar collapsed by default for new users")})]}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(c.zB,{control:o.control,name:"DemoSiteEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.H,{children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(c.lR,{children:n("Demo Site Mode")}),(0,a.jsx)(c.Rr,{children:n("Enable demo mode with limited functionality")})]}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(c.zB,{control:o.control,name:"SelfUseModeEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.H,{children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(c.lR,{children:n("Self-Use Mode")}),(0,a.jsx)(c.Rr,{children:n("Optimize system for self-hosted single-user usage")})]}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})})})}function x(e){let{defaultValues:t}=e,{t:n}=(0,l.Bd)(),o=(0,f.M)(),y=i.Ik({SMTPServer:i.Yj(),SMTPPort:i.Yj().refine(e=>{let t=e.trim();return!t||/^\d+$/.test(t)},n("Port must be a positive integer")),SMTPAccount:i.Yj(),SMTPFrom:i.Yj().refine(e=>{let t=e.trim();return!t||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)},n("Enter a valid email or leave blank")),SMTPToken:i.Yj(),SMTPSSLEnabled:i.zM(),SMTPForceAuthLogin:i.zM()}),b=(0,r.mN)({resolver:(0,s.u)(y),defaultValues:t});(0,g.j)(b,t);let v=async e=>{let n={SMTPServer:e.SMTPServer.trim(),SMTPPort:e.SMTPPort.trim(),SMTPAccount:e.SMTPAccount.trim(),SMTPFrom:e.SMTPFrom.trim(),SMTPToken:e.SMTPToken.trim(),SMTPSSLEnabled:e.SMTPSSLEnabled,SMTPForceAuthLogin:e.SMTPForceAuthLogin},a={SMTPServer:t.SMTPServer.trim(),SMTPPort:t.SMTPPort.trim(),SMTPAccount:t.SMTPAccount.trim(),SMTPFrom:t.SMTPFrom.trim(),SMTPToken:t.SMTPToken.trim(),SMTPSSLEnabled:t.SMTPSSLEnabled,SMTPForceAuthLogin:t.SMTPForceAuthLogin},i=[];for(let e of(n.SMTPServer!==a.SMTPServer&&i.push({key:"SMTPServer",value:n.SMTPServer}),n.SMTPPort!==a.SMTPPort&&i.push({key:"SMTPPort",value:n.SMTPPort}),n.SMTPAccount!==a.SMTPAccount&&i.push({key:"SMTPAccount",value:n.SMTPAccount}),n.SMTPFrom!==a.SMTPFrom&&i.push({key:"SMTPFrom",value:n.SMTPFrom}),n.SMTPToken&&n.SMTPToken!==a.SMTPToken&&i.push({key:"SMTPToken",value:n.SMTPToken}),n.SMTPSSLEnabled!==a.SMTPSSLEnabled&&i.push({key:"SMTPSSLEnabled",value:n.SMTPSSLEnabled}),n.SMTPForceAuthLogin!==a.SMTPForceAuthLogin&&i.push({key:"SMTPForceAuthLogin",value:n.SMTPForceAuthLogin}),i))await o.mutateAsync(e)};return(0,a.jsx)(m.X,{title:n("SMTP Email"),children:(0,a.jsx)(c.lV,{...b,children:(0,a.jsxs)(h.yt,{onSubmit:b.handleSubmit(v),autoComplete:"off",children:[(0,a.jsx)(p.S2,{onSave:b.handleSubmit(v),isSaving:o.isPending,saveLabel:"Save SMTP settings"}),(0,a.jsx)(c.zB,{control:b.control,name:"SMTPServer",render:e=>{let{field:t}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:n("SMTP Host")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{autoComplete:"off",placeholder:n("smtp.example.com"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(c.Rr,{children:n("Hostname or IP of your SMTP provider")}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2",children:[(0,a.jsx)(c.zB,{control:b.control,name:"SMTPPort",render:e=>{let{field:t}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:n("Port")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{autoComplete:"off",type:"number",placeholder:"587",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(c.Rr,{children:n("Common ports include 25, 465, and 587")}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsx)(c.zB,{control:b.control,name:"SMTPSSLEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.H,{children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(c.lR,{children:n("Enable SSL/TLS")}),(0,a.jsx)(c.Rr,{children:n("Use secure connection when sending emails")})]}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(c.zB,{control:b.control,name:"SMTPForceAuthLogin",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.H,{children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(c.lR,{children:n("Force AUTH LOGIN")}),(0,a.jsx)(c.Rr,{children:n("Force SMTP authentication using AUTH LOGIN method")})]}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]}),(0,a.jsx)(c.zB,{control:b.control,name:"SMTPAccount",render:e=>{let{field:t}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:n("Username")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{autoComplete:"off",placeholder:n("[email protected]"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(c.Rr,{children:n("Account used when authenticating with the SMTP server")}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsx)(c.zB,{control:b.control,name:"SMTPFrom",render:e=>{let{field:t}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:n("From Address")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{autoComplete:"off",placeholder:n("New API &lt;[email protected]&gt;"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(c.Rr,{children:n("Display name and email used in outgoing messages")}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsx)(c.zB,{control:b.control,name:"SMTPToken",render:e=>{let{field:t}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:n("Password / A
104ccess Token")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{autoComplete:"off",type:"password",placeholder:n("Enter new token to update"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(c.Rr,{children:n("Leave blank to keep the existing credential")}),(0,a.jsx)(c.C5,{})]})}})]})})})}var k=n(31371),C=n(36461);function S(e){var t;let n=(e??"").toString().trim();if(0===n.length)return{ok:!0,ranges:[],tokens:[],normalized:"",invalidTokens:[]};let a=n.replace(/[,]/g,",").split(",").map(e=>e.trim()).filter(Boolean),i=[],o=[];for(let e of a){let t=function(e){let t=e.trim().replace(/\s/g,"");if(!t)return null;let n=e=>Number.isFinite(e)&&e>=100&&e<=599;if(t.includes("-")){let[e,a]=t.split("-");if(!w(e)||!w(a))return null;let i=Number.parseInt(e,10),o=Number.parseInt(a,10);return n(i)&&n(o)&&!(i>o)?{start:i,end:o}:null}if(!w(t))return null;let a=Number.parseInt(t,10);return n(a)?{start:a,end:a}:null}(e);t?i.push(t):o.push(e)}if(o.length>0)return{ok:!1,ranges:[],tokens:[],normalized:n,invalidTokens:o};let r=0===(t=i).length?[]:[...t].sort((e,t)=>e.start!==t.start?e.start-t.start:e.end-t.end).reduce((e,t)=>{let n=e[e.length-1];return!n||t.start>n.end+1?e.push({...t}):n.end=Math.max(n.end,t.end),e},[]),s=r.map(e=>e.start===e.end?`${e.start}`:`${e.start}-${e.end}`),l=s.join(",");return{ok:!0,ranges:r,tokens:s,normalized:l,invalidTokens:[]}}function w(e){return"string"==typeof e&&/^\d+$/.test(e)}var A=n(69502);let P=i.Yj().refine(e=>{let t=e.trim();return!t||!Number.isNaN(Number(t))&&Number(t)>=0},"Enter a non-negative number or leave empty"),j=i.Ik({ChannelDisableThreshold:P,QuotaRemindThreshold:P,AutomaticDisableChannelEnabled:i.zM(),AutomaticEnableChannelEnabled:i.zM(),AutomaticDisableKeywords:i.Yj(),AutomaticDisableStatusCodes:i.Yj(),AutomaticRetryStatusCodes:i.Yj(),monitor_setting:i.Ik({auto_test_channel_enabled:i.zM(),auto_test_channel_minutes:o.ai().int().min(1,"Interval must be at least 1 minute")})}).superRefine((e,t)=>{let n=S(e.AutomaticDisableStatusCodes);n.ok||t.addIssue({code:"custom",path:["AutomaticDisableStatusCodes"],message:`Invalid status code rules: ${n.invalidTokens.join(", ")}`});let a=S(e.AutomaticRetryStatusCodes);a.ok||t.addIssue({code:"custom",path:["AutomaticRetryStatusCodes"],message:`Invalid status code rules: ${a.invalidTokens.join(", ")}`})});function N(e){return e.replace(/\r\n/g,"\n")}function I(e){let{defaultValues:t}=e,{t:n}=(0,l.Bd)(),i=(0,f.M)(),o=(0,k.useRef)({ChannelDisableThreshold:(t.ChannelDisableThreshold??"").trim(),QuotaRemindThreshold:(t.QuotaRemindThreshold??"").trim(),AutomaticDisableChannelEnabled:t.AutomaticDisableChannelEnabled,AutomaticEnableChannelEnabled:t.AutomaticEnableChannelEnabled,AutomaticDisableKeywords:N(t.AutomaticDisableKeywords??""),AutomaticDisableStatusCodes:S(t.AutomaticDisableStatusCodes??"").normalized,AutomaticRetryStatusCodes:S(t.AutomaticRetryStatusCodes??"").normalized,"monitor_setting.auto_test_channel_enabled":t["monitor_setting.auto_test_channel_enabled"],"monitor_setting.auto_test_channel_minutes":t["monitor_setting.auto_test_channel_minutes"]}),b=(0,k.useMemo)(()=>({ChannelDisableThreshold:t.ChannelDisableThreshold??"",QuotaRemindThreshold:t.QuotaRemindThreshold??"",AutomaticDisableChannelEnabled:t.AutomaticDisableChannelEnabled,AutomaticEnableChannelEnabled:t.AutomaticEnableChannelEnabled,AutomaticDisableKeywords:N(t.AutomaticDisableKeywords??""),AutomaticDisableStatusCodes:t.AutomaticDisableStatusCodes??"",AutomaticRetryStatusCodes:t.AutomaticRetryStatusCodes??"",monitor_setting:{auto_test_channel_enabled:t["monitor_setting.auto_test_channel_enabled"],auto_test_channel_minutes:t["monitor_setting.auto_test_channel_minutes"]}}),[t]),v=(0,r.mN)({resolver:(0,s.u)(j),defaultValues:b});(0,g.j)(v,b);let x=v.watch("AutomaticDisableStatusCodes"),w=v.watch("AutomaticRetryStatusCodes"),P=(0,k.useMemo)(()=>S(x),[x]),I=(0,k.useMemo)(()=>S(w),[w]),R=async e=>{let t={ChannelDisableThreshold:e.ChannelDisableThreshold.trim(),QuotaRemindThreshold:e.QuotaRemindThreshold.trim(),AutomaticDisableChannelEnabled:e.AutomaticDisableChannelEnabled,AutomaticEnableChannelEnabled:e.AutomaticEnableChannelEnabled,AutomaticDisableKeywords:N(e.AutomaticDisableKeywords),AutomaticDisableStatusCodes:S(e.AutomaticDisableStatusCodes).normalized,AutomaticRetryStatusCodes:S(e.AutomaticRetryStatusCodes).normalized,"monitor_setting.auto_test_channel_enabled":e.monitor_setting.auto_test_channel_enabled,"monitor_setting.auto_test_channel_minutes":e.monitor_setting.auto_test_channel_minutes},a=Object.keys(t).filter(e=>t[e]!==o.current[e]);if(0===a.length)return void C.oR.info(n("No changes to save"));for(let e of a){let n=t[e];await i.mutateAsync({key:e,value:n})}o.current=t};return(0,a.jsx)(m.X,{title:n("Monitoring & Alerts"),children:(0,a.jsx)(c.lV,{...v,children:(0,a.jsxs)(h.yt,{onSubmit:v.handleSubmit(R),children:[(0,a.jsx)(p.S2,{onSave:v.handleSubmit(R),isSaving:i.isPending,saveLabel:"Save monitoring rules"}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2",children:[(0,a.jsx)(c.zB,{control:v.control,name:"monitor_setting.auto_test_channel_enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.H,{children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(c.lR,{children:n("Scheduled channel tests")}),(0,a.jsx)(c.Rr,{children:n("Automatically probe all channels in the background")})]}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(c.zB,{control:v.control,name:"monitor_setting.auto_test_channel_minutes",render:e=>{let{field:t}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:n("Test interval (minutes)")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{type:"number",min:1,step:1,...(0,y.X)(t)})}),(0,a.jsx)(c.Rr,{children:n("How frequently the system tests all channels")}),(0,a.jsx)(c.C5,{})]})}})]}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2",children:[(0,a.jsx)(c.zB,{control:v.control,name:"ChannelDisableThreshold",render:e=>{let{field:t}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:n("Disable threshold (seconds)")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{type:"number",min:0,step:1,value:t.value,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(c.Rr,{children:n("Automatically disable channels exceeding this response time")}
104),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsx)(c.zB,{control:v.control,name:"QuotaRemindThreshold",render:e=>{let{field:t}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:n("Quota reminder (tokens)")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{type:"number",min:0,step:1,value:t.value,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(c.Rr,{children:n("Send email alerts when a user falls below this quota")}),(0,a.jsx)(c.C5,{})]})}})]}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2",children:[(0,a.jsx)(c.zB,{control:v.control,name:"AutomaticDisableChannelEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.H,{children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(c.lR,{children:n("Disable on failure")}),(0,a.jsx)(c.Rr,{children:n("Automatically disable channels when tests fail")})]}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(c.zB,{control:v.control,name:"AutomaticEnableChannelEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.H,{children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(c.lR,{children:n("Re-enable on success")}),(0,a.jsx)(c.Rr,{children:n("Bring channels back online after successful checks")})]}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]}),(0,a.jsx)(c.zB,{control:v.control,name:"AutomaticDisableKeywords",render:e=>{let{field:t}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:n("Failure keywords")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(A.T,{rows:6,placeholder:n("one keyword per line"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(c.Rr,{children:n("If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.")}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2",children:[(0,a.jsx)(c.zB,{control:v.control,name:"AutomaticDisableStatusCodes",render:e=>{let{field:t}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:n("Auto-disable status codes")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{placeholder:n("e.g. 401, 403, 429, 500-599"),value:t.value,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsxs)(c.Rr,{children:[n("Accepts comma-separated status codes and inclusive ranges.")," ",P.ok&&P.normalized&&P.normalized!==t.value.trim()&&(0,a.jsxs)("span",{className:"text-muted-foreground",children:[n("Normalized:")," ",P.normalized]})]}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsx)(c.zB,{control:v.control,name:"AutomaticRetryStatusCodes",render:e=>{let{field:t}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:n("Auto-retry status codes")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{placeholder:n("e.g. 401, 403, 429, 500-599"),value:t.value,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsxs)(c.Rr,{children:[n("Accepts comma-separated status codes and inclusive ranges.")," ",I.ok&&I.normalized&&I.normalized!==t.value.trim()&&(0,a.jsxs)("span",{className:"text-muted-foreground",children:[n("Normalized:")," ",I.normalized]})]}),(0,a.jsx)(c.C5,{})]})}})]})]})})})}var R=n(22097);function T(e){let{defaultValues:t}=e,{t:n}=(0,l.Bd)(),o=(0,f.M)(),y=i.Ik({WorkerUrl:i.Yj().refine(e=>{let t=e.trim();return!t||/^https?:\/\//.test(t)},n("Provide a valid URL starting with http:// or https://")),WorkerValidKey:i.Yj(),WorkerAllowHttpImageRequestEnabled:i.zM()}),b=(0,r.mN)({resolver:(0,s.u)(y),defaultValues:t});(0,g.j)(b,t);let v=async e=>{let n=(0,R.UC)(e.WorkerUrl),a=e.WorkerValidKey.trim(),i=(0,R.UC)(t.WorkerUrl),r=t.WorkerValidKey.trim(),s=[];for(let l of(n!==i&&s.push({key:"WorkerUrl",value:n}),(a!==r||""===n)&&s.push({key:"WorkerValidKey",value:a}),e.WorkerAllowHttpImageRequestEnabled!==t.WorkerAllowHttpImageRequestEnabled&&s.push({key:"WorkerAllowHttpImageRequestEnabled",value:e.WorkerAllowHttpImageRequestEnabled}),s))await o.mutateAsync(l)};return(0,a.jsx)(m.X,{title:n("Worker Proxy"),children:(0,a.jsx)(c.lV,{...b,children:(0,a.jsxs)(h.yt,{onSubmit:b.handleSubmit(v),autoComplete:"off",children:[(0,a.jsx)(p.S2,{onSave:b.handleSubmit(v),isSaving:o.isPending,saveLabel:"Save Worker settings"}),(0,a.jsx)(c.zB,{control:b.control,name:"WorkerUrl",render:e=>{let{field:t}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:n("Worker URL")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{type:"url",inputMode:"url",placeholder:n("https://worker.example.workers.dev"),autoComplete:"off",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(c.Rr,{children:n("Requests will be forwarded to this worker. Trailing slashes are removed automatically.")}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsx)(c.zB,{control:b.control,name:"WorkerValidKey",render:e=>{let{field:t}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:n("Worker Access Key")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{type:"password",placeholder:n("Enter new key to update"),autoComplete:"new-password",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(c.Rr,{children:n("Used to authenticate with the worker. Leave blank to keep the existing secret.")}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsx)(c.zB,{control:b.control,name:"WorkerAllowHttpImageRequestEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.H,{children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(c.lR,{children:n("Allow HTTP image requests")}),(0,a.jsx)(c.Rr,{children:n("Enable when proxying workers that fetch images over HTTP.")})]}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})})})}var M=n(76867),D=n(31759),O=n(66304),L=n(83814),E=n(55830);let U=i.Ik({LogConsumeEnabled:i.zM()}),q=e=>{let t=new Date;return t.setHours(t.getHours()-e),t},F=[{label:"24 hours ago",getValue:()=>q(24)},{label:"7 days ago",getValue:()=>q(168)},{label:"30 days ago",getValue:()=>q(720)}];function _(e){let{defaultEnabled:t}=e,{t:n}=(0,l.Bd)(),i=(0,f.M)(),o=(0,r.mN)({resolver:(0,s.u)(U),defaultValues:{LogConsumeEnabled:t}}),[d,g]=(0,k.useState)(()=>q(720)),[y,b]=(0,k.useState)(!1),[v,x]=(0,k.useState)(!1);(0,k.useEffect)(()=>{o.reset({LogConsumeEnabled:t})},[t,o]);let S=(0,k.useMemo)(()=>d?Math.floor(d.getTime()/1e3):null,[d]),w=(0,k.useMemo)(()=>d?(0,M.fk)(d.getTime(),"milliseconds"):"",[d]),A=async e=>
104{e.LogConsumeEnabled!==t&&await i.mutateAsync({key:"LogConsumeEnabled",value:e.LogConsumeEnabled})},P=async()=>{if(!S)return void C.oR.error(n("Select a timestamp before clearing logs."));b(!0);try{let e=await (0,E.AQ)(S);if(!e.success)throw Error(e.message||n("Failed to clean logs"));let t=e.data??0;C.oR.success(t>0?n("{{count}} log entries removed.",{count:t}):n("No log entries matched the selected time."))}catch(t){let e=t instanceof Error?t.message:n("Failed to clean logs");C.oR.error(e)}finally{b(!1)}};return(0,a.jsxs)(m.X,{title:n("Log Maintenance"),children:[(0,a.jsx)(c.lV,{...o,children:(0,a.jsxs)(h.yt,{onSubmit:o.handleSubmit(A),children:[(0,a.jsx)(p.S2,{onSave:o.handleSubmit(A),isSaving:i.isPending,saveLabel:"Save log settings"}),(0,a.jsx)(c.zB,{control:o.control,name:"LogConsumeEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.H,{children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(c.lR,{children:n("Record quota usage")}),(0,a.jsx)(c.Rr,{children:n("Track per-request consumption to power usage analytics. Keeping this on increases database writes.")})]}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsxs)(h.WY,{className:"space-y-3",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:n("Clean history logs")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:n("Remove all log entries created before the selected timestamp.")})]}),(0,a.jsx)(L.K,{value:d,onChange:g}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-3",children:[F.map(e=>(0,a.jsx)(O.$,{type:"button",variant:"outline",onClick:()=>g(e.getValue()),children:n(e.label)},e.label)),(0,a.jsx)(O.$,{type:"button",variant:"destructive",onClick:()=>{S?x(!0):C.oR.error(n("Select a timestamp before clearing logs."))},disabled:y,children:y?n("Cleaning..."):n("Clean logs")})]})]})]})}),(0,a.jsx)(D.Lt,{open:v,onOpenChange:x,children:(0,a.jsxs)(D.EO,{children:[(0,a.jsxs)(D.wd,{children:[(0,a.jsx)(D.r7,{children:n("Confirm log cleanup")}),(0,a.jsxs)(D.$v,{children:[w?n("This will permanently remove all log entries created before {{date}}.",{date:w}):n("This will permanently remove log entries before the selected timestamp.")," ",n("This action cannot be undone.")]})]}),(0,a.jsxs)(D.ck,{children:[(0,a.jsx)(D.Zr,{disabled:y,children:n("Cancel")}),(0,a.jsx)(D.Rx,{onClick:P,disabled:y,children:y?n("Cleaning..."):n("Delete logs")})]})]})})]})}var B=n(82406),G=n(21683),z=n(64792),K=n(41220),W=n(94101),J=n(62036),V=n(51983),H=n(68165);let $=i.Ik({performance_setting:i.Ik({disk_cache_enabled:i.zM(),disk_cache_threshold_mb:o.ai().min(1),disk_cache_max_size_mb:o.ai().min(100),disk_cache_path:i.Yj(),monitor_enabled:i.zM(),monitor_cpu_threshold:o.ai().min(0),monitor_memory_threshold:o.ai().min(0).max(100),monitor_disk_threshold:o.ai().min(0).max(100)}),perf_metrics_setting:i.Ik({enabled:i.zM(),flush_interval:o.ai().min(1),bucket_time:i.k5(["minute","5min","hour"]),retention_days:o.ai().min(0)})}),Q=e=>({performance_setting:{disk_cache_enabled:e["performance_setting.disk_cache_enabled"],disk_cache_threshold_mb:e["performance_setting.disk_cache_threshold_mb"],disk_cache_max_size_mb:e["performance_setting.disk_cache_max_size_mb"],disk_cache_path:e["performance_setting.disk_cache_path"]??"",monitor_enabled:e["performance_setting.monitor_enabled"],monitor_cpu_threshold:e["performance_setting.monitor_cpu_threshold"],monitor_memory_threshold:e["performance_setting.monitor_memory_threshold"],monitor_disk_threshold:e["performance_setting.monitor_disk_threshold"]},perf_metrics_setting:{enabled:e["perf_metrics_setting.enabled"],flush_interval:e["perf_metrics_setting.flush_interval"],bucket_time:e["perf_metrics_setting.bucket_time"],retention_days:e["perf_metrics_setting.retention_days"]}});function Y(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;if(!e||isNaN(e)||0===e)return"0 Bytes";if(e<0)return"-"+Y(-e,t);let n=["Bytes","KB","MB","GB","TB"],a=Math.floor(Math.log(Math.abs(e))/Math.log(1024));return a<0||a>=n.length?e+" Bytes":parseFloat((e/Math.pow(1024,a)).toFixed(t))+" "+n[a]}function X(e){let{t}=(0,l.Bd)(),n=(0,f.M)(),[i,o]=(0,k.useState)(null),[g,b]=(0,k.useState)(null),[v,x]=(0,k.useState)("by_count"),[S,w]=(0,k.useState)(10),[A,P]=(0,k.useState)(!1),j=(0,k.useMemo)(()=>Q(e.defaultValues),[e.defaultValues]),N=(0,r.mN)({resolver:(0,s.u)($),defaultValues:j}),I=(0,k.useRef)(e.defaultValues),R=(0,k.useRef)(JSON.stringify(e.defaultValues));(0,k.useEffect)(()=>{let t=JSON.stringify(e.defaultValues);t!==R.current&&(I.current=e.defaultValues,R.current=t,N.reset(Q(e.defaultValues)))},[e.defaultValues,N]);let T=(0,k.useCallback)(async()=>{try{let e=await B.FH.get("/api/performance/stats");e.data.success&&o(e.data.data)}catch{}},[]),M=(0,k.useCallback)(async()=>{try{let e=await B.FH.get("/api/performance/logs");e.data.success&&b(e.data.data)}catch{}},[]);(0,k.useEffect)(()=>{T(),M()},[T,M]);let L=async e=>{let a={"performance_setting.disk_cache_enabled":e.performance_setting.disk_cache_enabled,"performance_setting.disk_cache_threshold_mb":e.performance_setting.disk_cache_threshold_mb,"performance_setting.disk_cache_max_size_mb":e.performance_setting.disk_cache_max_size_mb,"performance_setting.disk_cache_path":e.performance_setting.disk_cache_path??"","performance_setting.monitor_enabled":e.performance_setting.monitor_enabled,"performance_setting.monitor_cpu_threshold":e.performance_setting.monitor_cpu_threshold,"performance_setting.monitor_memory_threshold":e.performance_setting.monitor_memory_threshold,"performance_setting.monitor_disk_threshold":e.performance_setting.monitor_disk_threshold,"perf_metrics_setting.enabled":e.perf_metrics_setting.enabled,"perf_metrics_setting.flush_interval":e.perf_metrics_setting.flush_interval,"perf_metrics_setting.bucket_time":e.perf_metrics_setting.bucket_time,"perf_metrics_setting.retention_days":e.perf_metrics_setting.retention_days},i=Object.keys(a).filter(e=>a[e]!==I.current[e]);if(0===i.length)return void C.oR.info(t("No changes to save"));for(let e of i)await n.mutateAsync({key:e,value:a[e]});I.current=a,R.current=JSON.stringify(a),N.reset(Q(a)),T()},E=async()=>{try{(await B.FH.delete("/api/performance/disk_cache")).data.success&&(C.oR.success(t("Disk cache cleared")),T())}catch{C.oR.error(t("Cleanup failed"))}},U=async()=>{try{(await B.FH.post("/api/performance/reset_stats")).data.success&&(C.oR.success(t("Statistics reset")),T())}catch{C.oR.error(t("Reset failed"))}},q=async()=>{try{(await B.FH.post("/api/performance/gc")).data.success&&(C.oR.success(t("GC executed")),T())}catch{C.oR.error(t("GC execution failed"))}},F=async()=>
104{if(!S||isNaN(S)||S<1)return void C.oR.error(t("Please enter a valid number"));P(!0);try{let e=await B.FH.delete(`/api/performance/logs?mode=${v}&value=${S}`);if(e.data.success){let{deleted_count:n,freed_bytes:a}=e.data.data;C.oR.success(t("Cleaned up {{count}} log files, freed {{size}}",{count:n,size:Y(a)}))}else C.oR.error(e.data.message||t("Cleanup failed"));M()}catch{C.oR.error(t("Cleanup failed"))}finally{P(!1)}},_=N.watch("performance_setting.disk_cache_enabled"),X=N.watch("performance_setting.monitor_enabled"),Z=N.watch("perf_metrics_setting.enabled"),ee=N.watch("performance_setting.disk_cache_max_size_mb"),et="number"==typeof ee?ee:Number(ee)||0,en=_&&i?.disk_space_info&&i.disk_space_info.free>0&&et>0&&i.disk_space_info.free<1024*et*1024,ea=i?.cache_stats?.disk_cache_max_bytes&&i.cache_stats.disk_cache_max_bytes>0?Math.round(i.cache_stats.current_disk_usage_bytes/i.cache_stats.disk_cache_max_bytes*100):0;return(0,a.jsxs)(m.X,{title:t("Performance Settings"),children:[(0,a.jsx)(c.lV,{...N,children:(0,a.jsxs)(h.yt,{onSubmit:N.handleSubmit(L),children:[(0,a.jsx)(p.S2,{onSave:N.handleSubmit(L),isSaving:n.isPending}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-medium",children:t("Disk Cache Settings")}),(0,a.jsx)("p",{className:"text-muted-foreground mt-1 text-xs",children:t("When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.")})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:[(0,a.jsx)(c.zB,{control:N.control,name:"performance_setting.disk_cache_enabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(h.H,{children:[(0,a.jsx)(h.z$,{children:(0,a.jsx)(c.lR,{children:t("Enable Disk Cache")})}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(c.zB,{control:N.control,name:"performance_setting.disk_cache_threshold_mb",render:e=>{let{field:n}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:t("Disk Cache Threshold (MB)")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{type:"number",min:1,step:1,...(0,y.X)(n),disabled:!_})}),(0,a.jsx)(c.Rr,{children:t("Use disk cache when request body exceeds this size")}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsx)(c.zB,{control:N.control,name:"performance_setting.disk_cache_max_size_mb",render:e=>{let{field:n}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:t("Max Disk Cache Size (MB)")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{type:"number",min:100,step:1,...(0,y.X)(n),disabled:!_})}),i?.disk_space_info&&i.disk_space_info.total>0&&(0,a.jsx)(c.Rr,{children:t("Free: {{free}} / Total: {{total}}",{free:Y(i.disk_space_info.free),total:Y(i.disk_space_info.total)})}),(0,a.jsx)(c.C5,{})]})}})]}),en&&(0,a.jsx)(z.Fc,{variant:"destructive",children:(0,a.jsx)(z.TN,{children:`${t("Warning")}: ${t("Available disk space")} (${Y(i?.disk_space_info?.free??0)}) ${t("is less than the configured maximum cache size")} (${et} MB). ${t("This may cause cache failures.")}`})}),!i?.config?.is_running_in_container&&(0,a.jsx)(c.zB,{control:N.control,name:"performance_setting.disk_cache_path",render:e=>{let{field:n}=e;return(0,a.jsxs)(c.eI,{className:"max-w-md",children:[(0,a.jsx)(c.lR,{children:t("Cache Directory")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{placeholder:t("Leave empty to use system temp directory"),value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref,disabled:!_})}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsx)(V.w,{}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-medium",children:t("System Performance Monitoring")}),(0,a.jsx)("p",{className:"text-muted-foreground mt-1 text-xs",children:t("When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.")})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-4",children:[(0,a.jsx)(c.zB,{control:N.control,name:"performance_setting.monitor_enabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(h.H,{children:[(0,a.jsx)(h.z$,{children:(0,a.jsx)(c.lR,{children:t("Enable Performance Monitoring")})}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(c.zB,{control:N.control,name:"performance_setting.monitor_cpu_threshold",render:e=>{let{field:n}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:t("CPU Threshold (%)")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{type:"number",min:0,step:1,...(0,y.X)(n),disabled:!X})}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsx)(c.zB,{control:N.control,name:"performance_setting.monitor_memory_threshold",render:e=>{let{field:n}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:t("Memory Threshold (%)")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{type:"number",min:0,max:100,step:1,...(0,y.X)(n),disabled:!X})}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsx)(c.zB,{control:N.control,name:"performance_setting.monitor_disk_threshold",render:e=>{let{field:n}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:t("Disk Threshold (%)")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{type:"number",min:0,max:100,step:1,...(0,y.X)(n),disabled:!X})}),(0,a.jsx)(c.C5,{})]})}})]}),(0,a.jsx)(V.w,{}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-medium",children:t("Model performance metrics")}),(0,a.jsx)("p",{className:"text-muted-foreground mt-1 text-xs",children:t("Collect relay latency and success-rate metrics for the model square.")})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-4",children:[(0,a.jsx)(c.zB,{control:N.control,name:"perf_metrics_setting.enabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(h.H,{children:[(0,a.jsx)(h.z$,{children:(0,a.jsx)(c.lR,{children:t("Enable model performance metrics")})}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(c.zB,{control:N.control,name:"perf_metrics_setting.flush_interval",render:e=>{let{field:n}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:t("Flush interval (minutes)")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{type:"number",min:1,step:1,...(0,y.X)(n),disabled:!Z})}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsx)(c.zB,{control:N.control,name:"perf_metrics_setting.bucket_time",render:e=>{let{field:n}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:t("Aggregation bucket")}),(0,a.jsxs)(J.l6,{items:[{value:"minute",label:t("1 minute")},{value:"5min",label:t("5 minutes")},{value:"hour",label:t("1 hour")}],value:n.value,onValueChange:n.onChange,disabled:!Z,children:[(0,a.jsx)(c.MJ,{children:(0,a.jsx)(J.bq,{children:(0,a.jsx)(J.yv,{})})}),(0,a.jsx)(J.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(J.s3,{children:[(0,a.jsx)(J.eb,{value:"minute",children:t("1 minute")}),(0,a.jsx)(J.eb,{value:"5min",children:t("5 minutes")}),(0,a.jsx)(J.eb,{value:"hour",children:t("1 hour")})]})})]}),(0,a.jsx)(c.C5,{})]})}}),(0,a.jsx)(c.zB,{control:N.control,name:"perf_metrics_setting.retention_days",render:e=>{let{field:n}=e;return(0,a.jsxs)(c.eI,{children:[(0,a.jsx)(c.lR,{children:t("Retention days")}),(0,a.jsx)(c.MJ,{children:(0,a.jsx)(d.p,{type:"number",min:0,step:1,...(0,y.X)(n),disabled:!Z})}),(0,a.jsx)(c.Rr,{children:t("0 means data is kept permanently")}),(0,a.jsx)(c.C5,{})]})}})]})]})}),(0,a.jsx)(V.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-medium",children:t("Server Log Management")}),(0,a.jsx)("p",{className:"text-muted-foreground mt-1 text-xs",children:t("Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.")})]}),null===g?null:g.enabled?(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("div",{className:"rounded-lg border p-4",children:(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-2 text-sm md:grid-cols-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("Log Directory"),":"]})," ",(0,a.jsx)("span",{className:"font-mono text-xs",children:g.log_dir})]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("Log File Count"),":"]})," ",g.file_count]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("Total Log Size"),":"]})," ",Y(g.total_size)]}),g.oldest_time&&g.newest_time&&(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("Date Range"),":"]})," ",(0,G.A)(g.oldest_time).format("YYYY-MM-DD")," ~"," ",(0,G.A)(g.newest_time).format("YYYY-MM-DD")]})]})}),(0,a.jsxs)("div",{className:"flex flex-wrap items-end gap-3",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(K.J,{className:"text-xs",children:t("Cleanup Mode")}),(0,a.jsxs)(J.l6,{items:[{value:"by_count",label:t("Retain last N files")},{value:"by_days",label:t("Retain last N days")}],value:v,onValueChange:e=>null!==e&&x(e),children:[(0,a.jsx)(J.bq,{className:"w-[160px]",children:(0,a.jsx)(J.yv,{})}),(0,a.jsx)(J.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(J.s3,{children:[(0,a.jsx)(J.eb,{value:"by_count",children:t("Retain last N files")}),(0,a.jsx)(J.eb,{value:"by_days",children:t("Retain last N days")})]})})]})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(K.J,{className:"text-xs",children:"by_count"===v?t("Files to Retain"):t("Days to Retain")}),(0,a.jsx)(d.p,{type:"number",min:1,max:"by_count"===v?1e3:3650,value:S,onChange:e=>w(Number(e.target.value)),className:"w-[120px]"})]}),(0,a.jsxs)(D.Lt,{children:[(0,a.jsx)(D.tv,{render:(0,a.jsx)(O.$,{variant:"destructive",size:"sm",disabled:A}),children:A?t("Cleaning..."):t("Clean Up Log Files")}
104),(0,a.jsxs)(D.EO,{children:[(0,a.jsxs)(D.wd,{children:[(0,a.jsx)(D.r7,{children:t("Confirm log file cleanup?")}),(0,a.jsx)(D.$v,{children:"by_count"===v?t("Only the last {{value}} log files will be retained; the rest will be deleted.",{value:S}):t("Log files older than {{value}} days will be deleted.",{value:S})})]}),(0,a.jsxs)(D.ck,{children:[(0,a.jsx)(D.Zr,{children:t("Cancel")}),(0,a.jsx)(D.Rx,{onClick:F,children:t("Confirm Cleanup")})]})]})]})]})]}):(0,a.jsx)(z.Fc,{children:(0,a.jsx)(z.TN,{children:t("Server logging is not enabled (log directory not configured)")})})]}),(0,a.jsx)(V.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("h4",{className:"font-medium",children:t("Performance Monitor")}),(0,a.jsx)(O.$,{variant:"outline",size:"sm",onClick:T,children:t("Refresh Stats")}),(0,a.jsxs)(D.Lt,{children:[(0,a.jsx)(D.tv,{render:(0,a.jsx)(O.$,{variant:"outline",size:"sm"}),children:t("Clean up inactive cache")}),(0,a.jsxs)(D.EO,{children:[(0,a.jsxs)(D.wd,{children:[(0,a.jsx)(D.r7,{children:t("Confirm cleanup of inactive disk cache?")}),(0,a.jsx)(D.$v,{children:t("This will delete temporary cache files that have not been used for more than 10 minutes")})]}),(0,a.jsxs)(D.ck,{children:[(0,a.jsx)(D.Zr,{children:t("Cancel")}),(0,a.jsx)(D.Rx,{onClick:E,children:t("Confirm")})]})]})]}),(0,a.jsx)(O.$,{variant:"outline",size:"sm",onClick:U,children:t("Reset Stats")}),(0,a.jsx)(O.$,{variant:"outline",size:"sm",onClick:q,children:t("Run GC")})]}),i&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-2 rounded-lg border p-4",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:t("Request Body Disk Cache")}),(0,a.jsx)(W.ke,{value:ea}),(0,a.jsxs)("div",{className:"text-muted-foreground flex justify-between text-xs",children:[(0,a.jsxs)("span",{children:[Y(i.cache_stats?.current_disk_usage_bytes??0)," ","/"," ",Y(i.cache_stats?.disk_cache_max_bytes??0)]}),(0,a.jsxs)("span",{children:[t("Active Files"),":"," ",i.cache_stats?.active_disk_files??0]})]}),(0,a.jsxs)(H.Wh,{variant:"neutral",copyable:!1,children:[t("Disk Hits"),": ",i.cache_stats?.disk_cache_hits??0]})]}),(0,a.jsxs)("div",{className:"space-y-2 rounded-lg border p-4",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:t("Request Body Memory Cache")}),(0,a.jsxs)("div",{className:"text-muted-foreground flex justify-between text-xs",children:[(0,a.jsxs)("span",{children:[t("Current Cache Size"),":"," ",Y(i.cache_stats?.current_memory_usage_bytes??0)]}),(0,a.jsxs)("span",{children:[t("Active Cache Count"),":"," ",i.cache_stats?.active_memory_buffers??0]})]}),(0,a.jsxs)(H.Wh,{variant:"neutral",copyable:!1,children:[t("Memory Hits"),":"," ",i.cache_stats?.memory_cache_hits??0]})]})]}),i.disk_space_info&&i.disk_space_info.total>0&&(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("p",{className:"mb-2 text-sm font-medium",children:t("Cache Directory Disk Space")}),(0,a.jsx)(W.ke,{value:Math.round(i.disk_space_info.used_percent)}),(0,a.jsxs)("div",{className:"text-muted-foreground mt-2 flex justify-between text-xs",children:[(0,a.jsxs)("span",{children:[t("Used"),": ",Y(i.disk_space_info.used)]}),(0,a.jsxs)("span",{children:[t("Available"),": ",Y(i.disk_space_info.free)]}),(0,a.jsxs)("span",{children:[t("Total"),": ",Y(i.disk_space_info.total)]})]})]}),i.memory_stats&&(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("p",{className:"mb-2 text-sm font-medium",children:t("System Memory Stats")}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-2 text-xs md:grid-cols-5",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("Allocated Memory"),":"]})," ",Y(i.memory_stats.alloc)]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("Total Allocated"),":"]})," ",Y(i.memory_stats.total_alloc)]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("System Memory"),":"]})," ",Y(i.memory_stats.sys)]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("GC Count"),":"]})," ",i.memory_stats.num_gc]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:"Goroutines:"})," ",i.memory_stats.num_goroutine]}
104)]})]}),i.disk_cache_info&&(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("p",{className:"mb-2 text-sm font-medium",children:t("Cache Directory Info")}),(0,a.jsxs)("div",{className:"grid grid-cols-3 gap-2 text-xs",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("Cache Directory"),":"]})," ",(0,a.jsx)("span",{className:"font-mono",children:i.disk_cache_info.path})]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("Directory File Count"),":"]})," ",i.disk_cache_info.file_count]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("Directory Total Size"),":"]})," ",Y(i.disk_cache_info.total_size)]})]})]})]})]})]})}var Z=n(35820),ee=n(58241),et=n(63999),en=n(97933);function ea(e){let{currentVersion:t,startTime:n}=e,{t:i}=(0,l.Bd)(),[o,r]=(0,k.useState)(!1),[s,c]=(0,k.useState)(!1),[d,u]=(0,k.useState)(null),h=n?(0,M.Ey)(n):i("Unknown"),p=t||i("Unknown"),g=async()=>{r(!0);try{let e=await fetch("https://api.github.com/repos/Calcium-Ion/new-api/releases/latest",{headers:{Accept:"application/vnd.github+json","User-Agent":"new-api-dashboard"}});if(!e.ok)throw Error(i("Failed to contact GitHub releases API"));let n=await e.json();if(!n?.tag_name)throw Error(i("Unexpected release payload"));if(t&&n.tag_name===t)return void C.oR.success(i("You are running the latest version ({{version}}).",{version:n.tag_name}));u(n),c(!0)}catch(t){let e=t instanceof Error?t.message:i("Failed to check for updates");C.oR.error(e)}finally{r(!1)}};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(m.X,{title:i("System maintenance"),children:(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("div",{className:"text-muted-foreground text-sm",children:i("Current version")}),(0,a.jsx)("div",{className:"text-lg font-semibold",children:p})]}),(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("div",{className:"text-muted-foreground text-sm",children:i("Uptime since")}),(0,a.jsx)("div",{className:"text-lg font-semibold",children:h})]})]}),(0,a.jsx)(O.$,{onClick:g,disabled:o,children:o?i("Checking updates..."):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(Z.A,{className:"me-2 h-4 w-4"}),i("Check for updates")]})})]})}),(0,a.jsx)(en.l,{open:s,onOpenChange:c,title:d?.tag_name?i("New version available: {{version}}",{version:d.tag_name}):i("Release details"),description:d?.published_at?`${i("Published")} ${(0,M.fk)(new Date(d.published_at).getTime(),"milliseconds")}`:void 0,contentClassName:"max-h-[80vh] overflow-y-auto",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(O.$,{type:"button",variant:"secondary",onClick:()=>c(!1),children:i("Close")}),d?.html_url&&(0,a.jsxs)(O.$,{type:"button",onClick:()=>{d?.html_url&&window.open(d.html_url,"_blank","noopener,noreferrer")},children:[(0,a.jsx)(ee.A,{className:"me-2 h-4 w-4"}),i("Open release")]})]}),children:(0,a.jsx)("div",{className:"space-y-4",children:d?.body?(0,a.jsx)(et.o,{children:d.body}):(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:i("No release notes provided.")})})})]})}var ei=n(2099);let eo=[{id:"behavior",titleKey:"System Behavior",build:e=>(0,a.jsx)(v,{defaultValues:{RetryTimes:e.RetryTimes,DefaultCollapseSidebar:e.DefaultCollapseSidebar,DemoSiteEnabled:e.DemoSiteEnabled,SelfUseModeEnabled:e.SelfUseModeEnabled}})},{id:"monitoring",titleKey:"Monitoring & Alerts",build:e=>(0,a.jsx)(I,{defaultValues:{ChannelDisableThreshold:e.ChannelDisableThreshold,QuotaRemindThreshold:e.QuotaRemindThreshold,AutomaticDisableChannelEnabled:e.AutomaticDisableChannelEnabled,AutomaticEnableChannelEnabled:e.AutomaticEnableChannelEnabled,AutomaticDisableKeywords:e.AutomaticDisableKeywords,AutomaticDisableStatusCodes:e.AutomaticDisableStatusCodes,AutomaticRetryStatusCodes:e.AutomaticRetryStatusCodes,"monitor_setting.auto_test_channel_enabled":e["monitor_setting.auto_test_channel_enabled"],"monitor_setting.auto_test_channel_minutes":e["monitor_setting.auto_test_channel_minutes"]}})},{id:"email",titleKey:"SMTP Email",build:e=>(0,a.jsx)(x,{defaultValues:{SMTPServer:e.SMTPServer,SMTPPort:e.SMTPPort,SMTPAccount:e.SMTPAccount,SMTPFrom:e.SMTPFrom,SMTPToken:e.SMTPToken,SMTPSSLEnabled:e.SMTPSSLEnabled,SMTPForceAuthLogin:e.SMTPForceAuthLogin}})},{id:"worker",titleKey:"Worker Proxy",build:e=>(0,a.jsx)(T,{defaultValues:{WorkerUrl:e.WorkerUrl,WorkerValidKey:e.WorkerValidKey,WorkerAllowHttpImageRequestEnabled:e.WorkerAllowHttpImageRequestEnabled}})},{id:"logs",titleKey:"Log Maintenance",build:e=>(0,a.jsx)(_,{defaultEnabled:!!e.LogConsumeEnabled})},{id:"performance",titleKey:"Performance",build:e=>(0,a.jsx)(X,{defaultValues:{"performance_setting.disk_cache_enabled":e["performance_setting.disk_cache_enabled"]??!1,"performance_setting.disk_cache_threshold_mb":e["performance_setting.disk_cache_threshold_mb"]??10,"performance_setting.disk_cache_max_size_mb":e["performance_setting.disk_cache_max_size_mb"]??1024,"performance_setting.disk_cache_path":e["performance_setting.disk_cache_path"]??"","performance_setting.monitor_enabled":e["performance_setting.monitor_enabled"]??!1,"performance_setting.monitor_cpu_threshold":e["performance_setting.monitor_cpu_threshold"]??90,"performance_setting.monitor_memory_threshold":e["performance_setting.monitor_memory_threshold"]??90,"performance_setting.monitor_disk_threshold":e["performance_setting.monitor_disk_threshold"]??95,"perf_metrics_setting.enabled":e["perf_metrics_setting.enabled"]??!0,"perf_metrics_setting.flush_interval":e["perf_metrics_setting.flush_interval"]??5,"perf_metrics_setting.bucket_time":e["perf_metrics_setting.bucket_time"]??"hour","perf_metrics_setting.retention_days":e["perf_metrics_setting.retention_days"]??0}})},{id:"update-checker",titleKey:"System maintenance",build:(e,t,n)=>(0,a.jsx)(ea,{currentVersion:t,startTime:n})}],er=(0,ei.h)({sections:eo,defaultSection:"behavior",basePath:"/system-settings/operations",urlStyle:"path"}),es=er.sectionIds,el=er.defaultSection,ec=er.getSectionNavItems,ed=er.getSectionContent,eu=er.getSectionMeta},22722(e,t,n){n.d(t,{r1:()=>V,_f:()=>
104J,Pz:()=>$,lM:()=>Q,lt:()=>H});var a=n(23579),i=n(31371),o=n(66586),r=n(32403),s=n(79159),l=n(61402),c=n(762),d=n(72407),u=n(66304),h=n(28082),p=n(40382),m=n(25920),g=n(69502),f=n(54548),y=n(38390),b=n(16728),v=n(90770),x=n(8273),k=n(85501),C=n(29422),S=n(57224),w=n(68448),A=n(7458),P=n(47682),j=n(97933);let N=o.Ik({groupName:o.Yj().min(1,"Group name is required"),maxRequests:o.ai().min(0,"Must be ≥ 0").max(0x7fffffff,"Must be ≤ 2,147,483,647"),maxSuccess:o.ai().min(1,"Must be ≥ 1").max(0x7fffffff,"Must be ≤ 2,147,483,647")}),I="rate-limit-form";function R(e){let{open:t,onOpenChange:n,onSave:o,editData:l}=e,{t:c}=(0,d.Bd)(),m=!!l,g=(0,r.mN)({resolver:(0,s.u)(N),defaultValues:{groupName:"",maxRequests:0,maxSuccess:1}});return(0,i.useEffect)(()=>{l?g.reset(l):g.reset({groupName:"",maxRequests:0,maxSuccess:1})},[l,g,t]),(0,a.jsx)(j.l,{open:t,onOpenChange:n,title:m?c("Edit group rate limit"):c("Add group rate limit"),description:c("Configure rate limiting rules for a specific user group."),contentClassName:"sm:max-w-[500px]",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(u.$,{type:"button",variant:"outline",onClick:()=>n(!1),children:c("Cancel")}),(0,a.jsx)(u.$,{type:"submit",form:I,children:m?c("Update"):c("Add")})]}),children:(0,a.jsx)(h.lV,{...g,children:(0,a.jsxs)("form",{id:I,onSubmit:g.handleSubmit(e=>{o(e),g.reset(),n(!1)}),className:"space-y-4",children:[(0,a.jsx)(h.zB,{control:g.control,name:"groupName",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:c("Group Name")}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(p.p,{placeholder:c("e.g., default, vip, premium"),...t,disabled:m})}),(0,a.jsx)(h.Rr,{children:m?c("Group name cannot be changed when editing."):c("Unique identifier for this group.")}),(0,a.jsx)(h.C5,{})]})}}),(0,a.jsx)(h.zB,{control:g.control,name:"maxRequests",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:c("Max Requests (including failures)")}),(0,a.jsx)(h.MJ,{children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(p.p,{type:"number",min:0,max:0x7fffffff,step:1,...t,onChange:e=>t.onChange(parseInt(e.target.value)||0)}),(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:c("times")})]})}),(0,a.jsx)(h.Rr,{children:c("Total requests allowed per period. 0 = unlimited.")}),(0,a.jsx)(h.C5,{})]})}}),(0,a.jsx)(h.zB,{control:g.control,name:"maxSuccess",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:c("Max Successful Requests")}),(0,a.jsx)(h.MJ,{children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(p.p,{type:"number",min:1,max:0x7fffffff,step:1,...t,onChange:e=>t.onChange(parseInt(e.target.value)||1)}),(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:c("times")})]})}),(0,a.jsx)(h.Rr,{children:c("Only successful requests count toward this limit.")}),(0,a.jsx)(h.C5,{})]})}})]})})})}function T(e){let{value:t,onChange:n}=e,{t:o}=(0,d.Bd)(),[r,s]=(0,i.useState)(""),[l,c]=(0,i.useState)(!1),[h,m]=(0,i.useState)(null),g=(0,i.useMemo)(()=>t&&""!==t.trim()?Object.entries((0,A.Cz)(t,{fallback:{},validator:P.LK,validatorMessage:"Rate limits must be a JSON object",context:"rate limits"})).map(e=>{let[t,n]=e;return Array.isArray(n)&&2===n.length&&"number"==typeof n[0]&&"number"==typeof n[1]?{groupName:t,maxRequests:n[0],maxSuccess:n[1]}:null}).filter(e=>null!==e):[],[t]),f=(0,i.useMemo)(()=>{if(!r)return g;let e=r.toLowerCase();return g.filter(t=>t.groupName.toLowerCase().includes(e))},[g,r]);return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-4",children:[(0,a.jsxs)("div",{className:"relative flex-1",children:[(0,a.jsx)(x.A,{className:"text-muted-foreground absolute top-2.5 left-2.5 h-4 w-4"}),(0,a.jsx)(p.p,{placeholder:o("Search group names..."),value:r,onChange:e=>s(e.target.value),className:"pl-9"})]}),(0,a.jsxs)(u.$,{onClick:()=>{m(null),c(!0)},children:[(0,a.jsx)(k.A,{className:"mr-2 h-4 w-4"}),o("Add group")]})]}),(0,a.jsx)(w.hm,{data:f,getRowKey:e=>e.groupName,emptyContent:r?o("No groups match your search"):o('No group-based rate limits configured. Click "Add group" to get started.'),columns:[{id:"group",header:o("Group Name"),cellClassName:"font-medium",cell:e=>e.groupName},{id:"max-requests",header:o("Max Requests (incl. failures)"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsx)("span",{className:"font-mono",children:0===e.maxRequests?o("Unlimited"):e.maxRequests.toLocaleStr
104ing()})},{id:"max-success",header:o("Max Success"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsx)("span",{className:"font-mono",children:e.maxSuccess.toLocaleString()})},{id:"actions",header:o("Actions"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,a.jsx)(u.$,{variant:"ghost",size:"sm",onClick:()=>{m(e),c(!0)},children:(0,a.jsx)(C.A,{className:"h-4 w-4"})}),(0,a.jsx)(u.$,{variant:"ghost",size:"sm",onClick:()=>{var a;let i;return a=e.groupName,i=(0,A.Cz)(t,{fallback:{},validator:P.LK,silent:!0}),void(delete i[a],n(JSON.stringify(i,null,2)))},children:(0,a.jsx)(S.A,{className:"h-4 w-4"})})]})}]}),(0,a.jsx)(R,{open:l,onOpenChange:c,onSave:e=>{let a=(0,A.Cz)(t,{fallback:{},validator:P.LK,silent:!0});h&&h.groupName!==e.groupName&&delete a[h.groupName],a[e.groupName]=[e.maxRequests,e.maxSuccess],n(JSON.stringify(a,null,2))},editData:h})]})}let M=e=>{if(!e||""===e.trim())return!0;try{let t=JSON.parse(e);if("object"!=typeof t||Array.isArray(t))return!1;for(let[,e]of Object.entries(t))if(!Array.isArray(e)||2!==e.length||"number"!=typeof e[0]||"number"!=typeof e[1]||e[0]<0||e[1]<1||e[0]>0x7fffffff||e[1]>0x7fffffff)return!1;return!0}catch{return!1}};function D(e){let{defaultValues:t}=e,{t:n}=(0,d.Bd)(),x=(0,v.M)(),[k,C]=(0,i.useState)(!0),S=o.Ik({ModelRequestRateLimitEnabled:o.zM(),ModelRequestRateLimitDurationMinutes:o.ai().min(0),ModelRequestRateLimitCount:o.ai().min(0).max(1e8),ModelRequestRateLimitSuccessCount:o.ai().min(1).max(1e8),ModelRequestRateLimitGroup:o.Yj().optional().refine(M,{message:n("Invalid JSON format or values out of allowed range")})}),w=(0,r.mN)({resolver:(0,s.u)(S),mode:"onChange",defaultValues:t});(0,i.useEffect)(()=>{w.reset(t)},[t,w]);let A=async e=>{for(let[n,a]of Object.entries(e).filter(e=>{let[n,a]=e;return a!==t[n]}))await x.mutateAsync({key:n,value:a??""})};return(0,a.jsx)(b.X,{title:n("Rate Limiting"),children:(0,a.jsx)(h.lV,{...w,children:(0,a.jsxs)(f.yt,{onSubmit:w.handleSubmit(A),children:[(0,a.jsx)(y.S2,{onSave:w.handleSubmit(A),isSaving:x.isPending,saveLabel:"Save rate limits"}),(0,a.jsx)(h.zB,{control:w.control,name:"ModelRequestRateLimitEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(f.H,{children:[(0,a.jsxs)(f.z$,{children:[(0,a.jsx)(h.lR,{children:n("Enable rate limiting")}),(0,a.jsx)(h.Rr,{children:n("This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.")})]}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(m.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsxs)("div",{className:"grid gap-4 md:grid-cols-3",children:[(0,a.jsx)(h.zB,{control:w.control,name:"ModelRequestRateLimitDurationMinutes",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:n("Limit period")}),(0,a.jsx)(h.MJ,{children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(p.p,{type:"number",min:0,step:1,...t,onChange:e=>t.onChange(parseInt(e.target.value)||0)}),(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:n("minutes")})]})}),(0,a.jsx)(h.Rr,{children:n("Time window for rate limiting")}),(0,a.jsx)(h.C5,{})]})}}),(0,a.jsx)(h.zB,{control:w.control,name:"ModelRequestRateLimitCount",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:n("Max requests per period")}),(0,a.jsx)(h.MJ,{children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(p.p,{type:"number",min:0,max:1e8,step:1,...t,onChange:e=>t.onChange(parseInt(e.target.value)||0)}),(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:n("times")})]})}),(0,a.jsx)(h.Rr,{children:n("Including failed requests, 0 = unlimited")}),(0,a.jsx)(h.C5,{})]})}}),(0,a.jsx)(h.zB,{control:w.control,name:"ModelRequestRateLimitSuccessCount",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:n("Max successful requests")}),(0,a.jsx)(h.MJ,{children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(p.p,{type:"number",min:1,max:1e8,step:1,...t,onChange:e=>t.onChange(parseInt(e.target.value)||1)}),(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:n("times")})]})}),(0,a.jsx)(h.Rr,{children:n("Only successful requests")}),(0,a.jsx)(h.C5,{})]})}})]}),(0,a.jsx)(h.zB,{control:w.control,name:"ModelRequestRateLimitGroup",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)(h.lR,{children:n("Group-based rate limits")}),(0,a.jsx)(u.$,{type:"button",variant:"outline",size:"sm",onClick:()=>C(!k),children:k?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(l.A,{className:"mr-2 h-4 w-4"}),n("JSON Mode")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.A,{className:"mr-2 h-4 w-4"}),n("Visual Mode")]})})]}),(0,a.jsx)(h.MJ,{children:k?(0,a.jsx)(T,{value:t.value||"",onChange:t.onChange}):(0,a.jsx)(g.T,{rows:8,placeholder:`{
105  "default": [200, 100],
106  "vip": [0, 1000]
107}`,className:"font-mono text-sm",...t})}),!k&&(0,a.jsx)(h.Rr,{children:(0,a.jsxs)("div",{className:"space-y-1 text-xs",children:[(0,a.jsx)("p",{className:"font-semibold",children:n("Format:")}),(0,a.jsxs)("ul",{className:"list-inside list-disc space-y-0.5 pl-2",children:[(0,a.jsxs)("li",{children:[n("JSON object:")," ",'{"groupName": [maxRequests, maxSuccess]}']}),(0,a.jsxs)("li",{children:[n("Example:")," ",'{"default": [200, 100], "vip": [0, 1000]}']}),(0,a.jsx)("li",{children:n("maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647")}),(0,a.jsx)("li",{children:n("Group config overrides global limits, shares the same period")})]})]})}),(0,a.jsx)(h.C5,{})]})}})]})})})}let O=o.Ik({CheckSensitiveEnabled:o.zM(),CheckSensitiveOnPromptEnabled:o.zM(),SensitiveWords:o.Yj().optional()});function L(e){let{defaultValues:t}=e,{t:n}=(0,d.Bd)(),o=(0,v.M)(),l=(0,r.mN)({resolver:(0,s.u)(O),defaultValues:t});(0,i.useEffect)(()=>{l.reset(t)},[t,l]);let c=async e=>{for(let[n,a]of Object.entries(e).filter(e=>{let[n,a]=e;return a!==t[n]}))await o.mutateAsync({key:n,value:a??""})};return(0,a.jsx)(b.X,{title:n("Sensitive Words"),children:(0,a.jsx)(h.lV,{...l,children:(0,a.jsxs)(f.yt,{onSubmit:l.handleSubmit(c),children:[(0,a.jsx)(y.S2,{onSave:l.handleSubmit(c),isSaving:o.isPending,saveLabel:"Save sensitive words"}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(h.zB,{control:l.control,name:"CheckSensitiveEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(f.H,{children:[(0,a.jsxs)(f.z$,{children:[(0,a.jsx)(h.lR,{children:n("Enable filtering")}),(0,a.jsx)(h.Rr,{children:n("Blocks messages when sensitive keywords are detected.")})]}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(m.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(h.zB,{control:l.control,name:"CheckSensitiveOnPromptEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(f.H,{children:[(0,a.jsxs)(f.z$,{children:[(0,a.jsx)(h.lR,{children:n("Inspect user prompts")}
107),(0,a.jsx)(h.Rr,{children:n("When enabled, prompts are scanned before reaching upstream models.")})]}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(m.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]}),(0,a.jsx)(h.zB,{control:l.control,name:"SensitiveWords",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:n("Blocked keywords")}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(g.T,{rows:12,placeholder:n("Enter one keyword per line"),...t})}),(0,a.jsx)(h.Rr,{children:n("Each line represents one keyword. Leave blank to disable the list but keep the switch states.")}),(0,a.jsx)(h.C5,{})]})}})]})})})}var E=n(36461),U=n(62036);let q=o.Ik({fetch_setting:o.Ik({enable_ssrf_protection:o.zM(),allow_private_ip:o.zM(),domain_filter_mode:o.zM(),ip_filter_mode:o.zM(),domain_list:o.Yj(),ip_list:o.Yj(),allowed_ports:o.Yj(),apply_ip_filter_for_domain:o.zM()})}),F=e=>e.split("\n").map(e=>e.trim()).filter(Boolean),_=e=>({fetch_setting:{enable_ssrf_protection:e["fetch_setting.enable_ssrf_protection"],allow_private_ip:e["fetch_setting.allow_private_ip"],domain_filter_mode:e["fetch_setting.domain_filter_mode"],ip_filter_mode:e["fetch_setting.ip_filter_mode"],domain_list:e["fetch_setting.domain_list"].join("\n"),ip_list:e["fetch_setting.ip_list"].join("\n"),allowed_ports:e["fetch_setting.allowed_ports"].join(","),apply_ip_filter_for_domain:e["fetch_setting.apply_ip_filter_for_domain"]}}),B=e=>({"fetch_setting.enable_ssrf_protection":e["fetch_setting.enable_ssrf_protection"],"fetch_setting.allow_private_ip":e["fetch_setting.allow_private_ip"],"fetch_setting.domain_filter_mode":e["fetch_setting.domain_filter_mode"],"fetch_setting.ip_filter_mode":e["fetch_setting.ip_filter_mode"],"fetch_setting.domain_list":e["fetch_setting.domain_list"],"fetch_setting.ip_list":e["fetch_setting.ip_list"],"fetch_setting.allowed_ports":e["fetch_setting.allowed_ports"],"fetch_setting.apply_ip_filter_for_domain":e["fetch_setting.apply_ip_filter_for_domain"]});function G(e){let{defaultValues:t}=e,{t:n}=(0,d.Bd)(),o=(0,v.M)(),l=(0,i.useRef)(B(t)),c=(0,i.useMemo)(()=>_(t),[t]),u=(0,r.mN)({resolver:(0,s.u)(q),defaultValues:c});(0,i.useEffect)(()=>{l.current=B(t),u.reset(_(t))},[t,u]);let x=async e=>{let t,a={"fetch_setting.enable_ssrf_protection":(t=e).fetch_setting.enable_ssrf_protection,"fetch_setting.allow_private_ip":t.fetch_setting.allow_private_ip,"fetch_setting.domain_filter_mode":t.fetch_setting.domain_filter_mode,"fetch_setting.ip_filter_mode":t.fetch_setting.ip_filter_mode,"fetch_setting.domain_list":F(t.fetch_setting.domain_list),"fetch_setting.ip_list":F(t.fetch_setting.ip_list),"fetch_setting.allowed_ports":t.fetch_setting.allowed_ports.split(",").map(e=>Number.parseInt(e.trim(),10)).filter(e=>Number.isFinite(e)),"fetch_setting.apply_ip_filter_for_domain":t.fetch_setting.apply_ip_filter_for_domain},i=Object.keys(a).filter(e=>{var t,n;return t=a[e],n=l.current[e],Array.isArray(t)&&Array.isArray(n)?JSON.stringify(t)!==JSON.stringify(n):t!==n});if(0===i.length)return void E.oR.info(n("No changes to save"));for(let e of i){let t=a[e];await o.mutateAsync({key:e,value:Array.isArray(t)?JSON.stringify(t):t})}l.current=a},k=u.watch("fetch_setting.domain_filter_mode"),C=u.watch("fetch_setting.ip_filter_mode");return(0,a.jsx)(b.X,{title:n("SSRF Protection"),children:(0,a.jsx)(h.lV,{...u,children:(0,a.jsxs)(f.yt,{onSubmit:u.handleSubmit(x),children:[(0,a.jsx)(y.S2,{onSave:u.handleSubmit(x),isSaving:o.isPending,saveLabel:"Save SSRF settings"}),(0,a.jsx)(h.zB,{control:u.control,name:"fetch_setting.enable_ssrf_protection",render:e=>{let{field:t}=e;return(0,a.jsxs)(f.H,{children:[(0,a.jsxs)(f.z$,{children:[(0,a.jsx)(h.lR,{children:n("Enable SSRF Protection")}),(0,a.jsx)(h.Rr,{children:n("Prevent server-side request forgery attacks")})]}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(m.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(h.zB,{control:u.control,name:"fetch_setting.allow_private_ip",render:e=>{let{field:t}=e;return(0,a.jsxs)(f.H,{children:[(0,a.jsxs)(f.z$,{children:[(0,a.jsx)(h.lR,{children:n("Allow Private IPs")}),(0,a.jsx)(h.Rr,{children:n("Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)")})]}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(m.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(h.zB,{control:u.control,name:"fetch_setting.domain_filter_mode",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:n("Domain Filter Mode")}),(0,a.jsxs)(U.l6,{items:[{value:"false",label:n("Blacklist (Block listed domains)")},{value:"true",label:n("Whitelist (Only allow listed domains)")}],onValueChange:e=>t.onChange("true"===e),value:t.value?"true":"false",children:[(0,a.jsx)(h.MJ,{children:(0,a.jsx)(U.bq,{children:(0,a.jsx)(U.yv,{})})}),(0,a.jsx)(U.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(U.s3,{children:[(0,a.jsx)(U.eb,{value:"false",children:n("Blacklist (Block listed domains)")}),(0,a.jsx)(U.eb,{value:"true",children:n("Whitelist (Only allow listed domains)")})]})})]}),(0,a.jsx)(h.Rr,{children:n("Choose how to filter domains")})]})}}),(0,a.jsx)(h.zB,{control:u.control,name:"fetch_setting.domain_list",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsxs)(h.lR,{children:[n("Domain")," ",k?n("Whitelist"):n("Blacklist")]}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(g.T,{placeholder:n("example.com&#10;blocked-site.com"),rows:4,...t})}),(0,a.jsx)(h.Rr,{children:n("One domain per line")}),(0,a.jsx)(h.C5,{})]})}}),(0,a.jsx)(h.zB,{control:u.control,name:"fetch_setting.ip_filter_mode",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:n("IP Filter Mode")}),(0,a.jsxs)(U.l6,{items:[{value:"false",label:n("Blacklist (Block listed IPs)")},{value:"true",label:n("Whitelist (Only allow listed IPs)")}],onValueChange:e=>t.onChange("true"===e),value:t.value?"true":"false",children:[(0,a.jsx)(h.MJ,{children:(0,a.jsx)(U.bq,{children:(0,a.jsx)(U.yv,{})})}),(0,a.jsx)(U.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(U.s3,{children:[(0,a.jsx)(U.eb,{value:"false",children:n("Blacklist (Block listed IPs)")}),(0,a.jsx)(U.eb,{value:"true",children:n("Whitelist (Only allow listed IPs)")})]})})]}),(0,a.jsx)(h.Rr,{children:n("Choose how to filter IP addresses")})]})}}),(0,a.jsx)(h.zB,{control:u.control,name:"fetch_setting.ip_list",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsxs)(h.lR,{children:[n("IP")," ",C?n("Whitelist"):n("Blacklist")]}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(g.T,{placeholder:n("192.168.1.1&#10;10.0.0.0/8"),rows:4,...t})}),(0,a.jsx)(h.Rr,{children:n("One IP or CIDR range per line")}),(0,a.jsx)(h.C5,{})]})}}),(0,a.jsx)(h.zB,{control:u.control,name:"fetch_setting.allowed_ports",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:n("Allowed Ports")}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(p.p,{placeholder:n("80,443,8080"),...t})}),(0,a.jsx)(h.Rr,{children:n("Comma-separated list of allowed ports (empty = all ports)")}),(0,a.jsx)(h.C5,{})]})}}),(0,a.jsx)(h.zB,{control:u.control,name:"fetch_setting.apply_ip_filter_for_domain",render:e=>{let{field:t}=e;return(0,a.jsxs)(f.H,{children:[(0,a.jsxs)(f.z$,{children:[(0,a.jsx)(h.lR,{children:n("Apply IP Filter to Resolved Domains")}),(0,a.jsx)(h.Rr,{children:n("Check resolved IPs against IP filters even when accessing by domain")})]}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(m.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})})})}var z=n(2099);let K=[{id:"rate-limit",titleKey:"Rate Limiting",build:e=>(0,a.jsx)(D,{defaultValues:{ModelRequestRateLimitEnabled:e.ModelRequestRateLimitEnabled,ModelRequestRateLimitCount:e.ModelRequestRateLimitCount,ModelRequestRateLimitSuccessCount:e.ModelRequestRateLimitSuccessCount,ModelRequestRateLimitDurationMinutes:e.ModelRequestRateLimitDurationMinutes,ModelRequestRateLimitGroup:e.ModelRequestRateLimitGroup}})},{id:"sensitive-words",titleKey:"Sensitive Words",build:e=>(0,a.jsx)(L,{defaultValues:{CheckSensitiveEnabled:e.CheckSensitiveEnabled,CheckSensitiveOnPromptEnabled:e.CheckSensitiveOnPromptEnabled,SensitiveWords:e.
107SensitiveWords}})},{id:"ssrf",titleKey:"SSRF Protection",build:e=>(0,a.jsx)(G,{defaultValues:{"fetch_setting.enable_ssrf_protection":e["fetch_setting.enable_ssrf_protection"],"fetch_setting.allow_private_ip":e["fetch_setting.allow_private_ip"],"fetch_setting.domain_filter_mode":e["fetch_setting.domain_filter_mode"],"fetch_setting.ip_filter_mode":e["fetch_setting.ip_filter_mode"],"fetch_setting.domain_list":e["fetch_setting.domain_list"],"fetch_setting.ip_list":e["fetch_setting.ip_list"],"fetch_setting.allowed_ports":e["fetch_setting.allowed_ports"],"fetch_setting.apply_ip_filter_for_domain":e["fetch_setting.apply_ip_filter_for_domain"]}})}],W=(0,z.h)({sections:K,defaultSection:"rate-limit",basePath:"/system-settings/security",urlStyle:"path"}),J=W.sectionIds,V=W.defaultSection,H=W.getSectionNavItems,$=W.getSectionContent,Q=W.getSectionMeta},63317(e,t,n){n.d(t,{O0:()=>_,$K:()=>F,ob:()=>G,gk:()=>z,o3:()=>B});var a=n(23579),i=n(66586),o=n(79159),r=n(72407),s=n(28082),l=n(40382),c=n(62036),d=n(69502),u=n(51028),h=n(75684),p=n(54548),m=n(38390),g=n(16728),f=n(37453),y=n(90770);function b(e){return null==e?"":"string"==typeof e?e:String(e)}function v(e){let{defaultValues:t}=e,{t:n}=(0,r.Bd)(),v=(0,y.M)(),x={theme:{frontend:t.theme?.frontend==="classic"?"classic":"default"},SystemName:b(t.SystemName),ServerAddress:b(t.ServerAddress),Logo:b(t.Logo),Footer:b(t.Footer),About:b(t.About),HomePageContent:b(t.HomePageContent),legal:{user_agreement:b(t.legal?.user_agreement),privacy_policy:b(t.legal?.privacy_policy)}},k=i.Ik({theme:i.Ik({frontend:i.k5(["default","classic"])}),SystemName:i.Yj().min(1,{error:()=>n("System name is required")}),ServerAddress:i.Yj().optional(),Logo:i.Yj().url().optional().or(i.eu("")),Footer:i.Yj().optional(),About:i.Yj().optional(),HomePageContent:i.Yj().optional(),legal:i.Ik({user_agreement:i.Yj().optional(),privacy_policy:i.Yj().optional()})}),{form:C,handleSubmit:S,handleReset:w,isDirty:A,isSubmitting:P}=(0,f.T)({resolver:(0,o.u)(k),defaultValues:x,onSubmit:async(e,t)=>{for(let[e,n]of Object.entries(t)){let t=b(n);"ServerAddress"===e&&(t=t.replace(/\/+$/,"")),await v.mutateAsync({key:e,value:t})}}});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(h.s,{when:A}),(0,a.jsx)(g.X,{title:n("System Information"),children:(0,a.jsx)(s.lV,{...C,children:(0,a.jsxs)(p.yt,{onSubmit:S,children:[(0,a.jsx)(m.S2,{onSave:S,onReset:w,isSaving:P||v.isPending,isResetDisabled:!A}),(0,a.jsx)(u._,{isDirty:A}),(0,a.jsxs)(p.K1,{children:[(0,a.jsx)(s.zB,{control:C.control,name:"theme.frontend",render:e=>{let{field:t}=e;return(0,a.jsxs)(s.eI,{children:[(0,a.jsx)(s.lR,{children:n("Frontend Theme")}),(0,a.jsxs)(c.l6,{items:[{value:"default",label:n("Default (New Frontend)")},{value:"classic",label:n("Classic (Legacy Frontend)")}],onValueChange:t.onChange,value:t.value,children:[(0,a.jsx)(s.MJ,{children:(0,a.jsx)(c.bq,{className:"w-full",children:(0,a.jsx)(c.yv,{})})}),(0,a.jsx)(c.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(c.s3,{children:[(0,a.jsx)(c.eb,{value:"default",children:n("Default (New Frontend)")}),(0,a.jsx)(c.eb,{value:"classic",children:n("Classic (Legacy Frontend)")})]})})]}),(0,a.jsx)(s.Rr,{children:n("Switch between the new frontend and the classic frontend. Changes take effect after page reload.")}),(0,a.jsx)(s.C5,{})]})}}),(0,a.jsx)(s.zB,{control:C.control,name:"SystemName",render:e=>{let{field:t}=e;return(0,a.jsxs)(s.eI,{children:[(0,a.jsx)(s.lR,{children:n("System Name")}),(0,a.jsx)(s.MJ,{children:(0,a.jsx)(l.p,{placeholder:n("New API"),...t})}),(0,a.jsx)(s.Rr,{children:n("The name displayed across the application")}),(0,a.jsx)(s.C5,{})]})}}),(0,a.jsx)(s.zB,{control:C.control,name:"ServerAddress",render:e=>{let{field:t}=e;return(0,a.jsxs)(s.eI,{children:[(0,a.jsx)(s.lR,{children:n("Server Address")}),(0,a.jsx)(s.MJ,{children:(0,a.jsx)(l.p,{placeholder:"https://yourdomain.com",...t})}),(0,a.jsx)(s.Rr,{children:n("The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations")}),(0,a.jsx)(s.C5,{})]})}}),(0,a.jsx)(s.zB,{control:C.control,name:"Logo",render:e=>{let{field:t}=e;return(0,a.jsxs)(s.eI,{children:[(0,a.jsx)(s.lR,{children:n("Logo URL")}),(0,a.jsx)(s.MJ,{children:(0,a.jsx)(l.p,{placeholder:n("https://example.com/logo.png"),...t})}
107),(0,a.jsx)(s.Rr,{children:n("URL to your logo image (optional)")}),(0,a.jsx)(s.C5,{})]})}}),(0,a.jsx)(s.zB,{control:C.control,name:"Footer",render:e=>{let{field:t}=e;return(0,a.jsxs)(s.eI,{children:[(0,a.jsx)(s.lR,{children:n("Footer")}),(0,a.jsx)(s.MJ,{children:(0,a.jsx)(d.T,{placeholder:n("© 2025 Your Company. All rights reserved."),rows:4,...t})}),(0,a.jsx)(s.Rr,{children:n("Footer text displayed at the bottom of pages")}),(0,a.jsx)(s.C5,{})]})}}),(0,a.jsx)(s.zB,{control:C.control,name:"About",render:e=>{let{field:t}=e;return(0,a.jsxs)(s.eI,{children:[(0,a.jsx)(s.lR,{children:n("About")}),(0,a.jsx)(s.MJ,{children:(0,a.jsx)(d.T,{placeholder:n("Enter HTML code (e.g., <p>About us...</p>) or a URL (e.g., https://example.com) to embed as iframe"),rows:4,...t})}),(0,a.jsx)(s.Rr,{children:n("Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.")}),(0,a.jsx)(s.C5,{})]})}}),(0,a.jsx)(p.vF,{span:"full",children:(0,a.jsx)(s.zB,{control:C.control,name:"HomePageContent",render:e=>{let{field:t}=e;return(0,a.jsxs)(s.eI,{children:[(0,a.jsx)(s.lR,{children:n("Home Page Content")}),(0,a.jsx)(s.MJ,{children:(0,a.jsx)(d.T,{placeholder:n("Welcome to our New API..."),rows:6,...t})}),(0,a.jsx)(s.Rr,{children:n("Content displayed on the home page (supports Markdown)")}),(0,a.jsx)(s.C5,{})]})}})}),(0,a.jsx)(s.zB,{control:C.control,name:"legal.user_agreement",render:e=>{let{field:t}=e;return(0,a.jsxs)(s.eI,{children:[(0,a.jsx)(s.lR,{children:n("User Agreement")}),(0,a.jsx)(s.MJ,{children:(0,a.jsx)(d.T,{placeholder:n("Provide Markdown, HTML, or an external URL for the user agreement"),rows:6,...t})}),(0,a.jsx)(s.Rr,{children:n("Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.")}),(0,a.jsx)(s.C5,{})]})}}),(0,a.jsx)(s.zB,{control:C.control,name:"legal.privacy_policy",render:e=>{let{field:t}=e;return(0,a.jsxs)(s.eI,{children:[(0,a.jsx)(s.lR,{children:n("Privacy Policy")}),(0,a.jsx)(s.MJ,{children:(0,a.jsx)(d.T,{placeholder:n("Provide Markdown, HTML, or an external URL for the privacy policy"),rows:6,...t})}),(0,a.jsx)(s.Rr,{children:n("Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.")}),(0,a.jsx)(s.C5,{})]})}})]})]})})})]})}i.Ik({theme:i.Ik({frontend:i.k5(["default","classic"])}),SystemName:i.Yj().min(1),ServerAddress:i.Yj().optional(),Logo:i.Yj().url().optional().or(i.eu("")),Footer:i.Yj().optional(),About:i.Yj().optional(),HomePageContent:i.Yj().optional(),legal:i.Ik({user_agreement:i.Yj().optional(),privacy_policy:i.Yj().optional()})});let x={home:!0,console:!0,pricing:{enabled:!0,requireAuth:!1},rankings:{enabled:!0,requireAuth:!1},docs:!0,about:!0},k={chat:{enabled:!0,playground:!0,chat:!0},console:{enabled:!0,detail:!0,token:!0,log:!0,midjourney:!0,task:!0},personal:{enabled:!0,topup:!0,personal:!0},admin:{enabled:!0,channel:!0,models:!0,redemption:!0,user:!0,setting:!0,subscription:!0}},C=(e,t)=>{if("boolean"==typeof e)return e;if("number"==typeof e)return 1===e;if("string"==typeof e){let t=e.trim().toLowerCase();if("true"===t||"1"===t)return!0;if("false"===t||"0"===t)return!1}return t},S=(e,t)=>"boolean"==typeof e||"string"==typeof e||"number"==typeof e?{enabled:C(e,t.enabled),requireAuth:t.requireAuth}:e&&"object"==typeof e?{enabled:C(e.enabled,t.enabled),requireAuth:C(e.requireAuth,t.requireAuth)}:{...t};function w(e){return JSON.stringify(e)}function A(e){return JSON.stringify(e)}var P=n(31371),j=n(32403),N=n(25920);let I=i.Ik({home:i.zM(),console:i.zM(),pricingEnabled:i.zM(),pricingRequireAuth:i.zM(),rankingsEnabled:i.zM(),rankingsRequireAuth:i.zM(),docs:i.zM(),about:i.zM()}),R=e=>({home:void 0===e.home?x.home:!!e.home,console:void 0===e.console?x.console:!!e.console,pricingEnabled:e.pricing?.enabled===void 0?x.pricing.enabled:!!e.pricing.enabled,pricingRequireAuth:e.pricing?.requireAuth===void 0?x.pricing.requireAuth:!!e.pricing.requireAuth,rankingsEnabled:e.rankings?.enabled===void 0?x.rankings.enabled:!!e.rankings.enabled,rankingsRequireAuth:e.rankings?.requireAuth===void 0?x.rankings.requireAuth:!!e.rankings.requireAuth,docs:void 0===e.docs?x.docs:!!e.docs,about:void 0===e.about?x.about:!!e.about});
107function T(e){let{config:t,initialSerialized:n}=e,{t:i}=(0,r.Bd)(),l=(0,y.M)(),c=(0,P.useMemo)(()=>R(t),[t]),d=(0,j.mN)({resolver:(0,o.u)(I),defaultValues:c});(0,P.useEffect)(()=>{d.reset(c)},[c,d]);let u=async e=>{let a=w({...t,home:e.home,console:e.console,docs:e.docs,about:e.about,pricing:{...t.pricing??x.pricing,enabled:e.pricingEnabled,requireAuth:e.pricingRequireAuth},rankings:{...t.rankings??x.rankings,enabled:e.rankingsEnabled,requireAuth:e.rankingsRequireAuth}});a!==n&&await l.mutateAsync({key:"HeaderNavModules",value:a})},h=[{key:"home",title:i("Home"),description:i("Landing page with system overview.")},{key:"console",title:i("Console"),description:i("User dashboard and quota controls.")},{key:"docs",title:i("Docs"),description:i("Documentation or external knowledge base.")},{key:"about",title:i("About"),description:i("Static page describing the platform.")}],f=[{enabledKey:"pricingEnabled",requireAuthKey:"pricingRequireAuth",requireAuthDependsOn:"pricingEnabled",title:i("Model Square"),description:i("Public model catalog and pricing page."),requireAuthTitle:i("Require login to view models"),requireAuthDescription:i("Visitors must authenticate before accessing the pricing directory.")},{enabledKey:"rankingsEnabled",requireAuthKey:"rankingsRequireAuth",requireAuthDependsOn:"rankingsEnabled",title:i("Rankings"),description:i("Public rankings page based on live usage data."),requireAuthTitle:i("Require login to view rankings"),requireAuthDescription:i("Visitors must authenticate before accessing the rankings page.")}];return(0,a.jsx)(g.X,{title:i("Header navigation"),children:(0,a.jsx)(s.lV,{...d,children:(0,a.jsxs)(p.yt,{onSubmit:d.handleSubmit(u),children:[(0,a.jsx)(m.S2,{onSave:d.handleSubmit(u),onReset:()=>{d.reset(R(x))},isSaving:l.isPending,resetLabel:"Reset to default",saveLabel:"Save navigation"}),(0,a.jsx)("div",{className:"grid gap-4 md:grid-cols-2",children:h.map(e=>(0,a.jsx)(s.zB,{control:d.control,name:e.key,render:t=>{let{field:n}=t;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(s.lR,{children:e.title}),(0,a.jsx)(s.Rr,{children:e.description})]}),(0,a.jsx)(s.MJ,{children:(0,a.jsx)(N.d,{checked:n.value,onCheckedChange:n.onChange})}),(0,a.jsx)(s.C5,{})]})}},e.key))}),(0,a.jsx)("div",{className:"grid gap-4 lg:grid-cols-2",children:f.map(e=>(0,a.jsxs)(p.WY,{children:[(0,a.jsx)(s.zB,{control:d.control,name:e.enabledKey,render:t=>{let{field:n}=t;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(s.lR,{children:e.title}),(0,a.jsx)(s.Rr,{children:e.description})]}),(0,a.jsx)(s.MJ,{children:(0,a.jsx)(N.d,{checked:n.value,onCheckedChange:n.onChange})}),(0,a.jsx)(s.C5,{})]})}}),(0,a.jsx)(s.zB,{control:d.control,name:e.requireAuthKey,render:t=>{let{field:n}=t;return(0,a.jsx)(p.KF,{children:(0,a.jsxs)(p.H,{className:"border-b-0 py-2",children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(s.lR,{children:e.requireAuthTitle}),(0,a.jsx)(s.Rr,{children:e.requireAuthDescription})]}),(0,a.jsx)(s.MJ,{children:(0,a.jsx)(N.d,{checked:n.value,onCheckedChange:n.onChange,disabled:!d.watch(e.requireAuthDependsOn)})}),(0,a.jsx)(s.C5,{})]})})}})]},e.enabledKey))})]})})})}let M=i.Ik({Notice:i.Yj().optional()});function D(e){let{defaultValue:t}=e,{t:n}=(0,r.Bd)(),i=(0,y.M)(),l=(0,j.mN)({resolver:(0,o.u)(M),defaultValues:{Notice:t??""}});(0,P.useEffect)(()=>{l.reset({Notice:t??""})},[t,l]);let c=async e=>{let n=e.Notice??"";n!==(t??"")&&await i.mutateAsync({key:"Notice",value:n})};return(0,a.jsx)(g.X,{title:n("System Notice"),children:(0,a.jsx)(s.lV,{...l,children:(0,a.jsxs)(p.yt,{onSubmit:l.handleSubmit(c),children:[(0,a.jsx)(m.S2,{onSave:l.handleSubmit(c),isSaving:i.isPending,saveLabel:"Save notice"}),(0,a.jsx)(s.zB,{control:l.control,name:"Notice",render:e=>{let{field:t}=e;return(0,a.jsxs)(s.eI,{children:[(0,a.jsx)(s.lR,{children:n("Announcement content")}),(0,a.jsx)(s.MJ,{children:(0,a.jsx)(d.T,{rows:8,placeholder:n("Planned maintenance on Friday at 22:00 UTC..."),...t})}),(0,a.jsx)(s.C5,{})]})}})]})})})}let O=e=>e.replace(/[_-]+/g," ").replace(/\b\w/g,e=>e.toUpperCase());function L(e){let{config:t,initialSerialized:n}=e,{t:i}=(0,r.Bd)(),o=(0,y.M)(),l={chat:{title:i("Chat area"),description:i("Playground experiments and live conversations.")}
107,console:{title:i("Console area"),description:i("Dashboards, tokens, and usage analytics.")},personal:{title:i("Personal area"),description:i("Wallet management and personal preferences.")},admin:{title:i("Admin area"),description:i("Global configuration and administrative tools.")}},c={chat:{playground:{title:i("Playground"),description:i("Experiment with prompts and models in real time.")},chat:{title:i("Chat"),description:i("Access previous conversations and start new ones.")}},console:{detail:{title:i("Dashboard"),description:i("Aggregated usage metrics and trend charts.")},token:{title:i("Token management"),description:i("Create, revoke, and audit API tokens.")},log:{title:i("Usage logs"),description:i("Detailed request logs for investigations.")},midjourney:{title:i("Drawing logs"),description:i("History of Midjourney-style image tasks.")},task:{title:i("Task logs"),description:i("Background job tracker for queued work.")}},personal:{topup:{title:i("Wallet"),description:i("Top up balance and view billing history.")},personal:{title:i("Profile"),description:i("Personal settings and profile management.")}},admin:{channel:{title:i("Channels"),description:i("Configure upstream providers and routing.")},models:{title:i("Models"),description:i("Manage catalog visibility and pricing.")},redemption:{title:i("Redeem codes"),description:i("Create and review invite or credit codes.")},user:{title:i("Users"),description:i("Administer user accounts and roles.")},setting:{title:i("System settings"),description:i("Advanced platform configuration.")},subscription:{title:i("Subscription Management"),description:i("Manage subscription plans and pricing.")}}},d=(0,P.useMemo)(()=>t,[t]),u=(0,j.mN)({defaultValues:d});(0,P.useEffect)(()=>{u.reset(d)},[d,u]);let h=async e=>{let t=A(e);t!==n&&await o.mutateAsync({key:"SidebarModulesAdmin",value:t})},f=Object.entries(t);return(0,a.jsx)(g.X,{title:i("Sidebar modules"),children:(0,a.jsx)(s.lV,{...u,children:(0,a.jsxs)(p.yt,{onSubmit:u.handleSubmit(h),children:[(0,a.jsx)(m.S2,{onSave:u.handleSubmit(h),onReset:()=>{u.reset(k)},isSaving:o.isPending,resetLabel:"Reset to default",saveLabel:"Save sidebar modules"}),f.map(e=>{let[t,n]=e,o=l[t]??{title:O(t),description:i("Custom sidebar section")},r=Object.entries(n).filter(e=>{let[t]=e;return"enabled"!==t});return(0,a.jsxs)(p.WY,{children:[(0,a.jsx)(s.zB,{control:u.control,name:`${t}.enabled`,render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(s.lR,{children:o.title}),(0,a.jsx)(s.Rr,{children:o.description})]}),(0,a.jsx)(s.MJ,{children:(0,a.jsx)(N.d,{checked:!!t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(p.KF,{className:"grid gap-3 md:grid-cols-2",children:r.map(e=>{let[n]=e,o=c[t]?.[n]??{title:O(n),description:i("Custom module")};return(0,a.jsx)(s.zB,{control:u.control,name:`${t}.${n}`,render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{className:"border-b-0 py-2",children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(s.lR,{children:o.title}),(0,a.jsx)(s.Rr,{children:o.description})]}),(0,a.jsx)(s.MJ,{children:(0,a.jsx)(N.d,{checked:!!n.value,onCheckedChange:n.onChange,disabled:!u.watch(`${t}.enabled`)})})]})}},`${t}.${n}`)})})]},t)})]})})})}var E=n(2099);let U=[{id:"system-info",titleKey:"System Information",build:e=>(0,a.jsx)(v,{defaultValues:{theme:{frontend:e["theme.frontend"]},SystemName:e.SystemName,Logo:e.Logo,Footer:e.Footer,About:e.About,HomePageContent:e.HomePageContent,ServerAddress:e.ServerAddress,legal:{user_agreement:e["legal.user_agreement"],privacy_policy:e["legal.privacy_policy"]}}})},{id:"notice",titleKey:"System Notice",build:e=>(0,a.jsx)(D,{defaultValue:e.Notice??""})},{id:"header-navigation",titleKey:"Header navigation",build:e=>{let t=function(e){let t={...x,pricing:{...x.pricing},rankings:{...x.rankings}};if(!e)return t;try{let n=JSON.parse(e),a={...t,pricing:{...t.pricing},rankings:{...t.rankings}};return Object.entries(n).forEach(e=>{let[n,i]=e;if("pricing"===n){a.pricing=S(i,t.pricing);return}if("rankings"===n){a.rankings=S(i,t.rankings);return}if("boolean"==typeof i){a[n]=i;return}if("string"==typeof i||"number"==typeof i){a[n]=C(i,!!t[n]);return}}),a}catch{return t}}(e.HeaderNavModules),n=w(t);return(0,a.jsx)(T,{config:t,initialSerialized:n})}},{id:"sidebar-modules",titleKey:"Sidebar modules",build:e=>{let t=function(e){let t=Object.entries(k).reduce((e,t)=>
107{let[n,a]=t;return e[n]={...a},e},{});if(!e||""===e.trim())return t;try{let n=JSON.parse(e),a={};return Object.entries(n).forEach(e=>{let[n,i]=e;if(!i||"object"!=typeof i)return;let o=t[n]??{enabled:!0},r={enabled:C(i.enabled,o.enabled??!0)};Object.entries(i).forEach(e=>{let[t,n]=e;"enabled"!==t&&(r[t]=C(n,o[t]??!0))}),a[n]=r}),Object.entries(t).forEach(e=>{let[t,n]=e;if(!a[t]){a[t]={...n};return}Object.entries(n).forEach(e=>{let[n,i]=e;n in a[t]||(a[t][n]=i)})}),a}catch{return t}}(e.SidebarModulesAdmin),n=A(t);return(0,a.jsx)(L,{config:t,initialSerialized:n})}}],q=(0,E.h)({sections:U,defaultSection:"system-info",basePath:"/system-settings/site",urlStyle:"path"}),F=q.sectionIds,_=q.defaultSection,B=q.getSectionNavItems,G=q.getSectionContent,z=q.getSectionMeta},7458(e,t,n){function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{fallback:n,silent:a=!1,context:i}=t;if(!e||""===e.trim())return n??null;let o=e.trim();try{return JSON.parse(o)}catch(e){return n??null}}function i(e,t){let{fallback:n,validator:i,validatorMessage:o,context:r,silent:s=!1}=t,l=a(e,{fallback:n,silent:!0,context:r});return i(l)?l:n}n.d(t,{Cz:()=>i,jD:()=>a})},47682(e,t,n){n.d(t,{},{LK:e=>"object"==typeof e&&null!==e&&!Array.isArray(e),cy:e=>Array.isArray(e)})},7906(e,t,n){function a(e){let t=e.value;return{value:"number"==typeof t&&Number.isFinite(t)?t:"",onChange:t=>{let n=t.target.valueAsNumber;Number.isFinite(n)&&e.onChange(n)},onBlur:e.onBlur,name:e.name,ref:e.ref}}n.d(t,{X:()=>a})},2099(e,t,n){function a(e){let{sections:t,defaultSection:n,basePath:a,urlStyle:i="query"}=e;function o(e){return t.find(t=>t.id===e)??t[0]}return{sectionIds:t.map(e=>e.id),defaultSection:n,getSectionNavItems:function(e){return t.map(t=>({title:e(t.titleKey),url:"path"===i?`${a}/${t.id}`:`${a}?section=${t.id}`}))},getSectionContent:function(e,t){for(var n=arguments.length,a=Array(n>2?n-2:0),i=2;i<n;i++)a[i-2]=arguments[i];return o(e).build(t,...a)},getSectionMeta:o}}n.d(t,{h:()=>a})},44625(e,t,n){let a=(0,n(2099).h)({sections:[{id:"common",titleKey:"Common Logs",build:()=>null},{id:"drawing",titleKey:"Drawing Logs",build:()=>null},{id:"task",titleKey:"Task Logs",build:()=>null}],defaultSection:"common",basePath:"/usage-logs",urlStyle:"path"}),i=a.sectionIds,o=a.defaultSection;function r(e){return i.includes(e)}a.getSectionNavItems,n.d(t,{Dk:()=>r},{Ck:o})},50221(e,t,n){let a={ALIPAY:"alipay",WECHAT:"wxpay",STRIPE:"stripe",CREEM:"creem",WAFFO:"waffo",WAFFO_PANCAKE:"waffo_pancake"},i=a.ALIPAY,o={[a.ALIPAY]:"#1677FF",[a.WECHAT]:"#07C160",[a.STRIPE]:"#635BFF",[a.CREEM]:"#6366F1",[a.WAFFO]:"#2563EB",[a.WAFFO_PANCAKE]:"#F97316"};n.d(t,{},{Ar:i,J1:a,mi:o,r0:[1,5,10,30,50,100,300,500]})},73(e,t,n){function a(e,t){return`${"EUR"===t?"€":"$"}${e.toFixed(2)}`}function i(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:e.toString()}function o(e){let t="number"==typeof e?e:Number.parseFloat(String(e));return Number.isFinite(t)?new Intl.NumberFormat(void 0,{minimumFractionDigits:0,maximumFractionDigits:Math.abs(t)>=1?2:4}).format(t):"-"}function r(e){if(e>=1)return"";let t=Math.round((1-e)*100);return`${t}% OFF`}function s(e,t,n){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,i=e*t,o=i*n;return{displayValue:e*a,originalPrice:i,actualPrice:o,savedAmount:i-o,hasDiscount:n<1}}n(50221),n.d(t,{Bg:()=>a,aE:()=>i,gU:()=>r,k:()=>s,vv:()=>o})},575(e,t,n){n.d(t,{d7:()=>a.d,Ub:()=>o}),n(21325),n(18016),n(17471);var a=n(37716),i=n(31371);function o(e){return(0,i.useSyncExternalStore)(t=>{if("u"<typeof window)return()=>{};let n=window.matchMedia(e);return n.addEventListener("change",t),()=>n.removeEventListener("change",t)},()=>"u">typeof window&&window.matchMedia(e).matches,()=>!1)}},2989(e,t,n){var a=n(31371),i=n(72407),o=n(36461),r=n(65868);function s(e){let{notify:t=!0,successMessage:n,errorMessage:s,resetAfterMs:l=2e3}=e||{},{t:c}=(0,i.Bd)(),[d,u]=(0,a.useState)(null),h=(0,a.useRef)(void 0);return(0,a.useEffect)(()=>()=>{h.current&&clearTimeout(h.current)},[]),{copiedText:d,copyToClipboard:(0,a.useCallback)(async e=>{let a=n??c("Copied to clipboard"),i=s??c("Failed to copy to clipboard");return await (0,r.l)(e)?(u(e),t&&o.oR.success(a),h.current&&clearTimeout(h.current),h.current=setTimeout(()=>{u(null)},l),!0):(console.warn("All copy methods failed"),t&&o.oR.error(i),u(null),!1)},[t,n,s,l,c])}}n.d(t,{C:()=>s})},37716(e,t,n){var a=n(31371);function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500,[n,i]=(0,a.useState)(e);return(0,a.useEffect)(()=>{let n=setTimeout(()=>{i(e)},t);return()=>{clearTimeout(n)}},[e,t]),n}n.d(t,{d:()=>i})},73163(e,t,n){var a=n(31371);function i(){let[e,t]=(0,a.useState)(new Set),n=(0,a.useCallback)(e=>{t(t=>{if(t.has(e))return t;let n=new Set(t);return n.add(e),n})},[]),i=(0,a.useCallback)(e=>{t(t=>{if(!t.has(e))return t;let n=new Set(t);return n.delete(e),n})},[]),o=(0,a.useCallback)(e=>{t(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),r=(0,a.useCallback)(()=>{t(e=>0===e.size?e:new Set)},[]),s=(0,a.useMemo)(()=>e.size>0,[e]);return(0,a.useMemo)(()=>({open:n,close:i,toggle:o,isOpen:t=>e.has(t),closeAll:r,hasAnyOpen:s}),[n,i,o,e,r,s])}n.d(t,{b9:()=>i},{Ay:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,[t,n]=(0,a.useState)(e),i=(0,a.useCallback)(()=>n(null),[]),o=(0,a.useMemo)(()=>({reset:i,isOpen:null!==t}),[t,i]);return[t,n,o]}})},30549(e,t,n){var a=n(31371);function i(){let[e,t]=a.useState(void 0);return a.useEffect(()=>{let e=window.matchMedia("(max-width: 767px)"),n=()=>{t(window.innerWidth<768)};return e.addEventListener("change",n),t(window.innerWidth<768),()=>e.removeEventListener("change",n)},[]),!!e}n.d(t,{a:()=>i})},17471(e,t,n){n.d(t,{E:()=>u});var a=n(31371),i=n(87985),o=n(20428),r=n(96573);let s=(0,o.v)()((0,r.Zr)((e,t)=>({lastReadNotice:"",readAnnouncementKeys:[],closedUntilDate:null,markNoticeRead:t=>{e({lastReadNotice:t.trim()})},markAnnouncementsRead:t=>{e(e=>({readAnnouncementKeys:[...new Set([...e.readAnnouncementKeys,...t])]}))},setClosedUntilDate:t=>{e({closedUntilDate:t})},isAnnouncementRead:e=>t().readAnnouncementKeys.includes(e),isNoticeClosed:()=>{let{closedUntilDate:e}=t();return!!e&&e===new Date().toDateString()}}),{name:"notification-storage",partialize:e=>({lastReadNotice:e.lastReadNotice,readAnnouncementKeys:e.readAnnouncementKeys,closedUntilDate:e.closedUntilDate})}));var l=n(82406),c=n(73405);function d(e){if(!e)return"";if(void 0!==e.id&&null!==e.id)return`id:${e.id}`;let t=JSON.stringify({publishDate:e?.publishDate||"",content:(e?.content||"").trim(),extra:(e?.extra||"").trim(),type:e?.type||"",title:(e?.title||"").trim(),link:(e?.link||"").trim()});return`hash:${function(e){let t=0;if(!e)return"0";for(let n=0;n<e.length;n+=1)t=(t<<5)-t+e.charCodeAt(n)|0;return t.toString(36)}(t)}`}function u(){let[e,t]=(0,a.useState)(!1),[n,o]=(0,a.useState)("notice"),{data:r,isLoading:u,refetch:h}=(0,i.I)({queryKey:["notice"],queryFn:l.jU,staleTime:3e5}),{status:p,loading:m}=(0,c.s)(),g=p?.announcements_enabled?(p?.announcements||[]).slice(0,20):[],{lastReadNotice:f,markNoticeRead:y,markAnnouncementsRead:b,isAnnouncementRead:v}=s(),x=r?.success?(r.data||"").trim():"",k=(0,a.useMemo)(()=>{let e=x&&x!==f?1:0,t=g.filter(e=>!v(d(e))).length;return{notice:e,announcements:t,total:e+t}},[x,f,g,v]),C=()=>{g.length>0&&b(g.map(e=>d(e)))},S=e=>{let a=e||n;x&&y(x),"announcements"===a&&C(),o(a),t(!0)};return{notice:x,announcements:g,loading:u||m,unreadCount:k.total,unreadNoticeCount:k.notice,unreadAnnouncementsCount:k.announcements,popoverOpen:e,setPopoverOpen:e=>{e?S(n):t(!1)},activeTab:n,setActiveTab:e=>{o(e),"announcements"===e&&C()},openPopover:S,closePopover:()=>t(!1),refetchNotice:h}}},19858(e,t,n){var a=n(31371),i=n(1855),o=n(73405);let r={chat:{enabled:!0,playground:!0,chat:!0},console:{enabled:!0,detail:!0,token:!0,log:!0,midjourney:!0,task:!0},personal:{enabled:!0,topup:!0,personal:!0},admin:{enabled:!0,channel:!0,models:!0,redemption:!0,user:!0,setting:!0,subscription:!0}
107},s={"/playground":{section:"chat",module:"playground"},"/dashboard":{section:"console",module:"detail"},"/dashboard/overview":{section:"console",module:"detail"},"/dashboard/models":{section:"console",module:"detail"},"/dashboard/users":{section:"console",module:"detail"},"/keys":{section:"console",module:"token"},"/usage-logs":{section:"console",module:"log"},"/usage-logs/common":{section:"console",module:"log"},"/usage-logs/drawing":{section:"console",module:"midjourney"},"/usage-logs/task":{section:"console",module:"task"},"/wallet":{section:"personal",module:"topup"},"/profile":{section:"personal",module:"personal"},"/channels":{section:"admin",module:"channel"},"/models":{section:"admin",module:"models"},"/models/metadata":{section:"admin",module:"models"},"/models/deployments":{section:"admin",module:"models"},"/users":{section:"admin",module:"user"},"/redemption-codes":{section:"admin",module:"redemption"},"/subscriptions":{section:"admin",module:"subscription"},"/system-settings":{section:"admin",module:"setting"},"/system-settings/site":{section:"admin",module:"setting"}};function l(e,t,n){let a=s[e];if(!a)return!0;let{section:i,module:o}=a,r=t[i];if(!(r&&r.enabled&&!0===r[o]))return!1;if(!n)return!0;let l=n[i];return!l||!1!==l.enabled&&!1!==l[o]}function c(e){let{status:t}=(0,o.s)(),{auth:n}=(0,i.n)(),s=(0,a.useMemo)(()=>(function(e){if(!e||""===e.trim())return r;try{let t;return t={...JSON.parse(e)},Object.entries(r).forEach(e=>{let[n,a]=e,i=t[n];if(!i){t[n]={...a};return}t[n]={...a,...i},Object.keys(a).forEach(e=>{void 0===t[n][e]&&(t[n][e]=a[e])})}),t}catch{return console.error("Failed to parse sidebar modules configuration"),r}})(t?.SidebarModulesAdmin),[t?.SidebarModulesAdmin]),c=(0,a.useMemo)(()=>{if(n?.user?.permissions?.sidebar_settings===!1)return null;var e=n?.user?.sidebar_modules;if(!e||""===e.trim())return null;try{let t=JSON.parse(e);if(!t||"object"!=typeof t)return null;return t}catch{return null}},[n?.user?.permissions?.sidebar_settings,n?.user?.sidebar_modules]);return(0,a.useMemo)(()=>e.map(e=>{var t;return{...e,items:(t=e.items,t.map(e=>{if("items"in e&&e.items){let t=e.items.filter(e=>l(e.url,s,c));return{...e,items:t}}return e}).filter(e=>(function(e,t,n){if("type"in e&&"chat-presets"===e.type){let e=t.chat;if(!(e?.enabled&&!0===e.chat))return!1;if(!n)return!0;let a=n.chat;return!a||!1!==a.enabled&&!1!==a.chat}return"url"in e&&e.url?(e.configUrls??[e.url]).some(e=>l(e,t,n)):!("items"in e)||!e.items||e.items.some(e=>l(e.url,t,n))})(e,s,c)))}}).filter(e=>e.items.length>0),[e,s,c])}n.d(t,{K:()=>c})},88720(e,t,n){var a=n(64866),i=n(31374),o=n(42374),r=n(59656),s=n(90734),l=n(40977),c=n(19710),d=n(56726),u=n(21228),h=n(51294),p=n(55068),m=n(36379),g=n(50021),f=n(73349),y=n(36666),b=n(72407);function v(){let{t:e}=(0,b.Bd)();return{navGroups:[{id:"chat",title:e("Chat"),items:[{title:e("Playground"),url:"/playground",icon:a.A},{title:e("Chat"),icon:i.A,type:"chat-presets"}]},{id:"general",title:e("General"),items:[{title:e("Overview"),url:"/dashboard/overview",icon:o.A},{title:e("Dashboard"),url:"/dashboard/models",icon:r.A},{title:e("API Keys"),url:"/keys",icon:s.A},{title:e("Usage Logs"),url:"/usage-logs/common",icon:l.A},{title:e("Task Logs"),url:"/usage-logs/task",activeUrls:["/usage-logs/drawing"],configUrls:["/usage-logs/drawing","/usage-logs/task"],icon:c.A}]},{id:"personal",title:e("Personal"),items:[{title:e("Wallet"),url:"/wallet",icon:d.A},{title:e("Profile"),url:"/profile",icon:u.A}]},{id:"admin",title:e("Admin"),items:[{title:e("Channels"),url:"/channels",icon:h.A},{title:e("Models"),url:"/models/metadata",icon:p.A},{title:e("Users"),url:"/users",icon:m.A},{title:e("Redemption Codes"),url:"/redemption-codes",icon:g.A},{title:e("Subscription Management"),url:"/subscriptions",icon:f.A},{title:e("System Settings"),url:"/system-settings/site",activeUrls:["/system-settings"],icon:y.A}]}]}}n.d(t,{k:()=>v})},73405(e,t,n){var a=n(87985),i=n(89131),o=n(82406),r=n(21325);function s(){let{data:e,isLoading:t,error:n}=(0,a.I)({queryKey:["status"],queryFn:async()=>{let e=await (0,o.BS)();try{if(e){let{setConfig:t}=i.Eh.getState();t((0,r.a)(e))}}catch(e){}try{"u">typeof window&&e&&window.localStorage.setItem("status",JSON.stringify(e))}catch{}return e},placeholderData:function(){try{if("u">typeof window){let e=window.localStorage.getItem("status");return e?JSON.parse(e):void 0}}catch{}}(),staleTime:3e5,gcTime:18e5});return{status:e??null,loading:t,error:n}}n.d(t,{s:()=>s})},21325(e,t,n){var a=n(31371),i=n(89131),o=n(7411),r=n(15678);function s(e,t){if("number"==typeof e&&!Number.isNaN(e))return e;if("string"==typeof e){let t=Number(e);if(!Number.isNaN(t))return t}return t}function l(e){if(!e)return{};
107let t=e.quota_display_type??i.tV.quotaDisplayType,n={displayInCurrency:e.display_in_currency??i.tV.displayInCurrency,quotaDisplayType:t,quotaPerUnit:s(e.quota_per_unit,i.tV.quotaPerUnit),usdExchangeRate:s(e.usd_exchange_rate,i.tV.usdExchangeRate),customCurrencySymbol:e.custom_currency_symbol?.trim()||i.tV.customCurrencySymbol,customCurrencyExchangeRate:s(e.custom_currency_exchange_rate,i.tV.customCurrencyExchangeRate)};return{systemName:e.system_name||o.It,logo:e.logo||o.Gs,footerHtml:e.footer_html,demoSiteEnabled:e.demo_site_enabled,displayTokenStatEnabled:e.display_token_stat_enabled,currency:n}}async function c(){let e=await fetch("/api/status");if(!e.ok)throw Error("Failed to fetch status");let t=await e.json();if(!t.success)throw Error("API returned error");return l(t.data)}function d(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{autoLoad:t=!1}=e,{config:n,loading:s,loadedLogoUrl:l,setConfig:d,setLoadedLogoUrl:u,setLoading:h}=(0,i.Eh)(),p=(0,a.useCallback)(async()=>{try{h(!0);let e=await c();d(e)}catch(e){console.error("Failed to load system config:",e)}finally{h(!1)}},[d,h]);return(0,a.useEffect)(()=>{t&&p()},[t,p]),(0,a.useEffect)(()=>{let{logo:e}=n;if(e&&e!==l){var t,a;let n;return t=()=>{u(e),(0,r.K)(e)},a=()=>{e!==o.Gs&&console.error("Failed to load logo:",e),u(e)},(n=new Image).onload=t,n.onerror=a,n.src=e,()=>{n.onload=null,n.onerror=null}}},[n.logo,l,u]),{...n,loading:s,logoLoaded:n.logo===l&&!!l}}n.d(t,{R:()=>d,a:()=>l})},18016(e,t,n){var a=n(31371),i=n(72407),o=n(1855),r=n(50659),s=n(73405);function l(){let{t:e}=(0,i.Bd)(),{status:t}=(0,s.s)(),{auth:n}=(0,o.n)(),l=(0,a.useMemo)(()=>(0,r.L1)(t),[t]),c=t?.docs_link,d=!!n?.user,u=[];l?.home!==!1&&u.push({title:e("Home"),href:"/"}),l?.console!==!1&&u.push({title:e("Console"),href:"/dashboard"});let h=l?.pricing;if(h&&"object"==typeof h&&h.enabled){let t=h.requireAuth&&!d;u.push({title:e("Model Square"),href:"/pricing",requiresAuth:t})}let p=l?.rankings;if(p&&"object"==typeof p&&p.enabled){let t=p.requireAuth&&!d;u.push({title:e("Rankings"),href:"/rankings",requiresAuth:t})}return l?.docs!==!1&&(c?u.push({title:e("Docs"),href:c,external:!0}):u.push({title:e("Docs"),href:"/docs"})),l?.about!==!1&&u.push({title:e("About"),href:"/about"}),u}n.d(t,{v:()=>l})},86975(e,t,n){var a=n(31371),i=n(72407),o=n(93919);function r(e){let{t}=(0,i.Bd)();return(0,a.useMemo)(()=>{if(!e)return{displayName:t("User"),secondaryText:"",initials:"U",roleLabel:""};let n=e.display_name||e.username||t("User"),a=e.email?e.email:e.github_id?`GitHub ID: ${e.github_id}`:e.oidc_id?`OIDC ID: ${e.oidc_id}`:e.wechat_id?`WeChat ID: ${e.wechat_id}`:e.telegram_id?`Telegram ID: ${e.telegram_id}`:e.linux_do_id?`LinuxDO ID: ${e.linux_do_id}`:e.username?e.username:e.display_name?e.display_name:"",i=n.split(" ").map(e=>e[0]).join("").toUpperCase().slice(0,2);return{displayName:n,secondaryText:a,initials:i,roleLabel:(0,o.d9)(e.role)}},[e,t])}n.d(t,{F:()=>r})},40028(e,t,n){let a=[{code:"zh",label:"简体中文"},{code:"en",label:"English"},{code:"fr",label:"Français"},{code:"ru",label:"Русский"},{code:"ja",label:"日本語"},{code:"vi",label:"Tiếng Việt"}];function i(e){if(!e)return"en";let t=e.trim().replace(/_/g,"-").toLowerCase();return t.startsWith("zh")?"zh":a.some(e=>e.code===t)?t:"en"}n.d(t,{L:()=>i},{i:a})},82406(e,t,n){var a=n(81927),i=n(65172),o=n(36461),r=n(1855);let s=a.A.create({baseURL:"",withCredentials:!0,headers:{"Cache-Control":"no-store"}}),l=new Map,c=s.get.bind(s);function d(){try{if("u">typeof window)return window.localStorage.getItem("uid")}catch{}return null}function u(){let e={"Content-Type":"application/json"},t=d();return t&&(e["New-Api-User"]=t),e}async function h(){return(await s.get("/api/user/self",{skipErrorHandler:!0})).data}async function p(){return(await s.get("/api/user/models")).data}async function m(){return(await s.get("/api/user/self/groups")).data}async function g(){let e=await s.get("/api/status");return e.data?.data}async function f(){return(await s.get("/api/notice")).data}async function y(){return(await s.get("/api/user/2fa/status")).data}async function b(){return(await s.post("/api/user/2fa/setup")).data}async function v(e){return(await s.post("/api/user/2fa/enable",{code:e})).data}async function x(e){return(await s.post("/api/user/2fa/disable",{code:e})).data}async function k(e){return(await s.post("/api/user/2fa/backup_codes",{code:e})).data}s.get=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t.disableDuplicate)return c(e,t);let n=t.params?JSON.stringify(t.params):"{}",a=`${e}?${n}`;if(l.has(a))return l.get(a);let i=c(e,t).finally(()=>l.delete(a));return l.set(a,i),i},s.interceptors.response.use(e=>{if(!e.config.skipBusinessError&&e&&e.data&&"boolean"==typeof e.data.success&&!e.data.success){let t=e.data.message||(0,i.t)("Request failed");o.oR.error(t)}return e},e=>{let t=e?.config?.skipErrorHandler;if(401===e?.response?.status){try{r.n.getState().auth.reset()}catch{}t||o.oR.error((0,i.t)("Session expired!"))}else if(!t){let t=e?.response?.data?.message||e?.message||(0,i.t)("Request failed");o.oR.error(t)}return Promise.reject(e)}),s.interceptors.request.use(e=>{let t=d();return t&&(e.headers["New-Api-User"]=t),e}),n.d(t,{Ac:()=>k,BS:()=>g,D$:()=>b,K4:()=>m,Ng:()=>h,Pr:()=>v,QK:()=>p,Ql:()=>u,jU:()=>f,m7:()=>x,sv:()=>y},{FH:s})}
107,56077(e,t,n){function a(e){let t=function(e){let t=0;for(let n=0;n<e.length;n++)t=31*t+e.charCodeAt(n)>>>0;return t}(e);return{backgroundColor:`hsl(${t%360} ${54+t%8}% ${52+(t>>4)%8}% / 0.82)`,color:"white"}}function i(e){return e.trim().charAt(0).toUpperCase()||"?"}n.d(t,{f:()=>i,u:()=>a})},8208(e,t,n){let a={blue:"bg-blue-500",green:"bg-green-500",cyan:"bg-cyan-500",purple:"bg-purple-500",pink:"bg-pink-500",red:"bg-red-500",orange:"bg-orange-500",amber:"bg-amber-500",yellow:"bg-yellow-500",lime:"bg-lime-500","light-green":"bg-green-400",teal:"bg-teal-500","light-blue":"bg-sky-400",indigo:"bg-indigo-500",violet:"bg-violet-500",grey:"bg-gray-400",slate:"bg-slate-500"};function i(e){return e&&a[e]||a.blue}let o={default:"bg-neutral",ongoing:"bg-info",success:"bg-success",warning:"bg-warning",error:"bg-destructive"};function r(e){return o[e||"default"]||o.default}let s=["amber","blue","cyan","green","grey","indigo","light-blue","lime","orange","pink","purple","red","teal","violet","yellow"];function l(e){let t=0;for(let n=0;n<e.length;n++)t+=e.charCodeAt(n);let n=t%s.length;return s[n]}n.d(t,{Hl:()=>i,qA:()=>l,zv:()=>r})},7411(e,t,n){n.d(t,{},{Gs:"/logo.png",It:"New API"})},53693(e,t,n){function a(e){if("u"<typeof document)return;let t=`; ${document.cookie}`.split(`; ${e}=`);if(2===t.length)return t.pop()?.split(";").shift()}function i(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:604800;"u">typeof document&&(document.cookie=`${e}=${t}; path=/; max-age=${n}`)}function o(e){"u">typeof document&&(document.cookie=`${e}=; path=/; max-age=0`)}n.d(t,{Ri:()=>a,TV:()=>i,zs:()=>o})},65868(e,t,n){function a(e){let t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.left="-999999px",t.style.top="-999999px",t.style.opacity="0",t.setAttribute("readonly",""),document.body.appendChild(t);try{t.focus(),t.select();let n=document.createRange();n.selectNodeContents(t);let a=window.getSelection();a&&(a.removeAllRanges(),a.addRange(n)),t.setSelectionRange(0,e.length);let i=document.execCommand("copy");document.body.removeChild(t);let o=window.getSelection();return o&&o.removeAllRanges(),i}catch(e){return console.error("Fallback copy failed:",e),document.body.removeChild(t),!1}}async function i(e){if("u"<typeof window||"u"<typeof document)return!1;if(!navigator?.clipboard?.writeText)return a(e);try{return await navigator.clipboard.writeText(e),!0}catch(t){return console.warn("Clipboard API failed, trying fallback method:",t),a(e)}}n.d(t,{l:()=>i})},54679(e,t,n){var a=n(89131);let i={digitsLarge:2,digitsSmall:4,abbreviate:!0,minimumNonZero:0},o=["USD","CNY","TOKENS","CUSTOM"];function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"USD";return"string"==typeof e&&o.includes(e)?e:t}function s(e){switch(e.quotaDisplayType){case"CNY":return{kind:"currency",symbol:"Â¥",currencyCode:"CNY",exchangeRate:e.usdExchangeRate};case"CUSTOM":return{kind:"custom",symbol:e.customCurrencySymbol,exchangeRate:e.customCurrencyExchangeRate};case"TOKENS":return{kind:"tokens",quotaPerUnit:e.quotaPerUnit};default:return{kind:"currency",symbol:"$",currencyCode:"USD",exchangeRate:1}}}function l(e){let t=s(e);return"tokens"===t.kind?{kind:"currency",symbol:"$",currencyCode:"USD",exchangeRate:1}:t}function c(e){return e?{digitsLarge:e.digitsLarge??i.digitsLarge,digitsSmall:e.digitsSmall??i.digitsSmall,abbreviate:e.abbreviate??i.abbreviate,minimumNonZero:e.minimumNonZero??i.minimumNonZero}:i}function d(e){return e.includes(".")?e.replace(/(\.[0-9]*?)0+$/,"$1").replace(/\.$/,""):e}function u(e,t,n,a){let i=Math.abs(e);return a&&i>=1e3?d((e/1e3).toFixed(1))+"k":d(e.toFixed(i>=1?t:n))}function h(e,t,n){if("tokens"===n.kind)return u(e,t.digitsLarge,t.digitsSmall,t.abbreviate);let a=Math.abs(e)>=1?t.digitsLarge:t.digitsSmall,i=function(e,t,n){if(0===e)return e;let a=n>0?n:Math.pow(10,-t),i=Math.abs(e);return i>0&&i<a?e>0?a:-a:e}(e,a,t.minimumNonZero);if("currency"===n.kind)return new Intl.NumberFormat(void 0,{style:"currency",currency:n.currencyCode,currencyDisplay:"narrowSymbol",minimumFractionDigits:0,maximumFractionDigits:a}).format(i);let o=new Intl.NumberFormat(void 0,{minimumFractionDigits:0,maximumFractionDigits:a}).format(i);return`${n.symbol} ${o}`}function p(){let e=function(){let{config:e}=a.Eh.getState(),t=e?.currency??a.tV;return{...a.tV,...t,quotaPerUnit:t?.quotaPerUnit&&t.quotaPerUnit>0?t.quotaPerUnit:a.tV.quotaPerUnit,usdExchangeRate:t?.usdExchangeRate&&t.usdExchangeRate>0?t.usdExchangeRate:a.tV.usdExchangeRate,customCurrencyExchangeRate:t?.customCurrencyExchangeRate&&t.customCurrencyExchangeRate>0?t.customCurrencyExchangeRate:a.tV.customCurrencyExchangeRate,customCurrencySymbol:t?.customCurrencySymbol?.trim()||a.tV.customCurrencySymbol}}(),t=s(e);return{config:e,meta:t}}function m(e,t){if(null==e||Number.isNaN(e))return"-";let{config:n,meta:a}=p(),i=c(t);
107return"tokens"===a.kind?u(e*n.quotaPerUnit,0,i.digitsSmall,i.abbreviate):h((a.kind,e*a.exchangeRate),i,a)}function g(e,t){if(null==e||Number.isNaN(e))return"-";let{config:n}=p(),a=l(n),i=c(t);return h("currency"===a.kind||"custom"===a.kind?e*a.exchangeRate:e,i,a)}function f(e,t){if(null==e||Number.isNaN(e))return"-";let{config:n}=p();return m(e/n.quotaPerUnit,t)}function y(){let{config:e,meta:t}=p();if("tokens"===t.kind)return"Tokens";switch(e.quotaDisplayType){case"CNY":return"CNY";case"CUSTOM":return"custom"===t.kind?t.symbol:"Custom";default:return"USD"}}function b(){let{meta:e}=p();return"tokens"!==e.kind}function v(e,t){if(null==e||Number.isNaN(e))return"-";let{config:n}=p(),a=l(n);return h(e,c(t),a)}n.d(t,{AM:()=>g,J5:()=>m,LC:()=>r,QO:()=>v,cw:()=>p,rP:()=>f,yz:()=>y,zj:()=>b})},21683(e,t,n){var a=n(67714),i=n.n(a),o=n(12488),r=n.n(o);i().extend(r());let s=i();n.d(t,{},{A:s})},15678(e,t,n){function a(e){if("u">typeof document&&e)try{let t=new URL(e,window.location.href).href,n=document.querySelectorAll('link[rel~="icon"]');if(1===n.length&&n[0].href===t)return;let a=document.createElement("link");a.rel="icon",a.href=e,n.forEach(e=>e.remove()),document.head.appendChild(a)}catch{}}n.d(t,{K:()=>a})},76867(e,t,n){var a=n(21683),i=n(54679);function o(e){return null==e||Number.isNaN(e)?"-":Intl.NumberFormat(void 0,{maximumFractionDigits:2}).format(e)}function r(e){return null==e||Number.isNaN(e)?"-":Intl.NumberFormat(void 0,{notation:"compact",maximumFractionDigits:1}).format(e)}function s(e){return(0,i.rP)(e,{digitsLarge:2,digitsSmall:4,abbreviate:!0})}function l(e){if(!Number.isFinite(e))return 0;let{config:t,meta:n}=(0,i.cw)();if("tokens"===n.kind)return Math.round(e);let a="currency"===n.kind||"custom"===n.kind?n.exchangeRate:1;return Math.round((a>0?e/a:e)*t.quotaPerUnit)}function c(e){let{config:t,meta:n}=(0,i.cw)();return"tokens"===n.kind?e:e/t.quotaPerUnit*("currency"===n.kind||"custom"===n.kind?n.exchangeRate:1)}function d(e){return -1===e?"Never":u(e)}function u(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"seconds";return e&&-1!==e&&0!==e?(0,a.A)("seconds"===t?1e3*e:e).format("YYYY-MM-DD HH:mm:ss"):"-"}function h(e){return(0,i.rP)(e,{digitsLarge:4,digitsSmall:6,abbreviate:!1})}function p(e){return 0===e?"-":e<1e3?e.toString():e<1e6?`${(e/1e3).toFixed(1)}K`:`${(e/1e6).toFixed(2)}M`}function m(e){if(e<60)return`${e.toFixed(1)}s`;let t=Math.floor(e/60),n=e%60;return`${t}m ${n.toFixed(0)}s`}n.d(t,{Ey:()=>d,KK:()=>m,Sh:()=>c,ZV:()=>o,_y:()=>p,dD:()=>l,eN:()=>s,fk:()=>u,qW:()=>h,wk:()=>r})},42454(e,t,n){let a=[.33,1,.68,1],i={default:{duration:.25,ease:a},fast:{duration:.15,ease:a},slow:{duration:.35,ease:a},spring:{type:"spring",damping:20,stiffness:300},none:{duration:0}},o={initial:{opacity:0,y:8},animate:{opacity:1,y:0,transition:i.default}};i.fast;let r={initial:{opacity:0,y:12,scale:.98},animate:{opacity:1,y:0,scale:1,transition:i.default}};i.fast,n.d(t,{},{AK:{initial:{},animate:{transition:{staggerChildren:.05}}},DX:o,fI:i,j0:{initial:{},animate:{transition:{staggerChildren:.04}}},mL:{pageEnter:{initial:{opacity:0,y:8,filter:"blur(4px)"},animate:{opacity:1,y:0,filter:"blur(0px)"},exit:{opacity:0,y:-4,filter:"blur(2px)"}},fadeIn:{initial:{opacity:0}
107,animate:{opacity:1},exit:{opacity:0}},scaleIn:{initial:{opacity:0,scale:.96},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.96}},slideUp:{initial:{opacity:0,y:16},animate:{opacity:1,y:0},exit:{opacity:0,y:16}},slideDown:{initial:{opacity:0,y:-16},animate:{opacity:1,y:0},exit:{opacity:0,y:-16}},tableRow:{initial:{opacity:0,y:4},animate:{opacity:1,y:0}},cardItem:{initial:{opacity:0,y:12,scale:.98},animate:{opacity:1,y:0,scale:1}},sidebarSlide:{initial:{opacity:0,x:-8},animate:{opacity:1,x:0},exit:{opacity:0,x:-8}}},mz:r})},50659(e,t,n){var a=n(82406);let i={home:!0,console:!0,pricing:{enabled:!0,requireAuth:!1},rankings:{enabled:!0,requireAuth:!1},docs:!0,about:!0},o={pricing:i.pricing,rankings:i.rankings};function r(e,t){if("boolean"==typeof e)return e;if("number"==typeof e)return 1===e||0!==e&&t;if("string"==typeof e){let t=e.trim().toLowerCase();if("true"===t||"1"===t)return!0;if("false"===t||"0"===t)return!1}return t}function s(e,t){return"boolean"==typeof e||"number"==typeof e||"string"==typeof e?{enabled:r(e,t.enabled),requireAuth:t.requireAuth}:e&&"object"==typeof e?{enabled:r(e.enabled,t.enabled),requireAuth:r(e.requireAuth,t.requireAuth)}:{...t}}function l(e){var t;let n,a;return t=e?.HeaderNavModules,n={...i,pricing:{...i.pricing},rankings:{...i.rankings}},(a=function(e){if(!e||""===String(e).trim())return null;if(e&&"object"==typeof e)return e;try{return JSON.parse(String(e))}catch{return null}}(t))&&Object.entries(a).forEach(e=>{let[t,a]=e;if("pricing"===t){n.pricing=s(a,n.pricing);return}if("rankings"===t){n.rankings=s(a,n.rankings);return}let i=n[t];("boolean"==typeof i||"boolean"==typeof a||"number"==typeof a||"string"==typeof a)&&(n[t]=r(a,"boolean"!=typeof i||i))}),n}async function c(e){try{let t=await (0,a.BS)();try{"u">typeof window&&t&&window.localStorage.setItem("status",JSON.stringify(t))}catch{}return l(t)[e]??o[e]}catch{return{enabled:!1,requireAuth:!0}}}function d(e,t){let n=function(){try{if("u"<typeof window)return null;let e=window.localStorage.getItem("status");return e?JSON.parse(e):null}catch{return null}}();if(!n)return!0;let a=n.SidebarModulesAdmin;if(!a||""===String(a).trim())return!0;try{let n=JSON.parse(String(a))[e];if(!n)return!0;if(!1===n.enabled||!1===n[t])return!1;return!0}catch{return!0}}n.d(t,{L1:()=>l,PI:()=>c,QT:()=>d})},93919(e,t,n){var a=n(65172);let i={GUEST:0,USER:1,ADMIN:10,SUPER_ADMIN:100},o=i.GUEST,r={[i.SUPER_ADMIN]:"Super Admin",[i.ADMIN]:"Admin",[i.USER]:"User",[i.GUEST]:"Guest"};function s(e){return(0,a.t)(r[e]??r[o])}n.d(t,{d9:()=>s},{z7:i})},84223(e,t,n){let a=[{value:"default",name:"Default",swatches:["oklch(0.13 0 0)","oklch(0.95 0 0)"]},{value:"anthropic",name:"Anthropic",swatches:["oklch(0.984 0.005 95)","oklch(0.685 0.142 38)"]},{value:"simple-large",name:"Simple Large-font",swatches:["oklch(0.15 0 0)","oklch(0.99 0 0)"]},{value:"underground",name:"Underground",swatches:["oklch(0.5315 0.0694 156.19)","oklch(0.5748 0.0862 336.52)"]},{value:"rose-garden",name:"Rose Garden",swatches:["oklch(0.5827 0.2418 12.23)","oklch(0.8131 0.1129 5.67)"]},{value:"lake-view",name:"Lake View",swatches:["oklch(0.765 0.177 163.22)","oklch(0.551 0.0899 200.52)"]},{value:"sunset-glow",name:"Sunset Glow",swatches:["oklch(0.5591 0.1882 25.33)","oklch(0.7938 0.1248 42.42)"]},{value:"forest-whisper",name:"Forest Whisper",swatches:["oklch(0.5276 0.1072 182.22)","oklch(0.5236 0.0505 250.18)"]},{value:"ocean-breeze",name:"Ocean Breeze",swatches:["oklch(0.5461 0.2152 262.88)","oklch(0.5854 0.2041 277.12)"]},{value:"lavender-dream",name:"Lavender Dream",swatches:["oklch(0.5709 0.1808 306.89)","oklch(0.811 0.0589 201.14)"]}],i=new Set(a.map(e=>e.value)),o=new Set(["default","sans","serif"]),r=new Set(["default","none","sm","md","lg","xl"]),s=new Set(["default","sm","lg","xl"]),l=new Set(["full","centered"]),c={default:"sans",anthropic:"serif"};function d(e,t){return"default"===e?c[t]??"sans":e}n.d(t,{HN:()=>d},{Ev:r,Se:l,XN:o,b3:a,dX:i,m1:{preset:"theme_preset",font:"theme_font",radius:"theme_radius",scale:"theme_scale",contentLayout:"theme_content_layout"}
107,oI:s,oi:{preset:"default",font:"default",radius:"default",scale:"default",contentLayout:"full"}})},52205(e,t,n){var a=n(21683);function i(e){return Math.floor(e.getTime()/1e3)}function o(e){let t=new Date(1e3*e);return t.setHours(0,0,0,0),Math.floor(t.getTime()/1e3)}function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Date,n=new Date(t);return{start:new Date(n.getTime()-24*e*36e5),end:n}}function s(e,t,n){let a=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=Math.floor(Date.now()/1e3);if(a){let a=o(r),s=n?o(i(n)):a;return{start_timestamp:t?o(i(t)):s-24*e*3600,end_timestamp:s+86400-1}}let s=n?i(n):r+3600;return{start_timestamp:t?i(t):s-24*e*3600,end_timestamp:s}}function l(e){return(0,a.A)(e).format("YYYY-MM-DD HH:mm:ss")}function c(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"day",n=(0,a.A)(1e3*e),i=n.format("MM-DD");if("hour"===t)i+=` ${n.format("HH")}:00`;else if("week"===t){let e=n.add(6,"day");i+=` - ${e.format("MM-DD")}`}return i}function d(e,t,n){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:new Date;if(0===e&&0===t&&0===n)return;let i=new Date(a);return i.setMonth(i.getMonth()+e),i.setDate(i.getDate()+t),i.setHours(i.getHours()+n),i}n.d(t,{Ah:()=>l,GW:()=>s,Hc:()=>c,U7:()=>d,fj:()=>r})},12591(e,t,n){var a=n(75652),i=n(73204);function o(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,i.QP)((0,a.$)(t))}function r(e,t){let n=[];if(t<=4)for(let e=1;e<=t;e++)n.push(e);else n.push(1),e<=2?(n.push(2),n.push("...",t)):e>=t-1?(n.push("..."),n.push(t-1,t)):(n.push("..."),n.push(e),n.push("...",t));return n}function s(e,t){return!e||e.length<=t?e:e.slice(0,t)+"..."}n.d(t,{EJ:()=>s,cn:()=>o,ml:()=>r})},87432(e,t,n){var a=n(23579),i=n(31371),o=n(86355),r=n(32889),s=n(70443),l=n(74294),c=n(98309),d=n(15277),u=n(91205),h=n(65172),p=n(36461),m=n(1855),g=n(82406);let f="2k6e8r7p",y=!1;n(21683);var b=n(15678);let v="default-v1",x="newapi:default:cache-version",k=new Set([x,"user","uid","aff","oauth:binding:result"]);var C=n(93735);let S=["inter","manrope","system"];var w=n(53693);let A="font",P=(0,i.createContext)(null);var j=n(48639),N=n(26887),I=n(72407),R=JSON.parse('{"translation":{"360":"360","1000":"1000","10000":"10000","_copy":"_copy",",":", ",", and":", and",",and ":", and ","、":", ","? This action cannot be undone.":"? This action cannot be undone.",". Please fix the JSON before saving.":". Please fix the JSON before saving.",". This action cannot be undone.":". This action cannot be undone.","...":"...","\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"":"\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"","({{total}} total, {{omit}} omitted)":"({{total}} total, {{omit}} omitted)","(Leave empty to dissolve tag)":"(Leave empty to dissolve tag)","(Optional: redirect model names)":"(Optional: redirect model names)","(Override all channels\' groups)":"(Override all channels\' groups)","(Override all channels\' models)":"(Override all channels\' models)","[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]":"[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]","{\\"original-model\\": \\"replacement-model\\"}":"{\\"original-model\\": \\"replacement-model\\"}","{{category}} Models":"{{category}} Models","{{count}} channel(s) deleted":"{{count}} channel(s) deleted","{{count}} channel(s) disabled":"{{count}} channel(s) disabled","{{count}} channel(s) enabled":"{{count}} channel(s) enabled","{{count}} channel(s) failed to disable":"{{count}} channel(s) failed to disable","{{count}} channel(s) failed to enable":"{{count}} channel(s) failed to enable","{{count}} days ago":"{{count}} days ago","{{count}} days remaining":"{{count}} days remaining","{{count}} disabled channel(s) deleted":"{{count}} disabled channel(s) deleted","{{count}} hours ago":"{{count}} hours ago","{{count}} incidents":"{{count}} incidents","{{count}} incidents in the last 24 hours":"{{count}} incidents in the last 24 hours","{{count}} incidents in the last 30 days":"{{count}} incidents in the last 30 days","{{count}} IP(s)":"{{count}} IP(s)","{{count}} log entries removed.":"{{count}} log entries removed.","{{count}} minutes ago":"{{count}} minutes ago","{{count}} models":"{{count}} models","{{count}} months ago":"{{count}} months ago","{{count}} override":"{{count}} override","{{count}} selected targets available for bulk copy.":"{{count}} selected targets available for bulk copy.","{{count}} tiers":"{{count}} tiers","{{count}}
107 vendors":"{{count}} vendors","{{count}} weeks ago":"{{count}} weeks ago","{{field}} updated to {{value}}":"{{field}} updated to {{value}}","{{field}} updated to {{value}} for tag: {{tag}}":"{{field}} updated to {{value}} for tag: {{tag}}","{{method}} {{route}}":"{{method}} {{route}}","{{modality}} not supported":"{{modality}} not supported","{{modality}} supported":"{{modality}} supported","{{n}} model(s) selected":"{{n}} model(s) selected","{{value}}ms":"{{value}}ms","{{value}}s":"{{value}}s","@lobehub/icons key":"@lobehub/icons key","@lobehub/icons key name":"@lobehub/icons key name","/status/":"/status/","/your/endpoint":"/your/endpoint","#1 App":"#1 App","#1 by usage":"#1 by usage","#1 Model":"#1 Model","% off":"% off","`, and `-nothinking` suffixes while routing to the correct Gemini variant.":"`, and `-nothinking` suffixes while routing to the correct Gemini variant.","© 2025 Your Company. All rights reserved.":"© 2025 Your Company. All rights reserved.","+{{count}} more":"+{{count}} more","| Based on":"| Based on","0 means data is kept permanently":"0 means data is kept permanently","0 means unlimited":"0 means unlimited","1 Day":"1 Day","1 day ago":"1 day ago","1 hour":"1 hour","1 Hour":"1H","1 hour ago":"1 hour ago","1 minute":"1 minute","1 minute ago":"1 minute ago","1 Month":"1M","1 month ago":"1 month ago","1 week ago":"1 week ago","1 year ago":"1 year ago","1. Create an application in your Gotify server":"1. Create an application in your Gotify server","10 / page":"10 / page","100 / page":"100 / page","14 Days":"14 Days","192.168.1.1&#10;10.0.0.0/8":"192.168.1.1&#10;10.0.0.0/8","1M":"1M","1W":"1W","2. Copy the application token":"2. Copy the application token","20 / page":"20 / page","24 Hours":"24 Hours","24 hours ago":"24 hours ago","29 Days":"29 Days","3. Enter your Gotify server URL and token above":"3. Enter your Gotify server URL and token above","30 Days":"30 Days","30 days ago":"30 days ago","30d change":"30d change","5 minutes":"5 minutes","5-Hour Window":"5-Hour Window","50 / page":"50 / page","7 Days":"7 Days","7 days ago":"7 days ago","80,443,8080":"80,443,8080","A billing multiplier. Lower ratios mean lower API call costs.":"A billing multiplier. Lower ratios mean lower API call costs.","A focused home for keys, balance, routing, and service health.":"A focused home for keys, balance, routing, and service health.","About":"About","About {{days}} days left":"About {{days}} days left","Accept Unpriced Models":"Accept Unpriced Models","Accepts a JSON array of model identifiers that support the Imagine API.":"Accepts a JSON array of model identifiers that support the Imagine API.","Accepts comma-separated status codes and inclusive ranges.":"Accepts comma-separated status codes and inclusive ranges.","Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.":"Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.","Access Denied Message":"Access Denied Message","Access Forbidden":"Access Forbidden","Access Policy (JSON)":"Access Policy (JSON)","Access previous conversations and start new ones.":"Access previous conversations and start new ones.","Access Token":"Access Token","AccessKey / SecretAccessKey":"AccessKey / SecretAccessKey","Account Binding Management":"Account Binding Management","Account Bindings":"Account Bindings","Account created! Please sign in":"Account created! Please sign in","Account deleted successfully":"Account deleted successfully","Account ID *":"Account ID *","Account Info":"Account Info","Account used when authenticating with the SMTP server":"Account used when authenticating with the SMTP server","acknowledge the related legal risks":"acknowledge the related legal risks","Across all groups":"Across all groups","Action":"Action","Action confirmation":"Action Confirmation","Actions":"Actions","active":"active","Active":"Active","Active apps":"Active apps","Active Cache Count":"Active Cache Count","Active Files":"Active Files","Active models":"Active models","active users":"active users","Actual Amount":"Actual Amount","Actual Model":"Actual Model","Actual Model:":"Actual Model:","Adapt `-thinking` suffix requests to Anthropic native thinking behavior while keeping billing predictable.":"Adapt `-thinking` suffix requests to Anthropic native thinking behavior while keeping billing predictable.","Add":"Add","Add \\"{{value}}\\"":"Add \\"{{value}}\\"","Add {{title}}":"Add {{title}}","Add a group identifier to the auto assignment list.":"Add a group identifier to the auto assignment list.","Add a new API key by providing necessary info.":"Add a new API key by providing necessary info.","Add a new channel by providing the necessary information.":"Add a new channel by providing the necessary information.","Add a new model to the system b
107y providing the necessary information.":"Add a new model to the system by providing the necessary information.","Add a new user by providing necessary info.":"Add a new user by providing necessary info.","Add a new vendor to the system":"Add a new vendor to the system","Add an extra layer of security to your account":"Add an extra layer of security to your account","Add and submit":"Add and submit","Add Announcement":"Add Announcement","Add API":"Add API","Add API Shortcut":"Add API Shortcut","Add auto group":"Add auto group","Add chat preset":"Add chat preset","Add condition":"Add condition","Add Condition":"Add Condition","Add credits":"Add credits","Add custom model \\"{{value}}\\"":"Add custom model \\"{{value}}\\"","Add discount tier":"Add discount tier","Add each model or tag you want to include.":"Add each model or tag you want to include.","Add FAQ":"Add FAQ","Add from available models...":"Add from available models...","Add Funds":"Add Funds","Add group":"Add group","Add Group":"Add Group","Add group rate limit":"Add group rate limit","Add group rules":"Add group rules","Add Mapping":"Add Mapping","Add method":"Add method","Add missing models":"Add missing models","Add Mode":"Add Mode","Add model":"Add model","Add Model":"Add Model","Add model pricing":"Add model pricing","Add Models":"Add Models","Add new amount":"Add new amount","Add new redemption code(s) by providing necessary info.":"Add new redemption code(s) by providing necessary info.","Add OAuth Provider":"Add OAuth Provider","Add param/header":"Add param/header","Add payment method":"Add payment method","Add photos or files":"Add photos or files","Add product":"Add product","Add Provider":"Add Provider","Add Quota":"Add Quota","Add ratio override":"Add ratio override","Add Row":"Add Row","Add Rule":"Add Rule","Add rule group":"Add rule group","Add selectable group":"Add selectable group","Add subscription":"Add subscription","Add tags...":"Add tags...","Add tier":"Add tier","Add time condition":"Add time condition","Add time rule group":"Add time rule group","Add Uptime Kuma Group":"Add Uptime Kuma Group","Add User":"Add User","Add user group":"Add user group","Add your API keys, set up channels and configure access permissions":"Add your API keys, set up channels and configure access permissions","Added {{count}} model(s)":"Added {{count}} model(s)","Added successfully":"Added successfully","Additional Conditions":"Additional Conditions","Additional information":"Additional information","Additional Information":"Additional Information","Additional Limit":"Additional Limit","Additional Limits":"Additional Limits","Additional metered capability":"Additional metered capability","Adjust filters, then search to refresh the logs.":"Adjust filters, then search to refresh the logs.","Adjust Quota":"Adjust Quota","Adjust response formatting, prompt behavior, proxy, and upstream automation.":"Adjust response formatting, prompt behavior, proxy, and upstream automation.","Adjust the appearance and layout to suit your preferences.":"Adjust the appearance and layout to suit your preferences.","Admin":"Admin","Admin access required":"Admin access required","Admin area":"Admin area","Admin notes (only visible to admins)":"Admin notes (only visible to admins)","Admin Only":"Admin Only","Administer user accounts and roles.":"Administer user accounts and roles.","Administrator account":"Administrator account","Administrator username":"Administrator username","Advanced":"Advanced","Advanced Configuration":"Advanced Configuration","Advanced options":"Advanced options","Advanced Options":"Advanced Options","Advanced platform configuration.":"Advanced platform configuration.","Advanced Settings":"Advanced Settings","Advanced text editing":"Advanced text editing","Aesthetic style":"Aesthetic style","After clicking the button, you\'ll be asked to authorize the bot":"After clicking the button, you\'ll be asked to authorize the bot","After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?":"After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?","After enabling, the plan will be shown to users. Continue?":"After enabling, the plan will be shown to users. Continue?","After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?":"After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?","After scanning, the binding will complete automatically":"After scanning, the binding will complete automatically","Agent ID *":"Agent ID *","Aggregate tokens delivered across the platform":"Aggregate tokens delivered across the platform","Aggregate traffic across every category":"Aggregate traffic across every category","Aggregated across enabled groups":"Aggregated across enabled groups","Aggregated across the apps below":"Aggregated across the apps below","Aggregated traffic by upstream model provider":"Aggregated traffic by upstream model provider","Aggregated usage metrics and trend charts.":"Aggregated usage metrics and trend charts.","aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.":"aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.","Aggregation bucket":"Aggregation bucket","AGPL v3.0 License":"AGPL v3.0 License","AI Application Infrastru
107cture Foundation":"AI Application Infrastructure Foundation","AI model testing environment":"AI model testing environment","AI models":"AI models","AI models supported":"AI models supported","AI Proxy":"AI Proxy","AI Proxy Library":"AI Proxy Library","AIGC2D":"AIGC2D","AILS":"AILS","AK/SK mode: use AccessKey|SecretAccessKey|Region":"AK/SK mode: use AccessKey|SecretAccessKey|Region","Ali":"Ali","Alipay":"Alipay","All":"All","All categories":"All categories","All conditions must match before this tier is used.":"All conditions must match before this tier is used.","All edits are overwrite operations. Leave fields empty to keep current values unchanged.":"All edits are overwrite operations. Leave fields empty to keep current values unchanged.","All files exceed the maximum size.":"All files exceed the maximum size.","All Groups":"All Groups","All Models":"All Models","All models in use are properly configured.":"All models in use are properly configured.","All Must Match (AND)":"All Must Match (AND)","All requests must include":"All requests must include","All Status":"All Status","All Sync Status":"All Sync Status","All systems operational":"All systems operational","All Tags":"All Tags","All Types":"All Types","All upstream data is trusted":"All upstream data is trusted","All Vendors":"All Vendors","All-time":"All-time","Allocated Memory":"Allocated Memory","Allow accountFilter parameter":"Allow accountFilter parameter","Allow balance redemption":"Allow balance redemption","Allow Claude beta query passthrough":"Allow Claude beta query passthrough","Allow clients to query configured ratios via `/api/ratio`.":"Allow clients to query configured ratios via `/api/ratio`.","Allow HTTP image requests":"Allow HTTP image requests","Allow include usage obfuscation passthrough":"Allow include usage obfuscation passthrough","Allow inference geography passthrough":"Allow inference geography passthrough","Allow inference_geo passthrough":"Allow inference_geo passthrough","Allow Insecure Origins":"Allow Insecure Origins","Allow new users to register":"Allow new users to register","Allow Private IPs":"Allow Private IPs","Allow registration with password":"Allow registration with password","Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)":"Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)","Allow Retry":"Allow Retry","Allow safety_identifier passthrough":"Allow safety_identifier passthrough","Allow service_tier passthrough":"Allow service_tier passthrough","Allow speed passthrough":"Allow speed passthrough","Allow upstream callbacks":"Allow upstream callbacks","Allow users to check in daily for random quota rewards":"Allow users to check in daily for random quota rewards","Allow users to enter promo codes":"Allow users to enter promo codes","Allow users to log in with password":"Allow users to log in with password","Allow users to register and sign in with Passkey (WebAuthn)":"Allow users to register and sign in with Passkey (WebAuthn)","Allow users to sign in with Discord":"Allow users to sign in with Discord","Allow users to sign in with GitHub":"Allow users to sign in with GitHub","Allow users to sign in with LinuxDO":"Allow users to sign in with LinuxDO","Allow users to sign in with OpenID Connect":"Allow users to sign in with OpenID Connect","Allow users to sign in with Telegram":"Allow users to sign in with Telegram","Allow users to sign in with this provider":"Allow users to sign in with this provider","Allow users to sign in with WeChat":"Allow users to sign in with WeChat","Allow using models without price configuration":"Allow using models without price configuration","Allowed":"Allowed","Allowed Origins":"Allowed Origins","Allowed Ports":"Allowed Ports","Already have an account?":"Already have an account?","Always matches (default tier).":"Always matches (default tier).","Amount":"Amount","Amount cannot be changed when editing.":"Amount cannot be changed when editing.","Amount discount":"Amount discount","Amount Due":"Amount Due","Amount must be a whole number":"Amount must be a whole number","Amount must be greater than 0":"Amount must be greater than 0","Amount of quota to credit to user account.":"Amount of quota to credit to user account.","Amount options must be a JSON array":"Amount options must be a JSON array","Amount to pay:":"Amount to pay:","An unexpected error occurred":"An unexpected error occurred","and":"and","Announcement added. Click \\"Save Settings\\" to apply.":"Announcement added. Click \\"Save Settings\\" to apply.","Announcement content":"Announcement content","Announcement deleted. Click \\"Save Settings\\" to apply.":"Announcement deleted. Click \\"Save Settings\\" to apply.","Announcement Details":"Announcement Details","Announcement displayed to users (supports Markdown & HTML)":"Announcement displayed to users (supports Markdown & HTML)","Announcement updated. Click \\"Save Settings\\" to apply.":"Announcement updated. Click \\"Save Settings\\" to apply.","Announcements":"Announcements","Announcements saved successfully":"Announcements saved successfully","Answer":"Answer","Answers for common access and billing questions":"Answers for common access and billing questions","Anthropic":"Anthropic","Any Match (OR)":"Any Match (OR)","API":"API","API Access":"API Access","API Addresses":"API Addresses","API Base URL (Important: Not Chat API) *":"API Base URL (Important: Not Chat API) *","API Base URL *":"API Base URL *","API Endpoints":"API Endpoints","API Info":"API Info","API info added. Click \\"Save Settings\\" to apply.":"API info added. Click \\"Save Settings\\" to apply.","API info deleted. Click \\"Save Settings\\" to apply.":"API info deleted. Click \\"Save Settings\\" to apply.","API info saved successfully":"API info saved successfully","API info updated. Click \\"Save Settings\\" to apply.":"API info updated. Click \\"Save Settings\\" to apply.","API key":"API key","API Key":"API Key","API Key (one per line for batch mode)":"API Key (one per line for batch mode)","API Key (Production)":"API Key (Production)","API Key (Sandbox)":"API Key (Sandbox)","API Key *":"API Key *","API Key created successfully":"API Key created successfully","API Key deleted successfully":"API Key deleted successfully","API Key disabled successfully":"API Key disabled successfully","API Key enabled successfully":"API Key enabled successfully","API key from the provider":"API key from the provider","API key is required":"API key is required","API Key mode (does not support batch creation)":"API Key mode (does not support batch creation)","API Key mode: use APIKey|Region":"API Key mode: use APIKey|Region","API Key updated successfully":"API Key updated successfully","API Keys":"API Keys","API Private Key":"API Private Key","API Requests":"API Requests","API secret":"API secret","API token management":"API token management","API URL":"API URL","API usage records":"API usage records","API2GPT":"API2GPT","App":"App","App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.":"App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.","Append":"Append","Append mode: New keys will be added to the end of the existing key list":"Append mode: New keys will be added to the end of the existing key list","Append Template":"Append Template","Append to channel":"Append to channel","Append to End":"Append to End","Append to existing keys":"Append to existing keys","Append value to array / string / object end":"Append value to array / string / object end","appended":"appended","Application":"Application","Applied {{name}} pricing to {{count}} models":"Applied {{name}} pricing to {{count}} models","Applied upstream model changes to {{count}} channels":"Applied upstream model changes to {{count}} channels","Applied upstream model changes to channel (ID: {{id}})":"Applied upstream model changes to channel (ID: {{id}})","Applies to custom completion endpoints. JSON map of model → ratio.":"Applies to custom completion endpoints. JSON map of model → ratio.","Apply All Upstream Updates":"Apply All Upstream Updates","Apply Filters":"Apply Filters","Apply IP Filter to Resolved Domains":"Apply IP Filter to Resolved Domains","Apply Overwrite":"Apply Overwrite","Apply Sync":"Apply Sync","Applying...":"Applying...","Approx.":"Approx.","apps":"apps","Apps":"Apps","apps tracked":"apps tracked","Apps using the most tokens through new-api":"Apps using the most tokens through new-api","are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.":"are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.","Are you sure you want to delete":"Are you sure you want to delete","Are you sure you want to delete {{count}} model(s)? This action cannot be undone.":"Are you sure you want to delete {{count}} model(s)? This action cannot be undone.","Are you sure you want to delete all auto-disabled keys? This action cannot be undone.":"Are you sure you want to delete all auto-disabled keys? This action cannot be undone.","Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.":"Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.","Are you sure you want to delete this key? This action cannot be undone.":"Are you sure you want to delete this key? This action cannot be undone.","Are you sure you want to disable all enabled keys?":"Are you sure you want to disable all enabled keys?","Are you sure you want to enable all keys?":"Are you sure you want to enable all keys?","Are you sure you want to manually complete this order? The user will be credited 
107with the corresponding quota.":"Are you sure you want to manually complete this order? The user will be credited with the corresponding quota.","Are you sure you want to sign out? You will need to sign in again to access your account.":"Are you sure you want to sign out? You will need to sign in again to access your account.","Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.":"Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.","Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.":"Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.","Are you sure?":"Are you sure?","Area Chart":"Area Chart","Args (space separated)":"Args (space separated)","Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.":"Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.","Asc":"Asc","Ask anything":"Ask anything","Assigned by administrator only":"Assigned by administrator only","Assigned by administrators and used to represent a user level, such as default or vip.":"Assigned by administrators and used to represent a user level, such as default or vip.","Async task refund":"Async task refund","At least one model regex pattern is required":"At least one model regex pattern is required","At least one valid key source is required":"At least one valid key source is required","Attach":"Attach","Audio":"Audio","Audio comp.":"Audio comp.","Audio completion ratio":"Audio completion ratio","Audio In":"Audio In","Audio input":"Audio input","Audio Input":"Audio Input","Audio input price":"Audio input price","Audio Input Price":"Audio Input Price","Audio Out":"Audio Out","Audio output":"Audio output","Audio Output":"Audio Output","Audio output price":"Audio output price","Audio output price requires an audio input price.":"Audio output price requires an audio input price.","Audio playback failed":"Audio playback failed","Audio Preview":"Audio Preview","Audio ratio":"Audio ratio","Audio Tokens":"Audio Tokens","Auth configured":"Auth configured","Auth Style":"Auth Style","auth.resetPasswordConfirm.backToLogin":"Return to login","auth.resetPasswordConfirm.confirm":"Confirm reset password","auth.resetPasswordConfirm.description":"Confirm the reset request to generate a new password.","auth.resetPasswordConfirm.retry":"Retry ({{seconds}}s)","auth.resetPasswordConfirm.success":"Your password has been reset successfully","Authentication":"Authentication","Authentication Method":"Authentication Method","Authenticator code":"Authenticator code","Authorization Endpoint":"Authorization Endpoint","Authorization Endpoint (Optional)":"Authorization Endpoint (Optional)","Authorize":"Authorize","Auto":"Auto","Auto (Circuit Breaker)":"Auto (Circuit Breaker)","Auto assignment order":"Auto assignment order","Auto Ban":"Auto Ban","Auto detect (default)":"Auto detect (default)","Auto Disabled":"Auto Disabled","Auto group behavior":"Auto group behavior","Auto Group Chain":"Auto Group Chain","Auto refresh":"Auto refresh","Auto Sync Upstream Models":"Auto Sync Upstream Models","Auto-disable status codes":"Auto-disable status codes","Auto-discover":"Auto-discover","Auto-discovers endpoints from the provider":"Auto-discovers endpoints from the provider","Auto-fill when one field exists and another is missing":"Auto-fill when one field exists and another is missing","Auto-retry status codes":"Auto-retry status codes","Automatically disable channel on repeated failures":"Automatically disable channel on repeated failures","Automatically disable channels exceeding this response time":"Automatically disable channels exceeding this response time","Automatically disable channels when tests fail":"Automatically disable channels when tests fail","Automatically probe all channels in the background":"Automatically probe all channels in the background","Automatically replaces upstream callback URLs with the server address.":"Automatically replaces upstream callback URLs with the server address.","Automatically selects the best available group with circuit breaker mechanism":"Automatically selects the best available group with circuit breaker mechanism","Automatically sync model list when upstream changes are detected":"Automatically sync model list when upstream changes are detected","Availability (last 24h)":"Availability (last 24h)","Available":"Available","Available disk space":"Available disk space","Available Models":"Available Models","Available Rewards":"Available Rewards","Average latency":"Average latency","Average latency, TTFT, and success rate by group":"Average latency, TTFT, and success rate by group","Average latency, TTFT, TPS, and success rate":"Average latency, TTFT, TPS, and success rate","Average RPM":"Average RPM","Average time-to-first-token (TTFT) by group":"Average time-to-first-token (TTFT) by group","Average tokens per second sustained per group":"Average tokens per second sustained per group","Average TPM":"Average TPM","Average TTFT":"Average TTFT","AWS":"AWS","AWS Bedrock Claude Compat":"AWS Bedrock Claude Compat","AWS Key Format":"AWS Key Format","Azure":"Azure","AZURE_OPENAI_ENDPOINT *":"AZURE_OPENAI_ENDPOINT *","Back":"Back","Back to Dashboard":"Back to Dashboard","Back to Home":"Back to Home","Back to login":"Back to login","Back to Models":"Back to Models","Backed up":"Backed up","Backgroun
107d job tracker for queued work.":"Background job tracker for queued work.","Backup Code":"Backup Code","Backup code must be in format XXXX-XXXX":"Backup code must be in format XXXX-XXXX","Backup codes regenerated successfully":"Backup codes regenerated successfully","Backup codes remaining: {{count}}":"Backup codes remaining: {{count}}","Bad Request":"Bad Request","Badge Color":"Badge Color","Baidu":"Baidu","Baidu V2":"Baidu V2","Balance":"Balance","Balance and top-up management":"Balance and top-up management","Balance depleted":"Balance depleted","Balance is shown in quota units":"Balance is shown in quota units","Balance queried successfully":"Balance queried successfully","Balance updated successfully":"Balance updated successfully","Balance updated: {{balance}}":"Balance updated: {{balance}}","Bar Chart":"Bar Chart","Bark Push URL":"Bark Push URL","Base address provided by your Epay service":"Base address provided by your Epay service","Base amount. Actual deduction = base amount × system group rate.":"Base amount. Actual deduction = base amount × system group rate.","Base input and output token prices for this tier.":"Base input and output token prices for this tier.","Base input price only":"Base input price only","Base Limits":"Base Limits","Base multipliers applied when users select specific groups.":"Base multipliers applied when users select specific groups.","Base Price":"Base Price","Base rate limit windows for this account.":"Base rate limit windows for this account.","Base URL":"Base URL","Base URL is required for this channel type":"Base URL is required for this channel type","Base URL of your Uptime Kuma instance":"Base URL of your Uptime Kuma instance","Basic Authentication":"Basic Authentication","Basic Configuration":"Basic Configuration","Basic Info":"Basic Info","Basic Information":"Basic Information","Basic Templates":"Basic Templates","Batch Add (one key per line)":"Batch Add (one key per line)","Batch delete failed":"Batch delete failed","Batch deleted {{count}} channels":"Batch deleted {{count}} channels","Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed":"Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed","Batch detection failed":"Batch detection failed","Batch disable failed":"Batch disable failed","Batch Edit":"Batch Edit","Batch edit all channels with this tag. Leave fields empty to keep current values.":"Batch edit all channels with this tag. Leave fields empty to keep current values.","Batch Edit by Tag":"Batch Edit by Tag","Batch enable failed":"Batch enable failed","Batch processing failed":"Batch processing failed","Batch set tag for {{count}} channels":"Batch set tag for {{count}} channels","Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed":"Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed","Best for single-tenant deployments. Pricing and billing options stay hidden.":"Best for single-tenant deployments. Pricing and billing options stay hidden.","Best TTFT":"Best TTFT","Billable input tokens":"Billable input tokens","Billable output tokens":"Billable output tokens","Billing":"Billing","Billing & Payment":"Billing & Payment","Billing currency":"Billing currency","Billing Details":"Billing Details","Billing History":"Billing History","Billing Mode":"Billing Mode","Billing Process":"Billing Process","Billing Source":"Billing Source","Bind":"Bind","Bind a Pancake store + product":"Bind a Pancake store + product","Bind an email address to your account.":"Bind an email address to your account.","Bind Email":"Bind Email","Bind Telegram Account":"Bind Telegram Account","Bind WeChat Account":"Bind WeChat Account","Binding Information":"Binding Information","Binding successful!":"Binding successful!","Binding your {{provider}} account":"Binding your {{provider}} account","Binding...":"Binding...","Bindings":"Bindings","Blacklist":"Blacklist","Blacklist (Block listed domains)":"Blacklist (Block listed domains)","Blacklist (Block listed IPs)":"Blacklist (Block listed IPs)","Blank Rule":"Blank Rule","Blend":"Blend","Block email aliases (e.g., [email protected])":"Block email aliases (e.g., [email protected])","Blocked keywords":"Blocked keywords","Blocks messages when sensitive keywords are detected.":"Blocks messages when sensitive keywords are detected.","Body param":"Body param","Border radius":"Border radius","Bot Name":"Bot Name","Bot Protection":"Bot Protection","Bot Token":"Bot Token","Bot:":"Bot:","Bound":"Bound","Bound a subscription":"Bound a subscription","Bound Channels":"Bound Channels","Bound Only":"Bound Only","Bound product:":"Bound product:","Bound store:":"Bound store:","Bring channels back online after successful checks":"Bring channels back online after successful checks","Browse and compare":"Browse and compare","Browse available models and pricing":"Browse available models and pricing","Browse rankings by category":"Browse rankings by category","Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.":"Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.","Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.":"Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.","Budget Tokens Ratio":"Budget Tokens Ratio","Budgets":"Budgets","Build on your API gateway in minutes":"Build on your API gateway in minutes","Built for developers,":"Built for developers,","Built-in":"Built-in","Built-in Device":"Built-in Device","Built-in: phone fingerprint/face, or Windows Hello;
107 External: USB security key":"Built-in: phone fingerprint/face, or Windows Hello; External: USB security key","by":"by","By category":"By category","By model author":"By model author","Cache":"Cache","Cache create (1h) price":"Cache create (1h) price","Cache create price":"Cache create price","Cache Creation":"Cache Creation","Cache Creation (1h)":"Cache Creation (1h)","Cache Creation (5m)":"Cache Creation (5m)","Cache Directory":"Cache Directory","Cache Directory Disk Space":"Cache Directory Disk Space","Cache Directory Info":"Cache Directory Info","Cache Entries":"Cache Entries","Cache mode":"Cache mode","Cache pricing":"Cache pricing","Cache ratio":"Cache ratio","Cache Read":"Cache Read","Cache read price":"Cache read price","Cache repeated prompt prefixes for cheaper, faster reuse":"Cache repeated prompt prefixes for cheaper, faster reuse","Cache write":"Cache write","Cache Write":"Cache Write","Cache Write (1h)":"Cache Write (1h)","Cache Write (5m)":"Cache Write (5m)","Cache write price":"Cache write price","Cached":"Cached","Cached input":"Cached input","Calculated price: ${{price}} per 1M tokens":"Calculated price: ${{price}} per 1M tokens","Calculated ratio: {{ratio}}":"Calculated ratio: {{ratio}}","Calculating...":"Calculating...","Call Count Distribution":"Call Count Distribution","Call Count Ranking":"Call Count Ranking","Call Proportion":"Call Proportion","Call Trend":"Call Trend","Callback address":"Callback address","Callback Caller IP":"Callback Caller IP","Callback notification URL":"Callback notification URL","Callback Payment Method":"Callback Payment Method","Cancel":"Cancel","Cancelled":"Cancelled","Cancelled at":"Cancelled at","Capabilities":"Capabilities","Capture a reusable bundle of models, tags, or endpoints.":"Capture a reusable bundle of models, tags, or endpoints.","Card view":"Card view","Category":"Category","Category Name":"Category Name","Category name is required":"Category name is required","Category name must be less than 50 characters":"Category name must be less than 50 characters","Caution":"Caution","CC Switch":"CC Switch","Centered":"Centered","Chain":"Chain","Change":"Change","Change language":"Change language","Change Password":"Change Password","Change To":"Change To","Changed Fields":"Changed Fields","Changes are written to the settings draft on save.":"Changes are written to the settings draft on save.","Changing...":"Changing...","Channel":"Channel","Channel Affinity":"Channel Affinity","Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.","Channel Affinity: Upstream Cache Hit":"Channel Affinity: Upstream Cache Hit","Channel copied successfully":"Channel copied successfully","Channel created successfully":"Channel created successfully","Channel deleted successfully":"Channel deleted successfully","Channel disabled successfully":"Channel disabled successfully","Channel enabled successfully":"Channel enabled successfully","Channel Extra Settings":"Channel Extra Settings","Channel ID":"Channel ID","Channel key":"Channel key","Channel key unlocked":"Channel key unlocked","Channel models":"Channel models","Channel name is required":"Channel name is required","Channel test completed":"Channel test completed","Channel type is required":"Channel type is required","Channel updated successfully":"Channel updated successfully","Channel-specific settings (JSON format)":"Channel-specific settings (JSON format)","Channel:":"Channel:","channel(s)? This action cannot be undone.":"channel(s)? This action cannot be undone.","Channels":"Channels","Channels deleted successfully":"Channels deleted successfully","Character chat, storytelling, persona":"Character chat, storytelling, persona","Chart Preferences":"Chart Preferences","Chart Settings":"Chart Settings","Chat":"Chat","Chat area":"Chat area","Chat Area":"Chat Area","Chat Client Name":"Chat Client Name","Chat client name is required":"Chat client name is required","Chat configuration JSON":"Chat configuration JSON","Chat preset not found":"Chat preset not found","Chat Presets":"Chat Presets","Chat session management":"Chat session management","ChatCompletions -> Responses Compatibility":"ChatCompletions -> Responses Compatibility","Check for updates":"Check for updates","Check in daily to receive random quota rewards":"Check in daily to receive random quota rewards","Check in now":"Check in now","Check line {{line}} for a missing comma.":"Check line {{line}} for a missing comma.","Check out the Quick Start":"Check out the Quick Start","Check resolved IPs against IP filters even when accessing by domain":"Check resolved IPs against IP filters even when accessing by domain","Check-in failed":"Check-in failed","Check-in Rewards":"Check-in Rewards","Check-in Settings":"Check-in Settings","Check-in successful! Received":"Check-in successful! Received","Checked in":"Checked in","Checking connection":"Checking connection","Checking name...":"Checking name...","Checking updates...":"Checking updates...","checkout.session.completed":"checkout.session.completed","checkout.session.expired":"checkout.session.expired","ChatGPT Subscription (Codex)":"ChatGPT Subscription (Codex)","Chinese":"Chinese","Choose a username":"Choose a username","Choose an amount and payment method":"Choose an amount and payment method","Choose between default expanded, compact icon-only, or full layout mode":"Choose between default expanded, compact icon-only, or full layout mode","Choose between inset, floating, or standard sidebar layout":"Choose between inset, floating, or standard sidebar layout","Choose between left-to-right or right-to-left site direction":"Choose between left-to-right or right-to-left site direction","Choose between system preference, light mode, or dark mode":"Choose between system preference, light mode, or dark mode","Choose channels to sync upstream ratio configurations from":"Choose channels to sync upstream ratio configurations from","Choose Group":"Choose Group","Choose how quota values are shown to users":"Choose how quota values are shown to users","Choose how the platform will operate":"Choose how the platform will operate","Choose how to filter domains":"Cho
107ose how to filter domains","Choose how to filter IP addresses":"Choose how to filter IP addresses","Choose the bundle type and define the items inside it.":"Choose the bundle type and define the items inside it.","Choose the default charts, range, and time granularity for model analytics.":"Choose the default charts, range, and time granularity for model analytics.","Choose where to fetch upstream metadata.":"Choose where to fetch upstream metadata.","Choose which charts are selected by default when opening model analytics.":"Choose which charts are selected by default when opening model analytics.","Classic (Legacy Frontend)":"Classic (Legacy Frontend)","Claude":"Claude","Claude CLI Header Passthrough":"Claude CLI Header Passthrough","Clean":"Clean","Clean history logs":"Clean history logs","Clean logs":"Clean logs","Clean up inactive cache":"Clean up inactive cache","Clean Up Log Files":"Clean Up Log Files","Cleaned up {{count}} log files, freed {{size}}":"Cleaned up {{count}} log files, freed {{size}}","Cleaning...":"Cleaning...","Cleanup failed":"Cleanup failed","Cleanup Mode":"Cleanup Mode","Clear":"Clear","Clear all":"Clear all","Clear All":"Clear All","Clear All Cache":"Clear All Cache","Clear all filters":"Clear all filters","Clear cache for this rule":"Clear cache for this rule","Clear filters":"Clear filters","Clear Mapping":"Clear Mapping","Clear mode flags in prompts":"Clear mode flags in prompts","Clear search":"Clear search","Clear selection":"Clear selection","Clear selection (Escape)":"Clear selection (Escape)","Cleared":"Cleared","Cleared {{bindingType}} binding for user {{username}}":"Cleared {{bindingType}} binding for user {{username}}","Cleared all models":"Cleared all models","Cleared channel affinity cache":"Cleared channel affinity cache","Cleared disk cache":"Cleared disk cache","Cleared historical logs":"Cleared historical logs","Cleared log files":"Cleared log files","Click \\"Create Plan\\" to create your first subscription plan":"Click \\"Create Plan\\" to create your first subscription plan","Click \\"Generate\\" to create a token":"Click \\"Generate\\" to create a token","Click any category to drill into its models, apps, and trends":"Click any category to drill into its models, apps, and trends","Click for details":"Click for details","Click save when you\'re done.":"Click save when you\'re done.","Click save when you&apos;re done.":"Click save when you&apos;re done.","Click the button below to bind your Telegram account":"Click the button below to bind your Telegram account","Click to open deployment":"Click to open deployment","Click to preview audio":"Click to preview audio","Click to preview video":"Click to preview video","Click to update balance":"Click to update balance","Click to view Codex usage":"Click to view Codex usage","Click to view full details":"Click to view full details","Click to view full error message":"Click to view full error message","Click to view full prompt":"Click to view full prompt","Click to view image":"Click to view image","Client header value":"Client header value","Client ID":"Client ID","Client Secret":"Client Secret","Close":"Close","Close dialog":"Close dialog","Close menu":"Close menu","Close Today":"Close Today","Cloudflare":"Cloudflare","CNY":"CNY","CNY per USD":"CNY per USD","Code":"Code","Code generation, refactoring, autocomplete":"Code generation, refactoring, autocomplete","Code interpreter":"Code interpreter","Code samples":"Code samples","Codes copied!":"Codes copied!","Codex":"Codex","Codex Account & Usage":"Codex Account & Usage","Codex channels do not support batch creation":"Codex channels do not support batch creation","Codex channels use an OAuth JSON credential as the key.":"Codex channels use an OAuth JSON credential as the key.","Codex CLI Header Passthrough":"Codex CLI Header Passthrough","Codex credential must be a JSON object with access_token and account_id":"Codex credential must be a JSON object with access_token and account_id","Cohere":"Cohere","Collapse":"Collapse","Collapse All":"Collapse All","Collect relay latency and success-rate metrics for the model square.":"Collect relay latency and success-rate metrics for the model square.","Color":"Color","Color is required":"Color is required","Color preset":"Color preset","Color:":"Color:","Comfortable":"Comfortable","Coming Soon!":"Coming Soon!","Comma-separated exact model names. Prefix with regex: to ignore by regular expression.":"Comma-separated exact model names. Prefix with regex: to ignore by regular expression.","Comma-separated list of allowed ports (empty = all ports)":"Comma-separated list of allowed ports (empty = all ports)","Comma-separated model names (leave empty to keep current)":"Comma-separated model names (leave empty to keep current)","Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo":"Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo","Command":"Command","Common":"Common","Common Keys":"Common Keys","Common Logs":"Common Logs","Common ports include 25, 465, and 587":"Common ports include 25, 465, and 587","Common User":"Common User","Community driven, self
107-hosted, and extensible":"Community driven, self-hosted, and extensible","Compact":"Compact","Compare each vendor\'s token share across the past few weeks":"Compare each vendor\'s token share across the past few weeks","Compare each vendor\'s token share across the past year":"Compare each vendor\'s token share across the past year","Compare each vendor\'s token share over the past 24 hours":"Compare each vendor\'s token share over the past 24 hours","Compare each vendor\'s token share over the past month":"Compare each vendor\'s token share over the past month","Compare each vendor\'s token share since launch":"Compare each vendor\'s token share since launch","Compare the most popular models on the platform":"Compare the most popular models on the platform","compatible API routes":"compatible API routes","Compatible API routes for common AI application workflows":"Compatible API routes for common AI application workflows","Complete API documentation with multi-language SDK support":"Complete API documentation with multi-language SDK support","Complete Order":"Complete Order","Complete these steps to finish the initial installation.":"Complete these steps to finish the initial installation.","Completed":"Completed","Completed top-up order for the user":"Completed top-up order for the user","Completion":"Completion","Completion price":"Completion price","Completion price ($/1M tokens)":"Completion price ($/1M tokens)","Completion ratio":"Completion ratio","Compliance confirmation required":"Compliance confirmation required","Compliance confirmed":"Compliance confirmed","Compliance confirmed successfully":"Compliance confirmed successfully","Concatenate channel system prompt with user&apos;s prompt":"Concatenate channel system prompt with user&apos;s prompt","Condition Path":"Condition Path","Condition Settings":"Condition Settings","Condition Value":"Condition Value","Conditional multipliers":"Conditional multipliers","Conditions":"Conditions","Conditions (AND)":"Conditions (AND)","Confidence":"Confidence","Configuration":"Configuration","Configuration File":"Configuration File","Configuration for Creem payment integration":"Configuration for Creem payment integration","Configuration for Epay payment integration":"Configuration for Epay payment integration","Configuration for Stripe payment integration":"Configuration for Stripe payment integration","Configuration required":"Configuration required","Configure":"Configure","Configure a Creem product for user recharge options.":"Configure a Creem product for user recharge options.","Configure a custom ratio for when users use a specific token group.":"Configure a custom ratio for when users use a specific token group.","Configure a group that users can select when creating API keys.":"Configure a group that users can select when creating API keys.","Configure a new custom OAuth provider for user authentication.":"Configure a new custom OAuth provider for user authentication.","Configure a payment method for user recharge options.":"Configure a payment method for user recharge options.","Configure a predefined chat link for end users.":"Configure a predefined chat link for end users.","Configure and deploy a new container instance.":"Configure and deploy a new container instance.","Configure API documentation links for the dashboard":"Configure API documentation links for the dashboard","Configure at:":"Configure at:","Configure available payment methods. Provide a JSON array.":"Configure available payment methods. Provide a JSON array.","Configure Creem products. Provide a JSON array.":"Configure Creem products. Provide a JSON array.","Configure discount rates based on recharge amounts":"Configure discount rates based on recharge amounts","Configure experimental data export for the dashboard":"Configure experimental data export for the dashboard","Configure in your Creem dashboard":"Configure in your Creem dashboard","Configure keyword filtering for prompts and responses.":"Configure keyword filtering for prompts and responses.","Configure model, caching, and group ratios used for billing":"Configure model, caching, and group ratios used for billing","Configure monitoring status page groups for the dashboard":"Configure monitoring status page groups for the dashboard","Configure per-model ratio for image inputs or outputs.":"Configure per-model ratio for image inputs or outputs.","Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.":"Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.","Configure pricing ratios for a specific model.":"Configure pricing ratios for a specific model.","Configure rate limiting rules for a specific user group.":"Configure rate limiting rules for a specific user group.","Configure the ratio for this group.":"Configure the ratio for this group.","Configure upstream providers and routing.":"Configure upstream providers and routing.","Configure Waffo Pancake hosted checkout integration for USD-priced top-ups":"Configure Waffo Pancake hosted checkout integration for USD-priced top-ups","Configure Waffo payment aggregation platform integration":"Configure Waffo payment aggregation platform integration","Configure your account behavior preferences":"Configure your account behavior preferences","Configure your account preferences and integrations":"Configure your account preferences and integrations","Configured routes and latency checks":"Configured routes and latency checks","Confirm":"Confirm","Confirm Action":"Confirm Action","Confirm and enable":"Confirm and enable","Confirm Batch Update":"Confirm Batch Update","Confirm Billing Conflicts":"Confirm Billing Conflicts","Confirm Changes":"Confirm Changes","Confirm Cleanup":"Confirm Cleanup","Confirm cleanup of inactive disk cache?":"Confirm cleanup of inactive disk cache?","Confirm clearing all channel affinity cache":"Confirm clearing all channel affinity cache","Confirm clearing cache for this rule":"Confirm clearing cache for this rule","Confirm compliance":"Confirm compliance","Confirm compliance terms":"Confirm compliance terms","Confirm Creem Purchase":"Confirm Creem Purchase","Confirm delete":"Confirm delete","Confirm disable":"Confirm Disable","Confirm enable":"Confirm Enable","Confirm invalidate":"Confirm Invalidate","Confirm log cleanup":"Confirm log cleanup","Confirm log file cleanup?":"Confirm log file cleanup?","Confirm New Password":"Confirm New Password","Confirm password":"Confirm password","Confirm Payment":"Confirm Payment","Confirm Selection":"Confirm Selection","Confirm settings and finish setup":"Confirm settings and finish setup","confirm that I bear legal responsibility arising from deployment":"confirm that I bear legal responsibility arising from deployment","Confirm Unbind":"Confirm Unbind","Confirm your identity before removing this Passkey from your account.":"Confirm your identity before removing this Passkey from your account.","Confirm your identity with Two-factor Authentication before registering a Passkey.":"Confirm your identity with Two-factor Authentication before registering a Passkey.","Confirmed at {{time}} by user #{{userId}}":"Confirmed at {{time}} by user #{{userId}}","Confirmed payment compliance":"Confirmed payment compliance","Conflict":"Conflict","Connect":"Connect","Connect through OpenAI, Claude, Gemini, and other compatible API routes":"Connect through OpenAI, Claude, Gemini, and other compatible API routes","Connected to io.net service normally.":"Connected to io.net service normally.","Connection error":"Connection error","Connection failed":"Connection failed","Connection successful":"Connection successful","Console":"Console","Console area":"Console area","Console Area":"Console Area","Console Content":"Console Content","Consume":"Consume","Consumed 
107in the last 24 hours":"Consumed in the last 24 hours","Container":"Container","Container name":"Container name","Containers":"Containers","Contains":"Contains","Contains Match":"Contains Match","Content":"Content","Content displayed on the home page (supports Markdown)":"Content displayed on the home page (supports Markdown)","Content not found.":"Content not found.","Content not modified!":"Content not modified!","Content width":"Content width","Context":"Context","Continue":"Continue","Continue with {{name}}":"Continue with {{name}}","Continue with Discord":"Continue with Discord","Continue with GitHub":"Continue with GitHub","Continue with LinuxDO":"Continue with LinuxDO","Continue with OIDC":"Continue with OIDC","Continue with Telegram":"Continue with Telegram","Continue with WeChat":"Continue with WeChat","Contract review, compliance, summarisation":"Contract review, compliance, summarisation","Control which models are exposed and which groups may use them.":"Control which models are exposed and which groups may use them.","Controls how much the model thinks before answering":"Controls how much the model thinks before answering","Controls whether user verification (biometrics/PIN) is required during Passkey flows.":"Controls whether user verification (biometrics/PIN) is required during Passkey flows.","Conversion rate from USD to your custom currency":"Conversion rate from USD to your custom currency","Convert reasoning_content to <think> tag in content":"Convert reasoning_content to <think> tag in content","Convert string to lowercase":"Convert string to lowercase","Convert string to uppercase":"Convert string to uppercase","Copied":"Copied","Copied {{count}} key(s)":"Copied {{count}} key(s)","Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})":"Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})","Copied to clipboard":"Copied to clipboard","Copied: {{model}}":"Copied: {{model}}","Copied!":"Copied!","Copy":"Copy","Copy {{name}} pricing":"Copy {{name}} pricing","Copy a request header":"Copy a request header","Copy All":"Copy All","Copy all backup codes":"Copy all backup codes","Copy All Codes":"Copy All Codes","Copy API key":"Copy API key","Copy Channel":"Copy Channel","Copy code":"Copy code","Copy Connection Info":"Copy Connection Info","Copy failed":"Copy failed","Copy Field":"Copy Field","Copy Header":"Copy Header","Copy Key":"Copy Key","Copy Link":"Copy Link","Copy model name":"Copy model name","Copy model names":"Copy model names","Copy prompt":"Copy prompt","Copy ready-to-run curl":"Copy ready-to-run curl","Copy redemption code":"Copy redemption code","Copy referral link":"Copy referral link","Copy Request Header":"Copy Request Header","Copy secret key":"Copy secret key","Copy selected codes":"Copy selected codes","Copy selected keys":"Copy selected keys","Copy source field to target field":"Copy source field to target field","Copy the key and paste it here":"Copy the key and paste it here","Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.":"Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.","Copy to clipboard":"Copy to clipboard","Copy token":"Copy token","Copy URL":"Copy URL","Copying...":"Copying...","Copywriting, ad creative, SEO":"Copywriting, ad creative, SEO","Core concepts":"Core concepts","Core Configuration":"Core Configuration","Core Features":"Core Features","Core pricing":"Core pricing","Cost":"Cost","Cost in USD per request, regardless of tokens used.":"Cost in USD per request, regardless of tokens used.","Cost Tracking":"Cost Tracking","Count must be between {{min}} and {{max}}":"Count must be between {{min}} and {{max}}","Coze":"Coze","CPU Threshold (%)":"CPU Threshold (%)","Create":"Create","Create a copy of:":"Create a copy of:","Create a key for your app or service":"Create a key for your app or service","Create a new user group to configure ratio overrides for.":"Create a new user group to configure ratio overrides for.","Create account":"Create account","Create an account":"Create an account","Create an API key to unlock the real request":"Create an API key to unlock the real request","Create and review invite or credit codes.":"Create and review invite or credit codes.","Create API Key":"Create API Key","Create cache":"Create cache","Create cache ratio":"Create cache ratio","Create Channel":"Create Channel","Create Code":"Create Code","Create credentials for the root user":"Create credentials for the root user","Create deployment":"Create deployment","Create Model":"Create Model","Create multiple API keys at once (random suffix will be added to names)":"Create multiple API keys at once (random suffix will be added to names)","Create multiple channels from multiple keys":"Create multiple channels from multiple keys","Create multiple redemption codes at once (1-100)":"Create multiple redemption codes at once (1-100)","Create new subscription plan":"Create New Subscription Plan","Create or update frequently asked questions for users":"Create or update frequently asked questions for users","Create or update system announcements for the dashboard":"Create or update system announcements for the dashboard","Create Plan":"Create Plan","Create Prefill Group":"Create Prefill Group","Create Provider":"Create Provider","Create Redemption Code":"Create Redemption Code","Create request parameter override rules with a visual editor or raw JSON.":"Create request parameter override rules with a visual editor or raw JSON.","Create request parameter override rules without editing raw JSON.":"Create request parameter override rules without editing raw JSON.","Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.":"Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.","Create succeeded":"Create succeeded","Create Vendor":"Create Vendor","Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.":"Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.","Create, revoke, and audit API tokens.":"Create, revoke, and audit API tokens.","Created":"Created","Created {{count}} redemption codes named {{name}} ({{quota}} each)":"Created {{count}} redemption codes named {{name}} ({{quota}} each)","Created a custom OAuth provider":"Created a custom OAuth provider","Created a deployment":"Created a deployment","Created a model":"Created a model","Created a prefill group":"Created a prefill group","Created a subscription plan":"Created a subscription plan","Created a vendor":"Created a vendor","Created At":"Created At","Created channel {{name}} (type {{type}}, count {{count}})":"Created channel {{name}} (type {{type}}, count {{count}})","Created user {{username}} (role {{role}})":"Created user {{username}} (role {{role}})","Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.":"Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.","Creating...":"Creating...","Creation failed":"Creation failed","Credential refreshed":"Credential refreshed","Credentials":"Credentials","Credentials verification failed":"Credentials verification failed","Credentials verification failed — double-check Merchant ID and API private key.":"Credentials verification failed — double-check Merchant ID and API private key.","Credit remaining":"Credit remaining","Creem API key (leave blank unless updating)":"Creem API key (leave blank unless updating)","Creem Gateway":"Creem Gateway","Creem Payment":"Creem Payment","Creem product ID from your Creem dashboard.":"Creem product ID from your Creem dashboard.","Creem products must be a JSON array":"Creem products must be a JSON array","Cross-group":"Cross-group","Cross-group retry":"Cross-group retry","Currency":"Currency","Currency & Display":"Currency & Display","Current Balance":"Current Balance","Current Billing":"Current Billing","Current Cache Size":"Current Cache Size","Current domain":"Current domain","Current email: {{email}}. Enter a new email to change.":"Current email: {{email}}. Enter a new email to change.","Current key":"Current key","Current legacy JSON is invali
107d, cannot append":"Current legacy JSON is invalid, cannot append","Current Level Only":"Current Level Only","Current models for the longest channel in this tag. May not include all models from all channels.":"Current models for the longest channel in this tag. May not include all models from all channels.","Current Password":"Current Password","Current Price":"Current Price","Current quota":"Current quota","Current Value":"Current Value","Current version":"Current version","Current:":"Current:","Custom":"Custom","Custom (seconds)":"Custom (seconds)","Custom Amount":"Custom Amount","Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.":"Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.","Custom API base URL. Leave empty to use provider default.":"Custom API base URL. Leave empty to use provider default.","Custom Currency":"Custom Currency","Custom Currency Symbol":"Custom Currency Symbol","Custom currency symbol is required":"Custom currency symbol is required","Custom database driver detected.":"Custom database driver detected.","Custom Error Response":"Custom Error Response","Custom Home Page":"Custom Home Page","Custom message shown when access is denied":"Custom message shown when access is denied","Custom model (comma-separated)":"Custom model (comma-separated)","Custom module":"Custom module","Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.":"Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.","Custom OAuth":"Custom OAuth","Custom OAuth Providers":"Custom OAuth Providers","Custom Seconds":"Custom Seconds","Custom sidebar section":"Custom sidebar section","Custom Time Range":"Custom Time Range","Custom Zoom":"Custom Zoom","Customize sidebar display content":"Customize sidebar display content","Daily":"Daily","Daily Check-in":"Daily Check-in","Daily token usage by model across the past few weeks":"Daily token usage by model across the past few weeks","Daily token usage by model across the past month":"Daily token usage by model across the past month","Daily token usage by model over the past month":"Daily token usage by model over the past month","Daily uptime over the last 30 days":"Daily uptime over the last 30 days","Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes":"Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes","Dark":"Dark","Dashboard":"Dashboard","Dashboard Preferences":"Dashboard Preferences","Dashboards, tokens, and usage analytics.":"Dashboards, tokens, and usage analytics.","Data Dashboard":"Data Dashboard","Data directory:":"Data directory:","Data is stored locally on this device. Use system backups to keep a safe copy.":"Data is stored locally on this device. Use system backups to keep a safe copy.","Data management and log viewing":"Data management and log viewing","Data retention":"Data retention","Database":"Database","Database check":"Database check","Date and time when this announcement should be displayed":"Date and time when this announcement should be displayed","Date Range":"Date Range","Day":"Day","Day of month":"Day of month","days":"days","Days to Retain":"Days to Retain","Decreased user quota by {{quota}}":"Decreased user quota by {{quota}}","Deducted by subscription":"Deducted by subscription","DeepSeek":"DeepSeek","default":"default","Default":"Default","Default (New Frontend)":"Default (New Frontend)","Default / range":"Default / range","Default API Version *":"Default API Version *","Default API version for this channel":"Default API version for this channel","Default Collapse Sidebar":"Default Collapse Sidebar","Default consumption chart":"Default consumption chart","Default Max Tokens":"Default Max Tokens","Default model call chart":"Default model call chart","Default range":"Default range","Default Responses API version, if empty, will use the API version above":"Default Responses API version, if empty, will use the API version above","Default system prompt for this channel":"Default system prompt for this channel","Default time granularity":"Default time granularity","Default to auto groups":"Default to auto groups","Default TTL (seconds)":"Default TTL (seconds)","Defaults to the wallet page when empty":"Defaults to the wallet page when empty","Define API endpoints for this model (JSON format)":"Define API endpoints for this model (JSON format)","Define endpoint mappings for each provider.":"Define endpoint mappings for each provider.","Define per-group rules to add, remove, or append selectable groups for specific user groups.":"Define per-group rules to add, remove, or append selectable groups for specific user groups.","Degraded performance recently":"Degraded performance recently","Delete":"Delete","Delete (":"Delete (","Delete {{count}} API key(s)?":"Delete {{count}} API key(s)?","Delete a runtime request header":"Delete a runtime request header","Delete Account":"Delete Account","Delete All Disabled":"Delete All Disabled","Delete All Disabled Channels?":"Delete All Disabled Channels?","Delete Auto-Disabled":"Delete Auto-Disabled","Delete Channel":"Delete Channel","Delete Channels?":"Delete Channels?","Delete condition":"Delete condition","Delete Condition":"Delete Condition","Delete failed":"Delete failed","Delete Field":"Delete Field","Delete group":"Delete group","Delete Header":"Delete Header","Delete Invalid":"Delete Invalid","Delete invalid codes":"Delete invalid codes","Delete invalid codes (used/disabled/expired)":"Delete invalid codes (used/disabled/expired)","Delete invalid redemption codes":"Delete invalid redemption codes","Delete Invalid Redemption Codes?":"Delete Invalid Redemption Codes?","Delete logs":"Delete logs","Delete mapping":"Delete mapping","Delete Model":"Delete Model","Delete Models?":"Delete Models?","Delete Provider":"Delete Provider","Delete Request Header":"Delete Request Header","Delete selected API keys":"Delete selected API keys","Delete selected channels":"Delete selected channels","Delete selected models":"Delete selected models","Deleted":"Deleted","Deleted a custom OAuth provider":"Deleted a custom OAuth provider","Deleted a deployment":"Deleted a deployment","Deleted a model":"Deleted a model","Deleted a passkey":"Deleted a passkey","Deleted a prefill group":"Deleted a prefill group","Deleted a redemption code":"Deleted a redemption code","Deleted a vendor":"Deleted a vendor","Deleted all disabled channels ({{count}})":"Deleted all disabled channels ({{count}})","Deleted channel {{name}} (ID: {{id}})":"Deleted channel {{name}} (ID: {{id}}
107)","Deleted invalid redemption codes":"Deleted invalid redemption codes","Deleted successfully":"Deleted successfully","Deleted user {{username}} (ID: {{id}})":"Deleted user {{username}} (ID: {{id}})","Deleting will permanently remove this subscription record (including benefit details). Continue?":"Deleting will permanently remove this subscription record (including benefit details). Continue?","Deleting...":"Deleting...","Demo site":"Demo site","Demo site mode":"Demo site mode","Demo Site Mode":"Demo Site Mode","Demote":"Demote","Density":"Density","Deploy your own gateway and start routing requests through your configured upstream services.":"Deploy your own gateway and start routing requests through your configured upstream services.","Deployment created successfully":"Deployment created successfully","Deployment details":"Deployment details","Deployment ID":"Deployment ID","Deployment location":"Deployment location","Deployment logs":"Deployment logs","Deployment Region *":"Deployment Region *","Deployment requested":"Deployment requested","Deployments":"Deployments","Desc":"Desc","Describe":"Describe","Describe this model...":"Describe this model...","Describe this vendor...":"Describe this vendor...","Description":"Description","Description is required":"Description is required","Designed and Developed by":"Designed and Developed by","designed for scale":"designed for scale","Destroyed":"Destroyed","Detailed request logs for investigations.":"Detailed request logs for investigations.","Details":"Details","Detect All Upstream Updates":"Detect All Upstream Updates","Detected database":"Detected database","Detected high-risk status code redirect rules":"The following high-risk status code redirect rules were detected:","Detection complete: {{add}} to add, {{remove}} to remove":"Detection complete: {{add}} to add, {{remove}} to remove","Detection failed":"Detection failed","Determines how this group is applied elsewhere.":"Determines how this group is applied elsewhere.","Deterministic sampling seed (best-effort)":"Deterministic sampling seed (best-effort)","Developer Friendly":"Developer Friendly","Device Type Preference":"Device Type Preference","Dify":"Dify","Dify channels only support chatflow and agent, and agent does not support images":"Dify channels only support chatflow and agent, and agent does not support images","Digest:":"Digest:","Direction":"Direction","Directory File Count":"Directory File Count","Directory Total Size":"Directory Total Size","Disable":"Disable","Disable 2FA":"Disable 2FA","Disable All":"Disable All","Disable on failure":"Disable on failure","Disable selected channels":"Disable selected channels","Disable selected models":"Disable selected models","Disable store passthrough":"Disable store passthrough","Disable this key?":"Disable this key?","Disable threshold (seconds)":"Disable threshold (seconds)","Disable Two-Factor Authentication":"Disable Two-Factor Authentication","disabled":"disabled","Disabled":"Disabled","Disabled all channels with tag: {{tag}}":"Disabled all channels with tag: {{tag}}","Disabled channels with tag {{tag}}":"Disabled channels with tag {{tag}}","Disabled lanes are omitted on save.":"Disabled lanes are omitted on save.","Disabled Reason":"Disabled Reason","Disabled Time":"Disabled Time","Disabling...":"Disabling...","Discord":"Discord","Discount":"Discount","Discount map by recharge amount (JSON object)":"Discount map by recharge amount (JSON object)","Discount Rate":"Discount Rate","Discount rate must be ≤ 1":"Discount rate must be ≤ 1","Discount rate must be greater than 0":"Discount rate must be greater than 0","Discount Rate:":"Discount Rate:","Discount ratio for cache hits.":"Discount ratio for cache hits.","Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel."
107:"Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel.","Discouraged":"Discouraged","Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.":"Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.","Discover the leading models in each domain":"Discover the leading models in each domain","Discover the most-used models and rising vendors on the platform, updated from live usage data.":"Discover the most-used models and rising vendors on the platform, updated from live usage data.","Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.":"Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.","Discovering...":"Discovering...","Disk cache cleared":"Disk cache cleared","Disk Cache Settings":"Disk Cache Settings","Disk Cache Threshold (MB)":"Disk Cache Threshold (MB)","Disk cache, system performance monitoring, and operation statistics":"Disk cache, system performance monitoring, and operation statistics","Disk Hits":"Disk Hits","Disk Threshold (%)":"Disk Threshold (%)","Display in Currency":"Display in Currency","Display Mode":"Display Mode","Display name":"Display name","Display Name":"Display Name","Display name and email used in outgoing messages":"Display name and email used in outgoing messages","Display Name Field":"Display Name Field","Display name for this chat client.":"Display name for this chat client.","Display name for this monitoring group (max 50 characters)":"Display name for this monitoring group (max 50 characters)","Display name for this payment method.":"Display name for this payment method.","Display name shown to users.":"Display name shown to users.","Display Options":"Display Options","Display Token Statistics":"Display Token Statistics","Displayed in":"Displayed in","Displays the mobile sidebar.":"Displays the mobile sidebar.","Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.":"Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.","Do not repeat check-in; only once per day":"Do not repeat check-in; only once per day","Do regex replacement in the target field":"Do regex replacement in the target field","Do string replacement in the target field":"Do string replacement in the target field","Docs":"Docs","Documentation Link":"Documentation Link","Documentation or external knowledge base.":"Documentation or external knowledge base.","does not exist or might have been removed.":"does not exist or might have been removed.","Domain":"Domain","Domain Filter Mode":"Domain Filter Mode","Don\'t have an account?":"Don\'t have an account?","Done":"Done","Doubao custom API address editing unlocked":"Doubao custom API address editing unlocked","DoubaoVideo":"DoubaoVideo","Double check the configuration below. Your system will be locked until initialization is complete.":"Double check the configuration below. Your system will be locked until initialization is complete.","Download":"Download","Draw":"Draw","Drawing":"Drawing","Drawing logs":"Drawing logs","Drawing Logs":"Drawing Logs","Drawing task records":"Drawing task records","Duplicate":"Duplicate","Duplicate group names: {{names}}":"Duplicate group names: {{names}}","Duplicate source model mappings are not allowed":"Duplicate source model mappings are not allowed","Duplicate source model(s): {{models}}":"Duplicate source model(s): {{models}}","Duration":"Duration","Duration (hours)":"Duration (hours)","Duration Settings":"Duration Settings","Duration Unit":"Duration Unit","Duration Value":"Duration Value","Dynamic Pricing":"Dynamic Pricing","e.g. ¥ or HK$":"e.g. ¥ or HK$","e.g. 401, 403, 429, 500-599":"e.g. 401, 403, 429, 500-599","e.g. 8 means 1 USD = 8 units":"e.g. 8 means 1 USD = 8 units","e.g. Basic Plan":"e.g. Basic Plan","e.g. Clean tool parameters to avoid upstream validation errors":"e.g. Clean tool parameters to avoid upstream validation errors","e.g. example.com":"e.g. example.com","e.g. llama3.1:8b":"e.g. llama3.1:8b","e.g. My GitLab":"e.g. My GitLab","e.g. my-gitlab":"e.g. my-gitlab","e.g. New API Console":"e.g. New API Console","e.g. openid profile email":"e.g. openid profile email","e.g. Suitable for light usage":"e.g. Suitable for light usage","e.g. This request does not meet access policy":"e.g. This request does not meet access policy","e.g., 0.95":"e.g., 0.95","e.g., 100":"e.g., 100","e.g., 123456":"e.g., 123456","e.g., 2025-04-01-preview":"e.g., 2025-04-01-preview","e.g., 50":"e.g., 50","e.g., 500000":"e.g., 500000","e.g., 7342866812345":"e.g., 7342866812345","e.g., 8 means 8 local currency per USD":"e.g., 8 means 8 local currency per USD","e.g., Alipay, WeChat":"e.g., Alipay, WeChat","e.g., Basic Package":"e.g., Basic Package","e.g., CN2 GIA":"e.g., CN2 GIA","e.g., Core APIs, OpenAI, Claude"
107:"e.g., Core APIs, OpenAI, Claude","e.g., d6b5da8hk1awo8nap34ube6gh":"e.g., d6b5da8hk1awo8nap34ube6gh","e.g., default, vip, premium":"e.g., default, vip, premium","e.g., gpt-4, claude-3":"e.g., gpt-4, claude-3","e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$":"e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$","e.g., https://api.example.com (path before /suno)":"e.g., https://api.example.com (path before /suno)","e.g., https://api.openai.com/v1/chat/completions":"e.g., https://api.openai.com/v1/chat/completions","e.g., https://ark.cn-beijing.volces.com":"e.g., https://ark.cn-beijing.volces.com","e.g., https://docs-test-001.openai.azure.com":"e.g., https://docs-test-001.openai.azure.com","e.g., https://fastgpt.run/api/openapi":"e.g., https://fastgpt.run/api/openapi","e.g., OpenAI GPT-4 Production":"e.g., OpenAI GPT-4 Production","e.g., preview":"e.g., preview","e.g., prod_xxx":"e.g., prod_xxx","e.g., Recommended for China Mainland Users":"e.g., Recommended for China Mainland Users","e.g., us-central1 or JSON format for model-specific regions":"e.g., us-central1 or JSON format for model-specific regions","e.g., v2.1":"e.g., v2.1","Each backup code can only be used once.":"Each backup code can only be used once.","Each item must be an object with a single key-value pair.":"Each item must be an object with a single key-value pair.","Each item must have exactly one key-value pair.":"Each item must have exactly one key-value pair.","Each line represents one keyword. Leave blank to disable the list but keep the switch states.":"Each line represents one keyword. Leave blank to disable the list but keep the switch states.","Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.":"Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.","Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.":"Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.","Each tier supports up to 2 conditions. The last tier without conditions is the fallback.":"Each tier supports up to 2 conditions. The last tier without conditions is the fallback.","Earn rewards when your referrals add funds. Transfer accumulated rewards to your balance anytime.":"Earn rewards when your referrals add funds. Transfer accumulated rewards to your balance anytime.","Edit":"Edit","Edit {{title}}":"Edit {{title}}","Edit all channels with tag:":"Edit all channels with tag:","Edit Announcement":"Edit Announcement","Edit API Shortcut":"Edit API Shortcut","Edit billing ratios and user-selectable groups in one table.":"Edit billing ratios and user-selectable groups in one table.","Edit Channel":"Edit Channel","Edit chat preset":"Edit chat preset","Edit discount tier":"Edit discount tier","Edit FAQ":"Edit FAQ","Edit group rate limit":"Edit group rate limit","Edit JSON object directly. Suitable for simple parameter overrides.":"Edit JSON object directly. Suitable for simple parameter overrides.","Edit JSON text directly. Format will be validated on save.":"Edit JSON text directly. Format will be validated on save.","Edit model":"Edit model","Edit Model":"Edit Model","Edit model pricing":"Edit model pricing","Edit OAuth Provider":"Edit OAuth Provider","Edit payment method":"Edit payment method","Edit Prefill Group":"Edit Prefill Group","Edit product":"Edit product","Edit ratio override":"Edit ratio override","Edit Rule":"Edit Rule","Edit selectable group":"Edit selectable group","Edit Tag":"Edit Tag","Edit Tag:":"Edit Tag:","Edit Uptime Kuma Group":"Edit Uptime Kuma Group","Edit Vendor":"Edit Vendor","edit_this":"edit_this","Edited channels with tag {{tag}}":"Edited channels with tag {{tag}}","Editor mode":"Editor mode","Education":"Education","Email":"Email","Email (required for verification)":"Email (required for verification)","Email Address":"Email Address","Email Alias Restriction":"Email Alias Restriction","Email bound successfully!":"Email bound successfully!","Email Domain Restriction":"Email Domain Restriction","Email Domain Whitelist":"Email Domain Whitelist","Email Field":"Email Field","Email Verification":"Email Verification","Email, summarisation, knowledge work":"Email, summarisation, knowledge work","Embeddings":"Embeddings","Empty":"Empty","Empty value will be saved as {}.":"Empty value will be saved as {}.","Enable":"Enable","Enable 2FA":"Enable 2FA","Enable All":"Enable All","Enable check-in feature":"Enable check-in feature","Enable Data Dashboard":"Enable Data Dashboard","Enable demo mode with limited functionality":"Enable demo mode with limited functionality","Enable Discord OAuth":"Enable Discord OAuth","Enable Disk Cache":"Enable Disk Cache","Enable drawing features":"Enable drawing features","Enable filtering":"Enable filtering","Enable FunctionCall thoughtSignature Fill":"Enable FunctionCall thoughtSignature Fill","Enable GitHub OAuth":"Enable GitHub OAuth","Enable Groups":"Enable Groups","Enable if this is an OpenRouter enterprise account with special response format":"Enable if this is an OpenRouter enterprise account with special response format","Enable io.net deployments":"Enable io.net deployments","Enable io.net model deployment service in console":"Enable io.net model deployment service in console","Enable LinuxDO OAuth":"Enable LinuxDO OAuth","Enable model performance metrics":"Enable model performance metrics","Enable OIDC":"Enable OIDC","Enable or disable this channel":"Enable or disable this channel","Enable or disable this model":"Enable or disable this model","Enable Passkey":"Enable Passkey","Enable Performance Monitoring":"Enable Performance Monitoring","Enable rate limiting":"Enable rate limiting","Enable Request Passthrough":"Enable Request Passthrough","Enable selected channels":"Enable selected channels","Enable selected models":"Enable selected models","Enable SSL/TLS":"Enable SSL/TLS","Enable SSRF Protection":"Enable SSRF Protection","Enable streaming mode for the test request.":"Enable streaming mode for the test request.","Enable Telegram OAuth":"Enable Telegram OAuth","Enable test mode for Creem payments":"Enable test mode for Creem payments","Enable this key?":"Enable this key?","Enable Turnstile":"Enable Turnstile","Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.":"Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.","Enable unlimited quota for this API key":"Enable unlimited quota for this API key","Enable violation deduction":"Enable violation deduction","Enable Waffo":"Enable Waffo","Enable Waffo Pancake":"Enable Waffo Pancake","Enable WeChat Auth":"Enable WeChat Auth","Enable when proxying workers that fetch images over HTTP.":"Enable when proxying workers that fetch images over HTTP.","Enabled":"Enabled","Enabled all channels with tag: {{tag}}":"Enabled all channels with tag: {{tag}}","Enabled channels with tag {{tag}}":"Enabled channels with tag {{tag}}","Enabled Status":"Enabled Status","Enabling...":"Enabling...","Encourages introducing new topics":"Encourages introducing new topics","End":"End","End Error":"End Error","End Reason":"End Reason","End Time":"End Time","End-user identifier for abuse monitoring":"End-user identifier for abuse monitoring","Endpoint":"Endpoint","Endpoint config":"Endpoint config","Endpoint Configuration":"Endpoint Configuration","Endpoint Type":"Endpoint Type","Endpoint, provider-specific settings, and credentials.":"Endpoint, provider-specific settings, and credentials.","Endpoint:":"Endpoint:","Endpoints":"Endpoints","English":"English","Ensure Prefix":"Ensure Prefix","Ensure Suffix":"Ensure Suffix","Ensure the string has a specified prefix":"Ensure the string has a specified prefix","Ensure the string has a specified suffix":"Ensure the string has a specified suffix","Enter 6-digit code":"Enter 6-digit code","Enter a name":"Enter a name","Enter a new name":"Enter a new name","Enter a positive or negative amount to adjust the quota":"Enter a positive or negative amount to adjust the quota","Enter a valid email or leave blank":"Enter a valid email or leave blank","Enter a value and press Enter":"Enter a value and press Enter","Enter amount in {{currency}}":"Enter amount in {{currency}}","Enter amount in tokens":"Enter amount in tokens","Enter announcement content (supports Markdown & HTML)":"Enter announcement content (supports Markdown & HTML)","Enter announcement content (supports Markdown/HTML)":"Enter announcement content (supports Markdown/HTML)","Enter API Key":"Enter API Key","Enter API key for this channel":"Enter API key for this channel","Enter API Key, format: APIKey|Region":"Enter API Key, format: APIKey|Region","Enter API Key, one per line, format: APIKey|Region":"Enter API Key, one per line, format: APIKey|Region","Enter application token":"Enter application token","Enter authenticator code":"Enter authenticator code","Enter backup code (e.g., CAWD-OQDV)":"Enter backup code (e.g., CAWD-OQDV)","Enter code":"Enter code","Enter code or backup code":"Enter code or backup code","
107Enter Completion price to calculate ratio":"Enter Completion price to calculate ratio","Enter Creem API key":"Enter Creem API key","Enter custom API endpoint URL":"Enter custom API endpoint URL","Enter deployment region or JSON mapping:":"Enter deployment region or JSON mapping:","Enter display name":"Enter display name","Enter HTML code (e.g., <p>About us...</p>) or a URL (e.g., https://example.com) to embed as iframe":"Enter HTML code (e.g., <p>About us...</p>) or a URL (e.g., https://example.com) to embed as iframe","Enter Input price to calculate ratio":"Enter Input price to calculate ratio","Enter JSON to override request headers":"Enter JSON to override request headers","Enter key, format: AccessKey|SecretAccessKey|Region":"Enter key, format: AccessKey|SecretAccessKey|Region","Enter key, one per line, format: AccessKey|SecretAccessKey|Region":"Enter key, one per line, format: AccessKey|SecretAccessKey|Region","Enter model name":"Enter model name","Enter new key to update":"Enter new key to update","Enter new key to update, or leave empty to keep current key":"Enter new key to update, or leave empty to keep current key","Enter new tag name (leave empty to disband tag)":"Enter new tag name (leave empty to disband tag)","Enter new tag name or leave empty":"Enter new tag name or leave empty","Enter new token to update":"Enter new token to update","Enter one API key per line for batch creation":"Enter one API key per line for batch creation","Enter one key per line for batch creation":"Enter one key per line for batch creation","Enter one keyword per line":"Enter one keyword per line","Enter password":"Enter password","Enter password (8-20 characters)":"Enter password (8-20 characters)","Enter password (min 8 characters)":"Enter password (min 8 characters)","Enter quota in {{currency}}":"Enter quota in {{currency}}","Enter quota in tokens":"Enter quota in tokens","Enter secret key":"Enter secret key","Enter system prompt (user prompt takes priority)":"Enter system prompt (user prompt takes priority)","Enter tag name (optional)":"Enter tag name (optional)","Enter the 6-digit code from your authenticator app":"Enter the 6-digit code from your authenticator app","Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.":"Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.","Enter the complete URL, supports":"Enter the complete URL, supports","Enter the Coze agent ID":"Enter the Coze agent ID","Enter the full URL of your Gotify server":"Enter the full URL of your Gotify server","Enter the knowledge base ID":"Enter the knowledge base ID","Enter the path before /suno, usually just the domain":"Enter the path before /suno, usually just the domain","Enter the quota amount in {{currency}}":"Enter the quota amount in {{currency}}","Enter the quota amount in tokens":"Enter the quota amount in tokens","Enter the verification code":"Enter the verification code","Enter threshold":"Enter threshold","Enter token counts to preview the estimated cost (excluding group multipliers).":"Enter token counts to preview the estimated cost (excluding group multipliers).","Enter URL...":"Enter URL...","Enter username":"Enter username","Enter verification code":"Enter verification code","Enter webhook secret":"Enter webhook secret","Enter your authenticator code or a backup code":"Enter your authenticator code or a backup code","Enter your email":"Enter your email","Enter your redemption code":"Enter your redemption code","Enter your registered email and we will send you a link to reset your password.":"Enter your registered email and we will send you a link to reset your password.","Enter your username":"Enter your username","Enter your username or email":"Enter your username or email","Enterprise Account":"Enterprise Account","Enterprise-grade security with comprehensive permission management":"Enterprise-grade security with comprehensive permission management","Entrypoint (space separated)":"Entrypoint (space separated)","Env (JSON object)":"Env (JSON object)","Environment variables":"Environment variables","Environment variables (JSON)":"Environment variables (JSON)","Epay endpoint":"Epay endpoint","Epay Gateway":"Epay Gateway","Epay merchant ID":"Epay merchant ID","Epay secret key":"Epay secret key","Equals":"Equals","Error":"Error","Error Code (optional)":"Error Code (optional)","Error Message":"Error Message","Error Message (required)":"Error Message (required)","Error Type (optional)":"Error Type (optional)","Estimated cost":"Estimated cost","Estimated quota cost":"Estimated quota cost","Exact":"Exact","Exact Match":"Exact Match","Example":"Example","Example (all channels):":"Example (all channels):","Example (specific channels):":"Example (specific channels):","Example:":"Example:","example.com&#10;blocked-site.com":"example.com&#10;blocked-site.com","example.com&#10;company.com":"example.com&#10;company.com","Excellent":"Excellent","Exchange rate is required":"Exchange rate is required","Exchange rate must be greater than 0":"Exchange rate must be greater than 0","Execute code in a sandbox during the response":"Execute code in a sandbox during the response","Exhausted":"Exhausted","Existing account will be reused":"Existing account will be reused","Existing Models ({{count}})":"Existing Models ({{count}})","Exists":"Exists","Expand":"Expand","Expand All":"Expand All","Expected a JSON array of group identifiers":"Expected a JSON array of group identifiers","Expected a JSON array.":"Expected a JSON array.","Experiment with prompts and models in real time.":"Experiment with prompts and models in real time.","Expiration Time":"Expiration Time","expired":"expired","Expired":"Expired","Expired at":"Expired at","Expired time cannot be earlier than current time":"Expired time cannot be earlier than current time","Expires":"Expires","Expose ratio API":"Expose ratio API","Exposes the pricing/models catalog in the top navigation.":"Exposes the pricing/models catalog in the top navigation.","Expression":"Expression","Expression based":"Expression based","Expression billing":"Expression billing","Expression editor":"Expression editor","Expression error":"Expression error","Expression pricing":"Expression pricing","Extend":"Extend","Extend deployment":"Extend deployment","Extend failed":"Extend failed","Extended successfully":"Extended successfully","External Device":"External Device","External link for users to purchase quota":"External link for users to purchase quota","External operations":"External operations","External operations mode":"External operations mode","External Speed Test":"External Speed Test","Extra":"Extra","Extra Notes (Optional)":"Extra Notes (Optional)","extras":"extras","Fail Reason":"Fail Reason","Fail Reason Details":"Fail Reason Details","Failed":"Failed","Failed to {{action}} user":"Failed to {{action}} user","Failed to adjust quota":"Failed to adjust quota","Failed to apply overwrite.":"Failed to apply overwrite.","Failed to bind email":"Failed to bind email","Failed to change password":"Failed to change password","Failed to check for updates":"Failed to check for updates","Failed to clean logs":"Failed to clean logs","Failed to complete order":"Failed to complete order","Failed to complete Passkey login":"Failed to complete Passkey login","Failed to confirm compliance":"Failed to confirm compliance","Failed to contact GitHub releases API":"Failed to contact GitHub releases API","Failed to copy":"Failed to copy","Failed to copy channel":"Failed to copy channel","Failed to copy keys":"Failed to copy keys","Failed to copy model names":"Failed to copy model names","Failed to copy to clipboard":"Failed to copy to clipboard","Failed to create API key":"Failed to create API key","Failed to create channel":"Failed to create channel","Failed to create deployment":"Failed to create deployment","Failed to create provider":"Failed to create provider","Failed to create redemption code":"Failed to create redemption code","Failed to create user":"Failed to create user","Failed to delete {{count}} model(s)":"Failed to delete {{count}} model(s)","Failed to delete account":"Failed to delete account","Failed to delete API key":"Failed to delete API key","Failed to delete API keys":"Failed to delete API keys","Failed to delete channel":"Failed to delete channel","Failed to delete disabled channels":"Failed to delete disabled channels","Failed to delete invalid redemption codes":"Failed to delete invalid redemption codes","Failed to delete model":"Failed to delete model","Failed to delete provider":"Failed to delete provider","Failed to delete redemption code":"Failed to delete redemption code","Failed to delete user":"Failed to delete user","Failed to delete vendor":"Failed to delete vendor","Failed to disable {{count}} model(s)":"Failed to disable {{count}} model(s)","Failed to disable 2FA":"Failed to disable 2FA","Failed to disable channels":"Failed to disable channels","Failed to disable model":"Failed to disable model","Failed to disable tag channels":"Failed to disable tag channels","Failed to discover OIDC endpoints":"Failed to discover OIDC endpoints","Failed to enable {{count}} model(s)":"Failed to enable {{count}} model(s)","Failed to enable 2FA":"Failed to enable 2FA","Failed to enable channels":"Failed to enable channels","Failed to enable model":"Failed to enable model","Failed to enable tag channels":"Failed to enable tag channels","Failed to fetch channel key":"Failed to fetch channel key","Failed to fetch checkin status":"Failed to fetch check-in status","Failed to fetch deployment details":"Failed to fetch deployment details","Failed to fetch models":"Failed to fetch models","Failed to fetch OIDC configuration. Please check the URL and network status":"Failed to fetch OIDC configuration. Please check the URL and network status","Failed to fetch upstream prices":"Failed to fetch upstream prices","Failed to fetch upstream ratios":"Failed to fetch upstream ratios","Failed to fetch usage":"Failed to fetch usage","Failed to fetch user information":"Failed to fetch user information","Failed to fix abilities":"Failed to fix abilities","Failed to generate token":"Failed to generate token","Failed to initialize OAuth":"Failed to initialize OAuth","Failed to initialize system":"Failed to initialize system","Failed to load":"Failed to load","Failed to load API keys":"Failed to load API keys","Failed to load billing history":"Failed to load billing history","Failed to load home page content":"Failed to load home page content","Failed to load image":"Failed to load image","Failed to load key status":"Failed to load key status","Failed to load logs":"Failed to load logs","Failed to load Passkey status":"Failed to load Passkey status","Failed to load profile":"Failed to load profile","Failed to load redemption codes":"Failed to load redemption codes","Failed to load setup data":"Failed to load setup data","Failed to load setup status":"Failed to load setup status","Failed to load tag data":"Failed to load tag data","Failed to load users":"Failed to load users","Failed to parse group items":"Failed to parse group items","Failed to parse JSON file: {{name}}":"Failed to parse JSON file: {{name}}","Failed to query balance":"Failed to query balance","Failed to refresh cache stats":"Failed to refresh cache stats","Failed to refresh credential":"Failed to refresh credential","Failed to regenerate backup codes":"Failed to regenerate backup codes","Failed to register Passkey":"Failed to register Passkey","Failed to remove Passkey":"Failed to remove Passkey","Failed to reset 2FA":"Failed to reset 2FA","Failed to reset model ratios":"Failed to reset model ratios","Failed to reset Passkey":"Failed to reset Passkey","Failed to save":"Failed to save","Failed to save announcements":"Failed to save announcements","Failed to save API info":"Failed to save API info","Failed to save FAQ":"Failed to save FAQ","Failed to save Uptime Kuma groups":"Failed to save Uptime Kuma groups","Failed to search API keys":"Failed to search API keys","Failed to search redemption codes":"Failed to search redemption codes","Failed to search users":"Failed to search users","Failed to send verification code":"Failed to send verification code","Failed to set tag":"Failed to set tag","Failed to setup 2FA":"Failed to setup 2FA","Failed to start {{provider}} login":"Failed to start {{provider}} login","Failed to start Discord login":"Failed to start Discord login","Failed to start GitHub login":"Failed to start GitHub login","Failed to start LinuxDO login":"Failed to start LinuxDO login","Failed to start OIDC login":"Failed to start OIDC login","Failed to start Passkey login":"Failed to start Passkey login","Failed to start Passkey registration":"Failed to start Passkey registration","Failed to start testing all channels":"Failed to start testing all channels","Failed to sync prices":"Failed to sync prices","Failed to sync ratios":"Failed to sync ratios","Failed to test all channels":"Failed to test all channels","Failed to test channel":"Failed to test channel","Failed to update all balances":"Failed to update all balances","Failed to update API key":"Failed to update API key","Failed to update API key status":"Failed to update API key status","Failed to update balance":"Failed to update balance","Failed to update channel":"Failed to update channel","Failed to update models":"Failed to update models","Failed to update profile":"Failed to update profile","Failed to update provider":"Failed to update provider","Failed to update redemption code":"Failed to update redemption code","Failed to update redemption code status":"Failed to update redemption code status","Failed to update setting":"Failed to update setting","Failed to update settings":"Failed to update settings","Failed to update tag":"Failed to update tag","Failed to update user":"Failed to update user","Failure keywords":"Failure keywords","Fair":"Fair","Fallback t
107ier":"Fallback tier","FAQ":"FAQ","FAQ added. Click \\"Save Settings\\" to apply.":"FAQ added. Click \\"Save Settings\\" to apply.","FAQ deleted. Click \\"Save Settings\\" to apply.":"FAQ deleted. Click \\"Save Settings\\" to apply.","FAQ saved successfully":"FAQ saved successfully","FAQ updated. Click \\"Save Settings\\" to apply.":"FAQ updated. Click \\"Save Settings\\" to apply.","FastGPT":"FastGPT","Feature in development":"Feature in development","Fee":"Fee","Fee Amount":"Fee Amount","Fetch available models for:":"Fetch available models for:","Fetch from Upstream":"Fetch from Upstream","Fetch Models":"Fetch Models","Fetched {{count}} model(s) from upstream":"Fetched {{count}} model(s) from upstream","Fetched {{count}} models":"Fetched {{count}} models","Fetching prefill groups...":"Fetching prefill groups...","Fetching upstream prices...":"Fetching upstream prices...","Fetching upstream ratios...":"Fetching upstream ratios...","field":"field","Field Mapping":"Field Mapping","Field passthrough controls":"Field passthrough controls","Field Path":"Field Path","File":"File","File Search":"File Search","Files to Retain":"Files to Retain","Fill All Models":"Fill All Models","Fill Codex CLI / Claude CLI Templates":"Fill Codex CLI / Claude CLI Templates","Fill example (all channels)":"Fill example (all channels)","Fill example (specific channels)":"Fill example (specific channels)","Fill in both Merchant ID and API Private Key before creating.":"Fill in both Merchant ID and API Private Key before creating.","Fill in the credentials above to begin.":"Fill in the credentials above to begin.","Fill in the following info to create a new subscription plan":"Fill in the following info to create a new subscription plan","Fill Related Models":"Fill Related Models","Fill Template":"Fill Template","Fill Templates":"Fill Templates","Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format":"Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format","Filled {{count}} model(s)":"Filled {{count}} model(s)","Filled {{count}} related model(s)":"Filled {{count}} related model(s)","Filter":"Filter","Filter by API key...":"Filter by API key...","Filter by channel ID":"Filter by channel ID","Filter by group":"Filter by group","Filter by Midjourney task ID":"Filter by Midjourney task ID","Filter by model name...":"Filter by model name...","Filter by model...":"Filter by model...","Filter by name or ID...":"Filter by name or ID...","Filter by name, ID, or key...":"Filter by name, ID, or key...","Filter by name...":"Filter by name...","Filter by price field":"Filter by price field","Filter by ratio type":"Filter by ratio type","Filter by request ID":"Filter by request ID","Filter by task ID":"Filter by task ID","Filter by token name":"Filter by token name","Filter by username":"Filter by username","Filter by username, name or email...":"Filter by username, name or email...","Filter Dashboard Models":"Filter Dashboard Models","Filter models by provider, group, type, endpoint, and tags.":"Filter models by provider, group, type, endpoint, and tags.","Filter models by type, endpoint, vendor, group and tags":"Filter models by type, endpoint, vendor, group and tags","Filter models...":"Filter models...","Filter the model analytics view by time range and user.":"Filter the model analytics view by time range and user.","Filter...":"Filter...","Filters":"Filters","Filters active":"Filters active","Final Consumed":"Final Consumed","Final cost = base × multiplier when conditions match":"Final cost = base × multiplier when conditions match","Final price multiplier (0.95 = 5% discount":"Final price multiplier (0.95 = 5% discount","Finance":"Finance","Finish Time":"Finish Time","First API request":"First API request","First/Last Frame to Video":"First/Last Frame to Video","Fix Abilities":"Fix Abilities","Fixed abilities: {{success}} succeeded, {{fails}} failed":"Fixed abilities: {{success}} succeeded, {{fails}} failed","Fixed price":"Fixed price","Fixed price (USD)":"Fixed price (USD)","Fixed request price":"Fixed request price","Floating":"Floating","FluentRead extension not detected. Please ensure it is installed and active.":"FluentRead extension not detected. Please ensure it is installed and active.","Flush interval (minutes)":"Flush interval (minutes)","Follow the guided steps to prepare your workspace before the first login.":"Follow the guided steps to prepare your workspace before the first login.","Font":"Font","Footer":"Footer","Footer text displayed at the bottom of pages":"Footer text displayed at the bottom of pages","footer.columns.about.links.aboutProject":"About Project","footer.columns.about.links.contact":"Contact Us","footer.columns.about.links.features":"Features","footer.columns.about.title":"About Us","footer.columns.docs.links.apiDocs":"API Documentation","footer.columns.docs.links.installation":"Installation Guide","footer.columns.docs.links.quickStart":"Quick Start","footer.columns.docs.title":"Documentation","footer.columns.related.links.midjourney":"Midjourney-Proxy","footer.columns.related.links.newApiKeyTool":"new-api-key-tool","footer.columns.related.links.oneApi":"One API","footer.columns.related.title":"Related Projects","footer.defaultCopyright":"All rights reserved.","footer.newapi.projectAttributionSuffix":"All rights reserved. Designed and developed by the project contributors.","For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment":"For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment","For private deployments, format: https://fastgpt.run/api/openapi":"For private deployments, format: https://fastgpt.run/api/openapi","Force a syntactically valid JSON response":"Force a syntactically valid JSON response","Force AUTH LOGIN":"Force AUTH LOGIN","Force Format":"Force Format","Force format response to OpenAI standard (OpenAI channel only)":"Force format response to OpenAI standard (OpenAI channel only)","Force JSON object or schema-conforming output":"Force JSON object or schema-conforming output","Force SMTP authentication using AUTH LOGIN method":"Force SMTP authentication using AUTH LOGIN method","Force-disabled two-factor authentication for the user":"Force-disabled two-factor authentication for the user","Forest Whisper":"Forest Whisper","Forgot password":"Forgot password","Forgot password?":"Forgot password?","Form reset to saved values":"Form reset to saved values","Format":"Format","Format JSON":"Format JSON","Format:":"Format:","Format: Access Key ID|Secret Acce
107ss Key":"Format: Access Key ID|Secret Access Key","Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)":"Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)","Format: Ak|Sk|Region":"Format: Ak|Sk|Region","Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041":"Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041","Format: APIKey|SecretKey":"Format: APIKey|SecretKey","Format: APPID|APISecret|APIKey":"Format: APPID|APISecret|APIKey","Format: AppId|SecretId|SecretKey":"Format: AppId|SecretId|SecretKey","Forward requests directly to upstream providers without any post-processing.":"Forward requests directly to upstream providers without any post-processing.","Frames per second":"Frames per second","Free: {{free}} / Total: {{total}}":"Free: {{free}} / Total: {{total}}","Friendly name to identify this channel":"Friendly name to identify this channel","From Address":"From Address","From IO.NET deployment":"From IO.NET deployment","From model redirect, not yet added to models list":"From model redirect, not yet added to models list","Frontend Theme":"Frontend Theme","Full API Key":"Full API Key","Full Base URL (supports":"Full Base URL (supports","Full Code":"Full Code","Full input length":"Full input length","Full layout":"Full layout","Full width":"Full width","Function calling":"Function calling","Functions":"Functions","GC Count":"GC Count","GC executed":"GC executed","GC execution failed":"GC execution failed","Gemini":"Gemini","Gemini Image 4K":"Gemini Image 4K","Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.":"Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.","General":"General","General Settings":"General Settings","Generate and manage your API access token":"Generate and manage your API access token","Generate Lyrics":"Generate Lyrics","Generate Music":"Generate Music","Generate new backup codes for account recovery":"Generate new backup codes for account recovery","Generate New Codes":"Generate New Codes","Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.":"Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.","Generated image":"Generated image","Generating new codes will invalidate all existing backup codes.":"Generating new codes will invalidate all existing backup codes.","Generating...":"Generating...","Generation quality preset":"Generation quality preset","Generic cache":"Generic cache","Get notified when balance falls below this value":"Get notified when balance falls below this value","Get one here":"Get one here","Get started":"Get started","Get Started":"Get Started","GitHub":"GitHub","Give the group a recognizable name and optional description.":"Give the group a recognizable name and optional description.","Give this group a recognizable name.":"Give this group a recognizable name.","Global configuration and administrative tools.":"Global configuration and administrative tools.","Global Coverage":"Global Coverage","Global Model Configuration":"Global Model Configuration","Global throughput":"Global throughput","Go Back":"Go Back","Go back and edit":"Go back and edit","Go to Dashboard":"Go to Dashboard","Go to first page":"Go to first page","Go to home":"Go to home","Go to io.net API Keys":"Go to io.net API Keys","Go to last page":"Go to last page","Go to next page":"Go to next page","Go to page {{page}}":"Go to page {{page}}","Go to previous page":"Go to previous page","Go to settings":"Go to settings","Go to Settings":"Go to Settings","Good":"Good","Gotify Application Token":"Gotify Application Token","Gotify Documentation":"Gotify Documentation","Gotify Server URL":"Gotify Server URL","gpt-3.5-turbo":"gpt-3.5-turbo","gpt-3.5-turbo-0125":"gpt-3.5-turbo-0125","gpt-4":"gpt-4","gpt-4, claude-3-opus, etc.":"gpt-4, claude-3-opus, etc.","GPU count":"GPU count","Greater than":"Greater than","Greater Than":"Greater Than","Greater than or equal":"Greater than or equal","Greater Than or Equal":"Greater Than or Equal","Grok":"Grok","Grok Settings":"Grok Settings","Group":"Group","Group & Quota":"Group & Quota","Group added. Click \\"Save Settings\\" to apply.":"Group added. Click \\"Save Settings\\" to apply.","Group channels by tag for batch operations":"Group channels by tag for batch operations","Group config overrides global limits, shares the same period":"Group config overrides global limits, shares the same period","Group deleted. Click \\"Save Settings\\" to apply.":"Group deleted. Click \\"Save Settings\\" to apply.","Group description":"Group description","Group details":"Group details","Group identifier":"Group identifier","Group is required":"Group is required","Group name":"Group name","Group Name":"Group Name","Group name cannot be changed when editing.":"Group name cannot be changed when editing.","Group prices cannot be expanded because this expression is not a standard tiered pricing expression.":"Group prices cannot be expanded because this expression is not a standard tiered pricing expression.","Group Pricing":"Group Pricing","Group pricing usage guide":"Group pricing usage guide","group ratio":"group ratio","Group Ratio":"Group Ratio","Group ratios":"Group ratios","Group updated. Click \\"Save Settings\\" to apply.":"Group updated. Click \\"Save Settings\\" to apply.","Group-based rate limits":"Group-based rate limits","Group:":"Group:","Group: {{ratio}}x":"Group: {{ratio}}x","Grouped monitor status from Uptime Kuma":"Grouped monitor status from Uptime Kuma","Groups":"Groups","Groups *":"Groups *","Groups that users can select when creating API keys.":"Groups that users can select when creating API keys.","Growth":"Growth","Guardrails":"Guardrails","Guest":"Guest","h":"h","Haiku Model":"Haiku Model","Hang tight while we finish connecting your account.":"Hang tight while we finish connecting your account.","Hang tight while we securely link this account to your profile.":"Hang tight while we securely link this account to your profile.","Hardware":"Hardware","Hardware type":"Hardware type","Has been disabled":"Disabled successfully","Has been enabled":"Enabled successfully","Has been invalidated":"Invalidated successfully","Have a Code?":"Have a Code?","Header":"Header","header instead.":"header instead.","Header Name":"Header Name","Header navigation":"Header navigation","Header Override":"Header Override","Header Passthrough (X-Request-Id)":"Header Passthrough (X-Request-Id)","Header Value (supports string or JSON mapping)":"Header Value (supports string or JSON mapping)","header. Anthropic-formatted endpoints accept the":"header. Anthropic-formatted endpoints accept the","Health":"Health","Healthy":"Healthy","Hidden — verify to reveal":"Hidden — verify to reveal","Hide":"Hide","Hide API key":"Hide API key","Hide setup guide":"Hide setup guide","High Performance":"High Performance","High-risk operation confirmation":"High-risk Operation Confirmation","High-risk status code retry confirmation text":"I CONFIRM","High-risk status code retry input mismatch":"The entered text does not match, please try again.","High-risk status code retry input placeholder":"Please type the confirmation text above","High-risk status code retry risk check 1":"I understand that retrying on these status codes may cause the upstream provider to charge normally, and the charges cannot be recovered.","High-risk status code retry risk check 2":"I understand that these status codes typically indicate that the request has been processed successfully by the upstream provider, and retrying may result in duplicate billing.","High-risk status code retry risk check 3":"I acknowledge that these configurations may cause significant financial losses and accept all related risks.","High-risk status code retry risk check 4":"I have carefully reviewed the above status code redirect rules and confirm they are correct.","High-risk status code retry risk disclaimer":"The following status code redirect rules contain high-risk configurations. Retrying on these status codes may cause normal upstream charges that cannot be recovered. Please carefully verify these configurations.","Higher priority channels are selected first":"Higher priority channels are selected first","Historical Usage":"Historical Usage","History of Midjourney-style image tasks.":"History of Midjourney-style image tasks.","Hit criteria: If cached tokens exist in usage, it counts as a hit.":"Hit criteria: If cached tokens exist in usage, it counts as a hit.","Hit Rate":"Hit Rate","Hit tier":"Hit tier","Home":"Home","Home Page Content":"Home Page Content","Hostname or IP of your SMTP provider":"Hostname or IP of your SMTP provider","Hour":"Hour","Hour of day":"Hour of day","Hourly token usage by model across the last 24 hours":"Hourly token usage by model across the last 24 hours","Hourly token usage by model over the past 24 hours":"Hourly token usage by model over the past 24 hours","hours":"hours","How client credentials are sent to the token endpoint":"How client credentials are sent to the token endpoint","How frequently the system tests all channels":"How frequently the system tests all channels","How It Works":"How It Works","How model mapping works":"How model mapping works","How much to charge for each US dollar of balance (Epay)":"How much to charge for each US dollar of balance (Epay)","How this model name should match requests":"How this model name should match requests","How to deliver the resulting image":"How to deliver the resulting image","How to get an io.net API Key":"How to get an io.net API Key","How to reset my quota?":"How to reset my quota?","How to select keys: random or sequential polling":"How to select keys: random or sequential polling","How will you use the platform?":"How will you use the platform?","https://api.day.app/yourke
107y/{{title}}/{{content}}":"https://api.day.app/yourkey/{{title}}/{{content}}","https://api.example.com":"https://api.example.com","https://ark.ap-southeast.bytepluses.com":"https://ark.ap-southeast.bytepluses.com","https://ark.cn-beijing.volces.com":"https://ark.cn-beijing.volces.com","https://cloud.siliconflow.cn/i/hij0YNTZ":"https://cloud.siliconflow.cn/i/hij0YNTZ","https://docs.example.com":"https://docs.example.com","https://example.com":"https://example.com","https://example.com/logo.png":"https://example.com/logo.png","https://example.com/qr-code.png":"https://example.com/qr-code.png","https://example.com/topup":"https://example.com/topup","https://example.com/webhook":"https://example.com/webhook","https://gateway.example.com":"https://gateway.example.com","https://github.com/QuantumNous/new-api":"https://github.com/QuantumNous/new-api","https://gotify.example.com":"https://gotify.example.com","https://pay.example.com":"https://pay.example.com","https://provider.com/.well-known/openid-configuration":"https://provider.com/.well-known/openid-configuration","https://status.example.com":"https://status.example.com","https://wechat-server.example.com":"https://wechat-server.example.com","https://worker.example.workers.dev":"https://worker.example.workers.dev","https://your-server.example.com":"https://your-server.example.com","Human-readable name shown to users during Passkey prompts.":"Human-readable name shown to users during Passkey prompts.","I confirm enabling high-risk retry":"I Confirm Enabling High-risk Retry","I have read and agree to the":"I have read and agree to the","I have read and understood the above compliance reminder":"I have read and understood the above compliance reminder","I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.":"I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.","I understand that disabling 2FA will remove all protection and backup codes":"I understand that disabling 2FA will remove all protection and backup codes","Icon":"Icon","Icon file must be 100 KB or smaller":"Icon file must be 100 KB or smaller","Icon identifier (e.g. github, gitlab)":"Icon identifier (e.g. github, gitlab)","ID":"ID","If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.":"If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.","If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.":"If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.","If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know what you are doing":"If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know what you are doing","If default auto group is enabled, newly created tokens start with auto instead of an empty group.":"If default auto group is enabled, newly created tokens start with auto instead of an empty group.","If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.":"If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.","If this keeps happening, please report it on GitHub Issues.":"If this keeps happening, please report it on GitHub Issues.","If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.":"If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.","Ignored upstream models":"Ignored upstream models","Image":"Image","Image Generation":"Image Generation","Image In":"Image In","Image input":"Image input","Image input price":"Image input price","Image Out":"Image Out","Image output price":"Image output price","Image Preview":"Image Preview","Image ratio":"Image ratio","Image to Video":"Image to Video","Image Tokens":"Image Tokens","Import to CC Switch":"Import to CC Switch","In Progress":"In Progress","In:":"In:","incident":"incident","incidents":"incidents","Incidents":"Incidents","Include Group":"Include Group","Include Model":"Include Model","Include Rule Name":"Include Rule Name","Includes request rules":"Includes request rules","Including failed requests, 0 = unlimited":"Including failed requests, 0 = unlimited","Increased user quota by {{quota}}":"Increased user quota by {{quota}}","Index":"Index","Initial quota given to new users":"Initial quota given to new users","Initialization failed, please try again.":"Initialization failed, please try again.","Initialize":"Initialize","Initialize system":"Initialize system","Initializing…":"Initializing…","Inpaint":"Inpaint","Input":"Input","Input mode":"Input mode","Input price":"Input price","Input price is required before saving dependent prices.":"Input price is required before saving dependent prices.","Input tokens":"Input tokens","Input Tokens":"Input Tokens","Inset":"Inset","Inspect requests, errors, and billing details":"Inspect requests, errors, and billing details","Inspect user prompts":"Inspect user prompts","Instance":"Instance","Insufficient balance":"Insufficient balance","Integrations":"Integrations","Inter-group overrides":"Inter-group overrides","Inter-group ratio overrides":"Inter-group ratio overrides","Interface Language":"Interface Language","Internal Notes":"Internal Notes","Internal notes (not shown to users)":"Internal notes (not shown to users)","Internal Server Error!":"Internal Server Error!","Invalid chat link. Please contact the administrator.":"Invalid chat link. Please contact the administrator.","Invalid chat link. Please contact your administrator.":"Invalid chat link. Please contact your administrator.","Invalid code":"Invalid code","Invalid JSON":"Invalid JSON","Invalid JSON format":"Invalid JSON format","Invalid JSON format or values out of allowed range":"Invalid JSON format or values out of allowed range","Invalid JSON in parameter override template":"Invalid JSON in parameter override template","Invalid JSON string.":"Invalid JSON string.","Invalid model mapping format":"Invalid model mapping format","Invalid Passkey registration response":"Invalid Passkey registration response","Invalid Passkey response":"Invalid Passkey response","Invalid payment redirect URL":"Invalid payment redirect URL","Invalid reset link, please request a new password reset":"Invalid reset link, please request a new password reset","Invalid reset link, please request a new password reset.":"Invalid reset link, please request a new password reset.","Invalid rules JSON format":"Invalid rules JSON format","Invalid status code mapping entr
107ies: {{entries}}":"Invalid status code mapping entries: {{entries}}","Invalidate":"Invalidate","Invalidated":"Invalidated","Invert match":"Invert match","Invitation Code":"Invitation Code","Invitation Quota":"Invitation Quota","Invite Info":"Invite Info","Invited":"Invited","Invited by user ID":"Invited by user ID","Invited Users":"Invited Users","Invitee Reward":"Invitee Reward","Inviter":"Inviter","Inviter Reward":"Inviter Reward","Invites":"Invites","Invoke developer-defined functions with structured arguments":"Invoke developer-defined functions with structured arguments","io.net API Key":"io.net API Key","io.net Deployments":"io.net Deployments","IP":"IP","IP Address":"IP Address","IP Filter Mode":"IP Filter Mode","IP Restriction":"IP Restriction","IP Whitelist (supports CIDR)":"IP Whitelist (supports CIDR)","is less than the configured maximum cache size":"is less than the configured maximum cache size","is the default price; ":"is the default price; ","It seems like the page you\'re looking for":"It seems like the page you\'re looking for","Items":"Items","Japanese":"Japanese","Jimeng":"Jimeng","Jina":"Jina","JSON":"JSON","JSON array of group identifiers. When enabled below, new tokens rotate through this list.":"JSON array of group identifiers. When enabled below, new tokens rotate through this list.","JSON Editor":"JSON Editor","JSON format error":"JSON format error","JSON format supports service account JSON files":"JSON format supports service account JSON files","JSON is invali
107d at line {{line}}, column {{column}}.":"JSON is invalid at line {{line}}, column {{column}}.","JSON is invalid at position {{position}}.":"JSON is invalid at position {{position}}.","JSON is invalid. Please check the syntax.":"JSON is invalid. Please check the syntax.","JSON map of group → description exposed when users create API keys.":"JSON map of group → description exposed when users create API keys.","JSON map of group → ratio applied when the user selects the group explicitly.":"JSON map of group → ratio applied when the user selects the group explicitly.","JSON map of model → multiplier applied to quota billing.":"JSON map of model → multiplier applied to quota billing.","JSON map of model → USD cost per request. Takes precedence over ratio based billing.":"JSON map of model → USD cost per request. Takes precedence over ratio based billing.","JSON mode":"JSON mode","JSON Mode":"JSON Mode","JSON must be an object":"JSON must be an object","JSON object:":"JSON object:","JSON structure is invalid":"JSON structure is invalid","JSON Text":"JSON Text","JSON-based access control rules. Leave empty to allow all users.":"JSON-based access control rules. Leave empty to allow all users.","Just now":"Just now","JustSong":"JustSong","K":"K","Keep affinity when channel is disabled":"Keep affinity when channel is disabled","Keep enabled if you need to proxy requests for different upstream accounts.":"Keep enabled if you need to proxy requests for different upstream accounts.","Keep enough balance before production traffic":"Keep enough balance before production traffic","Keep original value":"Keep original value","Keep original value (skip if target exists)":"Keep original value (skip if target exists)","Keep the platform ready":"Keep the platform ready","Keep this above 1 minute to avoid heavy database load":"Keep this above 1 minute to avoid heavy database load","Keep-alive Ping":"Keep-alive Ping","Key":"Key","Key Fingerprint":"Key Fingerprint","Key Sources":"Key Sources","Key Summary":"Key Summary","Key Update Mode":"Key Update Mode","Keys, OAuth credentials, and multi-key update behavior.":"Keys, OAuth credentials, and multi-key update behavior.","Kling":"Kling","Knowledge Base ID *":"Knowledge Base ID *","Knowledge cutoff":"Knowledge cutoff","Lake View":"Lake View","Landing page with system overview.":"Landing page with system overview.","Language preference saved":"Language preference saved","Language Preferences":"Language Preferences","Language preferences sync across your signed-in devices and affect API error messages.":"Language preferences sync across your signed-in devices and affect API error messages.","Last 24h usage":"Last 24h usage","Last 30 days uptime":"Last 30 days uptime","Last check time":"Last check time","Last detected addable models":"Last detected addable models","Last Login":"Last Login","Last Seen":"Last Seen","Last Tested":"Last Tested","Last updated:":"Last updated:","Last Used":"Last Used","Last used:":"Last used:","Latency":"Latency","Latency check":"Latency check","Latency short":"Lat.","Latency trend (last 24h)":"Latency trend (last 24h)","Latest platform updates and notices":"Latest platform updates and notices","Lavender Dream":"Lavender Dream","Layout":"Layout","lead":"lead","Leaderboards":"Leaderboards","Learn more":"Learn more","Learn more:":"Learn more:","Leave":"Leave","Leave blank to keep the existing credential":"Leave blank to keep the existing credential","Leave blank to keep the existing key":"Leave blank to keep the existing key","Leave blank unless rotating the secret":"Leave blank unless rotating the secret","Leave empty for never expires":"Leave empty for never expires","Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.","Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.","Leave empty to disband the tag":"Leave empty to disband the tag","Leave empty to keep existing key":"Leave empty to keep existing key","Leave empty to keep unchanged":"Leave empty to keep unchanged","Leave empty to use account email":"Leave empty to use account email","Leave empty to use default":"Leave empty to use default","Leave empty to use system temp directory":"Leave empty to use system temp directory","Leave empty to use username":"Leave empty to use username","Left to Right":"Left to Right","Legacy Format (JSON Object)":"Legacy Format (JSON Object)","Legacy format must be a JSON object":"Legacy format must be a JSON object","Legacy Format Template":"Legacy Format Template","Legal":"Legal","Less":"Less","
107Less than":"Less than","Less Than":"Less Than","Less than 1 day left":"Less than 1 day left","Less than or equal":"Less than or equal","Less Than or Equal":"Less Than or Equal","License":"License","Light":"Light","Lightning Fast":"Lightning Fast","Limit period":"Limit period","Limit Reached":"Limit Reached","Limit which models can be used with this key":"Limit which models can be used with this key","Limited":"Limited","LingYiWanWu":"LingYiWanWu","Link to your documentation site":"Link to your documentation site","LinuxDO":"LinuxDO","LinuxDO Client ID":"LinuxDO Client ID","LinuxDO Client Secret":"LinuxDO Client Secret","List of models supported by this channel. Use comma to separate multiple models.":"List of models supported by this channel. Use comma to separate multiple models.","List of origins (one per line) allowed for Passkey registration and authentication.":"List of origins (one per line) allowed for Passkey registration and authentication.","List view":"List view","LLM Leaderboard":"LLM Leaderboard","LLM prompt helper":"LLM prompt helper","Load Balancing":"Load Balancing","Load template...":"Load template...","Loader":"Loader","Loading":"Loading","Loading channel details":"Loading channel details","Loading configuration":"Loading configuration","Loading content settings...":"Loading content settings...","Loading current models...":"Loading current models...","Loading failed":"Loading failed","Loading maintenance settings...":"Loading maintenance settings...","Loading settings...":"Loading settings...","Loading setup status…":"Loading setup status…","Loading...":"Loading...","Local":"Local","Local Billing":"Local Billing","Local models":"Local models","Locations":"Locations","Locked":"Locked","log":"log","Log Details":"Log Details","Log Directory":"Log Directory","Log File Count":"Log File Count","Log files older than {{value}} days will be deleted.":"Log files older than {{value}} days will be deleted.","Log IP address for usage and error logs":"Log IP address for usage and error logs","Log Maintenance":"Log Maintenance","Log Type":"Log Type","Logged in successfully via {{method}}":"Logged in successfully via {{method}}","Logic":"Logic","Login":"Login","Login failed":"Login failed","Login Info":"Login Info","Login Method":"Login Method","Logo":"Logo","Logo URL":"Logo URL","Logs":"Logs","Low balance":"Low balance","Lowest median first-token latency":"Lowest median first-token latency","m":"m","Maintenance":"Maintenance","Make it easier for teammates to pick the right group.":"Make it easier for teammates to pick the right group.","Manage":"Manage","Manage account bindings for this user":"Manage account bindings for this user","Manage Bindings":"Manage Bindings","Manage catalog visibility and pricing.":"Manage catalog visibility and pricing.","Manage custom OAuth providers for user authentication":"Manage custom OAuth providers for user authentication","Manage Keys":"Manage Keys","Manage local models for:":"Manage local models for:","Manage multi-key status and configuration for this channel":"Manage multi-key status and configuration for this channel","Manage Ollama Models":"Manage Ollama Models","Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.":"Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.","Manage subscription plans and pricing.":"Manage subscription plans and pricing.","Manage Subscriptions":"Manage Subscriptions","Manage Vendors":"Manage Vendors","Manage your security settings and account access":"Manage your security settings and account access","Manual Disabled":"Manual Disabled","Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).":"Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).","Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.":"Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.","Map request model names to actual provider model names (JSON format)":"Map request model names to actual provider model names (JSON format)","Map response status codes (JSON format)":"Map response status codes (JSON format)","Map upstream status codes to different c
107odes":"Map upstream status codes to different codes","Market Share":"Market Share","Marketing":"Marketing","Match All (AND)":"Match All (AND)","Match Any (OR)":"Match Any (OR)","Match Mode":"Match Mode","Match model name exactly":"Match model name exactly","Match models containing this name":"Match models containing this name","Match models ending with this name":"Match models ending with this name","Match models starting with this name":"Match models starting with this name","Match Text":"Match Text","Match Type":"Match Type","Match Value":"Match Value","Match Value (optional)":"Match Value (optional)","Matched":"Matched","Matched Tier":"Matched Tier","Matching Rules":"Matching Rules","Max Disk Cache Size (MB)":"Max Disk Cache Size (MB)","Max Entries":"Max Entries","Max output":"Max output","Max Requests (incl. failures)":"Max Requests (incl. failures)","Max Requests (including failures)":"Max Requests (including failures)","Max requests per period":"Max requests per period","Max Success":"Max Success","Max successful requests":"Max successful requests","Max Successful Requests":"Max Successful Requests","Maximum 1000 characters. Supports Markdown and HTML.":"Maximum 1000 characters. Supports Markdown and HTML.","Maximum 200 characters":"Maximum 200 characters","Maximum 500 characters. Supports Markdown and HTML.":"Maximum 500 characters. Supports Markdown and HTML.","Maximum check-in quota":"Maximum check-in quota","Maximum input window":"Maximum input window","Maximum number of tokens in the response":"Maximum number of tokens in the response","Maximum quota amount awarded for check-in":"Maximum quota amount awarded for check-in","Maximum tokens including hidden reasoning tokens":"Maximum tokens including hidden reasoning tokens","Maximum tokens per response":"Maximum tokens per response","maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647":"maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647","May be used for training by upstream provider":"May be used for training by upstream provider","Media pricing":"Media pricing","Median time-to-first-token (TTFT) sampled hourly per group":"Median time-to-first-token (TTFT) sampled hourly per group","Medical Q&A, mental health support":"Medical Q&A, mental health support","Memory Hits":"Memory Hits","Memory Threshold (%)":"Memory Threshold (%)","Merchant ID":"Merchant ID","Merchant ID is required":"Merchant ID is required","Message Priority":"Message Priority","Metadata":"Metadata","Midjourney":"Midjourney","MidjourneyPlus":"MidjourneyPlus","min downtime":"min downtime","Min Top-up":"Min Top-up","Min Top-up:":"Min Top-up:","MiniMax":"MiniMax","Minimum check-in quota":"Minimum check-in quota","Minimum LinuxDO trust level required":"Minimum LinuxDO trust level required","Minimum quota amount awarded for check-in":"Minimum quota amount awarded for check-in","Minimum recharge amount in USD":"Minimum recharge amount in USD","Minimum recharge amount to qualify for this discount.":"Minimum recharge amount to qualify for this discount.","Minimum top-up (optional)":"Minimum top-up (optional)","Minimum top-up (USD)":"Minimum top-up (USD)","Minimum top-up amount must be at least 1":"Minimum top-up amount must be at least 1","Minimum top-up quantity":"Minimum top-up quantity","Minimum topup amount: {{amount}}":"Minimum topup amount: {{amount}}","Minimum Trust Level":"Minimum Trust Level","Minimum:":"Minimum:","Minor blips in the last 30 days":"Minor blips in the last 30 days","Mint a fresh pair below — or pick an existing one further down. Click Save when ready.":"Mint a fresh pair below — or pick an existing one further down. Click Save when ready.","Minute":"Minute","minutes":"minutes","Missing code":"Missing code","Missing Models":"Missing Models","Missing user data from Passkey login response":"Missing user data from Passkey login response","Mistral":"Mistral","Modalities":"Modalities","Modality":"Modality","Mode":"Mode","model":"model","Model":"Model","Model Access":"Model Access","Model Analytics":"Model Analytics","Model Analytics Defaults":"Model Analytics Defaults","Model Analytics Filters":"Model Analytics Filters","model billing support":"model billing support","Model Call Analytics":"Model Call Analytics","Model context usage":"Model context usage","Model deleted":"Model deleted","Model deleted successfully":"Model deleted successfully","Model Deployment":"Model Deployment","Model deployment service is disabled":"Model deployment service is disabled","Model Description":"Model Description","Model details":"Model details","Model disabled successfully":"Model disabled successfully","Model enabled successfully":"Model enabled successfully","Model fixed pricing":"Model fixed pricing","Model Group":"Model Group","Model Limits":"Model Limits","Model Mapping":"Model Mapping","Model Mapping (JSON)":"Model Mapping (JSON)","Model Mapping must be a JSON object like":"Model Mapping must be a JSON object like","Model mapping must be a JSON object with string values":"Model mapping must be a JSON object with string values","Model mapping must be valid JSON":"Model mapping must be valid JSON","Model mapping values must be strings":"Model mapping values must be strings","Model name":"Model name","Model Name":"Model Name","Model Name *":"Model Name *","Model name is required":"Model name is required","Model names copied to clipboard":"Model names copied to clipboard","Model not found":"Model not found","Model performance metrics":"Model performance metrics","Model Price":"Model Price","Model price is not configured. Please complete model pricing in settings.":"Model price is not configured. Please complete model pricing in settings.","Model Price Not Configured":"Model Price Not Configured","Model prices":"Model prices","Model prices reset successfully":"Model prices reset successfully","Model Pricing":"Model Pricing","Model pull failed: {{msg}}":"Model pull failed: {{msg}}","Model ratio":"Model ratio","Model ratios":"Model ratios","Model ratios reset successfully":"Model ratios reset successfully","Model Regex":"Model Regex","Model Regex (one per line)":"Model Regex (one per line)","Model selected":"Model selected","Model Square":"Model Square","Model Tags":"Model Tags","Model to use for testing":"Model to use for testing","Model to use when testing channel connectivity":"Model to use when testing channel connectivity","Model Version *":"Model Version *","model(s) selected out of":"model(s) selected out of","model(s)? This action cannot be undone.":"model(s)? This action cannot be undone.","models":"models","Models":"Models","Models *":"Models *","Models & Groups":"Models & Groups","Models & Routing":"Models & Routing","Models appended successfully":"Models appended successfully","Models are required":"Models are required","Models climbing the leaderboard":"Models climbing the leaderboard","Models climbing the leaderboard fastest":"Models climbing the leaderboard fastest","Models directory":"Models directory","Models Directory":"Models Directory","Models fetched successfully":"Models fetched successfully","Models filled to form":"Models filled to form","Models listed here will not automatically append or remove -thinking / -nothinking suffixes.":"Models listed here will not automatically append or remove -thinking / -nothinking suffixes.","Models losing positions":"Models losing positions","Models losing the most positions":"Models losing the most positions","Models not in list, may fail to invoke":"Models not in list, may fail to invoke","Models that are being used but not configured in the system":"Models that are being used but not configured in the system","Models that skip thinking suffix processing":"Models that skip thinking suffix processing","Models updated successfully":"Models updated successfully","Modify existing subscription plan configuration":"Modify existing subscription plan configuration","Module availability":"Module availability","MokaAI":"MokaAI","Monitor":"Monitor","Monitor balance, usage, and request volume":"Monitor balance, usage, and request volume","Monitored relay requests":"Monitored relay requests","Monitoring & Alerts":"Monitoring & Alerts","Month":"Month","Month number":"Month number","Monthly":"Monthly","Monthly tokens":"Monthly tokens","months":"months","Moonshot":"Moonshot","More":"More","More Apps":"More Apps","more mapping":"more mapping","More templates...":"More templates...","More than 999 days left":"More than 999 days left","More...":"More...","Most-used models in the selected period and category":"Most-used models in the selected period and category","Move":"Move","Move a request header":"Move a request header","Move affiliate rewards to your main balance":"Move affiliate rewards to your main balance","Move Field":"Move Field","Move Header":"Move Header","Move Request Header":"Move Request Header","Move source field to target field":"Move source field to target field","ms":"ms","Multi-key channel: Keys will be":"Multi-key channel: Keys will be","Multi-Key Management":"Multi-Key Management","Multi-key management {{action}} on channel (ID: {{id}})":"Multi-key management {{action}} on channel (ID: {{id}})","Multi-Key Mode (multiple keys, one channel)":"Multi-Key Mode (multiple keys, one channel)","Multi-Key Strategy":"Multi-Key Strategy","Multi-key: Polling rotation":"Multi-key: Polling rotation","Multi-key: Random rotation":"Multi-key: Random rotation","Multi-protocol Compatible":"Multi-protocol Compatible","Multi-region deployment for stable global access":"Multi-region deployment for stable global access","Multi-step thinking before final answer":"Multi-step thinking before final answer","Multi-user management with flexible permission allocation":"Multi-user management with flexible permission allocation","Multilingual translation and localisation":"Multilingual translation and localisation","Multimodal":"Multimodal","Multiplier":"Multiplier","Multiplier applied when":"Multiplier applied when","Multiplier applied when {{userGroup}} uses {{targetGroup}}":"Multiplier applied when {{userGroup}} uses {{targetGroup}}","Multiplier for audio inputs.":"Multiplier for audio inputs.","Multiplier for audio outputs.":"Multiplier for audio outputs.","Multiplier for completion tokens.":"Multiplier for completion tokens.","Multiplier for image processing.":"Multiplier for image processing.","Multiplier for prompt tokens.":"Multiplier for prompt tokens.","Multipliers for recharge pricing based on user groups.":"Multipliers for recharge pricing based on user groups.","Must be a valid URL":"Must be a valid URL","Must be at least 8 characters":"Must be at least 8 characters","My Subscriptions":"My Subscriptions","my-status":"my-status","MySQL detected":"MySQL detected","MySQL is a production-ready relational database. Keep your credentials secure.":"MySQL is a production-ready relational database. Keep your credentials secure.","MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.":"MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.","N/A":"N/A","Name":"Name","Name *":"Name *","Name for this redemption code (1-20 characters)":"Name for this redemption code (1-20 characters)","Name is available":"Name is available","Name is not available":"Name is not available","Name must be between {{min}} and {{max}} characters":"Name must be between {{min}} and {{max}} characters","Name Rule":"Name Rule","Name Suffix":"Name Suffix","Name the channel and choose the upstream provider.":"Name the channel and choose the upstream provider.","Name the channel, choose the provider, configure API access, and set credentials.":"Name the channel, choose the provider, configure API access, and set credentials.","Name, provider type, and availability.":"Name, provider type, and availability.","[email protected]":"[email protected]","Native format":"Native format","Need a redemption code?":"Need a redemption code?","Needs API key":"Needs API key","Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.":"Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.","Nested JSON: source group →":"Nested JSON: source group →","Network proxy for this channel (supports socks5 protocol)":"Network proxy for this channel (supports socks5 protocol)","Never":"Never","Never expires":"Never expires","Never used an API Gateway?":"Never used an API Gateway?","NEW":"NEW","New API":"New API","New API &lt;[email protected]&gt;":"New API &lt;[email protected]&gt;","New API Project Repository:":"New API Project Repository:","New Format Template":"New Format Template","New Group":"New Group","New model":"New model","New Models ({{count}})":"New Models ({{count}})","New name will be:":"New name will be:","New password":"New password","New Password":"New Password","New password must be different from current password":"New password must be different from current password","New User Quota":"New User Quota","New version available: {{version}}":"New version available: {{version}}","NewAPI":"NewAPI","Newly released":"Newly released","Next":"Next","Next branch":"Next branch","Next page":"Next page","Next reset"
107:"Next reset","No":"No","No About Content Set":"No About Content Set","No Active":"No Active","No additional type-specific settings for this channel type.":"No additional type-specific settings for this channel type.","No amount options configured. Add amounts below to get started.":"No amount options configured. Add amounts below to get started.","No announcements at this time":"No announcements at this time","No announcements yet. Click \\"Add Announcement\\" to create one.":"No announcements yet. Click \\"Add Announcement\\" to create one.","No API Domains yet. Click \\"Add API\\" to create one.":"No API Domains yet. Click \\"Add API\\" to create one.","No API key yet":"No API key yet","No API keys available. Create your first API key to get started.":"No API keys available. Create your first API key to get started.","No API Keys Found":"No API Keys Found","No API routes configured":"No API routes configured","No app usage data available for this model.":"No app usage data available for this model.","No apps match the selected filters":"No apps match the selected filters","No available models":"No available models","No available Web chat links":"No available Web chat links","No backup":"No backup","No base input price":"No base input price","No billing records found":"No billing records found","No capabilities reported for this model.":"No capabilities reported for this model.","No Change":"No Change","No changes":"No changes","No changes made":"No changes made","No changes to save":"No changes to save","No channel selected":"No channel selected","No channel type found.":"No channel type found.","No channels available. Create your first channel to get started.":"No channels available. Create your first channel to get started.","No channels found":"No channels found","No Channels Found":"No Channels Found","No channels selected":"No channels selected","No chat presets configured. Click \\"Add chat preset\\" to get started.":"No chat presets configured. Click \\"Add chat preset\\" to get started.","No chat presets match your search":"No chat presets match your search","No conflict entries available.":"No conflict entries available.","No conflicts match your search.":"No conflicts match your search.","No console output":"No console output","No containers":"No containers","No custom OAuth providers configured yet.":"No custom OAuth providers configured yet.","No data":"No data","No Data":"No Data","No data available":"No data available","No deployments available. Create one to get started.":"No deployments available. Create one to get started.","No Deployments Found":"No Deployments Found","No description available.":"No description available.","No discount tiers configured. Click \\"Add discount tier\\" to get started.":"No discount tiers configured. Click \\"Add discount tier\\" to get started.","No duplicate keys found":"No duplicate keys found","No enabled tokens available":"No enabled tokens available","No endpoints configured. Switch to JSON mode or add rows to define endpoints.":"No endpoints configured. Switch to JSON mode or add rows to define endpoints.","No FAQ entries available":"No FAQ entries available","No FAQ entries yet. Click \\"Add FAQ\\" to create one.":"No FAQ entries yet. Click \\"Add FAQ\\" to create one.","No files match the accepted types.":"No files match the accepted types.","No group found.":"No group found.","No group-based rate limits configured. Click \\"Add group\\" to get started.":"No group-based rate limits configured. Click \\"Add group\\" to get started.","No groups match your search":"No groups match your search","No groups yet. Add a group to get started.":"No groups yet. Add a group to get started.","No header overrides configured.":"No header overrides configured.","No history data available":"No history data available","No incidents in the last 24 hours":"No incidents in the last 24 hours","No incidents in the last 30 days":"No incidents in the last 30 days","No Inviter":"No Inviter","No keys found":"No keys found","No latency data available":"No latency data available","No log entries matched the selected time.":"No log entries matched the selected time.","No logs":"No logs","No Logs Found":"No Logs Found","No mappings configured. Click \\"Add Row\\" to get started.":"No mappings configured. Click \\"Add Row\\" to get started.","No matches found":"No matches found","No matching items":"No matching items","No matching results":"No matching results","N
107o matching rules":"No matching rules","No messages yet":"No messages yet","No missing models found.":"No missing models found.","No model found.":"No model found.","No model mappings configured. Click \\"Add Mapping\\" to get started.":"No model mappings configured. Click \\"Add Mapping\\" to get started.","No models available":"No models available","No models available in this category":"No models available in this category","No models available. Create your first model to get started.":"No models available. Create your first model to get started.","No models configured. Use Add model to get started.":"No models configured. Use Add model to get started.","No models fetched from upstream":"No models fetched from upstream","No models fetched yet.":"No models fetched yet.","No models found":"No models found","No Models Found":"No Models Found","No models found.":"No models found.","No models match the selected filters":"No models match the selected filters","No models match your current filters.":"No models match your current filters.","No models match your search":"No models match your search","No models selected":"No models selected","No models to add":"No models to add","No models to copy":"No models to copy","No models to remove":"No models to remove","No new models to add":"No new models to add","No new models yet":"No new models yet","No notable climbers right now":"No notable climbers right now","No notable drops right now":"No notable drops right now","No parameter overrides configured.":"No parameter overrides configured.","No payment methods available. Please contact administrator.":"No payment methods available. Please contact administrator.","No payment methods configured":"No payment methods configured","No payment methods configured. Click \\"Add method\\" or use templates to get started.":"No payment methods configured. Click \\"Add method\\" or use templates to get started.","No payment methods match your search":"No payment methods match your search","No performance data available":"No performance data available","No plans available":"No plans available","No preference":"No preference","No prefill groups yet":"No prefill groups yet","No price differences found":"No price differences found","No processable upstream model updates for this channel":"No processable upstream model updates for this channel","No products configured. Click \\"Add product\\" to get started.":"No products configured. Click \\"Add product\\" to get started.","No products match your search":"No products match your search","No providers available":"No providers available","No Quota":"No Quota","No ratio differences found":"No ratio differences found","No recent usage":"No recent usage","No records found. Try adjusting your filters.":"No records found. Try adjusting your filters.","No redemption codes available. Create your first redemption code to get started.":"No redemption codes available. Create your first redemption code to get started.","No Redemption Codes Found":"No Redemption Codes Found","No related models available for this channel type":"No related models available for this channel type","No release notes provided.":"No release notes provided.","No Reset":"No Reset","No restriction":"No restriction","No results for \\"{{query}}\\". Try adjusting your search or filters.":"No results for \\"{{query}}\\". Try adjusting your search or filters.","No results found":"No results found","No results found.":"No results found.","No Retry":"No Retry","No rules yet":"No rules yet","No rules yet. Add a group below to get started.":"No rules yet. Add a group below to get started.","No separate media pricing configured.":"No separate media pricing configured.","No status code mappings configured.":"No status code mappings configured.","No stores on this merchant yet. Set a return URL and click Create to mint your first pair.":"No stores on this merchant yet. Set a return URL and click Create to mint your first pair.","No subscription plans yet":"No subscription plans yet","No subscription records":"No subscription records","No Sync":"No Sync","No system announcements":"No system announcements","No token found.":"No token found.","No tools configured":"No tools configured","No Upgrade":"No Upgrade","No upstream price differences found":"No upstream price differences found","No upstream ratio differences found":"No upstream ratio differences found","No uptime data available":"No uptime data available","No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.":"No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.","No uptime monitoring configured":"No uptime monitoring configured","No usage logs available. Logs will appear here once API calls are made.":"No usage logs available. Logs will appear here once API calls are made.","No user information available":"No user information available","No user selected":"No user selected","No users available. Try adjusting your search or filters.":"No users available. Try adjusting your search or filters.","No Users Found":"No Users Found","No vendor data available":"No vend
107or data available","No X Found":"No X Found","Node Name":"Node Name","Non-stream":"Non-stream","Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.":"Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.","None":"None","[email protected]":"[email protected]","Normalized:":"Normalized:","Not available":"Not available","Not backed up":"Not backed up","Not bound":"Not bound","Not Equals":"Not Equals","Not Set":"Not Set","Not set yet":"Not set yet","Not Started":"Not Started","Not Submitted":"Not Submitted","Not tested":"Not tested","Not used for upstream training by default":"Not used for upstream training by default","Not used yet":"Not used yet","Notice":"Notice","Notification Email":"Notification Email","Notification Method":"Notification Method","Notifications":"Notifications","Nucleus sampling probability mass":"Nucleus sampling probability mass","Number of codes to create":"Number of codes to create","Number of completions to generate":"Number of completions to generate","Number of images to generate":"Number of images to generate","Number of keys to create":"Number of keys to create","Number of times to retry failed requests (0-10)":"Number of times to retry failed requests (0-10)","Number of tokens per unit quota":"Number of tokens per unit quota","Number of top log probabilities returned per token":"Number of top log probabilities returned per token","Number of users invited":"Number of users invited","OAuth Client ID":"OAuth Client ID","OAuth Client Secret":"OAuth Client Secret","OAuth failed":"OAuth failed","OAuth Integrations":"OAuth Integrations","Object Prune Rules":"Object Prune Rules","Observability":"Observability","Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.":"Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.","Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: <ServerAddress>/api/waffo-pancake/webhook":"Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: <ServerAddress>/api/waffo-pancake/webhook","Ocean Breeze":"Ocean Breeze","of":"of","of 3:":"of 3:","off":"off","Official":"Official","Official documentation":"Official documentation","Official Repository":"Official Repository","Official Sync":"Official Sync","OhMyGPT":"OhMyGPT","OIDC":"OIDC","OIDC Client ID":"OIDC Client ID","OIDC Client Secret":"OIDC Client Secret","OIDC configuration fetched successfully":"OIDC configuration fetched successfully","OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.":"OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.","OIDC endpoints discovered successfully":"OIDC endpoints discovered successfully","Old Format Template":"Old Format Template","Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.":"Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.","Ollama":"Ollama","Ollama Models":"Ollama Models","One API":"One API","One domain per line":"One domain per line","One domain per line (only used when domain restriction is enabled)":"One domain per line (only used when domain restriction is enabled)","One IP or CIDR range per line":"One IP or CIDR range per line","One IP per line (empty for no restriction)":"One IP per line (empty for no restriction)","one keyword per line":"one keyword per line","Online":"Online","Online payment is not enabled. Please contact the administrator.":"Online payment is not enabled. Please contact the administrator.","Online topup is not enabled. Please use redemption code or contact administrator.":"Online topup is not enabled. Please use redemption code or contact administrator.","Only allow specific email domains":"Only allow specific email domains","Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.":"Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.","Only configured combinations are overridden. All other calls keep the token group base ratio.":"Only configured combinations are overridden. All other calls keep the token group base ratio.","Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear."
107:"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.","Only successful requests":"Only successful requests","Only successful requests count toward this limit.":"Only successful requests count toward this limit.","Only the last {{value}} log files will be retained; the rest will be deleted.":"Only the last {{value}} log files will be retained; the rest will be deleted.","Oops! Page Not Found!":"Oops! Page Not Found!","Oops! Something went wrong":"Oops! Something went wrong","Open":"Open","Open a source model first":"Open a source model first","Open CC Switch":"Open CC Switch","Open in chat":"Open in chat","Open in new tab":"Open in new tab","Open in New Tab":"Open in New Tab","Open menu":"Open menu","Open release":"Open release","Open source":"Open source","Open Source":"Open Source","Open the io.net console API Keys page":"Open the io.net console API Keys page","Open theme settings":"Open theme settings","Open weights":"Open weights","OpenAI":"OpenAI","OpenAI Compatible":"OpenAI Compatible","OpenAI Organization":"OpenAI Organization","OpenAI Organization ID (optional)":"OpenAI Organization ID (optional)","OpenAI, Anthropic, etc.":"OpenAI, Anthropic, etc.","OpenAI, Anthropic, Google, etc.":"OpenAI, Anthropic, Google, etc.","OpenAIMax":"OpenAIMax","OpenRouter":"OpenRouter","opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.":"opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.","Operation":"Operation","operation and charging behavior":"operation and charging behavior","Operation Audit Info":"Operation Audit Info","Operation failed":"Operation failed","Operation successful":"Operation successful","Operation Type":"Operation Type","Operations":"Operations","Operator Admin":"Operator Admin","Optimize system for self-hosted single-user usage":"Optimize system for self-hosted single-user usage","Optimized network architecture ensures millisecond response times":"Optimized network architecture ensures millisecond response times","Optional callback override. Leave blank to use server address":"Optional callback override. Leave blank to use server address","Optional icon identifier for the login button":"Optional icon identifier for the login button","Optional JSON policy to restrict access based on user info fields":"Optional JSON policy to restrict access based on user info fields","Optional minimum recharge amount for this method.":"Optional minimum recharge amount for this method.","Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as":"Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as","Optional notes about this channel":"Optional notes about this channel","Optional notes about when to use this group":"Optional notes about when to use this group","Optional ratio used when upstream cache hits occur.":"Optional ratio used when upstream cache hits occur.","Optional rule description":"Optional rule description","Optional settings for advanced container configuration.":"Optional settings for advanced container configuration.","Optional supplementary information (max 100 characters)":"Optional supplementary information (max 100 characters)","Optional tag for grouping channels":"Optional tag for grouping channels","Opus Model":"Opus Model","Or continue with":"Or continue with","Or enter this key manually:":"Or enter this key manually:","or pick existing":"or pick existing","Order completed successfully":"Order completed successfully","Order History":"Order History","Order Payment Method":"Order Payment Method","org-...":"org-...","Original Model":"Original Model","Other":"Other","Outage":"Outage","Output":"Output","Output aspect ratio":"Output aspect ratio","Output image size":"Output image size","Output price":"Output price","Output token price for generated tokens.":"Output token price for generated tokens.","Output tokens":"Output tokens","Output Tokens":"Output Tokens","overall":"overall","Over
107night range":"Overnight range","override":"override","Override":"Override","Override auto-discovered endpoint":"Override auto-discovered endpoint","Override request headers":"Override request headers","Override request headers (JSON format)":"Override request headers (JSON format)","Override request parameters":"Override request parameters","Override request parameters (JSON format)":"Override request parameters (JSON format)","Override request parameters. Cannot override":"Override request parameters. Cannot override","Override request parameters. Cannot override stream parameter.":"Override request parameters. Cannot override stream parameter.","Override Rules":"Override Rules","Override the endpoint used for testing. Leave empty to auto detect.":"Override the endpoint used for testing. Leave empty to auto detect.","overrides for matching model prefix.":"overrides for matching model prefix.","Overrode user quota from {{from}} to {{to}}":"Overrode user quota from {{from}} to {{to}}","Overview":"Overview","Overwritten":"Overwritten","Page":"Page","Page {{current}} of {{total}}":"Page {{current}} of {{total}}","PaLM":"PaLM","Pan":"Pan","Pancake":"Pancake","Param Override":"Param Override","Parameter":"Parameter","Parameter configuration error":"Parameter configuration error","Parameter Override":"Parameter Override","Parameter override must be a valid JSON object":"Parameter override must be a valid JSON object","Parameter override must be valid JSON format":"Parameter override must be valid JSON format","Parameter Override Template (JSON)":"Parameter Override Template (JSON)","Parameter override template must be a JSON object":"Parameter override template must be a JSON object","parameter.":"parameter.","Parameters":"Parameters","Parsed {{count}} service account file(s)":"Parsed {{count}} service account file(s)","Partial Submission":"Partial Submission","Pass Headers":"Pass Headers","Pass request body directly to upstream":"Pass request body directly to upstream","Pass specified request headers to upstream":"Pass specified request headers to upstream","Pass Through Body":"Pass Through Body","Pass Through Headers":"Pass Through Headers","Pass through the anthropic-beta header for beta features":"Pass through the anthropic-beta header for beta features","Pass through the include field for usage obfuscation":"Pass through the include field for usage obfuscation","Pass through the inference_geo field for Claude data residency region control":"Pass through the inference_geo field for Claude data residency region control","Pass through the inference_geo field for geographic routing":"Pass through the inference_geo field for geographic routing","Pass through the safety_identifier field":"Pass through the safety_identifier field","Pass through the service_tier field":"Pass through the service_tier field","Pass through the speed field for Claude inference speed mode control":"Pass through the speed field for Claude inference speed mode control","Pass when key is missing":"Pass when key is missing","Pass-Through":"Pass-Through","Pass-through Headers (comma-separated or JSON array)":"Pass-through Headers (comma-separated or JSON array)","Passkey":"Passkey","Passkey Authentication":"Passkey Authentication","Passkey is not available in this browser":"Passkey is not available in this browser","Passkey is not supported in this environment":"Passkey is not supported in this environment","Passkey is not supported on this device":"Passkey is not supported on this device","Passkey is not supported on this device.":"Passkey is not supported on this device.","Passkey Login":"Passkey Login","Passkey login failed":"Passkey login failed","Passkey login was cancelled":"Passkey login was cancelled","Passkey login was cancelled or timed out":"Passkey login was cancelled or timed out","Passkey not supported on this device":"Passkey not supported on this device","Passkey registered successfully":"Passkey registered successfully","Passkey registration was cancelled":"Passkey registration was cancelled","Passkey removed successfully":"Passkey removed successfully","Passkey reset successfully":"Passkey reset successfully","Passthrough Template":"Passthrough Template","Password":"Password","Password / A
107ccess Token":"Password / Access Token","Password changed successfully":"Password changed successfully","Password copied to clipboard: {{password}}":"Password copied to clipboard: {{password}}","Password has been copied to clipboard":"Password has been copied to clipboard","Password Login":"Password Login","Password must be at least 8 characters":"Password must be at least 8 characters","Password must be at least 8 characters long":"Password must be at least 8 characters long","Password Registration":"Password Registration","Password reset and copied to clipboard: {{password}}":"Password reset and copied to clipboard: {{password}}","Password reset: {{password}}":"Password reset: {{password}}","Passwords do not match":"Passwords do not match","Path":"Path","Path not set":"Path not set","Path Regex (one per line)":"Path Regex (one per line)","Path:":"Path:","Pay":"Pay","Pay with Balance":"Pay with Balance","Pay-as-you-go with real-time usage monitoring":"Pay-as-you-go with real-time usage monitoring","Payment":"Payment","Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.":"Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.","Payment Channel":"Payment Channel","Payment Gateway":"Payment Gateway","Payment initiated":"Payment initiated","Payment Method":"Payment Method","Payment method name":"Payment method name","Payment method name is required":"Payment method name is required","Payment method type":"Payment method type","Payment method type is required":"Payment method type is required","Payment methods":"Payment methods","Payment Methods":"Payment Methods","Payment page opened":"Payment page opened","Payment request failed":"Payment request failed","Payment return URL":"Payment return URL","Payment return URL is empty. Create the product without a SuccessURL redirect?":"Payment return URL is empty. Create the product without a SuccessURL redirect?","Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.":"Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.","Peak":"Peak","Peak throughput":"Peak throughput","Penalises repetition of frequent tokens":"Penalises repetition of frequent tokens","Pending":"Pending","per":"per","Per 1K tokens":"Per 1K tokens","Per 1M tokens":"Per 1M tokens","per request":"per request","Per request":"Per request","Per Request":"Per Request","Per-call":"Per-call","Per-feature metered windows split by model or capability.":"Per-feature metered windows split by model or capability.","Per-group performance":"Per-group performance","Per-request":"Per-request","Per-request (fixed price)":"Per-request (fixed price)","Per-token":"Per-token","Per-token (ratio based)":"Per-token (ratio based)","Per-token logit bias map":"Per-token logit bias map","Percentage:":"Percentage:","Performance":"Performance","Performance data is not yet available for this model.":"Performance data is not yet available for this model.","Performance health":"Performance health","Performance metrics for the last 24 hours":"Performance metrics for the last 24 hours","Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.":"Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.","Performance Monitor":"Performance Monitor","Performance Settings":"Performance Settings","Performed {{action}} on user {{username}} (ID: {{id}})":"Performed {{action}} on user {{username}} (ID: {{id}})","Period":"Period","Periodically check for upstream model changes":"Periodically check for upstream model changes","Periodically send ping frames to keep streaming connections active.":"Periodically send ping frames to keep streaming connections active.","Permanently delete your account and all data":"Permanently delete your account and all data","Permit Passkey registration on non-HTTPS origins (only recommended for development)":"Permit Passkey registration on non-HTTPS origins (only recommended for development)","Perplexity":"Perplexity","Persist your data file":"Persist your data file","Personal":"Personal","Personal area":"Personal area","Personal Center Area":"Personal Center Area","Personal info settings":"Personal info settings","Personal Settings":"Personal Settings","Personal settings and profile management."
107:"Personal settings and profile management.","Personal use":"Personal use","Personal use mode":"Personal use mode","Pick a date":"Pick a date","Pick or create both a store and a product before saving.":"Pick or create both a store and a product before saving.","Ping Interval (seconds)":"Ping Interval (seconds)","Plan":"Plan","Plan Name":"Plan Name","Plan price must be greater than zero":"Plan price must be greater than zero","Plan Subtitle":"Plan Subtitle","Plan Title":"Plan Title","Plan title is required":"Plan title is required","Planned maintenance on Friday at 22:00 UTC...":"Planned maintenance on Friday at 22:00 UTC...","Platform":"Platform","Playground":"Playground","Playground and chat functions":"Playground and chat functions","Playground experiments and live conversations.":"Playground experiments and live conversations.","Please agree to the legal terms first":"Please agree to the legal terms first","Please complete the security check to continue.":"Please complete the security check to continue.","Please confirm that you understand the consequences":"Please confirm that you understand the consequences","Please enable io.net model deployment service and configure an API key in System Settings.":"Please enable io.net model deployment service and configure an API key in System Settings.","Please enable Two-factor Authentication or Passkey before proceeding":"Please enable Two-factor Authentication or Passkey before proceeding","Please enter a name":"Please enter a name","Please enter a new password":"Please enter a new password","Please enter a redemption code":"Please enter a redemption code","Please enter a valid duration":"Please enter a valid duration","Please enter a valid email address":"Please enter a valid email address","Please enter a valid number":"Please enter a valid number","Please enter a Well-Known URL first":"Please enter a Well-Known URL first","Please enter amount":"Please enter amount","Please enter an administrator username":"Please enter an administrator username","Please enter API key first":"Please enter API key first","Please enter chat client name":"Please enter chat client name","Please enter email and verification code":"Please enter email and verification code","Please enter keys first":"Please enter keys first","Please enter model name":"Please enter model name","Please enter plan title":"Please enter plan title","Please enter the authentication code.":"Please enter the authentication code.","Please enter the URL":"Please enter the URL","Please enter the verification code":"Please enter the verification code","Please enter your current password":"Please enter your current password","Please enter your email":"Please enter your email","Please enter your email first":"Please enter your email first","Please enter your verification code":"Please enter your verification code","Please enter your verification code or backup code":"Please enter your verification code or backup code","Please fix JSON errors before saving":"Please fix JSON errors before saving","Please fix the highlighted fields before saving":"Please fix the highlighted fields before saving","Please log in with the appropriate credentials":"Please log in with the appropriate credentials","Please select a container":"Please select a container","Please select a payment method":"Please select a payment method","Please select a primary model":"Please select a primary model","Please select a subscription plan":"Please select a subscription plan","Please select at least one channel":"Please select at least one channel","Please select at least one model":"Please select at least one model","Please select items to delete":"Please select items to delete","Please Select user groups that can access this channel.":"Please Select user groups that can access this channel.","Please set Ollama API Base URL first":"Please set Ollama API Base URL first","Please sign in to view {{module}}.":"Please sign in to view {{module}}.","Please try again later.":"Please try again later.","Please type the following text to confirm:":"Please type the following text to confirm:","Please upload key file(s)":"Please upload key file(s)","Please wait a moment before trying again.":"Please wait a moment before trying again.","Please wait a moment, human check is initializing...":"Please wait a moment, human check is initializing...","Please wait before editing to avoid overwriting saved values.":"Please wait before editing to avoid overwriting saved values.","Policy JSON":"Policy JSON","Polling":"Polling","Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded":"Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded","Poor":"Poor","Port":"Port","Port must be a positive integer":"Port must be a positive integer","Post Delta":"Post Delta","PostgreSQL detected":"PostgreSQL detected","PostgreSQL offers advanced reliability and data integrity for production workloads.":"PostgreSQL offers advanced reliability and data integrity for production workloads.","PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.":"PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.","Power AI applications, manage digital assets, connect the Future":"Power AI applications, manage digital assets, connect the Future","Powerful API Management Platform":"Powerful API Management Platform","Pre-Consume for Free Models":"Pre-Consume for Free Models","Pre-consumed":"Pre-consumed","Pre-Consumed Quota":"Pre-Consumed Quota","Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.":"Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.","Preferences":"Preferences","Prefill Group Management":"Prefill Group Management","Prefill Groups":"Prefill Groups","Prefill groups help you keep complex configurations in sync.":"Prefill groups help you keep complex configurations in sync.","Prefix":"Prefix","Prefix Match":"Prefix Match","Prefix used when displaying prices":"Prefix used when displaying prices","Prefix/Suffix Text":"Prefix/Suffix Text","Premium chat models":"Premium chat models","Premium plan, half price":"Premium plan, half price","Preparing chat keys…":"Preparing chat keys…","Preparing your chat link, please try again in a moment.":"Preparing your chat link, please try again in a moment.","Preparing your chat link…":"Preparing your chat link…","Prepend":"Prepend","Prepend to Start":"Prepend to Start","Prepend value to array / string / object start":"Prepend value to array / string / object start","Preserve the original field when applying this rule":"Preserve the original field when applying this rule","Preset groups":"Preset groups","Preset recharge amounts (JSON array)":"Preset recharge amounts (JSON array)","Preset recharge amounts displayed to users":"Preset recharge amounts displayed to users","Preset Template":"Preset Template","Preset templates":"Preset templates","preset.anthropic":"Anthropic","preset.default":"Default","preset.forest-whisper":"Forest Whisper","preset.lake-view":"Lake View","preset.lavender-dream":"Lavender Dream","preset.ocean-breeze":"Ocean Breeze","preset.rose-garden":"Rose Garden","preset.simple-large":"Simple Large-font","preset.sunset-glow":"Sunset Glow","preset.underground":"Underground","Press Enter or comma to add tags":"Press Enter or comma to add tags","Press Enter to use \\"{{value}}\\"":"Press Enter to use \\"{{value}}\\"","Prevent server-side request forgery attacks":"Prevent server-side request forgery attacks","Preview":"Preview","Previous":"Previous","Previous branch":"Previous branch","Previous page":"Previous page","Price":"Price","Price ($/1K calls)":"Price ($/1K calls)","Price (local currency / USD)":"Price (local currency / USD)","Price display":"Price display","Price display mode":"Price display mode","Price estimation":"Price estimation","Price estimation description":"After completing the hardware type, deployment location, replica count, etc., the price will be automatically calculated.","Price ID":"Price ID","Price mode (USD per 1M tokens)":"Price mode (USD per 1M tokens)","Price summary":"Price summary","price_xxx":"price_xxx","Price:":"Price:","Price: High to Low":"Price: High to Low","Price: Low to High":"Price: Low to High","Prices shown per":"Prices shown per","Prices synced successfully":"Price
107s synced successfully","Prices vary by usage tier and request conditions":"Prices vary by usage tier and request conditions","Pricing":"Pricing","Pricing & Display":"Pricing & Display","Pricing by Group":"Pricing by Group","Pricing Configuration":"Pricing Configuration","Pricing group example":"Pricing group example","Pricing groups":"Pricing groups","Pricing mode":"Pricing mode","Pricing Ratios":"Pricing Ratios","Pricing Type":"Pricing Type","Primary Model":"Primary Model","Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)":"Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)","Priority":"Priority","Priority (Default)":"Priority (Default)","Priority level from 0 (lowest) to 10 (highest), default is 5":"Priority level from 0 (lowest) to 10 (highest), default is 5","Priority order for automatic group assignment. New tokens rotate through this list.":"Priority order for automatic group assignment. New tokens rotate through this list.","Privacy Policy":"Privacy Policy","Private Deployment URL":"Private Deployment URL","Processing OAuth response...":"Processing OAuth response...","Processing...":"Processing...","Product":"Product","Product ID":"Product ID","Product ID is required":"Product ID is required","Product Name":"Product Name","Productivity":"Productivity","Products":"Products","Professional team providing 24/7 technical support":"Professional team providing 24/7 technical support","Profile":"Profile","Profile updated successfully":"Profile updated successfully","Programming":"Programming","Progress":"Progress","Project":"Project","Promote":"Promote","Promotion codes":"Promotion codes","Prompt":"Prompt","Prompt (EN)":"Prompt (EN)","Prompt cache ratio":"Prompt cache ratio","Prompt caching":"Prompt caching","Prompt Caching":"Prompt Caching","Prompt Details":"Prompt Details","Prompt price ($/1M tokens)":"Prompt price ($/1M tokens)","Proprietary":"Proprietary","Provide a JSON object where each key maps to an endpoint definition.":"Provide a JSON object where each key maps to an endpoint definition.","Provide a valid URL starting with http:// or https://":"Provide a valid URL starting with http:// or https://","Provide Markdown, HTML, or an external URL for the privacy policy":"Provide Markdown, HTML, or an external URL for the privacy policy","Provide Markdown, HTML, or an external URL for the user agreement":"Provide Markdown, HTML, or an external URL for the user agreement","Provide per-category safety overrides as JSON. Use `default` for fallback values.":"Provide per-category safety overrides as JSON. Use `default` for fallback values.","Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.":"Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.","Provider":"Provider","Provider & data privacy":"Provider & data privacy","Provider created successfully":"Provider created successfully","Provider deleted successfully":"Provider deleted successfully","Provider Name":"Provider Name","Provider type (OpenAI, Anthropic, etc.)":"Provider type (OpenAI, Anthropic, etc.)","Provider updated successfully":"Provider updated successfully","Provider-specific endpoint, account, and compatibility settings.":"Provider-specific endpoint, account, and compatibility settings.","Proxy Address":"Proxy Address","Prune Object Items":"Prune Object Items","Prune object items by conditions":"Prune object items by conditions","Prune Rule (string or JSON object)":"Prune Rule (string or JSON object)","Public model catalog and pricing page.":"Public model catalog and pricing page.","Public rankings page based on live usage data.":"Public rankings page based on live usage data.","Publish Date":"Publish Date","Published":"Published","Published models, groups, and model remapping rules.":"Published models, groups, and model remapping rules.","Published:":"Published:","Pull":"Pull","Pull model":"Pull model","Pulling...":"Pulling...","Purchase Limit":"Purchase Limit","Purchase limit reached":"Purchase limit reached","Purchase Subscription":"Purchase Subscription","QR Code Image URL":"QR Code Image URL","QR code is not configured. Please contact support.":"QR code is not configured. Please contact support.","Quantity":"Quantity","QuantumNous":"QuantumNous","Query Balance":"Query Balance","Query Param":"Query Param","Querying...":"Querying...","Question":"Question","Queued":"Queued","Quick actions":"Quick actions","Quick insert common payment methods":"Quick insert common payment methods","Quick Range":"Quick Range","Quick Setup from Preset":"Quick Setup from Preset","Quota":"Quota","Quota ({{currency}})":"Quota ({{currency}})","Quota adjusted successfully":"Quota adjusted successfully","Quota consumed before charging users":"Quota consumed before charging users","Quota Distribution":"Quota Distribution","Quota given to invited users":"Quota given to invited users","Quota given to users who invite others":"Quota given to users who invite others","Quota must be a positive number":"Quota must be a positive number","Quota must be zero or greater":"Quota must be zero or greater","Quota Per Unit":"Quota Per Unit","Quota reminder (tokens)":"Quota reminder (tokens)","Quota Reset":"Quota Reset","Quota Settings":"Quota Settings","Quota Types":"Quota Types","Quota Warning Threshold":"Quota Warning Threshold","Quota:":"Quota:","Radius":"Radius","Random":"Random","Randomly select a key from the pool for each request":"Randomly select a key from the pool for each request","Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.":"Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.","Rankings":"Rankings","Rate Limit Windows":"Rate Limit Windows","Rate Limited":"Rate Limited","Rate Limiting":"Rate Limiting","Rate limits":"Rate limits","Ratio":"Ratio","Ratio applied to audio completions for streaming models.":"Ratio applied to audio completions for streaming models.","Ratio applied to audio inputs where supported by the upstream model.":"Ratio applied to audio inputs where supported by the upstream model.","Ratio applied when creating cache entries for supported models.":"Ratio applied when creating cache entries for supported models.","Ratio mode":"Ratio mode","Ratio Type":"Ratio Type","Ratio: {{value}}":"Ratio: {{value}}","Ratios synced successfully":"Ratios synced successfully","Raw expression":"Raw expression","Raw JSON":"Raw JSON","Raw Quota":"Raw Quota","Re-enable on success":"Re-enable on success","Re-login":"Re-login","Ready":"Ready","Ready to initialize":"Ready to initialize","Ready to simplify":"Ready to simplify","Real exchange rate between USD and your payment gateway currency":"Real exchange rate between USD and your payment gateway currency","Reason":"Reason","Reason:":"Reason:","Reasoning":"Reasoning","Reasoning Effort":"Reasoning Effort","Receive Upstream Model Update Notifications":"Receive Upstream Model Update Notifications","Received":"Received","Recently launched models":"Recently launched models","Recently launched models gaining traction":"Recently launched models gaining traction","Recharge":"Recharge","Recharge Amount":"Recharge Amount","Recharge Amount (USD)":"Recharge Amount (USD)","Recommended":"Recommended","Recommended actions":"Recommended actions","Recommended to keep this high to avoid upstream throttling.":"Recommended to keep this high to avoid upstream throttling.","Record IP Address":"Record IP Address","Record quota usage":"Record quota usage","Recursion Strategy":"Recursion Strategy","Recursive":"Recursive","Redeem":"Redeem","Redeem codes":"Redeem codes","Redeemed By":"Redeemed By","Redeemed:":"Redeemed:","Received amount":"Received amount","redemption code":"redemption code","Redemption Code":"Redemption Code","Redemption code deleted successfully":"Redemption code deleted successfully","Redemption code disabled successfully":"Redemption code disabled successfully","Redemption code enabled successfully":"Redemption code enabled successfully","Redemption code updated successfully":"Redemption code updated successfully","Redemption code(s) created successfully":"Redemption code(s) created successfully","Redemption Codes":"Redemption Codes","Redemption codes are disabled until the administrator confirms compliance terms.":"Redemption codes are disabled until the administrator confirms compliance terms.","redemption codes.":"redemption codes.","Redemption failed":"Redemption failed","Redemption successful! Added: {{quota}}":"Redemption successful! Added: {{quota}}","Redirecting to chat page...":"Redirecting to chat page...","Redirecting to Creem checkout...":"Redirecting to Creem checkout...","Redirecting to GitHub...":"Redirecting to GitHub...","Redirecting to payment page...":"Redirecting to payment page...","Redirecting to sign in in {{seconds}} seconds.":"Redirecting to sign in in {{seconds}} seconds.","Reference Video":"Reference Video","Referral link:":"Referral link:","Referral Program":"Referral Program","Referral reward transfer is disabled until the administrator confirms compliance terms.":"Referral reward transfer is disabled until the administrator confirms compliance terms.","Refine models by provider, group, type, and tags.":"Refine models by provider, group, type, and tags.","Refresh":"Refresh","Refresh Cache":"Refresh Cache","Refresh credential":"Refresh credential","Refresh failed":"Refresh failed","Refresh interval (minutes)":"Refresh interval (minutes)","Refresh Stats":"Refresh Stats","Refreshing...":"Refreshing...","Refund":"Refund","Refund Details":"Refund Details","Regenerate":"Regenerate","Regenerate Backup Codes":"Regenerate Backup Codes","Regex":"Regex","Regex Pattern":"Regex Pattern","Regex Replace":"Regex Replace","Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.":"Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.","Register Passkey":"Register Passkey","Registered a passkey":"Registered a passkey","Registration Enabled":"Registration Enabled","Registry (optional)":"Registry (optional)","Registry secret":"Registry secret","Registry username":"Registry username","Reject Reason":"Reject Reason","Release details":"Release details","Released":"Released","Relying Party Display Name":"Relying Party Display Name","Relying Party ID":"Relying Party ID","Remaining":"Remaining","Remaining quota":"Remaining quota","Remaining Quota ({{currency}})":"Remaining Quota ({{currency}})","Remaining quota units":"Remaining quota units","Remaining:":"Remaining:","Remark":"Remark","Remove":"Remove","Remove {{value}}":"Remove {{value}}","Remove ${{amount}}":"Remove ${{amount}}","Remove all log entries created before the selected timestamp.":"Remove all log entries created before the selected timestamp.","Remove attachment":"Remove attachment","Remove c
107ondition":"Remove condition","Remove Duplicates":"Remove Duplicates","Remove filter":"Remove filter","Remove functionResponse.id field":"Remove functionResponse.id field","Remove mapped targets":"Remove mapped targets","Remove Models":"Remove Models","Remove Passkey":"Remove Passkey","Remove Passkey?":"Remove Passkey?","Remove rule group":"Remove rule group","Remove string prefix":"Remove string prefix","Remove string suffix":"Remove string suffix","Remove the target field":"Remove the target field","Remove tier":"Remove tier","Removed":"Removed","Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}":"Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}","Removed an OAuth binding for the user":"Removed an OAuth binding for the user","Removed Models ({{count}})":"Removed Models ({{count}})","Removes Midjourney flags such as --fast, --relax, and --turbo from user prompts.":"Removes Midjourney flags such as --fast, --relax, and --turbo from user prompts.","Removing Passkey will require you to sign in with your password next time. You can re-register anytime.":"Removing Passkey will require you to sign in with your password next time. You can re-register anytime.","Rename":"Rename","Rename deployment":"Rename deployment","Rename failed":"Rename failed","Renamed successfully":"Renamed successfully","Repeat the administrator password":"Repeat the administrator password","Replace":"Replace","Replace all existing keys":"Replace all existing keys","Replace channel models":"Replace channel models","Replace mode: Will completely replace all existing keys":"Replace mode: Will completely replace all existing keys","Replace With":"Replace With","replaced":"replaced","Replacement Model":"Replacement Model","Replica count":"Replica count","Replicate":"Replicate","Report an issue":"Report an issue","request":"request","Request":"Request","Request Body Disk Cache":"Request Body Disk Cache","Request Body Field":"Request Body Field","Request Body Memory Cache":"Request Body Memory Cache","Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.":"Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.","Request conversion":"Request conversion","Request Conversion":"Request Conversion","Request Count":"Request Count","Request failed":"Request failed","Request flow":"Request flow","Request Header Field":"Request Header Field","Request Header Override":"Request Header Override","Request Header Overrides":"Request Header Overrides","Request ID":"Request ID","Request Limits":"Request Limits","Request Model":"Request Model","Request Model:":"Request Model:","Request overrides, routing behavior, and upstream model automation":"Request overrides, routing behavior, and upstream model automation","Request rule pricing":"Request rule pricing","Request success rate sampled over the last 24 hours":"Request success rate sampled over the last 24 hours","Request success rate; {{incidents}} incident buckets in the last 24 hours":"Request success rate; {{incidents}} incident buckets in the last 24 hours","Request timed out, please refresh and restart GitHub login":"Request timed out, please refresh and restart GitHub login","Request-based":"Request-based","Requests (24h)":"Requests (24h)","Requests / 24h":"Requests / 24h","Requests per minute":"Requests per minute","requests served":"requests served","Requests will be forwarded to this worker. Trailing slashes are removed automatically.":"Requests will be forwarded to this worker. Trailing slashes are removed automatically.","Requests:":"Requests:","Require email verification for new accounts":"Require email verification for new accounts","Require job success before follow-up actions":"Require job success before follow-up actions","Require login to view models":"Require login to view models","Require login to view rankings":"Require login to view rankings","required":"required","Required":"Required","Required events:":"Required events:","Required provider, authentication, model, and group settings":"Required provider, authentication, model, and group settings","Required to expose Midjourney-style image generation to end users.":"Required to expose Midjourney-style image generation to end users.","Rerank":"Rerank","Reroll":"Reroll","Research, analysis, scientific reasoning":"Research, analysis, scientific reasoning","Resend ({{seconds}}s)":"Resend ({{seconds}}
107s)","Reset":"Reset","Reset 2FA":"Reset 2FA","Reset all model prices?":"Reset all model prices?","Reset all model ratios?":"Reset all model ratios?","Reset all settings to default values":"Reset all settings to default values","Reset at:":"Reset at:","Reset balance and used quota":"Reset balance and used quota","Reset Cycle":"Reset Cycle","Reset email sent, please check your inbox":"Reset email sent, please check your inbox","Reset failed":"Reset failed","Reset model ratios":"Reset model ratios","Reset Passkey":"Reset Passkey","Reset password":"Reset password","Reset Period":"Reset Period","Reset prices":"Reset prices","Reset ratios":"Reset ratios","Reset Stats":"Reset Stats","Reset the user passkey":"Reset the user passkey","Reset to default":"Reset to default","Reset to Default":"Reset to Default","Reset to default configuration":"Reset to default configuration","Reset Two-Factor Authentication":"Reset Two-Factor Authentication","Resets in:":"Resets in:","Resolve Conflicts":"Resolve Conflicts","Resource Configuration":"Resource Configuration","Response":"Response","Response Time":"Response Time","Responses API Version":"Responses API Version","Restore defaults":"Restore defaults","Restrict user model request frequency (may impact high concurrency performance)":"Restrict user model request frequency (may impact high concurrency performance)","Result":"Result","Retain last N days":"Retain last N days","Retain last N files":"Retain last N files","Retention days":"Retention days","Retry":"Retry","Retry Chain":"Retry Chain","Retry Suggestion":"Retry Suggestion","Retry Times":"Retry Times","Return a custom error immediately":"Return a custom error immediately","Return Custom Error":"Return Custom Error","Return data conforming to a JSON schema":"Return data conforming to a JSON schema","Return Error":"Return Error","Return per-token log probabilities":"Return per-token log probabilities","Return to dashboard":"Return to dashboard","Return vector embeddings for inputs":"Return vector embeddings for inputs","Reveal API key":"Reveal API key","Reveal key":"Reveal key","Revenue":"Revenue","Review & initialize":"Review & initialize","Review model rates before scaling traffic":"Review model rates before scaling traffic","Review your payment details":"Review your payment details","Review your purchase details before proceeding.":"Review your purchase details before proceeding.","Rewards will be added directly to your balance":"Rewards will be added directly to your balance","Rewrite callback URLs to the local server":"Rewrite callback URLs to the local server","Right to Left":"Right to Left","Role":"Role","Roleplay":"Roleplay","Root":"Root","Rose Garden":"Rose Garden","Route":"Route","Route active":"Route active","Route Description":"Route Description","Route is required":"Route is required","Route, auth, and balance check in one place":"Route, auth, and balance check in one place","Routing & Overrides":"Routing & Overrides","Routing Strategy":"Routing Strategy","Rows per page":"Rows per page","RPM":"RPM","RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.":"RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.","RSA Private Key (Production)":"RSA Private Key (Production)","RSA Private Key (Sandbox)":"RSA Private Key (Sandbox)","Rule":"Rule","Rule {{line}} is missing source field":"Rule {{line}} is missing source field","Rule {{line}} is missing target field":"Rule {{line}} is missing target field","Rule {{line}} is missing target path":"Rule {{line}} is missing target path","Rule {{line}} is missing value":"Rule {{line}} is missing value","Rule {{line}} pass_headers format is invalid":"Rule {{line}} pass_headers format is invalid","Rule {{line}} pass_headers is missing header names":"Rule {{line}} pass_headers is missing header names","Rule {{line}} prune_objects is missing conditions":"Rule {{line}} prune_objects is missing conditions","Rule {{line}} return_error requires a message field":"Rule {{line}} return_error requires a message field","Rule Description (optional)":"Rule Description (optional)","Rule group":"Rule group","rules":"rules","Rules":"Rules","Rules JSON":"Rules JSON","Rules JSON must be an array":"Rules JSON must be an array","Run GC":"Run GC","Run tests for the selected models":"Run tests for the selected models","Running":"Running","Runway":"Runway","s":"s","Safety Settings":"Safety Settings","Same as Local":"Same as Local","Sampling temperature; lower is more deterministic":"Sampling temperature; lower is more deterministic","Sandbox mode":"Sandbox mode","Save":"Save","Save all settings":"Save all settings","Save Backup Codes":"Save Backup Codes","Save changes":"Save changes","Save Changes":"Save Changes","Save chat settings":"Save chat settings","Save check-in settings":"Save check-in settings","Save Creem settings":"Save Creem settings","Save drawing settings":"Save drawing settings","Save Epay settings":"Save Epay settings","Save failed":"Save failed","Save failed, please retry":"Save failed, please retry","S
107ave general settings":"Save general settings","Save group ratios":"Save group ratios","Save io.net settings":"Save io.net settings","Save log settings":"Save log settings","Save model prices":"Save model prices","Save model ratios":"Save model ratios","Save Models":"Save Models","Save monitoring rules":"Save monitoring rules","Save navigation":"Save navigation","Save notice":"Save notice","Save Preferences":"Save Preferences","Save preview":"Save preview","Save rate limits":"Save rate limits","Save sensitive words":"Save sensitive words","Save Settings":"Save Settings","Save sidebar modules":"Save sidebar modules","Save SMTP settings":"Save SMTP settings","Save SSRF settings":"Save SSRF settings","Save Stripe settings":"Save Stripe settings","Save these backup codes in a safe place. Each code can only be used once.":"Save these backup codes in a safe place. Each code can only be used once.","Save these codes in a safe place. Each code can only be used once.":"Save these codes in a safe place. Each code can only be used once.","Save tool prices":"Save tool prices","Save Waffo Pancake settings":"Save Waffo Pancake settings","Save Worker settings":"Save Worker settings","Saved successfully":"Saved successfully","Saving...":"Saving...","Scan QR Code":"Scan QR Code","Scan the QR code to follow the official account and reply with “验证码” to receive your verification code.":"Scan the QR code to follow the official account and send the message “验证码” to receive your verification code.","Scan the QR code with WeChat to bind your account":"Scan the QR code with WeChat to bind your account","Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)":"Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)","Scenario Templates":"Scenario Templates","Scheduled channel tests":"Scheduled channel tests","scheduling controls":"scheduling controls","Science":"Science","Scope":"Scope","Scopes":"Scopes","Search":"Search","Search by name or URL...":"Search by name or URL...","Search by order number...":"Search by order number...","Search channel type...":"Search channel type...","Search chat presets...":"Search chat presets...","Search colors...":"Search colors...","Search conflicting models or fields":"Search conflicting models or fields","Search deployments...":"Search deployments...","Search feature in development":"Search feature in development","Search group names...":"Search group names...","Search groups...":"Search groups...","Search missing models":"Search missing models","Search model name, provider, endpoint, or tag...":"Search model name, provider, endpoint, or tag...","Search model name...":"Search model name...","Search models":"Search models","Search models or fields...":"Search models or fields...","Search models...":"Search models...","Search payment methods...":"Search payment methods...","Search payment types...":"Search payment types...","Search products...":"Search products...","Search rules...":"Search rules...","Search tags...":"Search tags...","Search the public web at inference time":"Search the public web at inference time","Search vendors...":"Search vendors...","Search...":"Search...","seconds":"seconds","Secret env (JSON object)":"Secret env (JSON object)","Secret environment variables (JSON)":"Secret environment variables (JSON)","Secret Key":"Secret Key","Secure & Reliable":"Secure & Reliable","Secured":"Secured","Security":"Security","Security & Limits":"Security & Limits","Security Check":"Security Check","Security verification":"Security verification","Select":"Select","Select a color":"Select a color","Select a group":"Select a group","Select a group type":"Select a group type","Select a model to edit pricing":"Select a model to edit pricing","Select a preset...":"Select a preset...","Select a product":"Select a product","Select a role":"Select a role","Select a rule to edit.":"Select a rule to edit.","Select a store":"Select a store","Select a timestamp before clearing logs.":"Select a timestamp before clearing logs.","Select a usage mode to continue":"Select a usage mode to continue","Select a verification method first":"Select a verification method first","Select all":"Select all","Select all (filtered)":"Select all (filtered)","Select all models":"Select all models","Select All Visible":"Select All Visible","Select an operation mode and enter the amount":"Select an operation mode and enter the amount","Select announcement type":"Select announcement type","Select at least one field to overwrite.":"Select at least one field to overwrite.","Select at least one target model":"Select at least one target model","Select body font":"Select body font","Select border radius":"Select border radius","Select channel type":"Select channel type","Select color preset":"Select color preset","Select content width":"Select content width","Select corner radius":"Select corner radius","Select currency":"Select currency","Select date":"Select date","Select default chart":"Select default chart","Select default range":"Select default range","Select display mode":"Select display mode","Select end time":"Select end time","Select from presets or type custom identifier.":"Select from presets or type custom identifier.","Select granularity":"Select granularity","Select groups (leave empty to keep current)":"Select groups (leave empty to keep current)","Select interface density":"Select interface density","Select items...":"Select items...","Select key format":"Select key format","Select language":"Select language","Select Language":"Select Language","Select layout style":"Select layout style","Select locations":"Select locations","Select Model":"Select Model","Select model {{model}}":"Select model {{model}}","Select models (empty for allow all)":"Select models (empty for allow all)","Select models and apply to channel models list.":"Select models and apply to channel models list.","Select models or add custom ones":"Select models or add custom ones","Select models to process. Unselected \\"add\\" models will be ignored.":"Select models to process. Unselected \\"add\\" models will be ignored.","Select models to run batch tests.":"Select models to run batch tests.","Select or enter color value":"Select or enter color value","Select or enter model name":"Select or enter model name","Select or enter payment type":"Select or enter payment type","Select payment method":"Select payment method","Select preset or enter custom CSS color value.":"Select preset or enter custom CSS color value.","Select publish date":"Select publish date","Select requirement":"Select requirement","Select row":"Select row","Select sidebar style":"Select sidebar style","Select site direction":"Select site direction","Select start time":"Select start time","Select subscription plan":"Select subscription plan","Select Sync Channels":"Select Sync Channels","Select sync channels to compare prices":"Select sync channels to compare prices","Select sync channels to compare ratios":"Select sync channels to compare ratios","Select Sync Source":"Select Sync Source","Select the API endpoint region":"Select the API endpoint region","Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.":"Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.","Select theme preference":"Select theme preference","Select theme preset":"Select theme preset","Select time granularity":"Select time granularity","Select vendor":"Select vendor","Selectable groups":"Selectable groups","selected":"selected","Selected {{count}}":"Selected {{count}}","selected channel(s). Leave empty to remove tag.":"selected channel(s). Leave empty to remove tag.","Selected conflicts were overwritten successfully.":"Selected conflicts were overwritten successfully.","Selected when creating a token and used as the default billing group for API calls.":"Selected when creating a token and used as the default billing group for API calls.","Self-Use Mode":"Self-Use Mode","Send":"Send","Send a request":"Send a request","Send code":"Send code","Send email alerts when a user falls below this quota":"Send email alerts when a user falls below this quota","Sending...":"Sending...","Sensitive Words":"Sensitive Words","Sent the API key to FluentRead.":"Sent the API key to FluentRead.","Separate image/audio prices are enabled.":"Separate image/audio prices are enabled.","Serve multiple users or teams with billing and quota control.":"Serve multiple users or teams with billing and quota control.","Server Address":"Server Address","Server IP":"Server IP","Server Log Management":"Server Log Management","Server logging is not enabled (log directory not configured)":"Server logging is not enabled (log directory not configured)","Server Token":"Server Token","Service account JSON file(s)":"Service account JSON file(s)","Session expired!":"Session expired!","Session expired?":"Session expired?","Set":"Set","Set a discount rate for a specific recharge amount threshold.":"Set a discount rate for a specific recharge amount threshold.","Set a secure password (min. 8 characters)":"Set a secure password (min. 8 characters)","Set a tag for":"Set a tag for","Set API key access restrictions":"Set API key access restrictions","Set API key basic information":"Set API key basic information","Set default ranges and charts for model analytics.":"Set default ranges and charts for model analytics.","Set Field":"Set Field","Set filters to customize your dashboard statistics and charts.":"Set filters to customize your dashboard statistics and charts.","Set filters to narrow down your log search results.":"Set filters to narrow down your log search results.","Set Header":"Set Header","Set Project to io.cloud when creating/selecting key":"Set Project to io.cloud when creating/selecting key","Set quota amount and limits":"Set quota amount and limits","Set Request Header":"Set Request Header","Set runtime request header: override entire value, or manipulate comma-separated tokens":"Set runtime request header: override entire value, or manipulate comma-separated tokens","Set separate prices for cache reads and writes.":"Set separate prices for cache reads and writes.","Set Tag":"Set Tag","Set tag for selected channels":"Set tag for selected channels","Set the language used across the interface":"Set the language used across the interface","Set the user\'s role (cannot be Root)":"Set the user\'s role (cannot be Root)","Setting Key":"Setting Key","Setting saved":"Setting saved","Setting up 2FA...":"Setting up 2FA...","Setting updated successfully":"Setting updated successfully","Settings":"Settings","Settings & Preferences":"Settings & Preferences","Settings updated successfully":"Settings updated successfully","Session":"Session","Setup guide":"Setup guide","Setup guide complete":"Setup guide complete","Setup guide is collapsed. Expand it anytime.":"Setup guide is collapsed. Expand it anytime.","Setup Instru
107ctions":"Setup Instructions","Setup progress: {{completed}}/{{total}}":"Setup progress: {{completed}}/{{total}}","Setup Two-Factor Authentication":"Setup Two-Factor Authentication","Share":"Share","Share your link and earn rewards":"Share your link and earn rewards","Shared configuration for all payment gateways":"Shared configuration for all payment gateways","Shorten":"Shorten","Show":"Show","Show All":"Show All","Show all providers including unbound":"Show all providers including unbound","Show only bound providers":"Show only bound providers","Show prices in currency instead of quota.":"Show prices in currency instead of quota.","Show setup guide":"Show setup guide","Show token usage statistics in the UI":"Show token usage statistics in the UI","Showcase core capabilities with demo credentials and limited access.":"Showcase core capabilities with demo credentials and limited access.","Showing":"Showing","showing •":"showing •","Sidebar":"Sidebar","Sidebar collapsed by default for new users":"Sidebar collapsed by default for new users","Sidebar modules":"Sidebar modules","Sidebar Personal Settings":"Sidebar Personal Settings","Sign in":"Sign in","Sign In":"Sign In","Sign in now":"Sign in now","Sign in required":"Sign in required","Sign in with Passkey":"Sign in with Passkey","Sign out":"Sign out","Sign up":"Sign up","Signed in":"Signed in","Signed in successfully!":"Signed in successfully!","Signed in via WeChat":"Signed in via WeChat","Signed in with Passkey":"Signed in with Passkey","Signed out":"Signed out","Significant outages detected":"Significant outages detected","Signing you in with {{provider}}":"Signing you in with {{provider}}","SiliconFlow":"SiliconFlow","Simple":"Simple","Simple mode only returns message; status code and error type use system defaults.":"Simple mode only returns message; status code and error type use system defaults.","Simple mode: prune objects by type, e.g. redacted_thinking.":"Simple mode: prune objects by type, e.g. redacted_thinking.","Single Key":"Single Key","Site & Branding":"Site & Branding","Site Key":"Site Key","Size:":"Size:","sk_xxx or rk_xxx":"sk_xxx or rk_xxx","Skip retry on failure":"Skip retry on failure","Skip to Main":"Skip to Main","Slug":"Slug","Slug can only contain letters, numbers, hyphens, and underscores":"Slug can only contain letters, numbers, hyphens, and underscores","Slug is required":"Slug is required","Slug must be less than 100 characters":"Slug must be less than 100 characters","Smallest USD amount users can recharge (Epay)":"Smallest USD amount users can recharge (Epay)","SMTP Email":"SMTP Email","SMTP Host":"SMTP Host","smtp.example.com":"smtp.example.com","socks5://user:pass@host:port":"socks5://user:pass@host:port","Soft Errors":"Soft Errors","Some channels failed: {{errorMsg}}":"Some channels failed: {{errorMsg}}","Something went wrong!":"Something went wrong!","Sonnet Model":"Sonnet Model","Sora":"Sora","Sort":"Sort","Sort by ID":"Sort by ID","Sort Order":"Sort Order","Source":"Source","Source Endpoint":"Source Endpoint","Source Field":"Source Field","Source Header":"Source Header","sources":"sources","Space-separated OAuth scopes":"Space-separated OAuth scopes","Spark model version, e.g., v2.1 (version number in API URL)":"Spark model version, e.g., v2.1 (version number in API URL)","Special billing expression":"Special billing expression","Special group":"Special group","Special ratio rules":"Special ratio rules","Special ratios override the token group ratio for specific user group and token group combinations.":"Special ratios override the token group ratio for specific user group and token group combinations.","Special usable group rules":"Special usable group rules","Special usable group rules can add, remove, or append selectable token groups for a specific user group.":"Special usable group rules can add, remove, or append selectable token groups for a specific user group.","SQLite stores all data in a single file. Make sure that file is persisted 
107when running in containers.":"SQLite stores all data in a single file. Make sure that file is persisted when running in containers.","SSRF Protection":"SSRF Protection","Standard":"Standard","Standard price":"Standard price","Start":"Start","Start a conversation to see messages here":"Start a conversation to see messages here","Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.":"Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.","Start for free with generous limits. No credit card required.":"Start for free with generous limits. No credit card required.","Start Time":"Start Time","Static page describing the platform.":"Static page describing the platform.","Statistical count":"Statistical count","Statistical quota":"Statistical quota","Statistical tokens":"Statistical tokens","Statistics reset":"Statistics reset","Status":"Status","Status & Sync":"Status & Sync","Status Code":"Status Code","Status Code Mapping":"Status Code Mapping","Status code mapping must use valid HTTP status codes":"Status code mapping must use valid HTTP status codes","Status Page Slug":"Status Page Slug","Status short":"Status","Status:":"Status:","Stay":"Stay","Stay tuned though!":"Stay tuned though!","Steer behaviour with a system instruction":"Steer behaviour with a system instruction","Step":"Step","Stop":"Stop","Stop Retry":"Stop Retry","Store":"Store","Store + product created":"Store + product created","Store ID":"Store ID","Store ID is required":"Store ID is required","Stored value is not echoed back for security":"Stored value is not echoed back for security","stream":"stream","Stream":"Stream","Stream Mode":"Stream Mode","Stream Status":"Stream Status","Stream tokens incrementally as they are generated":"Stream tokens incrementally as they are generated","Stream tokens via Server-Sent Events":"Stream tokens via Server-Sent Events","Streaming":"Streaming","String Replace":"String Replace","Stripe":"Stripe","Stripe API key (leave blank unless updating)":"Stripe API key (leave blank unless updating)","Stripe Dashboard":"Stripe Dashboard","Stripe Gateway":"Stripe Gateway","Stripe product price ID":"Stripe product price ID","Stripe/Creem requires creating products on the third-party platform and entering the ID":"Stripe/Creem requires creating products on the third-party platform and entering the ID","Structured output":"Structured output","Submit":"Submit","Submit directly":"Submit directly","Submit Result":"Submit Result","Submit Time":"Submit Time","Submitted":"Submitted","Submitting":"Submitting","Submitting...":"Submitting...","Submodel":"Submodel","Subscribe Now":"Subscribe Now","Subscribe to a plan for model access":"Subscribe to a plan for model access","Subscription":"Subscription","Subscription Billing":"Subscription Billing","Subscription First":"Subscription First","Subscription Management":"Subscription Management","Subscription Only":"Subscription Only","Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.":"Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.","Subscription Plans":"Subscription Plans","Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).":"Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).","Subscription purchased 
107successfully":"Subscription purchased successfully","Subtract":"Subtract","Success":"Success","Success rate":"Success rate","Successfully created {{count}} API Key(s)":"Successfully created {{count}} API Key(s)","Successfully created {{count}} redemption codes":"Successfully created {{count}} redemption codes","Successfully deleted {{count}} API key(s)":"Successfully deleted {{count}} API key(s)","Successfully deleted {{count}} invalid redemption codes":"Successfully deleted {{count}} invalid redemption codes","Successfully deleted {{count}} model(s)":"Successfully deleted {{count}} model(s)","Successfully disabled {{count}} model(s)":"Successfully disabled {{count}} model(s)","Successfully enabled {{count}} model(s)":"Successfully enabled {{count}} model(s)","Suffix":"Suffix","Suffix Match":"Suffix Match","SunoAPI":"SunoAPI","Sunset Glow":"Sunset Glow","Super Admin":"Super Admin","Super Large":"Super Large","Support for high concurrency with automatic load balancing":"Support for high concurrency with automatic load balancing","Supported Applications":"Supported Applications","Supported Imagine Models":"Supported Imagine Models","Supported modalities":"Supported modalities","Supported parameters":"Supported parameters","Supported variables":"Supported variables","Supports `-thinking`, `-thinking-":"Supports `-thinking`, `-thinking-","Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.":"Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.","Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.":"Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.","Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.":"Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.","Sustained tokens per second":"Sustained tokens per second","Swap Face":"Swap Face","Switch affinity on success":"Switch affinity on success","Switch between the new frontend and the classic frontend. Changes take effect after page reload.":"Switch between the new frontend and the classic frontend. Changes take effect after page reload.","Switch to JSON":"Switch to JSON","Switch to Visual":"Switch to Visual","Sync Endpoint":"Sync Endpoint","Sync Endpoints":"Sync Endpoints","Sync Fields":"Sync Fields","Sync from the public upstream metadata repository.":"Sync from the public upstream metadata repository.","Sync Now":"Sync Now","Sync this model with official upstream":"Sync this model with official upstream","Sync Upstream":"Sync Upstream","Sync Upstream Models":"Sync Upstream Models","Synced upstream models":"Synced upstream models","Synchronize models and vendors from an upstream source":"Synchronize models and vendors from an upstream source","Syncing prices, please wait...":"Syncing prices, please wait...","Syncing...":"Syncing...","System":"System","System Administration":"System Administration","System Announcements":"System Announcements","System Behavior":"System Behavior","System data statistics":"System data statistics","System default":"System default","System Information":"System Information","System initialized successfully! Redirecting…":"System initialized successfully! Redirecting…","System logo":"System logo","System maintenance":"System maintenance","System Memory":"System Memory","System Memory Stats":"System Memory Stats","System Name":"System Name","System name is required":"System name is required","System Notice":"System Notice","System Performance Monitoring":"System Performance Monitoring","System prompt":"System prompt","System Prompt":"System Prompt","System Prompt Concatenation":"System Prompt Concatenation","System Prompt Override":"System Prompt Override","System settings":"System settings","System Settings":"System Settings","System setup wizard":"System setup wizard","System task records":"System task records","System Version":"System Version","Table view":"Table view","Tag":"Tag","Tag Aggregate":"Tag Aggregate","Tag Mode":"Tag Mode","Tag Name":"Tag Name","Tag set successfully":"Tag set successfully","Tag updated successfully":"Tag updated successfully","Tag:":"Tag:","Tags":"Tags","Take photo":"Take photo","Take screenshot":"Take screenshot","Target Endpoint":"Target Endpoint","Target Field":"Target Field","Target Field Path":"Target Field Path","Target group":"Target group","Target Header":"Target Header","Target Path (optional)":"Target Path (optional)","Target User":"Target User","Task":"Task","Task ID":"Task ID","Task ID:":"Task ID:","Task logs":"Task logs","Task Logs":"Task Logs","Team Collaboration":"Team Collaboration","Technical Support":"Technical Support","Telegram":"Telegram","Telegram login requires widget integration; coming soon":"Telegram login requires widget integration; coming soon","Telegram Login Widget":"Telegram Login Widget","Template":"Template","Template variables:":"Template variables:","Templates":"Templates","Templates appended":"Templates appended","Tencent":"Tencent","Termination requested":"Termination requested","Test":"Test","Test {{count}} selected":"Test {{count}} selected","Test All Channels":"Test All Channels","Test Channel Connection":"Test Channel Connection","Test Connection":"Test Connection","Test connectivity for:":"Test connectivity for:","Test failed":"Test failed","Test interval (minutes)":"Test interval (minutes)","Test Latency":"Test Latency","Test Mode":"Test Mode","Test Model":"Test Model","Test models and prompts from the browser":"Test models and prompts from the browser","Test selected models":"Test selected models","Testing all enabled channels started. Please refresh to see results.":"Testing all enabled channels started. Please refresh to see results.","Testing...":"Testing...","Text":"Text","Text description of the desired image":"Text description of the desired image","Text description of the desired video":"Text description of the desired video","Text Input":"Text Input","Text or array of texts to embed":"Text or array of texts to embed","Text Output":"Text Output","Text to Video":"Text to Video","The administrator account is already initialized. You can keep your existing credentials and continue to the next step.":"The administrator account is already initialized. You can keep your existing credentials and continue to the next step.","The administrator configured an external link for this document.":"The administrator configured an external link for this document.","The administrator has not configured a privacy policy yet.":"The administrator has not configured a privacy policy yet.","The administrator has not configured a user agreement yet.":"The administrator has not configured a user agreement yet.","The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.":"The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.","The binding will complete automatically after authorization":"The binding will complete automatically after authorization","The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.":"The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.","The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.":"The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.","The effective domain for Passkey registration. Must match the current domain or be its parent domain.":"The effective domain for Passkey registration. Must match the current domain or be its parent domain.","The entered text does not match the required text.":"The entered text does not match the required text.","The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.":"The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.","The exact model identifier as used in API requests.":"The exact model identifier as used in API requests.","The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.":"The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.","The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:":"The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:","The mapped upstream model(s)":"The mapped upstream model(s)","The model you\'re looking for doesn\'t exist.":"The model you\'re looking for doesn\'t exist.","The name displayed across the application":"The name displayed across the application","The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations":"The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations","The requested chat preset does not exist or has been removed.":"The requested chat preset does not exist or has been removed.","The setup wizard will use this database during initialization.":"The setup wizard will use this database during initialization.","The site is not available at the moment.":"The site is not available at the moment.","The slug is appended to the URL:":"The slug is appended to the URL:","The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.":"The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.","The token group that will have a custom ratio":"The token group that will have a custom ratio","The unique identifier for this model":"The unique identifier for this model","The unique name for this vendor":"The unique name for this vendor","The URL for this chat client.":"The URL for this chat client.","Theme":"Theme","Theme preset":"Theme preset","Theme Settings":"Theme Settings","There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?":"There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?","These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.":"These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.","These toggles affect whether certain request fields are passed through to the upstream provider.":"These toggles affect whether certain request fields are passed through to the upstream provider.","Thinking Suffix Adapter":"Thinking Suffix Adapter","Thinking to Content":"Thinking to Content","Third-party account bindings (read-only, managed by user in profile settings)":"Third-party account bindings (read-only, managed by user in profile settings)","Third-party Payment Config":"Third-party Payment Config","This action cannot be undone.":"This action cannot be undone.","This action cannot be undone. This will permanently delete your account and remove all your data from our servers.":"This action cannot be undone. This will permanently delete your account and remove all your data from our servers.","This action will permanently remove 2FA protection from your account.":"This action will permanently remove 2FA protection from your account.","This channel is not an Ollama channel."
107:"This channel is not an Ollama channel.","This channel type does not support fetching models":"This channel type does not support fetching models","This channel type requires additional configuration":"This channel type requires additional configuration","This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.":"This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.","This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.":"This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.","This data may be unreliable, use with caution":"This data may be unreliable, use with caution","This device does not support Passkey":"This device does not support Passkey","This device does not support Passkey verification.":"This device does not support Passkey verification.","This expression is too complex for the visual editor. Please switch to expression mode to edit.":"This expression is too complex for the visual editor. Please switch to expression mode to edit.","This feature is experimental. Configuration format and behavior may change.":"This feature is experimental. Configuration format and behavior may change.","This feature requires server-side WeChat configuration":"This feature requires server-side WeChat configuration","This may cause cache failures.":"This may cause cache failures.","This may take a few moments while we validate the request and update your session.":"This may take a few moments while we validate the request and update your session.","This model has both fixed price and ratio billing conflicts":"This model has both fixed price and ratio billing conflicts","This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.":"This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.","This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.":"This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.","This model is not available in any group, or no group pricing information is configured.":"This model is not available in any group, or no group pricing information is configured.","This month":"This month","This page has not been created yet.":"This page has not been created yet.","This plan does not allow balance redemption":"This plan does not allow balance redemption","This project must be used in compliance with the":"This project must be used in compliance with the","This record was written by a pre-upgrade instance and lacks audit info. Upgrade the instance to record server IP, callback IP, payment method and system version.":"This record was written by a pre-upgrade instance and lacks audit info. Upgrade the instance to record server IP, callback IP, payment method and system version.","This site currently has {{count}} models enabled":"This site currently has {{count}} models enabled","This tier catches any request that did not match earlier tiers.":"This tier catches any request that did not match earlier tiers.","this token group":"this token group","this user group":"this user group","This user has no bindings":"This user has no bindings","This week":"This week","This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.":"This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.","This will clear custom pricing ratios and revert to upstream defaults.":"This will clear custom pricing ratios and revert to upstream defaults.","This will delete all":"This will delete all","This will delete all channel affinity cache entries still in memory.":"This will delete all channel affinity cache entries still in memory.","This will delete temporary cache files that have not been used for more than 10 minutes":"This will delete temporary cache files that have not been used for more than 10 minutes","This will extend the deployment by the specified hours.":"This will extend the deployment by the specified hours.","This will permanently delete API key":"This will permanently delete API key","This will permanently delete redemption code":"This will permanently delete redemption code","This will permanently delete user":"This will permanently delete user","This will permanently remove all log entries created before {{date}}.":"This will permanently remove all log entries created before {{date}}.","This will permanently remove log entries before the selected timestamp.":"This will permanently remove log entries before the selected timestamp.","This year":"This year","Three steps to get started":"Three steps to get started","Throughput":"Throughput","Throughput by group":"Throughput by group","Throughput short":"TPS","Throughput trend":"Throughput trend","Tier":"Tier","Tier conditions":"Tier conditions","Tier name":"Tier name","Tiered":"Tiered","Tiered (billing expression)":"Tiered (billing expression)","Tiered price table":"Tiered price table","Tiered pricing":"Tiered pricing","t
107iers":"tiers","Time":"Time","Time Granularity":"Time Granularity","Time remaining":"Time remaining","Time window for rate limiting":"Time window for rate limiting","Time-based":"Time-based","Time-sliced cache (Claude)":"Time-sliced cache (Claude)","Time:":"Time:","Timeline":"Timeline","times":"times","Timing":"Timing","to access this resource.":"to access this resource.","to confirm":"to confirm","To Lower":"To Lower","To Lowercase":"To Lowercase","to override billing when a user in one group uses a token of another group.":"to override billing when a user in one group uses a token of another group.","to the Models list so users can use them before the mapping sends traffic upstream.":"to the Models list so users can use them before the mapping sends traffic upstream.","To Upper":"To Upper","To Uppercase":"To Uppercase","to view this resource.":"to view this resource.","Today":"Today","Toggle columns":"Toggle columns","Toggle navigation menu":"Toggle navigation menu","Toggle plan":"Toggle plan","Toggle theme":"Toggle theme","Token":"Token","Token Breakdown":"Token Breakdown","Token Endpoint":"Token Endpoint","Token Endpoint (Optional)":"Token Endpoint (Optional)","Token estimator":"Token estimator","Token group":"Token group","Token management":"Token management","Token Management":"Token Management","Token Mgmt":"Token Mgmt","Token Name":"Token Name","Token obtained from your Gotify application":"Token obtained from your Gotify application","Token price for audio input.":"Token price for audio input.","Token price for audio output.":"Token price for audio output.","Token price for cache reads.":"Token price for cache reads.","Token price for creating cache entries.":"Token price for creating cache entries.","Token price for image input.":"Token price for image input.","Token prices":"Token prices","Token regenerated and copied to clipboard":"Token regenerated and copied to clipboard","Token share by model author across the last 24 hours":"Token share by model author across the last 24 hours","Token share by model author across the past few weeks":"Token share by model author across the past few weeks","Token share by model author across the past month":"Token share by model author across the past month","Token share by model author across the past year":"Token share by model author across the past year","Token share by model author since launch":"Token share by model author since launch","Token unit":"Token unit","Token usage by model since launch":"Token usage by model since launch","Token-based":"Token-based","Tokenizer":"Tokenizer","tokens":"tokens","Tokens":"Tokens","tokens / mo":"tokens / mo","Tokens by category":"Tokens by category","Tokens Only":"Tokens Only","Tokens per minute":"Tokens per minute","Tokens since launch":"Tokens since launch","Tokens-only mode will show raw quota values regardless of this toggle.":"Tokens-only mode will show raw quota values regardless of this toggle.","Too many files. Some were not added.":"Too many files. Some were not added.","Too many requests":"Too many requests","Tool / function declarations the model may call":"Tool / function declarations the model may call","Tool identifier":"Tool identifier","Tool price settings":"Tool price settings","Tool prices":"Tool prices","Tool-choice policy or specific tool name":"Tool-choice policy or specific tool name","Tools":"Tools","Top {{count}}":"Top {{count}}","Top app":"Top app","Top apps":"Top apps","Top Apps":"Top Apps","Top integrations using this model":"Top integrations using this model","Top model":"Top model","Top models":"Top models","Top Models":"Top Models","Top models by traffic":"Top models by traffic","Top up balance and view billing history.":"Top up balance and view billing history.","Top Users":"Top Users","Top vendors":"Top vendors","Top-up":"Top-up","Top-up amount options":"Top-up amount options","Top-up Audit Info":"Top-up Audit Info","Top-up group ratios":"Top-up group ratios","Top-Up Link":"Top-Up Link","top-up ratio":"top-up ratio","Topup Amount":"Topup Amount","Total":"Total","Total Allocated":"Total Allocated","Total check-ins":"Total check-ins","Total consumed":"Total consumed","Total consumed quota":"Total consumed quota","Total cost":"Total cost","Total Cost":"Total Cost","Total Count":"Total Count","Total earned":"Total earned","Total Earned":"Total Earned","Total GPUs":"Total GPUs","Total invitation revenue":"Total invitation revenue","Total Log Size":"Total Log Size","Total Quota":"Total Quota","Total requests allowed per period. 0 = unlimited.":"Total requests allowed per period. 0 = unlimited.","Total requests made":"Total requests made","Total tokens":"Total tokens","Total Tokens":"Total Tokens","Total Usage":"Total Usage","Total:":"Total:","TPM":"TPM","Track per-request consumption to power usage analytics. Keeping this on increases database writes.":"Track per-request consumption to power usage analytics. Keeping this on increases database writes.","Track usage, costs and performance with real-time analytics":"Track usage, costs and performance with real-time analytics","Tracked apps":"Tracked apps","Tracks current account base limits and additional metered usage on Codex upstream.":"Tracks current account base limits and additional metered usage on Codex upstream.","Trading insights, accounting, advisory":"Trading insights, accounting, advisory","Transfer":"Transfer","Transfer Amount":"Transfer Amount","Transfer failed":"Transfer failed","Transfer Rewards":"Transfer Rewards","Transfer successful":"Transfer successful","Transfer to Balance":"Transfer to Balance","Translation":"Translation","Transparent Billing":"Transparent Billing","Trend":"Trend","Trending down":"Trending down","Trending up":"Trending up","Triggered garbage collection":"Triggered garbage collection","Trim leading/trailing whitespace":"Trim leading/trailing whitespace","Trim Prefix":"Trim Prefix","Trim Space":"Trim Space","Trim Suffix":"Trim Suffix","Truncate embeddings to this many dimensions":"Truncate embeddings to this many dimensions","Trusted":"Trusted","Try adjusting your search":"Try adjusting your search","Try adjusting your search to locate a missing model.":"Try adjusting your search to locate a missing model.","TTFT P50":"TTFT P50","TTFT P95":"TTFT P95","TTFT P99":"TTFT P99","TTFT percentiles, throughput, and 30-day uptime by group":"TTFT percentiles, throughput, and 30-day uptime by group","TTL":"TTL","TTL (seconds, 0 = default)":"TTL (seconds, 0 = default)","TTL (seconds)":"TTL (seconds)","Tune selection priority, testing, status handling, and request overrides.":"Tune selection priority, testing, status handling, and request overrides.","Turnstile is enabled but site key is empty.":"Turnstile is enabled but site key is empty.","Tutoring, learning aids, assessment":"Tutoring, learning aids, assessment","Two-factor Authentication":"Two-factor Authentication","Two-Factor Authentication":"Two-Factor Authentication","Two-factor authentication disabled":"Two-factor authentication disabled","Two-factor authentication enabled successfully!":"Two-factor authentication enabled successfully!","Two-factor authentication reset":"Two-factor authentication reset","Two-Step Verification":"Two-Step Verification","Type":"Type","Type (common)":"Type (common)","Type *":"Type *","Type a command or search...":"Type a command or search...","Type the confirmation text here":"Type the confirmation text here","Type-Specific Settings":"Type-Specific Settings","Type:":"Type:","UI granularity only &mdash; data is still aggregated hourly":"UI granularity only &mdash; data is still aggregated hourly","Unable to estimate price for this deployment.":"Unable to estimate price for this deployment.","Unable to generate chat link. Please contact your administrator.":"Unable to generate chat link. Please contact your administrator.","Unable to load groups":"Unable to load groups","Unable to load rankings":"Unable to load rankings","Unable to load rankings data":"Unable to load rankings data","Unable to open chat":"Unable to open chat","Unable to parse structured pricing":"Unable to parse structured pricing","Unable to prepare chat link. Please ensure you have an enabled API key.":"Unable to prepare chat link. Please ensure you have an enabled API key.","Unauthorized":"Unauthorized","Unauthorized Access":"Unauthorized Access","Unbind":"Unbind","Unbind failed":"Unbind failed","Unbound {{provider}}":"Unbound {{provider}}","Underground":"Underground","Understand how user groups, token groups, ratios, and special rules work together.":"Understand how user groups, token groups, ratios, and special rules work together.","Understand image inputs alongside text":"Understand image inputs alongside text","Unexpected release payload":"Unexpected release payload","Unified API Gateway for":"Unified API Gateway for","Unique identifier for this group.":"Unique identifier for this group.","Unit price (local currency / USD)":"Unit price (local currency / USD)","Unit price (USD)":"Unit price (USD)","Unit price must be greater than 0":"Unit price must be greater than 0","Units per USD":"Units per USD","Unknown":"Unknown","Unknown version":"Unknown version","Unlimited":"Unlimited","Unlimited Quota":"Unlimited Quota","Unsaved changes":"Unsaved changes","Unset price":"Unset price","Until":"Until","Untitled":"Untitled","Untrusted upstream data:":"Untrusted upstream data:","Unused":"Unused","Up to 4 strings that stop generation":"Up to 4 strings that stop generation","Update":"Update","Update All Balances":"Update All Balances","Update API Key":"Update API Key","Update Balance":"Update Balance","Update balance for:":"Update balance for:","Update Channel":"Update Channel","Update channel configuration and click save when you\'re done.":"Update channel configuration and click save when you\'re done.","Update configuration":"Update configuration","Update failed":"Update failed","Update Model":"Update Model","Update model configuration and click save when you\'re done.":"Update model configuration and click save when you\'re done.","Update plan info":"Update Plan Info","Update Provider":"Update Provider","Update Redemption Code":"Update Redemption Code","Update succeeded":"Update succeeded","Update the API key by providing necessary info.":"Update the API key by providing necessary info.","Update the configuration for this custom OAuth provider.":"Update the configuration for this custom OAuth provider.","Update the redemption code by providing necessary info.":"Update the redemption code by providing necessary info.","Update the reusable bundle below.":"Update the reusable bundle below.","Update the user by providing necessary info.":"Update the user by providing necessary info.","Update vendor information for {{name}}":"Update vendor information for {{name}}","Update your password for account:":"Update your password for account:","Update your password to keep your account secure":"Update your password to keep your account secure","Updated":"Updated","Updated a custom OAuth provider":"Updated a custom OAuth provider","Updated a deployment":"Updated a deployment","Updated a model":"Updated a model","Updated a prefill group":"Updated a prefill group","Updated a redemption code":"Updated a redemption code","Updated a subscription plan":"Updated a subscription plan","Updated a vendor":"Updated a vendor","Updated channel {{name}} (ID: {{id}})":"Updated channel {{name}} (ID: {{id}})","Updated daily":"Updated daily","Updated successfully":"Updated successfully","Updated system setting {{key}}":"Updated system setting {{key}}","Updated user {{username}} (ID: {{id}})":"Updated user {{username}} (ID: {{id}})","Updating all channel balances. This may take a while. Please refresh to see results.":"Updating all channel balances. This may take a while. Please refresh to see results.","Upgrade Group":"Upgrade Group","Upload":"Upload","Upload a single service account JSON file":"Upload a single service account JSON file","Upload file":"Upload file","Upload files":"Upload files","Upload multiple JSON files in batch modes":"Upload multiple JSON files in batch modes","Upload or reference a local configuration file.":"Upload or reference a local configuration file.","Upload photo":"Upload photo","Upscale":"Upscale","Upstream":"Upstream","Upstream Model Detection Settings":"Upstream Model Detection Settings","Upstream Model Update Check":"Upstream Model Update Check","Upstream Model Updates":"Upstream Model Updates","Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models":"Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models","Upstream price sync":"Upstream price sync","Upstream prices fetched successfully":"Upstream prices fetched successfully","Upstream ratios fetched successfully":"Upstream ratios fetched successfully","Upstream Request ID":"Upstream Request ID","Upstream Response":"Upstream Response","upstream services integrated":"upstream services integrated","Upstream Updates":"Upstream Updates","uptime":"uptime","Uptime":"Uptime","Uptime (30d)":"Uptime (30d)","Uptime (last 30 days)":"Uptime (last 30 days)","Uptime Kuma":"Uptime Kuma","Uptime Kuma groups saved successfully":"Uptime Kuma groups saved successfully","Uptime Kuma URL":"Uptime Kuma URL","Uptime since":"Uptime since","URL":"URL","URL is required":"URL is required","URL to your logo image (
107optional)":"URL to your logo image (optional)","Usage":"Usage","Usage at a glance":"Usage at a glance","Usage guide":"Usage guide","Usage logs":"Usage logs","Usage Logs":"Usage Logs","Usage mode":"Usage mode","Usage-based":"Usage-based","USD":"USD","USD Exchange Rate":"USD Exchange Rate","USD price per 1M input tokens.":"USD price per 1M input tokens.","USD price per 1M tokens.":"USD price per 1M tokens.","Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.":"Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.","Use a compatible browser or device with biometric authentication or a security key to register a Passkey.":"Use a compatible browser or device with biometric authentication or a security key to register a Passkey.","Use authenticator code":"Use authenticator code","Use backup code":"Use backup code","Use disk cache when request body exceeds this size":"Use disk cache when request body exceeds this size","Use external tools to extend capabilities":"Use external tools to extend capabilities","Use our unified OpenAI-compatible endpoint in your applications":"Use our unified OpenAI-compatible endpoint in your applications","Use Passkey to sign in without entering your password.":"Use Passkey to sign in without entering your password.","Use presets or upstream discovery to populate the model list faster.":"Use presets or upstream discovery to populate the model list faster.","Use secure connection when sending emails":"Use secure connection when sending emails","Use sidebar shortcut":"Use sidebar shortcut","Use the full-width table to scan prices, then select a row to edit it here.":"Use the full-width table to scan prices, then select a row to edit it here.","Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.":"Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.","Use this token for API authentication":"Use this token for API authentication","Use your Passkey":"Use your Passkey","used":"used","Used":"Used","Used / Remaining":"Used / Remaining","Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.":"Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.","Used for load balancing. Higher weight = more requests":"Used for load balancing. Higher weight = more requests","Used in URLs and API routes":"Used in URLs and API routes","Used Quota":"Used Quota","Used to authenticate with io.net deployment API":"Used to authenticate with io.net deployment API","Used to authenticate with the worker. Leave blank to keep the existing secret.":"Used to authenticate with the worker. Leave blank to keep the existing secret.","Used:":"Used:","User":"User","User {{id}}":"User {{id}}","User Agent":"User Agent","User Agreement":"User Agreement","User Analytics":"User Analytics","User Consumption Ranking":"User Consumption Ranking","User Consumption Trend":"User Consumption Trend","User created successfully":"User created successfully","User dashboard and quota controls.":"User dashboard and quota controls.","User Exclusive Ratio":"User Exclusive Ratio","User group":"User group","User Group":"User Group","User group name":"User group name","User Group: {{ratio}}x":"User Group: {{ratio}}x","User groups that can access channels with this tag":"User groups that can access channels with this tag","User groups that can access this channel. ":"User groups that can access this channel. ","User ID":"User ID","User ID Field":"User ID Field","User ID:":"User ID:","User Info Endpoint":"User Info Endpoint","User Info Endpoint (Optional)":"User Info Endpoint (Optional)","User Information":"User Information","User Menu":"User Menu","User personal functions":"User personal functions","User selectable":"User selectable","User Subscription Management":"User Subscription Management","User updated successfully":"User updated successfully","User Verification":"User Verification","User-Agent include (one per line)":"User-Agent include (one per line)","Username":"Username","Username confirmation does not match":"Username confirmation does not match","Username Field":"Username Field","Username or Email":"Username or Email","Users":"Users","Users call the model on the left. The platform forwards the request to the upstream model on the right.":"Users call the model on the left. The platform forwards the request to the upstream model on the right.","Users must wait for a successful drawing before upscales or variations.":"Users must wait for a successful drawing before upscales or variations.","Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.":"Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.","uses":"uses","Validity":"Validity","Validity Period":"Validity Period","Value":"Value","Value (supports JSON or plain text)":"Value (supports JSON or plain text)","Value is required":"Value is required","Value must be at least 0":"Value must be at least 0","Value Regex":"Value Regex","variable":"variable","variable) *":"variable) *","Variables":"Variables","Vary":"Vary","Vary (Strong)":"Vary (Strong)","Vary (Subtle)":"Vary (Subtle)","Vast Range of AI Models":"Vast Range of AI Models","Vendor":"Vendor","Vendor deleted successfully":"Vendor deleted successfully","Vendor Name *":"Vendor Name *","Vendor:":"Vendor:","Vendors ranked by aggregated token volume":"Vendors ranked by aggregated token volume","Verification code":"Verification code","Verification Code":"Verification Code","Verification code must be 6 digits":"Verification code must be 6 digits","Verification code sent! Please check your email.":"Verification code sent! Please check your email.","Verification code updates every 30 seconds.":"Verification code updates every 30 seconds.","Verification email sent":"Verification email sent","Verification failed":"Verification failed","Verification is not configured properly":"Verification is not configured properly","Verification required to reveal the saved key.":"Verification required to reveal the saved key.","Verify":"Verify","Verify and Sign In":"Verify and Sign In","Verify routing with Playground or your client":"Verify routing with Playground or your client","Verify Setup":"Verify Setup","Verify your database connection":"Verify your database connection","Verifying credentials and pulling stores from your Pancake account...":"Verifying credentials and pulling stores from your Pancake account...","Version Overrides":"Version Overrides","Vertex AI":"Vertex AI","Vertex AI API Key mode does not support batch creation":"Vertex AI API Key mode does not support batch creation","Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.":"Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.","Vertex AI Key Format":"Vertex AI Key Format","Vertex AI service account key must be valid JSON":"Vertex AI service account key must be valid JSON","Video":"Video","Video length in seconds":"Video length in seconds","Video Remix":"Video Remix","Vidu":"Vidu","View":"View","View all currently available models":"View all currently available models","View detailed information about this user including balance, usage statistics, and invitation details.":"View detailed information about this user including balance, usage statistics, and invitation details.","View details":"View details","View document":"View document","View logs":"View logs","View mode":"View mode","View model statistics and charts":"View model statistics and charts","View Pricing":"View Pricing","View the complete details for this":"View the complete details for this","View the complete details for this log entry":"View the complete details for this log entry","View the complete error message and details":"View the complete error message and details","View the complete prompt and its English translation":"View the complete prompt and its English translation","Vie
107w the generated image":"View the generated image","View your topup transaction records and payment history":"View your topup transaction records and payment history","Viewed channel key {{name}} (ID: {{id}})":"Viewed channel key {{name}} (ID: {{id}})","Violation Code":"Violation Code","Violation deduction amount":"Violation deduction amount","Violation Fee":"Violation Fee","Violation Marker":"Violation Marker","vip":"vip","VIP users with premium access":"VIP users with premium access","Vision":"Vision","Vision, image / video, document chat":"Vision, image / video, document chat","Visit Settings → General and adjust quota options...":"Visit Settings → General and adjust quota options...","Visitors must authenticate before accessing the pricing directory.":"Visitors must authenticate before accessing the pricing directory.","Visitors must authenticate before accessing the rankings page.":"Visitors must authenticate before accessing the rankings page.","Visual":"Visual","Visual edit":"Visual edit","Visual editor":"Visual editor","Visual Editor":"Visual Editor","Visual indicator color for the API card":"Visual indicator color for the API card","Visual Mode":"Visual Mode","Visual Parameter Override":"Visual Parameter Override","VolcEngine":"VolcEngine","vs. previous":"vs. previous","Waffo Aggregator Gateway":"Waffo Aggregator Gateway","Waffo Pancake Dashboard":"Waffo Pancake Dashboard","Waffo Pancake MoR":"Waffo Pancake MoR","Waffo Pancake Payment Gateway":"Waffo Pancake payment gateway","Waffo Pancake product created":"Waffo Pancake product created","Waffo Pancake product creation failed":"Waffo Pancake product creation failed","Waffo Pancake save failed":"Waffo Pancake save failed","Waffo Pancake settings saved":"Waffo Pancake settings saved","Waffo Payment":"Waffo Payment","Waffo Payment Gateway":"Waffo Payment Gateway","Waffo Public Key (Production)":"Waffo Public Key (Production)","Waffo Public Key (Sandbox)":"Waffo Public Key (Sandbox)","Waiting":"Waiting","Waiting for email...":"Waiting for email...","Wallet":"Wallet","Wallet First":"Wallet First","Wallet Management":"Wallet Management","Wallet management and personal preferences.":"Wallet management and personal preferences.","Wallet Only":"Wallet Only","Warning":"Warning","Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.":"Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.","Warning: Disabling 2FA will make your account less secure.":"Warning: Disabling 2FA will make your account less secure.","Warning: This action is permanent and irreversible!":"Warning: This action is permanent and irreversible!","We apologize for the inconvenience.":"We apologize for the inconvenience.","We could not load the setup status.":"We could not load the setup status.","We will prompt your device to confirm using biometrics or your hardware key.":"We will prompt your device to confirm using biometrics or your hardware key.","We\'ll be back online shortly.":"We\'ll be back online shortly.","Web search":"Web search","Web Search":"Web Search","Webhook Configuration:":"Webhook Configuration:","Webhook public key (production)":"Webhook public key (production)","Webhook public key (production) is required":"Webhook public key (production) is required","Webhook public key (sandbox)":"Webhook public key (sandbox)","Webhook public key (sandbox) is required":"Webhook public key (sandbox) is required","Webhook secret":"Webhook secret","Webhook Secret":"Webhook Secret","Webhook signing secret (leave blank unless updating)":"Webhook signing secret (leave blank unless updating)","Webhook URL":"Webhook URL","Webhook URL (Production):":"Webhook URL (Production):","Webhook URL (Test):":"Webhook URL (Test):","Webhook URL:":"Webhook URL:","Website is under maintenance!":"Website is under maintenance!","WeChat":"WeChat","WeChat login QR code":"WeChat login QR code","WeChat Pay":"WeChat Pay","WeChat QR code will be displayed here":"WeChat QR code will be displayed here","WeChat sign in":"WeChat sign in","Week":"Week","Weekday":"Weekday","Weekly":"Weekly","Weekly token usage by model across the past few weeks":"Weekly token usage by model across the past few weeks","Weekly token usage by model across the past year":"Weekly token usage by model across the past year","Weekly token usage by model since launch":"Weekly token usage by model since launch","Weekly Window":"Weekly Window","Weight":"Weight","Weighted by request count":"Weighted by request count","Welcome back!":"Welcome back!","Welcome to our New API...":"Welcome to our New API...","Well-Known URL":"Well-Known URL","Well-Known URL must start with http:// or https://":"Well-Known URL must start with http:// or https://","What would you like to know?":"What would you like to know?","When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.":"When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.","When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.":"When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.","When enabled, if channels in the current group fail, it will try channels in the next group in order.":"When enabled, if channels in the current group fail, it will try channels in the next group in order.","When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel."
107:"When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel.","When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.":"When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.","When enabled, Midjourney callbacks are accepted (reveals server IP).":"When enabled, Midjourney callbacks are accepted (reveals server IP).","When enabled, newly created tokens start in the first auto group.":"When enabled, newly created tokens start in the first auto group.","When enabled, prompts are scanned before reaching upstream models.":"When enabled, prompts are scanned before reaching upstream models.","When enabled, the store field will be blocked":"When enabled, the store field will be blocked","When enabled, users can pick this group when creating tokens.":"When enabled, users can pick this group when creating tokens.","When enabled, violation requests will incur additional charges.":"When enabled, violation requests will incur additional charges.","When enabled, zero-cost models also pre-consume quota before final settlement.":"When enabled, zero-cost models also pre-consume quota before final settlement.","When no conditions are set, the operation always executes.":"When no conditions are set, the operation always executes.","When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.":"When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.","When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.":"When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.","Whitelist":"Whitelist","Whitelist (Only allow listed domains)":"Whitelist (Only allow listed domains)","Whitelist (Only allow listed IPs)":"Whitelist (Only allow listed IPs)","whsec_xxx":"whsec_xxx","Why only one store + product?":"Why only one store + product?","Window:":"Window:","Wire encoding for the embedding vectors":"Wire encoding for the embedding vectors","with conflicts":"with conflicts","with the API key from your token settings.":"with the API key from your token settings.","Without additional conditions, only the type above is used for pruning.":"Without additional conditions, only the type above is used for pruning.","Worker Access Key":"Worker Access Key","Worker Proxy":"Worker Proxy","Worker URL":"Worker URL","Workspaces":"Workspaces","Write value to the target field":"Write value to the target field","x":"x","xAI":"xAI","Xinference":"Xinference","Xunfei":"Xunfei","Year":"Year","years":"years","Yes":"Yes","You are about to delete {{count}} API key(s).":"You are about to delete {{count}} API key(s).","You are running the latest version ({{version}}).":"You are running the latest version ({{version}}).","You can close this tab once the binding completes or a success message appears in the original window.":"You can close this tab once the binding completes or a success message appears in the original window.","You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.":"You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.","You can only check in once per day":"You can only check in once per day","You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.":"You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.","You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.":"You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.","You don\'t have necessary permission":"You don\'t have necessary permission","You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.":"You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.","You have unsaved changes":"You have unsaved changes","You have unsaved changes. Are you sure you want to leave?":"You have unsaved changes. Are you sure you want to leave?","You Pay":"You Pay","You save":"You save","You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.":"You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.","You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.":"You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.","You will be redirected to Telegram to complete the binding process.":"You will be redirected to Telegram to complete the binding process.","You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.":"You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.","your AI integration?":"your AI integration?","Your Azure OpenAI endpoint URL":"Your Azure OpenAI endpoint URL","Your Bot Name":"Your Bot Name","Your Cloudflare Account ID":"Your Cloudflare Account ID","Your Discord OAuth Client ID":"Your Discord OAuth Client ID","Your Discord OAuth Client Secret":"Your Discord OAuth Client Secret","Your GitHub OAuth Client ID":"Your GitHub OAuth Client ID","Your GitHub OAuth Client Secret":"Your GitHub OAuth Client Secret","Your new backup codes are ready":"Your new backup codes are ready","Your Referral Link":"Your Referral Link","Your setup guide is collapsed 
107so usage stays in focus.":"Your setup guide is collapsed so usage stays in focus.","Your system access token for API authentication. Keep it secure and don\'t share it with others.":"Your system access token for API authentication. Keep it secure and don\'t share it with others.","Your Telegram Bot Token":"Your Telegram Bot Token","Your transaction history will appear here":"Your transaction history will appear here","Your Turnstile secret key":"Your Turnstile secret key","Your Turnstile site key":"Your Turnstile site key","Zero retention":"Zero retention","Zhipu":"Zhipu","Zhipu V4":"Zhipu V4","Zoom":"Zoom"}}'),T=JSON.parse('{"translation":{"360":"360","1000":"1000","10000":"10000","_copy":"_copie",",":", ",", and":", et",",and ":", and ","、":", ","? This action cannot be undone.":"? Cette action ne peut pas être annulée.",". Please fix the JSON before saving.":". Veuillez corriger le JSON avant d\'enregistrer.",". This action cannot be undone.":". Cette action ne peut pas être annulée.","...":"...","\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"":"\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"","({{total}} total, {{omit}} omitted)":"({{total}} au total, {{omit}} omis)","(Leave empty to dissolve tag)":"(Laisser vide pour dissoudre le tag)","(Optional: redirect model names)":"(Facultatif : rediriger les noms de modèles)","(Override all channels\' groups)":"(Remplacer les groupes de tous les canaux)","(Override all channels\' models)":"(Remplacer les modèles de tous les canaux)","[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]":"[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]","{\\"original-model\\": \\"replacement-model\\"}":"{\\"original-model\\": \\"replacement-model\\"}","{{category}} Models":"Modèles {{category}}","{{count}} channel(s) deleted":"{{count}} canal(canaux) supprimé(s)","{{count}} channel(s) disabled":"{{count}} canal(canaux) désactivé(s)","{{count}} channel(s) enabled":"{{count}} canal(canaux) activé(s)","{{count}} channel(s) failed to disable":"{{count}} canal(canaux) n\'ont pas pu être désactivé(s)","{{count}} channel(s) failed to enable":"{{count}} canal(canaux) n\'ont pas pu être activé(s)","{{count}} days ago":"il y a {{count}} jours","{{count}} days remaining":"{{count}} days remaining","{{count}} disabled channel(s) deleted":"{{count}} canal(canaux) désactivé(s) supprimé(s)","{{count}} hours ago":"il y a {{count}} heures","{{count}} incidents":"{{count}} incidents","{{count}} incidents in the last 24 hours":"{{count}} incidents au cours des dernières 24 heures","{{count}} incidents in the last 30 days":"{{count}} incidents au cours des 30 derniers jours","{{count}} IP(s)":"{{count}} IP","{{count}} log entries removed.":"{{count}} entrées de journal supprimées.","{{count}} minutes ago":"il y a {{count}} minutes","{{count}} models":"{{count}} modèles","{{count}} months ago":"il y a {{count}} mois","{{count}} override":"{{count}} remplacement","{{count}} selected targets available for bulk copy.":"{{count}} cibles sélectionnées disponibles pour la copie en lot.","{{count}} tiers":"{{count}} paliers","{{count}} vendors":"{{count}} fournisseurs","{{count}} weeks ago":"il y a {{count}} semaines","{{field}} updated to {{value}}":"{{field}} mis à jour en {{value}}","{{field}} updated to {{value}} for tag: {{tag}}":"{{field}} mis à jour en {{value}} pour le tag : {{tag}}","{{method}} {{route}}":"{{method}} {{route}}","{{modality}} not supported":"{{modality}} non pris en charge","{{modality}} supported":"{{modality}} pris en charge","{{n}} model(s) selected":"{{n}} modèle(s) sélectionné(s)","{{value}}ms":"{{value}} ms","{{value}}s":"{{value}} s","@lobehub/icons key":"@lobehub/icons clé","@lobehub/icons key name":"@lobehub/icons nom de la clé","/status/":"/status/","/your/endpoint":"/votre/endpoint","#1 App":"#1 App","#1 by usage":"N° 1 d\'utilisation","#1 Model":"#1 Modèle","% off":"% de réduction","`, and `-nothinking` suffixes while routing to the correct Gemini variant.":"`, et les suffixes `-nothinking` lors du routage vers la variante Gemini correcte.","© 2025 Your Company. All rights reserved.":"© 2025 Votre entreprise. Tous droits réservés.","+{{count}} more":"+{{count}} de plus","| Based on":"| Basé sur","0 means data is kept permanently":"0 signifie que les données sont conservées indéfiniment","0 means unlimited":"0 signifie illimité","1 Day":"1 jour","1 day ago":"Il y a 1 jour","1 hour":"1 heure","1 Hour":"1H","1 hour ago":"Il y a 1 heure","1 minute":"1 minute","1 minute ago":"Il y a 1 minute","1 Month":"1M","1 month ago":"Il y a 1 mois","1 week ago":"Il y a 1 semaine","1 year ago":"Il y a 1 an","1. Create an application in your Gotify server"
107:"1. Créez une application sur votre serveur Gotify","10 / page":"10 / page","100 / page":"100 / page","14 Days":"14 jours","192.168.1.1&#10;10.0.0.0/8":"192.168.1.1&#10;10.0.0.0/8","1M":"1M","1W":"1S","2. Copy the application token":"2. Copiez le jeton de l\'application","20 / page":"20 / page","24 Hours":"24 heures","24 hours ago":"Il y a 24 heures","29 Days":"29 jours","3. Enter your Gotify server URL and token above":"3. Saisissez l\'URL de votre serveur Gotify et le jeton ci-dessus","30 Days":"30 jours","30 days ago":"Il y a 30 jours","30d change":"Variation 30 j","5 minutes":"5 minutes","5-Hour Window":"Fenêtre de 5 heures","50 / page":"50 / page","7 Days":"7 jours","7 days ago":"Il y a 7 jours","80,443,8080":"80,443,8080","A billing multiplier. Lower ratios mean lower API call costs.":"Un multiplicateur de facturation. Plus le ratio est faible, plus le coût des appels API est bas.","A focused home for keys, balance, routing, and service health.":"Un accueil dédié aux clés, au solde, au routage et à l\'état du service.","About":"À propos","About {{days}} days left":"Environ {{days}} jours restants","Accept Unpriced Models":"Accepter les modèles non tarifés","Accepts a JSON array of model identifiers that support the Imagine API.":"Accepte un tableau JSON d\'identifiants de modèles qui prennent en charge l\'API Imagine.","Accepts comma-separated status codes and inclusive ranges.":"Accepte les codes de statut séparés par des virgules et les plages inclusives.","Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.":"Accédez à une vaste sélection de modèles via un protocole API standard et unifié. Propulsez les applications d\'IA, gérez les actifs numériques et connectez le futur.","Access Denied Message":"Message d\'accès refusé","Access Forbidden":"Accès interdit","Access Policy (JSON)":"Politique d\'accès (JSON)","Access previous conversations and start new ones.":"Accéder aux conversations précédentes et en démarrer de nouvelles.","Access Token":"Jeton d\'accès","AccessKey / SecretAccessKey":"AccessKey / SecretAccessKey","Account Binding Management":"Gestion des liaisons de compte","Account Bindings":"Associations de compte","Account created! Please sign in":"Compte créé ! Veuillez vous connecter","Account deleted successfully":"Compte supprimé avec succès","Account ID *":"ID de compte *","Account Info":"Informations du compte","Account used when authenticating with the SMTP server":"Compte utilisé lors de l\'authentification auprès du serveur SMTP","acknowledge the related legal risks":"reconnais les risques juridiques associés","Across all groups":"Tous groupes confondus","Action":"Action","Action confirmation":"Confirmation de l\'action","Actions":"Actions","active":"actif","Active":"Actif","Active apps":"Applications actives","Active Cache Count":"Nombre de caches actifs","Active Files":"Fichiers actifs","Active models":"Modèles actifs","active users":"utilisateurs actifs","Actual Amount":"Montant réel","Actual Model":"Modèle réel","Actual Model:":"Modèle réel :","Adapt `-thinking` suffix requests to Anthropic native thinking behavior while keeping billing predictable.":"Adapter les requêtes avec le suffixe `-thinking` au comportement de pensée natif d’Anthropic tout en gardant une facturation prévisible.","Add":"Ajouter","Add \\"{{value}}\\"":"Ajouter \\"{{value}}\\"","Add {{title}}":"Ajouter {{title}}","Add a group identifier to the auto assignment list.":"Ajouter un identifiant de groupe à la liste d\'affectation automatique.","Add a new API key by providing necessary info.":"Ajoutez une nouvelle clé API en fournissant les informations nécessaires.","Add a new channel by providing the necessary information.":"Ajoutez un nouveau canal en fournissant les informations nécessaires.","Add a new model to the system by providing the necessary information.":"Ajoutez un nouveau modèle au système en fournissant les informations nécessaires.","Add a new user by providing necessary info.":"Ajouter un nouvel utilisateur en fournissant les informations nécessaires.","Add a new vend
107or to the system":"Ajouter un nouveau fournisseur au système","Add an extra layer of security to your account":"Ajouter une couche de sécurité supplémentaire à votre compte","Add and submit":"Ajouter et soumettre","Add Announcement":"Ajouter une annonce","Add API":"Ajouter une API","Add API Shortcut":"Ajouter un raccourci API","Add auto group":"Ajouter un groupe automatique","Add chat preset":"Ajouter un préréglage de chat","Add condition":"Ajouter une condition","Add Condition":"Ajouter une condition","Add credits":"Ajouter des crédits","Add custom model \\"{{value}}\\"":"Ajouter le modèle personnalisé « {{value}} »","Add discount tier":"Ajouter un niveau de réduction","Add each model or tag you want to include.":"Ajoutez chaque modèle ou étiquette que vous souhaitez inclure.","Add FAQ":"Ajouter une FAQ","Add from available models...":"Ajouter à partir des modèles disponibles...","Add Funds":"Ajouter des fonds","Add group":"Ajouter un groupe","Add Group":"Ajouter un groupe","Add group rate limit":"Ajouter une limite de taux de groupe","Add group rules":"Ajouter des règles de groupe","Add Mapping":"Ajouter un mappage","Add method":"Ajouter une méthode","Add missing models":"Ajouter les modèles manquants","Add Mode":"Ajouter un mode","Add model":"Ajouter un modèle","Add Model":"Ajouter un modèle","Add model pricing":"Ajouter une tarification de modèle","Add Models":"Ajouter des modèles","Add new amount":"Ajouter un nouveau montant","Add new redemption code(s) by providing necessary info.":"Ajouter de nouveaux codes de réduction en fournissant les informations nécessaires.","Add OAuth Provider":"Ajouter un fournisseur OAuth","Add param/header":"Ajouter un param / un en-tête","Add payment method":"Ajouter un mode de paiement","Add photos or files":"Ajouter des photos ou des fichiers","Add product":"Ajouter un produit","Add Provider":"Ajouter un fournisseur","Add Quota":"Ajouter un quota","Add ratio override":"Ajouter un remplacement de ratio","Add Row":"Ajouter une ligne","Add Rule":"Ajouter une règle","Add rule group":"Ajouter un groupe de règles","Add selectable group":"Ajouter un groupe sélectionnable","Add subscription":"Ajouter un abonnement","Add tags...":"Ajouter des étiquettes...","Add tier":"Ajouter un palier","Add time condition":"Ajouter une condition temporelle","Add time rule group":"Ajouter un groupe de règles temporelles","Add Uptime Kuma Group":"Ajouter un groupe Uptime Kuma","Add User":"Ajouter un utilisateur","Add user group":"Ajouter un groupe d\'utilisateurs","Add your API keys, set up channels and configure access permissions":"Ajoutez vos clés API, configurez les canaux et les permissions d\'accès","Added {{count}} model(s)":"{{count}} modèle(s) ajouté(s)","Added successfully":"Ajouté avec succès","Additional Conditions":"Conditions supplémentaires","Additional information":"Informations supplémentaires","Additional Information":"Informations supplémentaires","Additional Limit":"Limite supplémentaire","Additional Limits":"Limites supplémentaires","Additional metered capability":"Fonctionnalité supplémentaire facturée à l’usage","Adjust filters, then search to refresh the logs.":"Ajustez les filtres, puis lancez la recherche pour actualiser les journaux.","Adjust Quota":"Ajuster le quota","Adjust response formatting, prompt behavior, proxy, and upstream automation.":"Ajustez le formatage des réponses, le comportement des prompts, le proxy et l’automatisation amont.","Adjust the appearance and layout to suit your preferences.":"Ajustez l\'apparence et la mise en page selon vos préférences.","Admin":"Administrateur","Admin access required":"Accès administrateur requis","Admin area":"Espace administrateur","Admin notes (only visible to admins)":"Notes d\'administration (visibles uniquement par les administrateurs)","Admin Only":"Administrateur uniquement","Administer user accounts and roles.":"Gérer les comptes d\'utilisateurs et les rôles.","Administrator account":"Compte administrateur","Administrator username":"Nom d\'utilisateur administrateur","Advanced":"Avancé","Advanced Configuration":"Configuration avancée","Advanced options":"Options avancées","Advanced Options":"Options avancées","Advanced platform configuration.":"Configuration avancée de la plateforme.","Advanced Settings":"Paramètres avancés","Advanced text editing":"Édition de texte avancée","Aesthetic style":"Style esthétique","After clicking the button, you\'ll be asked to authorize the bot":"Après avoir cliqué sur le bouton, il vous sera demandé d\'autoriser le bot","After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?":"Après désactivation, il ne sera plus affiché aux utilisateurs, mais les commandes historiques ne sont pas affectées. Continuer ?","After enabling, the plan will be shown to users. Continue?":"Après activation, le plan sera affiché aux utilisateurs. Continuer ?","After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?":"Après l\'invali
107dation, cet abonnement sera immédiatement désactivé. Les enregistrements historiques ne sont pas affectés. Continuer ?","After scanning, the binding will complete automatically":"Après la numérisation, la liaison se terminera automatiquement","Agent ID *":"ID d\'agent *","Aggregate tokens delivered across the platform":"Jetons cumulés livrés sur la plateforme","Aggregate traffic across every category":"Trafic cumulé sur toutes les catégories","Aggregated across enabled groups":"Agrégé sur les groupes activés","Aggregated across the apps below":"Agrégé sur les applications ci-dessous","Aggregated traffic by upstream model provider":"Trafic agrégé par fournisseur de modèle amont","Aggregated usage metrics and trend charts.":"Métriques d\'utilisation agrégées et graphiques de tendances.","aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.":"agrège plus de 50 fournisseurs IA derrière une API unifiée. Gérez l\'accès, suivez les coûts et évoluez sans effort.","Aggregation bucket":"Fenêtre d’agrégation","AGPL v3.0 License":"Licence AGPL v3.0","AI Application Infrastructure Foundation":"Socle d\'infrastructure pour applications d\'IA","AI model testing environment":"Environnement de test de modèle IA","AI models":"Modèles d\'IA","AI models supported":"Modèles d\'IA pris en charge","AI Proxy":"AI Proxy","AI Proxy Library":"Bibliothèque AI Proxy","AIGC2D":"AIGC2D","AILS":"AILS","AK/SK mode: use AccessKey|SecretAccessKey|Region":"Mode AK/SK : utiliser AccessKey|SecretAccessKey|Region","Ali":"Ali","Alipay":"Alipay","All":"Tout","All categories":"Toutes catégories","All conditions must match before this tier is used.":"Toutes les conditions doivent correspondre avant que ce palier soit utilisé.","All edits are overwrite operations. Leave fields empty to keep current values unchanged.":"Toutes les modifications sont des opérations d\'écrasement. Laissez les champs vides pour conserver les valeurs actuelles inchangées.","All files exceed the maximum size.":"Tous les fichiers dépassent la taille maximale.","All Groups":"Tous les groupes","All Models":"Tous les modèles","All models in use are properly configured.":"Tous les modèles utilisés sont correctement configurés.","All Must Match (AND)":"Toutes doivent correspondre (AND)","All requests must include":"Toutes les requêtes doivent inclure","All Status":"Tous les statuts","All Sync Status":"Tous les statuts de synchronisation","All systems operational":"Tous les systèmes opérationnels","All Tags":"Tous les tags","All Types":"Tous les types","All upstream data is trusted":"Toutes les données en amont sont fiables","All Vendors":"Tous les fournisseurs","All-time":"Tous temps","Allocated Memory":"Mémoire allouée","Allow accountFilter parameter":"Autoriser le paramètre accountFilter","Allow balance redemption":"Autoriser le paiement avec le solde","Allow Claude beta query passthrough":"Autoriser le passage des requêtes bêta Claude","Allow clients to query configured ratios via `/api/ratio`.":"Autoriser les clients à interroger les ratios configurés via `/api/ratio`.","Allow HTTP image requests":"Autoriser les requêtes d\'images HTTP","Allow include usage obfuscation passthrough":"Autoriser le passage de l\'obfuscation d\'utilisation","Allow inference geography passthrough":"Autoriser le passage de la géographie d\'inférence","Allow inference_geo passthrough":"Autoriser la transmission de inference_geo","Allow Insecure Origins":"Autoriser les origines non sécurisées","Allow new users to register":"Autoriser les nouveaux utilisateurs à s\'inscrire","Allow Private IPs":"Autoriser les IP privées","Allow registration with password":"Autoriser l\'inscription avec mot de passe","Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)":"Autoriser les requêtes vers les plages d\'adresses IP privées (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)","Allow Retry":"Autoriser la relance","Allow safety_identifier passthrough":"Autoriser la transmission de safety_identifier","Allow service_tier passthrough":"Autoriser la transmission de service_tier","Allow speed passthrough":"Autoriser la transmission de speed","Allow upstream callbacks":"Autoriser les callbacks en amont","Allow users to check in daily for random quota rewards":"Permettre aux utilisateurs de se connecter quotidiennement pour des récompenses de quota aléatoires","Allow users to enter promo codes":"Autoriser les utilisateurs à saisir des codes promotionnels","Allow users to log in with password":"Autoriser les utilisateurs à se connecter avec un mot de passe","Allow users to register and sign in with Passkey (WebAuthn)":"Autoriser les utilisateurs à s\'inscrire et se connecter avec une clé d\'accès (Passkey) (WebAuthn)","Allow users to sign in with Discord":"Autoriser les utilisateurs à se connecter avec Discord","Allow users to sign in with GitHub":"Autoriser les utilisateurs à se connecter avec GitHub","Allow users to sign in with LinuxDO":"Autoriser les utilisateurs à se connecter avec LinuxDO","Allow users to sign in with OpenID Connect":"Autoriser les utilisateurs à se connecter avec OpenID Connect","Allow users to sign in with Telegram":"Autoriser les utilisateurs à se connecter avec Telegram","Allow users to sign in with this provider":"Autoriser les utilisateurs à se connecter avec ce fournisseur","Allow users to sign in with WeChat":"Autoriser les utilisateurs à se connecter avec WeChat","Allow using models without price configuration":"Autoriser l\'utilisation de modèles sans configuration de prix","Allowed":"Autorisé","Allowed Origins":"Origines autorisées","Allowed Ports":"Ports autorisés","Already have an account?":"Vous avez déjà un compte ?","Always matches (default tier).":"Toujours appliqué (palier par défaut).","Amount":"Montant","Amount cannot be changed when editing.":"Le montant ne peut pas être modifié lors de la modification.","Amount discount":"Remise sur le montant","Amount Due":"Montant dû","Amount must be a whole number":"Le montant doit être un nombre entier","Amount must be greater than 0":"Le montant doit être supérieur à 0","Amount of quota to credit to user account.":"Montant du quota à créditer sur le compte utilisateur.","Amount options must be a JSON array":"Les options de montant doivent être un tableau JSON","Amount to pay:":"Montant à payer :","An unexpected error occurred":"Une erreur inattendue est survenue","and":"et","Announcement added. Click \\"Save Settings\\" to apply.":"Annonce ajoutée. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","Announcement content":"Contenu de l\'annonce","Announcement deleted. Click \\"Save Settings\\" to apply.":"Annonce supprimée. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","Announcement Details":"Détails de l\'annonce","Announcement displayed to users (supports Markdown & HTML)":"Annonce affichée aux utilisateurs (prend en charge Markdown et HTML)","Announcement updated. Click \\"Save Settings\\" to apply.":"Annonce mise à jour. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","Announcements":"Annonces","Announcements saved successfully":"Annonces enregistrées avec succès","Answer":"Réponse","Answers for common access and billing questions":"Réponses aux questions courantes sur l\'accès et la facturation","Anthropic":"Anthropic","Any Match (OR)":"N\'importe laquelle (OR)","API":"API","API Access":"Accès API","API Addresses":"Adresses API","API Base URL (Important: Not Chat API) *":"URL de base de l\'API (Important : Pas l\'API de Chat) *","API Base URL *":"URL de base de l\'API *","API Endpoints":"Points de terminaison API","API Info":"Infos API","API info added. Click \\"Save Settings\\" to apply.":"Informations API ajoutées. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","API info deleted. Click \\"Save Settings\\" to apply.":"Informations API supprimées. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","API info saved successfully":"Informations API enregistrées avec succès","API info updated. Click \\"Save Settings\\" to apply.":"Informations API mises à jour. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","API key":"Clé API","API Key":"Clé API","API Key (one per line for batch mode)":"Clé API (une par ligne pour le mode batch)","API Key (Production)":"Clé API (Production)","API Key (Sandbox)":"Clé API (Sandbox)","API Key *":"Clé API *","API Key created successfully":"Clé API créée avec succès","API Key deleted successfully":"Clé API supprimée avec succès","API Key disabled successfully":"Clé API désactivée avec succès","API Key enabled successfully":"Clé API activée avec succès","API key from the provider":"Clé API du fournisseur","API key is required":"La clé API est requise","API Key mode (does not support batch creation)":"Mode clé API (ne prend pas en charge la création par lots)","API Key mode: use APIKey|Region":"Mode clé API : utiliser APIKey|Region","API Key updated successfully":"Clé API mise à jour avec succès","API Keys":"Clés API","API Private Key":"Clé privée de l\'API","API Requests":"Requêtes API","API secret":"Secret API","API token management":"Gestion des tokens API","API URL":"URL de l\'API","API usage records":"Historique d\'utilisation de l\'API","API2GPT":"API2GPT","App":"Application","App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.":"Les classements d\'applications présentés ici sont simulés à des fins de prévisualisation et seront remplacés par des données réelles une fois l\'intégration du backend terminée.","Append":"Ajouter à la fin","Append mode: New keys will be added to the end of the existing key list":"Mode d\'ajout : Les nouvelles clés seront ajoutées à la fin de la liste de clés existante","Append Template":"Ajouter le modèle","Append to channel":"Ajouter au canal","Append to End":"Ajouter à la fin","Append to existing keys":"Ajouter aux clés existantes","Append value to array / string / object end":"Ajouter la valeur à la fin du tableau / chaîne / objet","appended":"ajouté","Application":"Application","Applied {{name}} pricing to {{count}} models":"Tarification de {{name}} appliquée à {{count}} modèles","Applied upstream model changes to {{count}} channels":"Modifications des modèles en amont appliquées à {{count}} canaux","Applied upstream model changes to channel (ID: {{id}})":"Modifications des modèles en amont appliquées au canal (ID : {{id}})","Applies to custom completion endpoints. JSON map of model → ratio.":"S\'applique aux points de terminaison de complétion personnalisés. Mappage JSON de modèle → ratio.","Apply All Upstream Updates":"Appliquer toutes les mises à jour upstream","Apply Filters":"Appliquer les filtres","Apply IP Filter to Resolved Domains":"Appliquer le filtre IP aux domaines résolus","Apply Overwrite":"Appliquer l\'écrasement","Apply Sync":"Appliquer la synchronisation","Applying...":"Application en cours...","Approx.":"Environ.","apps":"applications","Apps":"Applications","apps tracked":"applications suivies","Apps using the most tokens through new-api":"Applications consommant le plus de jetons via new-api","are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.":"sont également listés ici. Supprimez-les des Modèles pour que la réponse `/v1/models` reste conviviale et pour masquer les noms spécifiques aux fournisseurs.","Are you sure you want to delete":"Êtes-vous sûr de vouloir supprimer","Are you sure you want to delete {{count}} model(s)? This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer {{count}} modèle(s) ? Cette action ne peut pas être annulée.","Are you sure you want to delete all auto-disabled keys? This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer toutes les clés automatiquement désactivées ? Cette action ne peut pas être annulée.","Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer le déploiement \\"{{name}}\\" ? Cette action est irréversible.","Are you sure you want to delete this key? This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer cette clé ? Cette action ne peut pas être annulée.","Are you sure you want to disable all enabled keys?":"Êtes-vous sûr de vouloir désactiver toutes les clés activées ?","Are you sure you want to enable all keys?":"Êtes-vous sûr de vouloir activer toutes les clés ?","Are you sure you want to manually complete this order? The user will be credited 
107with the corresponding quota.":"Êtes-vous sûr de vouloir compléter manuellement cette commande ? L\'utilisateur sera crédité du quota correspondant.","Are you sure you want to sign out? You will need to sign in again to access your account.":"Êtes-vous sûr de vouloir vous déconnecter ? Vous devrez vous reconnecter pour accéder à votre compte.","Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.":"Êtes-vous sûr de vouloir dissocier {{provider}} de cet utilisateur ? L\'utilisateur ne pourra plus se connecter via cette méthode.","Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.":"Êtes-vous sûr de vouloir dissocier {{provider}} ? Vous ne pourrez plus vous connecter via cette méthode.","Are you sure?":"Êtes-vous sûr ?","Area Chart":"Graphique en aires","Args (space separated)":"Arguments (séparés par des espaces)","Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.":"Tableau de préréglages de clients de chat. Chaque élément est un objet avec une paire clé-valeur : nom du client et son URL.","Asc":"Asc","Ask anything":"Demandez n\'importe quoi","Assigned by administrator only":"Attribué uniquement par l\'administrateur","Assigned by administrators and used to represent a user level, such as default or vip.":"Attribué par les administrateurs pour représenter un niveau utilisateur, comme default ou vip.","Async task refund":"Remboursement de tâche asynchrone","At least one model regex pattern is required":"Au moins un modèle de regex est requis","At least one valid key source is required":"Au moins une source de clé valide est requise","Attach":"Joindre","Audio":"Audio","Audio comp.":"Comp. audio","Audio completion ratio":"Ratio de complétion audio","Audio In":"Entrée audio","Audio input":"Entrée audio","Audio Input":"Entrée audio","Audio input price":"Prix d’entrée audio","Audio Input Price":"Prix entrée audio","Audio Out":"Sortie audio","Audio output":"Sortie audio","Audio Output":"Sortie audio","Audio output price":"Prix de sortie audio","Audio output price requires an audio input price.":"Le prix de sortie audio nécessite un prix d’entrée audio.","Audio playback failed":"Échec de la lecture audio","Audio Preview":"Aperçu audio","Audio ratio":"Ratio audio","Audio Tokens":"Jetons audio","Auth configured":"Authentification configurée","Auth Style":"Style d\'authentification","auth.resetPasswordConfirm.backToLogin":"Retour à la connexion","auth.resetPasswordConfirm.confirm":"Confirmer la réinitialisation du mot de passe","auth.resetPasswordConfirm.description":"Confirmez la demande de réinitialisation pour générer un nouveau mot de passe.","auth.resetPasswordConfirm.retry":"Réessayer ({{seconds}}s)","auth.resetPasswordConfirm.success":"Votre mot de passe a été réinitialisé avec succès","Authentication":"Authentification","Authentication Method":"Méthode d\'authentification","Authenticator code":"Code d\'authentification","Authorization Endpoint":"Point de terminaison d\'autorisation","Authorization Endpoint (Optional)":"Point de terminaison d\'autorisation (Facultatif)","Authorize":"Autoriser","Auto":"Auto","Auto (Circuit Breaker)":"Auto (Disjoncteur)","Auto assignment order":"Ordre d\'affectation automatique","Auto Ban":"Bannissement automatique","Auto detect (default)":"Détection automatique (par défaut)","Auto Disabled":"Désactivé automatiquement","Auto group behavior":"Comportement du groupe auto","Auto Group Chain":"Chaîne de groupes automatique","Auto refresh":"Actualisation automatique","Auto Sync Upstream Models":"Synchronisation automatique des modèles en amont","Auto-disable status codes":"Codes de statut de désactivation auto","Auto-discover":"Découverte automatique","Auto-discovers endpoints from the provider":"Découvre automatiquement les points de terminaison du fournisseur","Auto-fill when one field exists and another is missing":"Remplissage automatique si un champ existe et l\'autre est manquant","Auto-retry status codes":"Codes de statut de nouvelle tentative auto","Automatically disable channel on repeated failures":"Désactiver automatiquement le canal en cas d\'échecs répétés","Automatically disable channels exceeding this response time":"Désactiver automatiquement les canaux dépassant ce temps de réponse","Automatically disable channels when tests fail":"Désactiver automatiquement les canaux lorsque les tests échouent","Automatically probe all channels in the background":"Sonder automatiquement tous les canaux en arrière-plan","Automatically replaces upstream callback URLs with the server address.":"Remplace automatiquement les URL des callbacks en amont par l\'adresse du serveur.","Automatically selects the best available group with circuit breaker mechanism":"Sélectionne automatiquement le meilleur groupe disponible avec un mécanisme de disjoncteur de circuit","Automatically sync model list when upstream changes are detected":"Synchroniser automatiquement la liste des modèles lorsque des changements en amont sont détectés","Availability (last 24h)":"Disponibilité (dernières 24 h)","Available":"Disponible","Available disk space":"Espace disque disponible","Available Models":"Modèles disponibles","Available Rewards":"Récompenses dis
107ponibles","Average latency":"Latence moyenne","Average latency, TTFT, and success rate by group":"Latence moyenne, TTFT et taux de réussite par groupe","Average latency, TTFT, TPS, and success rate":"Latence moyenne, TTFT, TPS et taux de réussite","Average RPM":"RPM moyen","Average time-to-first-token (TTFT) by group":"Temps moyen jusqu’au premier token (TTFT) par groupe","Average tokens per second sustained per group":"Tokens par seconde soutenus en moyenne par groupe","Average TPM":"TPM moyen","Average TTFT":"TTFT moyen","AWS":"AWS","AWS Bedrock Claude Compat":"AWS Bedrock Claude Compat","AWS Key Format":"Format de clé AWS","Azure":"Azure","AZURE_OPENAI_ENDPOINT *":"AZURE_OPENAI_ENDPOINT *","Back":"Retour","Back to Dashboard":"Retour au tableau de bord","Back to Home":"Retour à l\'accueil","Back to login":"Retour à la connexion","Back to Models":"Retour aux modèles","Backed up":"Sauvegardé","Background job tracker for queued work.":"Suivi des tâches en arrière-plan pour les travaux en file d\'attente.","Backup Code":"Code de secours","Backup code must be in format XXXX-XXXX":"Le code de sauvegarde doit être au format XXXX-XXXX","Backup codes regenerated successfully":"Codes de sauvegarde régénérés avec succès","Backup codes remaining: {{count}}":"Codes de secours restants : {{count}}","Bad Request":"Requête invalide","Badge Color":"Couleur du badge","Baidu":"Baidu","Baidu V2":"Baidu V2","Balance":"Solde","Balance and top-up management":"Gestion du solde et des recharges","Balance depleted":"Solde épuisé","Balance is shown in quota units":"Le solde est affiché en unités de quota","Balance queried successfully":"Solde interrogé avec succès","Balance updated successfully":"Solde mis à jour avec succès","Balance updated: {{balance}}":"Solde mis à jour : {{balance}}","Bar Chart":"Graphique en barres","Bark Push URL":"URL de notification Bark","Base address provided by your Epay service":"Adresse de base fournie par votre service Epay","Base amount. Actual deduction = base amount × system group rate.":"Montant de base. Déduction réelle = montant de base × taux du groupe système.","Base input and output token prices for this tier.":"Prix de base des tokens en entrée et en sortie pour ce palier.","Base input price only":"Prix d’entrée de base uniquement","Base Limits":"Limites de base","Base multipliers applied when users select specific groups.":"Multiplicateurs de base appliqués lorsque les utilisateurs sélectionnent des groupes spécifiques.","Base Price":"Prix de base","Base rate limit windows for this account.":"Fenêtres de limitation de débit de base pour ce compte.","Base URL":"URL de base","Base URL is required for this channel type":"L\'URL de base est requise pour ce type de canal","Base URL of your Uptime Kuma instance":"URL de base de votre instance Uptime Kuma","Basic Authentication":"Authentification de base","Basic Configuration":"Configuration de base","Basic Info":"Informations de base","Basic Information":"Informations de base","Basic Templates":"Modèles de base","Batch Add (one key per line)":"Ajout par lots (une clé par ligne)","Batch delete failed":"Échec de la suppression par lots","Batch deleted {{count}} channels":"{{count}} canaux supprimés par lot","Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed":"Détection par lots terminée : {{channels}} canaux, {{add}} à ajouter, {{remove}} à supprimer, {{fails}} échoués","Batch detection failed":"Échec de la détection par lot","Batch disable failed":"Échec de la désactivation par lots","Batch Edit":"Modification par lot","Batch edit all channels with this tag. Leave fields empty to keep current values.":"Modifiez par lot tous les canaux avec ce tag. Laissez les champs vides pour conserver les valeurs actuelles.","Batch Edit by Tag":"Modification par lot par tag","Batch enable failed":"Échec de l\'activation par lots","Batch processing failed":"Échec du traitement par lot","Batch set tag for {{count}} channels":"Étiquette définie par lot pour {{count}} canaux","Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed":"Mises à jour par lot des modèles en amont appliquées : {{channels}} canaux, {{added}} ajoutés, {{removed}} supprimés, {{fails}} échoués","Best for single-tenant deployments. Pricing and billing options stay hidden.":"Idéal pour les déploiements mono-utilisateur. Les options de tarification et de facturation restent masquées.","Best TTFT":"Meilleur TTFT","Billable input tokens":"Tokens d’entrée facturables","Billable output tokens":"Tokens de sortie facturables","Billing":"Facturation","Billing & Payment":"Facturation et paiement","Billing currency":"Devise de facturation","Billing Details":"Détails de facturation","Billing History":"Historique de facturation","Billing Mode":"Mode de facturation","Billing Process":"Processus de facturation","Billing Source":"Source de facturation","Bind":"Lier","Bind a Pancake store + product":"Associer une boutique et un produit Pancake","Bind an email address to your account.":"Associez une adresse e-mail à votre compte.","Bind Email":"Lier l\'e-mail","Bind Telegram Account":"Lier le compte Telegram","Bind WeChat Account":"Lier le compte WeChat","Binding Information":"Informations de liaison","Binding successful!":"Liaison réussie !","Binding your {{provider}} account":"Liaison de votre compte {{provider}}","Binding...":"Liaison en cours...","Bindings":"Liages","Blacklist":"Liste noire","Blacklist (Block listed domains)":"Liste noire (Bloquer les domaines listés)","Blacklist (Block listed IPs)":"Liste noire (Bloquer les adresses IP listées)","Blank Rule":"Règle vide","Blend":"Fusion","Block email aliases (e.g., [email protected])":"Bloquer les alias d\'e-mail (par exemple, [email protected])","Blocked keywords":"Mots-clés bloqués","Blocks messages when sensitive keywords are detected.":"Bloque les messages lorsque des mots-clés sensibles s
107ont détectés.","Body param":"Paramètre de corps","Border radius":"Rayon de bordure","Bot Name":"Nom du bot","Bot Protection":"Protection des bots","Bot Token":"Jeton du bot","Bot:":"Bot :","Bound":"Lié","Bound a subscription":"Abonnement lié","Bound Channels":"Canaux liés","Bound Only":"Liés uniquement","Bound product:":"Produit associé :","Bound store:":"Boutique associée :","Bring channels back online after successful checks":"Remettre les canaux en ligne après des vérifications réussies","Browse and compare":"Parcourir et comparer","Browse available models and pricing":"Parcourir les modèles disponibles et les tarifs","Browse rankings by category":"Parcourir les classements par catégorie","Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.":"Jetons budgétaires = jetons max × ratio. Accepte un nombre décimal entre 0,002 et 1. Il est recommandé de rester aligné avec la facturation en amont.","Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.":"Jetons budgétaires = jetons max × ratio. Accepte un nombre décimal entre 0,1 et 1.","Budget Tokens Ratio":"Ratio de jetons budgétaires","Budgets":"Budgets","Build on your API gateway in minutes":"Construisez sur votre passerelle API en quelques minutes","Built for developers,":"Conçu pour les développeurs,","Built-in":"Intégré","Built-in Device":"Appareil intégré","Built-in: phone fingerprint/face, or Windows Hello; External: USB security key":"Intégré : empreinte digitale/visage du téléphone, ou Windows Hello ; Externe : clé de sécurité USB","by":"par","By category":"Par catégorie","By model author":"Par auteur du modèle","Cache":"Cache","Cache create (1h) price":"Prix de création du cache (1 h)","Cache create price":"Prix de création du cache","Cache Creation":"Création cache","Cache Creation (1h)":"Création cache (1h)","Cache Creation (5m)":"Création cache (5m)","Cache Directory":"Répertoire de cache","Cache Directory Disk Space":"Espace disque du répertoire de cache","Cache Directory Info":"Infos du répertoire de cache","Cache Entries":"Entrées de cache","Cache mode":"Mode de cache","Cache pricing":"Tarification du cache","Cache ratio":"Ratio de cache","Cache Read":"Lecture du cache","Cache read price":"Prix de lecture du cache","Cache repeated prompt prefixes for cheaper, faster reuse":"Mettre en cache les préfixes répétés pour une réutilisation plus rapide et moins coûteuse","Cache write":"Écriture du cache","Cache Write":"Écriture du cache","Cache Write (1h)":"Écriture cache (1h)","Cache Write (5m)":"Écriture cache (5m)","Cache write price":"Prix d’écriture du cache","Cached":"Cache","Cached input":"Entrée mise en cache","Calculated price: ${{price}} per 1M tokens":"Prix calculé : ${{price}} par 1M tokens","Calculated ratio: {{ratio}}":"Ratio calculé : {{ratio}}","Calculating...":"Calcul en cours...","Call Count Distribution":"Distribution du nombre d\'appels","Call Count Ranking":"Classement du nombre d\'appels","Call Proportion":"Proportion d\'appels","Call Trend":"Tendance des appels","Callback address":"Adresse de rappel","Callback Caller IP":"IP de l’appelant du callback","Callback notification URL":"URL de notification de rappel","Callback Payment Method":"Moyen de paiement (callback)","Cancel":"Annuler","Cancelled":"Annulé","Cancelled at":"Annulé le","Capabilities":"Capacités","Capture a reusable bundle of models, tags, or endpoints.":"Capturez un ensemble réutilisable de modèles, d\'étiquettes ou de points de terminaison.","Card view":"Vue cartes","Category":"Catégorie","Category Name":"Nom de la catégorie","Category name is required":"Le nom de la catégorie est requis","Category name must be less than 50 characters":"Le nom de la catégorie doit contenir moins de 50 caractères","Caution":"Attention","CC Switch":"Changement CC","Centered":"Centré","Chain":"Chaîne","Change":"Modifier","Change language":"Changer de langue","Change Password":"Changer le mot de passe","Change To":"Changer en","Changed Fields":"Champs modifiés","Changes are written to the settings draft on save.":"Les modifications sont écrites dans le brouillon des paramètres lors de l’enregistrement.","Changing...":"Modification en cours...","Channel":"Canal","Channel Affinity":"Affinité de canal","Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"L\'affinité de canal réutilise le dernier canal ayant réussi, en se basant sur les clés extraites du contexte de la requête ou du corps JSON.","Channel Affinity: Upstream Cache Hit":"Affinité de canal : hit de cache en amont","Channel copied successfully":"Canal copié avec succès","Channel created successfully":"Canal créé avec succès","Channel deleted successfully":"Canal supprimé avec succès","Channel disabled successfully":"Canal désactivé avec succès","Channel enabled successfully":"Canal activé avec succès","Channel Extra Settings":"Paramètres supplémentaires du canal","Channel ID":"ID du Canal","Channel key":"Clé du canal","Channel key unlocked":"Clé de canal déverrouillée","Channel models":"Modèles de canaux","Channel name is required":"Le nom du canal est requis","Channel test completed":"Test du canal terminé","Channel type is required":"Le type de canal est requis","Channel updated successfully":"Canal mis à jour avec succès","Channel-specific settings (JSON format)":"Paramètres spécifiques aux canaux (format JSON)","Channel:":"Canal :","channel(s)? This action cannot be undone.":"canal(aux) ? Cette action ne peut pas être annulée.","Channels":"Canaux","Channels deleted successfully":"Canaux supprimés avec succès","Character chat, storytelling, persona":"Discussion de personnages, narration, persona","Chart Preferences":"Préférences des graphiques","Chart Settings":"Paramètres du graphique","Chat":"Discuter","Chat area":"Zone de chat","Chat Area":"Zone de chat","Chat Client Name":"Nom du client de chat","Chat client name is required":"Le nom du client de chat est requis","Chat configuration JSON":"Configuration du chat JSON","Chat preset not found":"Préréglage de chat introuvable","Chat Presets":"Préréglages de chat","Chat session management":"Gestion des sessions de chat","ChatCompletions -> Responses Compatibility":"Compatibilité ChatCompletions -> Réponses","Check for updates":"Vérifier les mises à jour","Check in daily to receive random quota rewards":"Connectez-vous quotidiennement pour recevoir des récompenses de quota aléatoires","Check in now":"Se connecter maintenant","Check line {{line}} for a missing comma.":"Vérifiez la ligne {{line}} pour une virgule manquante.","Check out the Quick Start":"Consultez le démarrage rapide","Check resolved IPs against IP filters even when accessing by domain":"Vérifier les adresses IP résolues par rapport aux filtres IP même lors de l\'accès par domaine","Check-in failed":"Échec de la connexion","Check-in Rewards":"Récompenses de connexion quotidienne","Check-in Settings":"Paramètres de connexion","Check-in successful! Received":"Connexion réussie ! Reçu","Checked in":"Vérifié","Checking connection":"Vérification de la connexion","Checking name...":"Vérification du nom...","Checking updates...":"Vérification des mises à jour...","checkout.session.completed":"checkout.session.completed","checkout.session.expired":"checkout.session.expired","ChatGPT Subscription (Codex)":"ChatGPT Subscription (Codex)","Chinese":"Chinois","Choose a username":"Choisir un nom d\'utilisateur","Choose an amount and payment method":"Choisir un montant et un mode de paiement","Choose between default expanded, compact icon-only, or full layout mode":"Choisissez entre le mode d\'affichage étendu par défaut, compact (icône uniquement) ou complet","Choose between inset, floating, or standard sidebar layout":"Choisissez entre la disposition de la barre latérale intégrée, flottante ou standard","Choose between left-to-right or right-to-left site direction":"Choisissez entre la direction du site de gauche à droite ou de droite à gauche","Choose between system preference, light mode, or dark mode":"Choisissez entre la préférence système, le mode clair ou le mode sombre","Choose channels to sync upstream ratio configurations from":"Choisissez les canaux à partir desquels synchroniser les configurations de ratio amont","Choose Group":"Choisir un groupe","Choose how quota values are shown to users":"Choisissez comment les valeurs de quota sont affichées aux utilisateurs","Choose how the platform will operate":"Choisissez le mode de fonctionnement de la plateforme","Choose how to filter domains":"Choisissez comment filtrer les domaines","Choose how to filter IP addresses":"Choisissez comment filtrer les adresses IP","Choose the bundle type and define the items inside it.":"Choisissez le type de bundle et définissez les éléments qu\'il contient.","Choose the default charts, range, and time granularity for model analytics.":"Choisissez les graphiques, la plage et la granularité temporelle par défaut pour l\'analyse des modèles.","Choose where to fetch upstream metadata.":"Choisissez où récupérer les métadonnées amont.","Choose which charts are selected by default when opening model analytics.":"Choisissez les graphiques sélectionnés par défaut à l\'ouverture de l\'analyse des modèles.","Classic (Legacy Frontend)":"Classique (Ancien frontend)","Claude":"Claude","Claude CLI Header Passthrough":"Passthrough en-tête Claude CLI","Clean":"Sans conflit","Clean history logs":"Nettoyer les journaux d\'historique","Clean logs":"Nettoyer les logs","Clean up inactive cache":"Nettoyer le cache inactif","Clean Up Log Files":"Nettoyer les fichiers journaux","Cleaned up {{count}} log files, freed {{size}}":"{{count}} fichiers journaux nettoyés, {{size}} libérés","Cleaning...":"Nettoyage en cours...","Cleanup failed":"Échec du nettoyage","Cleanup Mode":"Mode de nettoyage","Clear":"Effacer","Clear all":"Tout effacer","Clear All":"Tout effacer","Clear All Cache":"Vider tout le c
107ache","Clear all filters":"Effacer tous les filtres","Clear cache for this rule":"Vider le cache de cette règle","Clear filters":"Effacer les filtres","Clear Mapping":"Effacer le mappage","Clear mode flags in prompts":"Effacer les indicateurs de mode dans les prompts","Clear search":"Effacer la recherche","Clear selection":"Effacer la sélection","Clear selection (Escape)":"Effacer la sélection (Échap)","Cleared":"Vidé","Cleared {{bindingType}} binding for user {{username}}":"Liaison {{bindingType}} de l\'utilisateur {{username}} supprimée","Cleared all models":"Tous les modèles effacés","Cleared channel affinity cache":"Cache d\'affinité des canaux vidé","Cleared disk cache":"Cache disque vidé","Cleared historical logs":"Journaux historiques effacés","Cleared log files":"Fichiers journaux effacés","Click \\"Create Plan\\" to create your first subscription plan":"Cliquez sur « Créer un plan » pour créer votre premier abonnement","Click \\"Generate\\" to create a token":"Cliquez sur \\"Générer\\" pour créer un jeton","Click any category to drill into its models, apps, and trends":"Cliquez sur une catégorie pour explorer ses modèles, applications et tendances","Click for details":"Cliquez pour les détails","Click save when you\'re done.":"Cliquez sur Enregistrer lorsque vous avez terminé.","Click save when you&apos;re done.":"Cliquez sur Enregistrer lorsque vous avez terminé.","Click the button below to bind your Telegram account":"Cliquez sur le bouton ci-dessous pour lier votre compte Telegram","Click to open deployment":"Cliquez pour ouvrir le déploiement","Click to preview audio":"Cliquer pour prévisualiser l\'audio","Click to preview video":"Cliquer pour prévisualiser la vidéo","Click to update balance":"Cliquez pour mettre à jour le solde","Click to view Codex usage":"Cliquer pour voir l\'utilisation Codex","Click to view full details":"Cliquez pour voir les détails complets","Click to view full error message":"Cliquez pour voir le message d\'erreur complet","Click to view full prompt":"Cliquez pour voir l\'invite complète","Click to view image":"Cliquer pour voir l’image","Client header value":"Valeur d\'en-tête client","Client ID":"ID client","Client Secret":"Secret client","Close":"Fermer","Close dialog":"Fermer la boîte de dialogue","Close menu":"Fermer le menu","Close Today":"Fermer aujourd\'hui","Cloudflare":"Cloudflare","CNY":"CNY","CNY per USD":"CNY par USD","Code":"Code","Code generation, refactoring, autocomplete":"Génération de code, refactorisation, autocomplétion","Code interpreter":"Interpréteur de code","Code samples":"Exemples de code","Codes copied!":"Codes copiés !","Codex":"Codex","Codex Account & Usage":"Compte et utilisation Codex","Codex channels do not support batch creation":"Les canaux Codex ne prennent pas en charge la création par lot","Codex channels use an OAuth JSON credential as the key.":"Les canaux Codex utilisent un identifiant OAuth JSON comme clé.","Codex CLI Header Passthrough":"Passthrough en-tête Codex CLI","Codex credential must be a JSON object with access_token and account_id":"L\'identifiant Codex doit être un objet JSON avec access_token et account_id","Cohere":"Cohere","Collapse":"Réduire","Collapse All":"Tout réduire","Collect relay latency and success-rate metrics for the model square.":"Collecte les métriques de latence Relay et de taux de réussite pour la place des modèles.","Color":"Couleur","Color is required":"La couleur est requise","Color preset":"Préréglage de couleur","Color:":"Couleur :","Comfortable":"Confortable","Coming Soon!":"Bientôt disponible !","Comma-separated exact model names. Prefix with regex: to ignore by regular expression.":"Noms exacts de modèles séparés par des virgules. Préfixez avec regex: pour ignorer par expression régulière.","Comma-separated list of allowed ports (empty = all ports)":"Liste des ports autorisés séparés par des virgules (vide = tous les ports)","Comma-separated model names (leave empty to keep current)":"Noms de modèles séparés par des virgules (laissez vide pour conserver l\'actuel)","Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo":"Noms de modèles séparés par des virgules, p. ex., gpt-4,gpt-3.5-turbo","Command":"Commande","Common":"Commun","Common Keys":"Clés courantes","Common Logs":"Journaux courants","Common ports include 25, 465, and 587":"Les ports courants incluent 25, 465 et 587","Common User":"Utilisateur commun","Community driven, self
107-hosted, and extensible":"Piloté par la communauté, auto-hébergé et extensible","Compact":"Compact","Compare each vendor\'s token share across the past few weeks":"Comparer la part de tokens de chaque fournisseur sur les dernières semaines","Compare each vendor\'s token share across the past year":"Comparer la part de tokens de chaque fournisseur sur l’année écoulée","Compare each vendor\'s token share over the past 24 hours":"Comparer la part de tokens de chaque fournisseur sur les dernières 24 heures","Compare each vendor\'s token share over the past month":"Comparer la part de tokens de chaque fournisseur sur le dernier mois","Compare each vendor\'s token share since launch":"Comparer la part de tokens de chaque fournisseur depuis le lancement","Compare the most popular models on the platform":"Comparez les modèles les plus populaires de la plateforme","compatible API routes":"routes API compatibles","Compatible API routes for common AI application workflows":"Routes API compatibles pour les workflows courants des applications d\'IA","Complete API documentation with multi-language SDK support":"Documentation API complète avec support SDK multilingue","Complete Order":"Compléter la commande","Complete these steps to finish the initial installation.":"Suivez ces étapes pour terminer l\'installation initiale.","Completed":"Terminé","Completed top-up order for the user":"Commande de recharge complétée pour l\'utilisateur","Completion":"Achèvement","Completion price":"Prix de complétion","Completion price ($/1M tokens)":"Prix de la complétion (USD/1M jetons)","Completion ratio":"Ratio de complétion","Compliance confirmation required":"Confirmation de conformité requise","Compliance confirmed":"Conformité confirmée","Compliance confirmed successfully":"Conformité confirmée avec succès","Concatenate channel system prompt with user&apos;s prompt":"Concaténer l\'invite système du canal avec l\'invite de l\'utilisateur","Condition Path":"Chemin de condition","Condition Settings":"Paramètres de condition","Condition Value":"Valeur de condition","Conditional multipliers":"Multiplicateurs conditionnels","Conditions":"Conditions","Conditions (AND)":"Conditions (ET)","Confidence":"Confiance","Configuration":"Configuration","Configuration File":"Fichier de configuration","Configuration for Creem payment integration":"Configuration pour l\'intégration de paiement Creem","Configuration for Epay payment integration":"Configuration pour l\'intégration de paiement Epay","Configuration for Stripe payment integration":"Configuration pour l\'intégration de paiement Stripe","Configuration required":"Configuration requise","Configure":"Configurer","Configure a Creem product for user recharge options.":"Configurez un produit Creem pour les options de recharge utilisateur.","Configure a custom ratio for when users use a specific token group.":"Configurer un ratio personnalisé lorsque les utilisateurs utilisent un groupe de jetons spécifique.","Configure a group that users can select when creating API keys.":"Configurer un groupe que les utilisateurs peuvent sélectionner lors de la création de clés API.","Configure a new custom OAuth provider for user authentication.":"Configurer un nouveau fournisseur OAuth personnalisé pour l\'authentification des utilisateurs.","Configure a payment method for user recharge options.":"Configurer un mode de paiement pour les options de recharge utilisateur.","Configure a predefined chat link for end users.":"Configurer un lien de chat prédéfini pour les utilisateurs finaux.","Configure and deploy a new container instance.":"Configurer et déployer une nouvelle instance de conteneur.","Configure API documentation links for the dashboard":"Configurer les liens de documentation API pour le tableau de bord","Configure at:":"Configurer à :","Configure available payment methods. Provide a JSON array.":"Configurer les méthodes de paiement disponibles. Fournir un tableau JSON.","Configure Creem products. Provide a JSON array.":"Configurez les produits Creem. Fournissez un tableau JSON.","Configure discount rates based on recharge amounts":"Configurer les taux de réduction basés sur les montants de recharge","Configure experimental data export for the dashboard":"Configurer l\'exportation de données expérimentales pour le tableau de bord","Configure in your Creem dashboard":"Configurez dans votre tableau de bord Creem","Configure keyword filtering for prompts and responses.":"Configurer le filtrage par mots-clés pour les invites et les réponses.","Configure model, caching, and group ratios used for billing":"Configurer les ratios de modèle, de mise en cache et de groupe utilisés pour la facturation","Configure monitoring status page groups for the dashboard":"Configurer les groupes de pages d\'état de surveillance pour le tableau de bord","Configure per-model ratio for image inputs or outputs.":"Configurer le ratio par modèle pour les entrées ou sorties d\'images.","Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.":"Définissez le prix unitaire de chaque outil ($/1K appels). Les modèles facturés à la requête n\'entraînent pas de frais d\'outils supplémentaires.","Configure pricing ratios for a specific model.":"Configurer les ratios de tarification pour un modèle spécifique.","Configure rate limiting rules for a specific user group.":"Configurer les règles de limitation de débit pour un groupe d\'utilisateurs spécifique.","Configure the ratio for this group.":"Configurer le ratio pour ce groupe.","Configure upstream providers and routing.":"Configurer les fournisseurs en amont et le routage.","Configure Waffo Pancake hosted checkout integration for USD-priced top-ups":"Configurer l\'intégration du parcours de paiement hébergé Waffo Pancake pour les rechargements en USD","Configure Waffo payment aggregation platform integration":"Configurer l\'intégration de la plateforme d\'agrégation de paiement Waffo","Configure your account behavior preferences":"Configurer les préférences de comportement de votre compte","Configure your account preferences and integrations":"Configurer les préférences et les intégrations de votre compte","Configured routes and latency checks":"Routes configurées et contrôles de latence","Confirm":"Confirmer","Confirm Action":"Confirmer l\'action","Confirm and enable":"Confirmer et activer","Confirm Batch Update":"Confirmer la mise à jour par lot","Confirm Billing Conflicts":"Confirmer les conflits de facturation","Confirm Changes":"Confirmer les modifications","Confirm Cleanup":"Confirmer le nettoyage","Confirm cleanup of inactive disk cache?":"Confirmer le nettoyage du cache disque inactif ?","Confirm clearing all channel affinity cache":"Confirmer la suppression de tout le c
107ache d\'affinité de canal","Confirm clearing cache for this rule":"Confirmer la suppression du cache de cette règle","Confirm compliance":"Confirmer la conformité","Confirm compliance terms":"Confirmer les conditions de conformité","Confirm Creem Purchase":"Confirmer l\'achat Creem","Confirm delete":"Confirmer la suppression","Confirm disable":"Confirmer la désactivation","Confirm enable":"Confirmer l\'activation","Confirm invalidate":"Confirmer l\'invalidation","Confirm log cleanup":"Confirmer le nettoyage des journaux","Confirm log file cleanup?":"Confirmer le nettoyage des fichiers journaux ?","Confirm New Password":"Confirmer le nouveau mot de passe","Confirm password":"Confirmer le mot de passe","Confirm Payment":"Confirmer le paiement","Confirm Selection":"Confirmer la sélection","Confirm settings and finish setup":"Confirmez les paramètres et terminez la configuration","confirm that I bear legal responsibility arising from deployment":"confirme assumer la responsabilité juridique découlant du déploiement","Confirm Unbind":"Confirmer la dissociation","Confirm your identity before removing this Passkey from your account.":"Confirmez votre identité avant de supprimer cette Passkey de votre compte.","Confirm your identity with Two-factor Authentication before registering a Passkey.":"Confirmez votre identité avec l’authentification à deux facteurs avant d’enregistrer une Passkey.","Confirmed at {{time}} by user #{{userId}}":"Confirmé le {{time}} par l’utilisateur #{{userId}}","Confirmed payment compliance":"Conformité de paiement confirmée","Conflict":"Conflit","Connect":"Connecter","Connect through OpenAI, Claude, Gemini, and other compatible API routes":"Connectez-vous via OpenAI, Claude, Gemini et d\'autres routes API compatibles","Connected to io.net service normally.":"Connexion au service io.net réussie.","Connection error":"Erreur de connexion","Connection failed":"Connexion échouée","Connection successful":"Connexion réussie","Console":"Console","Console area":"Zone de console","Console Area":"Zone console","Console Content":"Contenu de la console","Consume":"Consommation","Consumed in the last 24 hours":"Consommé dans les dernières 24 heures","Container":"Conteneur","Container name":"Nom du conteneur","Containers":"Conteneurs","Contains":"Contient","Contains Match":"Correspondance contient","Content":"Contenu","Content displayed on the home page (supports Markdown)":"Contenu affiché sur la page d\'accueil (prend en charge Markdown)","Content not found.":"Contenu non trouvé.","Content not modified!":"Contenu non modifié !","Content width":"Largeur du contenu","Context":"Contexte","Continue":"Continuer","Continue with {{name}}":"Continuer avec {{name}}","Continue with Discord":"Continuer avec Discord","Continue with GitHub":"Continuer avec GitHub","Continue with LinuxDO":"Continuer avec LinuxDO","Continue with OIDC":"Continuer avec OIDC","Continue with Telegram":"Continuer avec Telegram","Continue with WeChat":"Continuer avec WeChat","Contract review, compliance, summarisation":"Revue de contrats, conformité, résumé","Control which models are exposed and which groups may use them.":"Contrôlez les modèles exposés et les groupes autorisés à les utiliser.","Controls how much the model thinks before answering":"Contrôle la quantité de raisonnement avant la réponse","Controls whether user verification (biometrics/PIN) is required during Passkey flows.":"Contrôle si la vérification de l\'utilisateur (biométrie/PIN) est requise lors des flux de Passkey.","Conversion rate from USD to your custom currency":"Taux de conversion de l\'USD vers votre devise personnalisée","Convert reasoning_content to <think> tag in content":"Convertir reasoning_content en balise <think> dans content","Convert string to lowercase":"Convertir la chaîne en minuscules","Convert string to uppercase":"Convertir la chaîne en majuscules","Copied":"Copié","Copied {{count}} key(s)":"{{count}} clé(s) copiée(s)","Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})":"Canal copié (ID source : {{sourceId}}) vers {{name}} (nouvel ID : {{id}})","Copied to clipboard":"Copié dans le presse-papiers","Copied: {{model}}":"Copié : {{model}}","Copied!":"Copié !","Copy":"Copier","Copy {{name}} pricing":"Copier la tarification de {{name}}","Copy a request header":"Copier un en-tête de requête","Copy All":"Tout copier","Copy all backup codes":"Copier tous les codes de sauvegarde","Copy All Codes":"Copier tous les codes","Copy API key":"Copier la clé API","Copy Channel":"Copier le canal","Copy code":"Copier le code","Copy Connection Info":"Copier les infos de connexion","Copy failed":"Copie échouée","Copy Field":"Copier le champ","Copy Header":"Copier l\'en-tête","Copy Key":"Copier la clé","Copy Link":"Copier le lien","Copy model name":"Copier le nom du modèle","Copy model names":"Copier les noms des modèles","Copy prompt":"Copier le prompt","Copy ready-to-run curl":"Copier le curl prêt à exécuter","Copy redemption code":"Copier le code de rachat","Copy referral link":"Copier le lien de parrainage","Copy Request Header":"Copier un en-tête de requête","Copy secret key":"Copier la clé secrète","Copy selected codes":"Copier les codes sélectionnés","Copy selected keys":"Copier les clés sélectionnées","Copy source field to target field":"Copier le champ source vers le champ cible","Copy the key and paste it here":"Copiez la clé et collez-la ici","Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.":"Copiez ce prompt et envoyez-le à un LLM (ex. ChatGPT / Claude) pour vous aider à concevoir votre expression de facturation.","Copy to clipboard":"Copier dans le presse-papiers","Copy token":"Copier le Jeton","Copy URL":"Copier l\'URL","Copying...":"Copie...","Copywriting, ad creative, SEO":"Rédaction publicitaire, créatif, SEO","Core concepts":"Concepts clés","Core Configuration":"Configuration principale","Core Features":"Fonctionnalités principales","Core pricing":"Tarification principale","Cost":"Coût","Cost in USD per request, regardless of tokens used.":"Coût en USD par requête, quel que soit le nombre de jetons utilisés.","Cost Tracking":"Suivi des coûts","Count must be between {{min}} and {{max}}":"Le nombre doit être compris entre {{min}} et {{max}}
107","Coze":"Coze","CPU Threshold (%)":"Seuil CPU (%)","Create":"Créer","Create a copy of:":"Créer une copie de :","Create a key for your app or service":"Créer une clé pour votre application ou service","Create a new user group to configure ratio overrides for.":"Créer un nouveau groupe d\'utilisateurs pour configurer les remplacements de ratio.","Create account":"Créer un compte","Create an account":"Créer un compte","Create an API key to unlock the real request":"Créez une clé API pour débloquer la requête réelle","Create and review invite or credit codes.":"Créer et examiner les codes d\'invitation ou de crédit.","Create API Key":"Créer une clé API","Create cache":"Créer le cache","Create cache ratio":"Créer un ratio de cache","Create Channel":"Créer un canal","Create Code":"Créer un code","Create credentials for the root user":"Créer les identifiants pour le compte administrateur","Create deployment":"Créer un déploiement","Create Model":"Créer un modèle","Create multiple API keys at once (random suffix will be added to names)":"Créer plusieurs clés API en une fois (un suffixe aléatoire sera ajouté aux noms)","Create multiple channels from multiple keys":"Créer plusieurs canaux à partir de plusieurs clés","Create multiple redemption codes at once (1-100)":"Créer plusieurs codes de rachat à la fois (1-100)","Create new subscription plan":"Créer un nouveau plan d\'abonnement","Create or update frequently asked questions for users":"Créer ou mettre à jour les questions fréquemment posées aux utilisateurs","Create or update system announcements for the dashboard":"Créer ou mettre à jour les annonces système pour le tableau de bord","Create Plan":"Créer un plan","Create Prefill Group":"Créer un groupe de préremplissage","Create Provider":"Créer un fournisseur","Create Redemption Code":"Créer un code d\'échange","Create request parameter override rules with a visual editor or raw JSON.":"Créer des règles de substitution de paramètres avec l\'éditeur visuel ou le JSON brut.","Create request parameter override rules without editing raw JSON.":"Créez des règles de remplacement des paramètres de requête sans modifier le JSON brut.","Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.":"Créez des ensembles réutilisables de modèles, de balises, de points de terminaison et de groupes d\'utilisateurs pour accélérer la configuration ailleurs dans la console.","Create succeeded":"Création réussie","Create Vendor":"Créer un fournisseur","Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.":"Créez votre premier groupe pour réutiliser les sélections de modèles, de balises ou de points de terminaison n\'importe où dans le tableau de bord.","Create, revoke, and audit API tokens.":"Créer, révoquer et auditer les jetons API.","Created":"Créé","Created {{count}} redemption codes named {{name}} ({{quota}} each)":"{{count}} codes de réduction nommés {{name}} créés ({{quota}} chacun)","Created a custom OAuth provider":"Fournisseur OAuth personnalisé créé","Created a deployment":"Déploiement créé","Created a model":"Modèle créé","Created a prefill group":"Groupe de préremplissage créé","Created a subscription plan":"Forfait d\'abonnement créé","Created a vendor":"Fournisseur créé","Created At":"Créé le","Created channel {{name}} (type {{type}}, count {{count}})":"Canal {{name}} créé (type {{type}}, nombre {{count}})","Created user {{username}} (role {{role}})":"Utilisateur {{username}} créé (rôle {{role}})","Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.":"Crée un produit Pancake dans la boutique enregistrée avec le titre et le prix de ce forfait. Waffo Pancake doit d’abord être entièrement configuré dans les paramètres de paiement.","Creating...":"Création...","Creation failed":"Échec de la création","Credential refreshed":"Identifiant actualisé","Credentials":"Identifiants","Credentials verification failed":"Échec de la vérification des identifiants","Credentials verification failed — double-check Merchant ID and API private key.":"Échec de la vérification des identifiants — vérifiez l’ID marchand et la clé privée API.","Credit remaining":"Crédit restant","Creem API key (leave blank unless updating)":"Clé API Creem (laissez vide sauf si mise à jour)","Creem Gateway":"Passerelle Creem","Creem Payment":"Paiement Creem","Creem product ID from your Creem dashboard.":"ID du produit Creem depuis votre tableau de bord Creem.","Creem products must be a JSON array":"Les produits Creem doivent être un tableau JSON","Cross-group":"Inter-groupes","Cross-group retry":"Nouvelle tentative inter-groupes","Currency":"Devise","Currency & Display":"Devise et affichage","Current Balance":"Solde actuel","Current Billing":"Facturation actuelle","Current Cache Size":"Taille actuelle du cache","Current domain":"Domaine actuel","Current email: {{email}}. Enter a new email to change.":"E-mail actuel : {{email}}. Saisissez un nouvel e-mail pour le modifier.","Current key":"Clé actuelle","Current legacy JSON is invali
107d, cannot append":"Le JSON ancien format actuel n\'est pas valide, impossible d\'ajouter","Current Level Only":"Niveau actuel uniquement","Current models for the longest channel in this tag. May not include all models from all channels.":"Modèles actuels pour le canal le plus long de cette balise. Peut ne pas inclure tous les modèles de tous les canaux.","Current Password":"Mot de passe actuel","Current Price":"Prix actuel","Current quota":"Quota actuel","Current Value":"Valeur actuelle","Current version":"Version actuelle","Current:":"Actuel :","Custom":"Personnalisé","Custom (seconds)":"Personnalisé (secondes)","Custom Amount":"Montant personnalisé","Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.":"URL de base API personnalisée. Pour les canaux officiels, New API dispose d\'adresses intégrées. Ne remplissez ceci que pour les sites proxy tiers ou les points de terminaison spéciaux. N\'ajoutez pas /v1 ou de barre oblique finale.","Custom API base URL. Leave empty to use provider default.":"URL de base API personnalisée. Laissez vide pour utiliser la valeur par défaut du fournisseur.","Custom Currency":"Devise personnalisée","Custom Currency Symbol":"Symbole de devise personnalisé","Custom currency symbol is required":"Le symbole de devise personnalisé est requis","Custom database driver detected.":"Pilote de base de données personnalisé détecté.","Custom Error Response":"Réponse d\'erreur personnalisée","Custom Home Page":"Page d\'accueil personnalisée","Custom message shown when access is denied":"Message personnalisé affiché lorsque l\'accès est refusé","Custom model (comma-separated)":"Modèle personnalisé (séparé par des virgules)","Custom module":"Module personnalisé","Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.":"Multiplicateurs personnalisés lorsque des groupes d\'utilisateurs spécifiques utilisent des groupes de jetons spécifiques. Exemple : les utilisateurs VIP obtiennent un taux de 0,9x lorsqu\'ils utilisent les jetons du groupe \\"edit_this\\".","Custom OAuth":"OAuth personnalisé","Custom OAuth Providers":"Fournisseurs OAuth personnalisés","Custom Seconds":"Secondes personnalisées","Custom sidebar section":"Section de barre latérale personnalisée","Custom Time Range":"Plage horaire personnalisée","Custom Zoom":"Zoom personnalisé","Customize sidebar display content":"Personnaliser le contenu affiché dans la barre latérale","Daily":"Quotidien","Daily Check-in":"Connexion quotidienne","Daily token usage by model across the past few weeks":"Utilisation quotidienne de tokens par modèle sur les dernières semaines","Daily token usage by model across the past month":"Utilisation quotidienne des tokens par modèle au cours du dernier mois","Daily token usage by model over the past month":"Utilisation quotidienne de tokens par modèle sur le dernier mois","Daily uptime over the last 30 days":"Disponibilité quotidienne sur les 30 derniers jours","Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes":"Disponibilité quotidienne ; {{incidents}} incidents totalisant {{minutes}} minutes","Dark":"Sombre","Dashboard":"Tableau de bord","Dashboard Preferences":"Préférences du tableau de bord","Dashboards, tokens, and usage analytics.":"Tableaux de bord, jetons et analyses d\'utilisation.","Data Dashboard":"Tableau de bord des données","Data directory:":"Répertoire des données :","Data is stored locally on this device. Use system backups to keep a safe copy.":"Les données sont stockées localement sur cet appareil. Utilisez les sauvegardes système pour conserver une copie sécurisée.","Data management and log viewing":"Gestion des données et consultation des journaux","Data retention":"Rétention des données","Database":"Base de données","Database check":"Vérification de la base de données","Date and time when this announcement should be displayed":"Date et heure auxquelles cette annonce doit être affichée","Date Range":"Plage de dates","Day":"Jour","Day of month":"Jour du mois","days":"jours","Days to Retain":"Jours à conserver","Decreased user quota by {{quota}}":"Quota de l\'utilisateur diminué de {{quota}}","Deducted by subscription":"Déduit par abonnement","DeepSeek":"DeepSeek","default":"par défaut","Default":"Par défaut","Default (New Frontend)":"Par défaut (Nouveau frontend)","Default / range":"Défaut / plage","Default API Version *":"Version API par défaut *","Default API version for this channel":"Version API par défaut pour ce canal","Default Collapse Sidebar":"Réduire la barre latérale par défaut","Default consumption chart":"Graphique de consommation par défaut","Default Max Tokens":"Jetons max par défaut","Default model call chart":"Graphique d\'appels de modèle par défaut","Default range":"Plage par défaut","Default Responses API version, if empty, will use the API version above":"Version API des réponses par défaut, si vide, utilisera la version API ci-dessus","Default system prompt for this channel":"Invite système par défaut pour ce canal","Default time granularity":"Granularité temporelle par défaut","Default to auto groups":"Par défaut aux groupes automatiques","Default TTL (seconds)":"TTL par défaut (secondes)","Defaults to the wallet page when empty":"Si vide, la page portefeuille est utilisée par défaut","Define API endpoints for this model (JSON format)":"Définir les points de terminaison API pour ce modèle (format JSON)","Define endpoint mappings for each provider.":"Définissez les mappages d\'endpoints pour chaque fournisseur.","Define per-group rules to add, remove, or append selectable groups for specific user groups.":"Définir des règles par groupe pour ajouter, supprimer ou ajouter des groupes sélectionnables pour des groupes d\'utilisateurs spécifiques.","Degraded performance recently":"Performances dégradées récemment","Delete":"Supprimer","Delete (":"Supprimer (","Delete {{count}} API key(s)?":"Supprimer {{count}} clé(s) API ?","Delete a runtime request header":"Supprimer un en-tête de requête à l\'exécution","Delete Account":"Supprimer le compte","Delete All Disabled":"Supprimer tout ce qui est désactivé","Delete All Disabled Channels?":"Supprimer tous les canaux désactivés ?","Delete Auto-Disabled":"Supprimer les désactivés automatiquement","Delete Channel":"Supprimer le c
107anal","Delete Channels?":"Supprimer les canaux ?","Delete condition":"Supprimer la condition","Delete Condition":"Supprimer la condition","Delete failed":"Échec de la suppression","Delete Field":"Supprimer le champ","Delete group":"Supprimer le groupe","Delete Header":"Supprimer l\'en-tête","Delete Invalid":"Supprimer les invalides","Delete invalid codes":"Supprimer les codes invalides","Delete invalid codes (used/disabled/expired)":"Supprimer les codes invalides (utilisés/désactivés/expirés)","Delete invalid redemption codes":"Supprimer les codes de rachat invalides","Delete Invalid Redemption Codes?":"Supprimer les codes de rachat invalides ?","Delete logs":"Supprimer les journaux","Delete mapping":"Supprimer le mappage","Delete Model":"Supprimer le modèle","Delete Models?":"Supprimer les modèles ?","Delete Provider":"Supprimer le fournisseur","Delete Request Header":"Supprimer un en-tête de requête","Delete selected API keys":"Supprimer les clés API sélectionnées","Delete selected channels":"Supprimer les canaux sélectionnés","Delete selected models":"Supprimer les modèles sélectionnés","Deleted":"Supprimé","Deleted a custom OAuth provider":"Fournisseur OAuth personnalisé supprimé","Deleted a deployment":"Déploiement supprimé","Deleted a model":"Modèle supprimé","Deleted a passkey":"Clé d\'accès supprimée","Deleted a prefill group":"Groupe de préremplissage supprimé","Deleted a redemption code":"Code de réduction supprimé","Deleted a vendor":"Fournisseur supprimé","Deleted all disabled channels ({{count}})":"Tous les canaux désactivés supprimés ({{count}})","Deleted channel {{name}} (ID: {{id}})":"Canal {{name}} supprimé (ID : {{id}})","Deleted invalid redemption codes":"Codes de réduction invalides supprimés","Deleted successfully":"Supprimé avec succès","Deleted user {{username}} (ID: {{id}})":"Utilisateur {{username}} supprimé (ID : {{id}})","Deleting will permanently remove this subscription record (including benefit details). Continue?":"La suppression supprimera définitivement cet enregistrement d\'abonnement (y compris les détails des avantages). Continuer ?","Deleting...":"Suppression...","Demo site":"Site de démonstration","Demo site mode":"Mode site de démonstration","Demo Site Mode":"Mode Site de démonstration","Demote":"Rétrograder","Density":"Densité","Deploy your own gateway and start routing requests through your configured upstream services.":"Déployez votre propre passerelle et commencez à router les requêtes via vos services en amont configurés.","Deployment created successfully":"Déploiement créé avec succès","Deployment details":"Détails du déploiement","Deployment ID":"ID du déploiement","Deployment location":"Emplacement du déploiement","Deployment logs":"Journaux de déploiement","Deployment Region *":"Région de déploiement *","Deployment requested":"Déploiement demandé","Deployments":"Déploiements","Desc":"Desc.","Describe":"Décrire","Describe this model...":"Décrire ce modèle...","Describe this vendor...":"Décrire ce fournisseur...","Description":"Description","Description is required":"La description est requise","Designed and Developed by":"Conçu et développé par","designed for scale":"conçu pour la scalabilité","Destroyed":"Détruit","Detailed request logs for investigations.":"Journaux détaillés des requêtes pour les enquêtes.","Details":"Détails","Detect All Upstream Updates":"Détecter toutes les mises à jour upstream","Detected database":"Base de données détectée","Detected high-risk status code redirect rules":"Les règles de redirection de codes d\'état à haut risque suivantes ont été détectées :","Detection complete: {{add}} to add, {{remove}} to remove":"Détection terminée : {{add}} à ajouter, {{remove}} à supprimer","Detection failed":"Échec de la détection","Determines how this group is applied elsewhere.":"Détermine comment ce groupe est appliqué ailleurs.","Deterministic sampling seed (best-effort)":"Graine d\'échantillonnage déterministe (meilleur effort)","Developer Friendly":"Convivial pour les développeurs","Device Type Preference":"Préférence de type d\'appareil","Dify":"Dify","Dify channels only support chatflow and agent, and agent does not support images":"Les canaux Dify ne prennent en charge que les chatflow et les agents, et les agents ne prennent pas en charge les images","Digest:":"Digest :","Direction":"Direction","Directory File Count":"Nombre de fic
107hiers du répertoire","Directory Total Size":"Taille totale du répertoire","Disable":"Désactiver","Disable 2FA":"Désactiver la 2FA","Disable All":"Désactiver tout","Disable on failure":"Désactiver en cas d\'échec","Disable selected channels":"Désactiver les canaux sélectionnés","Disable selected models":"Désactiver les modèles sélectionnés","Disable store passthrough":"Désactiver la transmission du champ store","Disable this key?":"Désactiver cette clé ?","Disable threshold (seconds)":"Seuil de désactivation (secondes)","Disable Two-Factor Authentication":"Désactiver l\'authentification à deux facteurs","disabled":"désactivé","Disabled":"Désactivé","Disabled all channels with tag: {{tag}}":"Tous les canaux avec le tag {{tag}} ont été désactivés","Disabled channels with tag {{tag}}":"Canaux avec l\'étiquette {{tag}} désactivés","Disabled lanes are omitted on save.":"Les voies désactivées sont omises à l’enregistrement.","Disabled Reason":"Raison de la désactivation","Disabled Time":"Heure de désactivation","Disabling...":"Désactivation en cours...","Discord":"Discord","Discount":"Remise","Discount map by recharge amount (JSON object)":"Mappage des réductions par montant de recharge (objet JSON)","Discount Rate":"Taux de réduction","Discount rate must be ≤ 1":"Le taux de remise doit être ≤ 1","Discount rate must be greater than 0":"Le taux de remise doit être supérieur à 0","Discount Rate:":"Taux de réduction :","Discount ratio for cache hits.":"Ratio de réduction pour les accès au cache.","Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel.":"Avertissement : usage personnel uniquement. Ne distribuez ni ne partagez aucun identifiant. Ce canal a des prerequis et necessite une configuration prealable ; utilisez-le uniquement si vous comprenez la procedure et les risques, et respectez les conditions et politiques d\'OpenAI. Les identifiants et la configuration sont reserves a l\'integration Codex CLI et ne sont pas destines a d\'autres clients, plateformes ou canaux.","Discouraged":"Déconseillé","Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.":"Découvrez une sélection de modèles IA, comparez les tarifs et les capacités, et choisissez le modèle adapté à chaque scénario.","Discover the leading models in each domain":"Découvrez les modèles leaders dans chaque domaine","Discover the most-used models and rising vendors on the platform, updated from live usage data.":"Découvrez les modèles les plus utilisés et les fournisseurs en progression sur la plateforme, mis à jour avec les données d’utilisation en direct.","Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.":"Découvrez les modèles les plus utilisés, les meilleures applications et les fournisseurs en plein essor — mis à jour en continu pour chaque catégorie.","Discovering...":"Découverte en cours...","Disk cache cleared":"Cache disque vidé","Disk Cache Settings":"Paramètres du cache disque","Disk Cache Threshold (MB)":"Seuil du cache disque (Mo)","Disk cache, system performance monitoring, and operation statistics":"Cache disque, surveillance des performances système et statistiques opérationnelles","Disk Hits":"Hits disque","Disk Threshold (%)":"Seuil disque (%)","Display in Currency":"Afficher en devise","Display Mode":"Mode d\'affichage","Display name":"Nom d\'affichage","Display Name":"Nom d\'affichage","Display name and email used in outgoing messages":"Nom d\'affichage et e-mail utilisés dans les messages sortants","Display Name Field":"Champ de nom d\'affichage","Display name for this chat client.":"Nom d\'affichage pour ce client de chat.","Display name for this monitoring group (max 50 characters)":"Nom d\'affichage pour ce groupe de surveillance (50 caractères max)","Display name for this payment method.":"Nom d\'affichage pour ce mode de paiement.","Display name shown to users.":"Nom d\'affichage affiché aux utilisateurs.","Display Options":"Options d\'affichage","Display Token Statistics":"Afficher les statistiques des jetons","Displayed in":"Affiché en","Displays the mobile sidebar.":"Affiche la barre latérale mobile.","Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.":"Ne faites pas trop confiance à cette fonctionnalité. L\'IP peut être usurpée. Veuillez l\'utiliser avec nginx, CDN et autres passerelles.","Do not repeat check-in; only once per day":"Ne répétez pas le check-in ; une seule fois par jour","Do regex replacement in the target field":"Effectuer un remplacement par expression régulière dans le champ cible","Do string replacement in the target field":"Effectuer un remplacement de chaîne dans le champ cible","Docs":"Documents","Documentation Link":"Lien de la documentation","Documentation or external knowledge base.":"Documentation ou base de connaissances externe.","does not exist or might have been removed.":"n\'existe pas ou a peut-être été supprimé.","Domain":"Domaine","Domain Filter Mode":"Mode de filtre de domaine","Don\'t have an account?":"Vous n\'avez pas de compte ?","Done":"Terminé","Doubao custom API address editing unlocked":"Édition d\'adresse API personnalisée Doubao déverrouillée","DoubaoVideo":"DoubaoVideo","Double check the configuration below. Your system will be locked until initialization is complete.":"Vérifiez la configuration ci-dessous. Votre système sera verrouillé jusqu\'à ce que l\'initialisation soit terminée.","Download":"Télécharger","Draw":"Dessin","Drawing":"Dessin","Drawing logs":"Journaux de dessin","Drawing Logs":"Journaux de dessin","Drawing task records":"Historique des tâches de dessin","Duplicate":"Dupliquer","Duplicate group names: {{names}}":"Noms de groupe en double : {{names}}","Duplicate source model mappings are not allowed":"Les mappages de modèles source en double ne sont pas autorisés","Duplicate source model(s): {{models}}":"Modèle(s) source en double : {{models}}","Duration":"Durée","Duration (hours)":"Durée (heures)","Duration Settings":"Paramètres de durée","Duration Unit":"Unité de durée","Duration Value":"Valeur de durée","Dynamic Pricing":"Tarification dynamique","e.g. ¥ or HK$":"par ex. ¥ ou HK$","e.g. 401, 403, 429, 500-599":"ex. 401, 403, 429, 500-599","e.g. 8 means 1 USD = 8 units":"par ex. 8 signifie 1 USD = 8 unités","e.g. Basic Plan":"ex. Plan de base","e.g. Clean tool parameters to avoid upstream validation errors":"ex. Nettoyer les paramètres d\'outils pour éviter les erreurs de validation en amont","e.g. example.com":"par ex. example.com","e.g. llama3.1:8b":"p. ex. llama3.1:8b","e.g. My GitLab":"par ex. Mon GitLab","e.g. my-gitlab":"par ex. mon-gitlab","e.g. New API Console":"par ex. console New API","e.g. openid profile email":"par ex. openid profile email","e.g. Suitable for light usage":"ex. Adapté à une utilisation légère","e.g. This request does not meet access policy":"ex. Cette requête ne satisfait pas la politique d\'accès","e.g., 0.95":"par ex., 0.95","e.g., 100":"par ex., 100","e.g., 123456":"par ex., 123456","e.g., 2025-04-01-preview":"par ex., 2025-04-01-preview","e.g., 50":"par ex., 50","e.g., 500000":"p. ex., 500000","e.g., 7342866812345":"par ex., 7342866812345","e.g., 8 means 8 local currency per USD":"par ex., 8 signifie 8 unités de monnaie locale par USD","e.g., Alipay, WeChat":"par ex., Alipay, WeChat","e.g., Basic Package":"p. ex., Forfait de base","e.g., CN2 GIA":"par ex., CN2 GIA","e.g., Core APIs, OpenAI, Claude"
107:"par ex., API principales, OpenAI, Claude","e.g., d6b5da8hk1awo8nap34ube6gh":"par ex., d6b5da8hk1awo8nap34ube6gh","e.g., default, vip, premium":"par ex., par défaut, vip, premium","e.g., gpt-4, claude-3":"ex. gpt-4, claude-3","e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$":"ex. : gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$","e.g., https://api.example.com (path before /suno)":"par ex., https://api.example.com (chemin avant /suno)","e.g., https://api.openai.com/v1/chat/completions":"par ex., https://api.openai.com/v1/chat/completions","e.g., https://ark.cn-beijing.volces.com":"p. ex., https://ark.cn-beijing.volces.com","e.g., https://docs-test-001.openai.azure.com":"par ex., https://docs-test-001.openai.azure.com","e.g., https://fastgpt.run/api/openapi":"par ex., https://fastgpt.run/api/openapi","e.g., OpenAI GPT-4 Production":"p. ex., OpenAI GPT-4 Production","e.g., preview":"par ex., prévisualisation","e.g., prod_xxx":"p. ex., prod_xxx","e.g., Recommended for China Mainland Users":"par ex., Recommandé pour les utilisateurs de Chine continentale","e.g., us-central1 or JSON format for model-specific regions":"par ex., us-central1 ou format JSON pour les régions spécifiques au modèle","e.g., v2.1":"par ex., v2.1","Each backup code can only be used once.":"Chaque code de sauvegarde ne peut être utilisé qu\'une seule fois.","Each item must be an object with a single key-value pair.":"Chaque élément doit être un objet avec une seule paire clé-valeur.","Each item must have exactly one key-value pair.":"Chaque élément doit avoir exactement une paire clé-valeur.","Each line represents one keyword. Leave blank to disable the list but keep the switch states.":"Chaque ligne représente un mot-clé. Laissez vide pour désactiver la liste mais conserver les états des interrupteurs.","Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.":"Chaque palier accepte 0 à 2 conditions (sur len, p, c) ; le dernier palier est le filet de sécurité sans condition. Utilisez len (longueur d\'entrée complète, y compris les cache hits) pour les conditions de palier afin d\'éviter les routages erronés lorsque les cache hits réduisent p.","Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.":"Chaque palier accepte jusqu’à 2 conditions ; le dernier palier sert de repli sans condition. Utilisez la longueur complète de l’entrée pour éviter un mauvais aiguillage lorsque les lectures de cache réduisent les tokens d’entrée facturables.","Each tier supports up to 2 conditions. The last tier without conditions is the fallback.":"Chaque palier prend en charge jusqu’à 2 conditions. Le dernier palier sans condition sert de repli.","Earn rewards when your referrals add funds. Transfer accumulated rewards to your balance anytime.":"Gagnez des récompenses lorsque vos filleuls ajoutent des fonds. Transférez les récompenses accumulées à votre solde à tout moment.","Edit":"Modifier","Edit {{title}}":"Modifier {{title}}","Edit all channels with tag:":"Modifier tous les canaux avec l\'étiquette :","Edit Announcement":"Modifier l\'annonce","Edit API Shortcut":"Modifier le raccourci API","Edit billing ratios and user-selectable groups in one table.":"Modifiez les ratios de facturation et les groupes sélectionnables par les utilisateurs dans un seul tableau.","Edit Channel":"Modifier le canal","Edit chat preset":"Modifier le préréglage de chat","Edit discount tier":"Modifier le palier de remise","Edit FAQ":"Modifier la FAQ","Edit group rate limit":"Modifier la limite de taux de groupe","Edit JSON object directly. Suitable for simple parameter overrides.":"Modifier l\'objet JSON directement. Adapté aux substitutions de paramètres simples.","Edit JSON text directly. Format will be validated on save.":"Modifier le texte JSON directement. Le format sera validé à l\'enregistrement.","Edit model":"Modifier le modèle","Edit Model":"Modifier le modèle","Edit model pricing":"Modifier la tarification du modèle","Edit OAuth Provider":"Modifier le fournisseur OAuth","Edit payment method":"Modifier le mode de paiement","Edit Prefill Group":"Modifier le groupe de préremplissage","Edit product":"Modifier le produit","Edit ratio override":"Modifier le remplacement de ratio","Edit Rule":"Modifier la règle","Edit selectable group":"Modifier le groupe sélectionnable","Edit Tag":"Modifier l\'étiquette","Edit Tag:":"Modifier l\'étiquette :","Edit Uptime Kuma Group":"Modifier le groupe Uptime Kuma","Edit Vendor":"Modifier le fournisseur","edit_this":"modifier_ceci","Edited channels with tag {{tag}}":"Canaux avec l\'étiquette {{tag}}
107 modifiés","Editor mode":"Mode éditeur","Education":"Éducation","Email":"E-mail","Email (required for verification)":"E-mail (requis pour la vérification)","Email Address":"Adresse e-mail","Email Alias Restriction":"Restriction d\'alias d\'e-mail","Email bound successfully!":"E-mail lié avec succès !","Email Domain Restriction":"Restriction de domaine d\'e-mail","Email Domain Whitelist":"Liste blanche de domaines d\'e-mail","Email Field":"Champ d\'e-mail","Email Verification":"Vérification d\'e-mail","Email, summarisation, knowledge work":"Email, résumé, travail intellectuel","Embeddings":"Embeddings","Empty":"Vide","Empty value will be saved as {}.":"Une valeur vide sera enregistrée comme {}.","Enable":"Activer","Enable 2FA":"Activer 2FA","Enable All":"Tout activer","Enable check-in feature":"Activer la fonction de connexion","Enable Data Dashboard":"Activer le tableau de bord des données","Enable demo mode with limited functionality":"Activer le mode démo avec des fonctionnalités limitées","Enable Discord OAuth":"Activer OAuth Discord","Enable Disk Cache":"Activer le cache disque","Enable drawing features":"Activer les fonctionnalités de dessin","Enable filtering":"Activer le filtrage","Enable FunctionCall thoughtSignature Fill":"Activer le remplissage de thoughtSignature pour FunctionCall","Enable GitHub OAuth":"Activer GitHub OAuth","Enable Groups":"Activer les groupes","Enable if this is an OpenRouter enterprise account with special response format":"Activer si c\'est un compte d\'entreprise OpenRouter avec un format de réponse spécial","Enable io.net deployments":"Activer les déploiements io.net","Enable io.net model deployment service in console":"Activer le service de déploiement de modèles io.net dans la console","Enable LinuxDO OAuth":"Activer LinuxDO OAuth","Enable model performance metrics":"Activer les indicateurs de performance des modèles","Enable OIDC":"Activer OIDC","Enable or disable this channel":"Activer ou désactiver ce canal","Enable or disable this model":"Activer ou désactiver ce modèle","Enable Passkey":"Activer Passkey","Enable Performance Monitoring":"Activer la surveillance des performances","Enable rate limiting":"Activer la limitation de débit","Enable Request Passthrough":"Activer le Passthrough de requêtes","Enable selected channels":"Activer les canaux sélectionnés","Enable selected models":"Activer les modèles sélectionnés","Enable SSL/TLS":"Activer SSL/TLS","Enable SSRF Protection":"Activer la protection SSRF","Enable streaming mode for the test request.":"Activer le mode streaming pour la requête de test.","Enable Telegram OAuth":"Activer Telegram OAuth","Enable test mode for Creem payments":"Activer le mode test pour les paiements Creem","Enable this key?":"Activer cette clé ?","Enable Turnstile":"Activer Turnstile","Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.":"Activez l\'authentification à deux facteurs ou Passkey dans votre profil pour déverrouiller les opérations sensibles.","Enable unlimited quota for this API key":"Activer le quota illimité pour cette clé API","Enable violation deduction":"Activer la déduction pour violation","Enable Waffo":"Activer Waffo","Enable Waffo Pancake":"Activer Waffo Pancake","Enable WeChat Auth":"Activer l\'authentification WeChat","Enable when proxying workers that fetch images over HTTP.":"Activer lors de la mise en proxy des workers qui récupèrent des images via HTTP.","Enabled":"Activé","Enabled all channels with tag: {{tag}}":"Tous les canaux avec le tag {{tag}} ont été activés","Enabled channels with tag {{tag}}":"Canaux avec l\'étiquette {{tag}} activés","Enabled Status":"Statut activé","Enabling...":"Activation en cours...","Encourages introducing new topics":"Encourage l\'introduction de nouveaux sujets","End":"End","End Error":"Erreur finale","End Reason":"Raison de fin","End Time":"Heure de fin","End-user identifier for abuse monitoring":"Identifiant d\'utilisateur final pour la surveillance des abus","Endpoint":"Point d\'accès","Endpoint config":"Configuration de l\'endpoint","Endpoint Configuration":"Configuration du point de terminaison","Endpoint Type":"Type de point de terminaison","Endpoint, provider-specific settings, and credentials.":"Point de terminaison, paramètres propres au fournisseur et identifiants.","Endpoint:":"Point de terminaison :","Endpoints":"Points de terminaison","English":"Anglais","Ensure Prefix":"Garantir le préfixe","Ensure Suffix":"Garantir le suffixe","Ensure the string has a specified prefix":"S\'assurer que la chaîne a un préfixe spécifié","Ensure the string has a specified suffix":"S\'assurer que la chaîne a un suffixe spécifié","Enter 6-digit code":"Saisir le code à 6 chiffres","Enter a name":"Saisir un nom","Enter a new name":"Entrez un nouveau nom","Enter a positive or negative amount to adjust the quota":"Saisir un montant positif ou négatif pour ajuster le quota","Enter a valid email or leave blank":"Entrez un e-mail valide ou laissez vide","Enter a value and press Enter":"Saisir une valeur et appuyer sur Entrée","Enter amount in {{currency}}":"Entrez le montant en {{currency}}","Enter amount in tokens":"Entrez le montant en tokens","Enter announcement content (supports Markdown & HTML)":"Saisir le contenu de l\'annonce (prend en charge Markdown et HTML)","Enter announcement content (supports Markdown/HTML)":"Saisir le contenu de l\'annonce (prend en charge Markdown/HTML)","Enter API Key":"Saisir la clé API","Enter API key for this channel":"Saisir la clé API pour ce canal","Enter API Key, format: APIKey|Region":"Entrez la clé API, format : APIKey|Region","Enter API Key, one per line, format: APIKey|Region":"Entrez la clé API, une par ligne, format : APIKey|Region","Enter application token":"Saisir le jeton d\'application","Enter authenticator code":"Saisir le code de l\'authentificateur","Enter backup code (e.g., CAWD-OQDV)":"Saisir le code de secours (par exemple, CAWD-OQDV)","Enter code":"Saisir le code","Enter code or backup code":"Saisir le code ou le code de secours","Enter Completion price to calculate ratio":"Saisir le prix Completion pour calculer le ratio","Enter Creem API key":"Saisir la clé API Creem","Enter custom API endpoint URL":"Saisir l\'URL du point de terminaison API personnalisé","Enter deployment region or JSON mapping:":"Saisir la région de déploiement ou le mappage JSON :","Enter display name":"Saisir le nom d\'affichage","Enter HTML code (e.g., <p>About us...</p>) or a URL (e.g., https://example.com) to embed as iframe":"Saisissez le code HTML (par exemple, <p>À propos de nous...</p>) ou une URL (par exemple, https://example.com) à intégrer en tant qu\'iframe","Enter Input price to calculate ratio":"Saisir le prix Input pour calculer le ratio","Enter JSON to override request headers":"Entrez du JSON pour remplacer les en-têtes","Enter key, format: AccessKey|SecretAccessKey|Region":"Entrez la clé, format : AccessKey|SecretAccessKey|Region","Enter key, one per line, format: AccessKey|SecretAccessKey|Region":"Entrez la clé, une par ligne, format : AccessKey|SecretAccessKey|Region","Enter model name":"Entrez le nom du modèle","Enter new key to update":"Saisir la nouvelle clé à mettre à jour","Enter new key to update, or leave empty to keep current key":"Saisir la nouvelle clé à mettre à jour, ou laisser vide pour conserver la clé actuelle","Enter new tag name (leave empty to disband tag)":"Saisir le nouveau nom de tag (laisser vide pour dissoudre le tag)","Enter new tag name or leave empty":"Saisir le nouveau nom de tag ou laisser vide","Enter new token to update":"Saisir le nouveau token à mettre à jour","Enter one API key per line for batch creation":"Saisissez une clé API par ligne pour la création par lots","Enter one key per line for batch creation":"Saisissez une clé par ligne pour la création par lots","Enter one keyword per line":"Saisir un mot-clé par ligne","Enter password":"Saisir le mot de passe","Enter password (8-20 characters)":"Saisir le mot de passe (8-20 caractères)","Enter password (min 8 characters)":"Entrez le mot de passe (min. 8 caractères)","Enter quota in {{currency}}":"Saisir le quota en {{currency}}","Enter quota in tokens":"Saisir le quota en tokens","Enter secret key":"Saisir la clé secrète","Enter system prompt (user prompt takes priority)":"Saisir l\'invite système (l\'invite utilisateur est prioritaire)","Enter tag name (optional)":"Saisir le nom du tag (facultatif)","Enter the 6-digit code from your authenticator app":"Saisir le code à 6 chiffres de votre application d\'authentification","Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.":"Saisir le mot de passe à usage unique basé sur le temps à 6 chiffres ou le code de secours à 8 caractères de votre application d\'authentification.","Enter the complete URL, supports":"Saisir l\'URL complète, prend en charge","Enter the Coze agent ID":"Saisir l\'ID de l\'agent Coze","Enter the full URL of your Gotify server"
107:"Saisir l\'URL complète de votre serveur Gotify","Enter the knowledge base ID":"Saisir l\'ID de la base de connaissances","Enter the path before /suno, usually just the domain":"Saisir le chemin avant /suno, généralement juste le domaine","Enter the quota amount in {{currency}}":"Entrez le montant du quota en {{currency}}","Enter the quota amount in tokens":"Saisir le montant du quota en tokens","Enter the verification code":"Saisir le code de vérification","Enter threshold":"Saisir le seuil","Enter token counts to preview the estimated cost (excluding group multipliers).":"Saisissez le nombre de tokens pour estimer le coût (hors multiplicateurs de groupe).","Enter URL...":"Saisir l\'URL...","Enter username":"Saisir le nom d\'utilisateur","Enter verification code":"Saisir le code de vérification","Enter webhook secret":"Saisir le secret du webhook","Enter your authenticator code or a backup code":"Saisir votre code d\'authentification ou un code de secours","Enter your email":"Saisir votre e-mail","Enter your redemption code":"Saisir votre code de rachat","Enter your registered email and we will send you a link to reset your password.":"Saisir votre e-mail enregistré et nous vous enverrons un lien pour réinitialiser votre mot de passe.","Enter your username":"Saisir votre nom d\'utilisateur","Enter your username or email":"Saisir votre nom d\'utilisateur ou votre e-mail","Enterprise Account":"Compte d\'entreprise","Enterprise-grade security with comprehensive permission management":"Sécurité de niveau entreprise avec gestion complète des autorisations","Entrypoint (space separated)":"Point d\'entrée (séparés par des espaces)","Env (JSON object)":"Env (objet JSON)","Environment variables":"Variables d\'environnement","Environment variables (JSON)":"Variables d\'environnement (JSON)","Epay endpoint":"Endpoint Epay","Epay Gateway":"Passerelle Epay","Epay merchant ID":"ID marchand Epay","Epay secret key":"Clé secrète Epay","Equals":"Égal à","Error":"Erreur","Error Code (optional)":"Code d\'erreur (optionnel)","Error Message":"Message d\'erreur","Error Message (required)":"Message d\'erreur (requis)","Error Type (optional)":"Type d\'erreur (optionnel)","Estimated cost":"Coût estimé","Estimated quota cost":"Coût de quota estimé","Exact":"Exact","Exact Match":"Correspondance exacte","Example":"Exemple","Example (all channels):":"Exemple (tous les canaux) :","Example (specific channels):":"Exemple (canaux spécifiques) :","Example:":"Exemple :","example.com&#10;blocked-site.com":"example.com&#10;blocked-site.com","example.com&#10;company.com":"example.com&#10;company.com","Excellent":"Excellent","Exchange rate is required":"Le taux de change est requis","Exchange rate must be greater than 0":"Le taux de change doit être supérieur à 0","Execute code in a sandbox during the response":"Exécuter du code dans un bac à sable pendant la réponse","Exhausted":"Épuisé","Existing account will be reused":"Le compte existant sera réutilisé","Existing Models ({{count}})":"Modèles existants ({{count}})","Exists":"Existe","Expand":"Développer","Expand All":"Tout développer","Expected a JSON array of group identifiers":"Un tableau JSON d\'identifiants de groupe est attendu","Expected a JSON array.":"Un tableau JSON est attendu.","Experiment with prompts and models in real time.":"Expérimentez avec des prompts et des modèles en temps réel.","Expiration Time":"Heure d\'expiration","expired":"expiré","Expired":"Expiré","Expired at":"Expiré le","Expired time cannot be earlier than current time":"L\'heure d\'expiration ne peut pas être antérieure à l\'heure actuelle","Expires":"Expire","Expose ratio API":"Exposer l\'API de ratio","Exposes the pricing/models catalog in the top navigation.":"Expose le catalogue des prix/modèles dans la navigation supérieure.","Expression":"Expression","Expression based":"Basé sur une expression","Expression billing":"Facturation par expression","Expression editor":"Éditeur d’expression","Expression error":"Erreur d’expression","Expression pricing":"Tarification par expression","Extend":"Prolonger","Extend deployment":"Prolonger le déploiement","Extend failed":"Échec de la prolongation","Extended successfully":"Prolongé avec succès","External Device":"Appareil externe","External link for users to purchase quota":"Lien externe permettant aux utilisateurs d\'acheter du quota","External operations":"Opérations externes","External operations mode":"Mode opérations externes","External Speed Test":"Test de vitesse externe","Extra":"Supplémentaire","Extra Notes (Optional)":"Notes supplémentaires (facultatif)","extras":"suppléments","Fail Reason":"Raison de l\'échec","Fail Reason Details":"Détails de la raison de l\'échec","Failed":"Échec","Failed to {{action}} user":"Échec de l\'action {{action}} sur l\'utilisateur","Failed to adjust quota":"Échec de l\'ajustement du quota","Failed to apply overwrite.":"Échec de l\'application de l\'écrasement.","Failed to bind email":"Échec de la liaison de l\'e-mail","Failed to change password":"Échec du changement de mot de passe","Failed to check for updates":"Échec de la vérification des mises à jour","Failed to clean logs":"Échec du nettoyage des journaux","Failed to complete order":"Échec de la finalisation de la commande","Failed to complete Passkey login":"Impossible de terminer la connexion Passkey","Failed to confirm compliance":"Échec de la confirmation de conformité","Failed to contact GitHub releases API":"Impossible de contacter l\'API GitHub Releases","Failed to copy":"Échec de la copie","Failed to copy channel":"Échec de la copie du canal","Failed to copy keys":"Échec de la copie des clés","Failed to copy model names":"Échec de la copie des noms de modèles","Failed to copy to clipboard":"Échec de la copie dans le presse-papiers","Failed to create API key":"Échec de la création de la clé API","Failed to create channel":"Échec de la création du canal","Failed to create deployment":"Échec de la création du déploiement","Failed to create provider":"Échec de la création du fournisseur","Failed to create redemption code":"Échec de la création du code d\'échange","Failed to create user":"Échec de la création de l\'utilisateur","Failed to delete {{count}} model(s)":"Échec de la suppression de {{count}} modèle(s)","Failed to delete account":"Échec de la suppression du compte","Failed to delete API key":"Échec de la suppression de la clé API","Failed to delete API keys":"Échec de la suppression des Clés API","Failed to delete channel":"Échec de la suppression du canal","Failed to delete disabled channels":"Échec de la suppression des canaux désactivés","Failed to delete invalid redemption codes":"Échec de la suppression des codes d\'échange invalides","Failed to delete model":"Échec de la suppression du modèle","Failed to delete provider":"Échec de la suppression du fournisseur","Failed to delete redemption code":"Échec de la suppression du code d\'échange","Failed to delete user":"Échec de la suppression de l\'utilisateur","Failed to delete vendor":"Échec de la suppression du fournisseur","Failed to disable {{count}} model(s)":"Échec de la désactivation de {{count}} modèle(s)","Failed to disable 2FA":"Échec de la désactivation de la 2FA","Failed to disable channels":"Échec de la désactivation des canaux","Failed to disable model":"Échec de la désactivation du modèle","Failed to disable tag channels":"Échec de la désactivation des canaux de tags","Failed to discover OIDC endpoints":"Échec de la découverte des points de terminaison OIDC","Failed to enable {{count}} model(s)":"Échec de l\'activation de {{count}} modèle(s)","Failed to enable 2FA":"Échec de l\'activation de 2FA","Failed to enable channels":"Échec de l\'activation des canaux","Failed to enable model":"Échec de l\'activation du modèle","Failed to enable tag channels":"Échec de l\'activation des canaux de tags","Failed to fetch channel key":"Échec de la récupération de la clé du canal","Failed to fetch checkin status":"Échec de la récupération du statut d\'enregistrement","Failed to fetch deployment details":"Impossible de récupérer les détails du déploiement","Failed to fetch models":"Échec de la récupération des modèles","Failed to fetch OIDC configuration. Please check the URL and network status":"Échec de la récupération de la configuration OIDC. Veuillez vérifier l\'URL et le statut du réseau","Failed to fetch upstream prices":"Échec de la récupération des prix amont","Failed to fetch upstream ratios":"Échec de la récupération des ratios en amont","Failed to fetch usage":"Échec de la récupération de l\'utilisation","Failed to fetch user information":"Échec de la récupération des informations utilisateur","Failed to fix abilities":"Échec de la correction des capacités","Failed to generate token":"Échec de la génération du jeton","Failed to initialize OAuth":"Échec de l\'initialisation d\'OAuth","Failed to initialize system":"Échec de l\'initialisation du système","Failed to load":"Échec du chargement","Failed to load API keys":"Échec du chargement des Clés API","Failed to load billing history":"Échec du chargement de l\'historique de facturation","Failed to load home page content":"Échec du chargement du contenu de la page d\'accueil","Failed to load image":"Échec du chargement de l\'image","Failed to load key status":"Échec du chargement du statut des clés","Failed to load logs":"Échec du chargement des journaux","Failed to load Passkey status":"Échec du chargement du statut Passkey","Failed to load profile":"Échec du chargement du profil","Failed to load redemption codes":"Échec du chargement des codes d\'échange","Failed to load setup data":"Échec du chargement des données de configuration","Failed to load setup status":"Échec du chargement de l\'état de configuration","Failed to load tag data":"Échec du chargement des données de tags","Failed to load users":"Échec du chargement des utilisateurs","Failed to parse group items":"Échec de l\'analyse des éléments de groupe","Failed to parse JSON file: {{name}}":"Échec de l\'analyse du fichier JSON : {{name}}","Failed to query balance":"Échec de la requête de solde","Failed to refresh cache stats":"Échec de l\'actualisation des statistiques de cache","Failed to refresh credential":"Échec de l’actualisation des identifiants","Failed to regenerate backup codes":"Échec de la régénération des codes de sauvegarde","Failed to register Passkey":"Échec de l\'enregistrement du Passkey","Failed to remove Passkey":"Échec de la suppression de la Passkey","Failed to reset 2FA":"Échec de la réinitialisation de la 2FA","Failed to reset model ratios":"Échec de la réinitialisation des ratios du modèle","Failed to reset Passkey":"Échec de la réinitialisation de la Passkey","Failed to save":"Échec de la sauvegarde","Failed to save announcements":"Échec de la sauvegarde des annonces","Failed to save API info":"Échec de l\'enregistrement des informations API","Failed to save FAQ":"Échec de la sauvegarde de la FAQ","Failed to save Uptime Kuma groups":"Échec de la sauvegarde des groupes Uptime Kuma","Failed to search API keys":"Échec de la recherche des Clés API","Failed to search redemption codes":"Échec de la recherche des codes d\'échange","Failed to search users":"Échec de la recherche des utilisateurs","Failed to send verification code":"Échec de l\'envoi du code de vérification","Failed to set tag":"Échec de la définition de l\'étiquette","Failed to setup 2FA":"Échec de la configuration de 2FA","Failed to start {{provider}} login":"Échec du démarrage de la connexion {{provider}}","Failed to start Discord login":"Échec du démarrage de la connexion Discord","Failed to start GitHub login":"Échec du démarrage de la connexion GitHub","Failed to start LinuxDO login":"Échec du démarrage de la connexion LinuxDO","Failed to start OIDC login":"Échec du démarrage de la connexion OIDC","Failed to start Passkey login":"Impossible de démarrer la connexion Passkey","Failed to start Passkey registration":"Échec du démarrage de l\'enregistrement de la Passkey","Failed to start testing all channels":"Échec du démarrage du test de tous les canaux","Failed to sync prices":"Échec de la synchronisation des prix","Failed to sync ratios":"Échec de la synchronisation des ratios","Failed to test all channels":"Échec du test de tous les canaux","Failed to test channel":"Échec du test du canal","Failed to update all balances":"Échec de la mise à jour de tous les soldes","Failed to update API key":"Échec de la mise à jour de la Clé API","Failed to update API key status":"Échec de la mise à jour du statut de la Clé API","Failed to update balance":"Échec de la mise à jour du solde","Failed to update channel":"Échec de la mise à jour du canal","Failed to update models":"Échec de la mise à jour des modèles","Failed to update profile":"Échec de la mise à jour du profil","Failed to update provider":"Échec de la mise à jour du fournisseur","Failed to update redemption code":"Échec de la mise à jour du code de rachat","Failed to update redemption code status":"Échec de la mise à jour du statut du code de rachat","Failed to update setting":"Échec de la mise à jour du paramètre","Failed to update settings":"Échec de la mise à jour des paramètres","Failed to update tag":"Échec de la mise à jour de l\'étiquette","Failed to update user":"Échec de la mise à jour de l\'utilisateur","Failure keywords":"Mots-clés d\'échec","Fair":"Correct","Fallback t
107ier":"Palier de repli","FAQ":"FAQ","FAQ added. Click \\"Save Settings\\" to apply.":"FAQ ajouté. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","FAQ deleted. Click \\"Save Settings\\" to apply.":"FAQ supprimé. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","FAQ saved successfully":"FAQ enregistré avec succès","FAQ updated. Click \\"Save Settings\\" to apply.":"FAQ mis à jour. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","FastGPT":"FastGPT","Feature in development":"Fonctionnalité en développement","Fee":"Frais","Fee Amount":"Montant des frais","Fetch available models for:":"Récupérer les modèles disponibles pour :","Fetch from Upstream":"Récupérer depuis l\'amont","Fetch Models":"Récupérer les modèles","Fetched {{count}} model(s) from upstream":"{{count}} modèle(s) récupéré(s) depuis l\'amont","Fetched {{count}} models":"{{count}} modèles récupérés","Fetching prefill groups...":"Récupération des groupes de préremplissage...","Fetching upstream prices...":"Récupération des prix amont...","Fetching upstream ratios...":"Récupération des ratios amont...","field":"champ","Field Mapping":"Mappage de champs","Field passthrough controls":"Contrôles de transmission des champs","Field Path":"Chemin du champ","File":"Fichier","File Search":"Recherche de fichiers","Files to Retain":"Fichiers à conserver","Fill All Models":"Remplir tous les modèles","Fill Codex CLI / Claude CLI Templates":"Remplir les modèles Codex CLI / Claude CLI","Fill example (all channels)":"Remplir l\'exemple (tous les canaux)","Fill example (specific channels)":"Remplir l\'exemple (canaux spécifiques)","Fill in both Merchant ID and API Private Key before creating.":"Renseignez l’ID marchand et la clé privée API avant de créer.","Fill in the credentials above to begin.":"Renseignez les identifiants ci-dessus pour commencer.","Fill in the following info to create a new subscription plan":"Remplissez les informations suivantes pour créer un nouveau plan d\'abonnement","Fill Related Models":"Remplir les modèles associés","Fill Template":"Remplir le modèle","Fill Templates":"Remplir les modèles","Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format":"Remplit thoughtSignature uniquement pour les canaux Gemini/Vertex utilisant le format OpenAI","Filled {{count}} model(s)":"{{count}} modèle(s) rempli(s)","Filled {{count}} related model(s)":"{{count}} modèle(s) associé(s) rempli(s)","Filter":"Filtre","Filter by API key...":"Filtrer par clé API...","Filter by channel ID":"Filtrer par ID de canal","Filter by group":"Filtrer par groupe","Filter by Midjourney task ID":"Filtrer par ID de tâche Midjourney","Filter by model name...":"Filtrer par nom du modèle...","Filter by model...":"Filtrer par modèle...","Filter by name or ID...":"Filtrer par nom ou ID...","Filter by name, ID, or key...":"Filtrer par nom, ID ou clé...","Filter by name...":"Filtrer par nom...","Filter by price field":"Filtrer par champ de prix","Filter by ratio type":"Filtrer par type de ratio","Filter by request ID":"Filtrer par ID de requête","Filter by task ID":"Filtrer par ID de tâche","Filter by token name":"Filtrer par nom de jeton","Filter by username":"Filtrer par nom d\'utilisateur","Filter by username, name or email...":"Filtrer par nom d\'utilisateur, nom ou e-mail...","Filter Dashboard Models":"Filtrer les modèles du tableau de bord","Filter models by provider, group, type, endpoint, and tags.":"Filtrer les modèles par fournisseur, groupe, type, endpoint et tags.","Filter models by type, endpoint, vendor, group and tags":"Filtrer les modèles par type, point d\'accès, fournisseur, groupe et tags","Filter models...":"Filtrer les modèles...","Filter the model analytics view by time range and user.":"Filtrez la vue d’analyse des modèles par période et utilisateur.","Filter...":"Filtrer...","Filters":"Filtres","Filters active":"Filtres actifs","Final Consumed":"Consommation finale","Final cost = base × multiplier when conditions match":"Coût final = base × multiplicateur lorsque les conditions correspondent","Final price multiplier (0.95 = 5% discount":"Multiplicateur de prix final (0.95 = 5% de réduction","Finance":"Finance","Finish Time":"Heure de fin","First API request":"Première requête API","First/Last Frame to Video":"Première/Dernière image vers vidéo","Fix Abilities":"Corriger les capacités","Fixed abilities: {{success}} succeeded, {{fails}} failed":"Correction des capacités : {{success}} réussie(s), {{fails}} échouée(s)","Fixed price":"Prix fixe","Fixed price (USD)":"Prix fixe (USD)","Fixed request price":"Prix fixe par requête","Floating":"Flottant","FluentRead extension not detected. Please ensure it is installed and active.":"Extension FluentRead non détectée. Veuillez vous assurer qu\'elle est installée et activée.","Flush interval (minutes)":"Intervalle d’écriture (minutes)","Follow the guided steps to prepare your workspace before the first login.":"Suivez les étapes guidées pour préparer votre espace de travail avant la première connexion.","Font":"Police","Footer":"Pied de page","Footer text displayed at the bottom of pages":"Texte de pied de page affiché en bas des pages","footer.columns.about.links.aboutProject":"À propos du projet","footer.columns.about.links.contact":"Contactez-nous","footer.columns.about.links.features":"Fonctionnalités","footer.columns.about.title":"À propos de nous","footer.columns.docs.links.apiDocs":"Documentation API","footer.columns.docs.links.installation":"Guide d\'installation","footer.columns.docs.links.quickStart":"Démarrage rapide","footer.columns.docs.title":"Documentation","footer.columns.related.links.midjourney":"Midjourney-Proxy","footer.columns.related.links.newApiKeyTool":"new-api-key-tool","footer.columns.related.links.oneApi":"One API","footer.columns.related.title":"Projets liés","footer.defaultCopyright":"Tous droits réservés.","footer.newapi.projectAttributionSuffix":"Tous droits réservés. Conçu et développé par les contributeurs du projet.","For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment":"Pour les canaux ajoutés après le 10 mai 2025, pas besoin de supprimer \\".\\" des noms de modèles lors du déploiement","For private deployments, format: https://fastgpt.run/api/openapi":"Pour les déploiements privés, format : https://fastgpt.run/api/openapi","Force a syntactically valid JSON response":"Imposer une réponse JSON syntaxiquement valide","Force AUTH LOGIN":"Forcer AUTH LOGIN","Force Format":"Forcer le format","Force format response to OpenAI standard (OpenAI channel only)":"Forcer la réponse au format standard OpenAI (canal OpenAI uniquement)","Force JSON object or schema-conforming output":"Forcer une sortie JSON ou conforme à un schéma","Force SMTP authentication using AUTH LOGIN method":"Forcer l\'authentification SMTP en utilisant la méthode AUTH LOGIN","Force-disabled two-factor authentication for the user":"Authentification à deux facteur
107s désactivée de force pour l\'utilisateur","Forest Whisper":"Murmure forestier","Forgot password":"Mot de passe oublié","Forgot password?":"Mot de passe oublié ?","Form reset to saved values":"Formulaire réinitialisé aux valeurs enregistrées","Format":"Format","Format JSON":"Formater JSON","Format:":"Format :","Format: Access Key ID|Secret Access Key":"Format : Access Key ID|Secret Access Key","Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)":"Format : AccessKey|SecretKey (ou simplement ApiKey si l\'amont est New API)","Format: Ak|Sk|Region":"Format : Ak|Sk|Region","Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041":"Format : APIKey-AppId, par ex. fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041","Format: APIKey|SecretKey":"Format : APIKey|SecretKey","Format: APPID|APISecret|APIKey":"Format : APPID|APISecret|APIKey","Format: AppId|SecretId|SecretKey":"Format : AppId|SecretId|SecretKey","Forward requests directly to upstream providers without any post-processing.":"Transférer les requêtes directement aux fournisseurs amont sans aucun post-traitement.","Frames per second":"Images par seconde","Free: {{free}} / Total: {{total}}":"Disponible : {{free}} / Total : {{total}}","Friendly name to identify this channel":"Nom convivial pour identifier ce canal","From Address":"De l\'adresse","From IO.NET deployment":"Depuis le déploiement IO.NET","From model redirect, not yet added to models list":"Depuis la redirection du modèle, pas encore ajouté à la liste des modèles","Frontend Theme":"Thème du frontend","Full API Key":"Clé API complète","Full Base URL (supports":"URL de base complète (prend en charge","Full Code":"Code complet","Full input length":"Longueur complète de l’entrée","Full layout":"Disposition complète","Full width":"Pleine largeur","Function calling":"Appel de fonction","Functions":"Fonctions","GC Count":"Nombre de GC","GC executed":"GC exécuté","GC execution failed":"Échec de l\'exécution du GC","Gemini":"Gemini","Gemini Image 4K":"Gemini Image 4K","Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.":"Gemini continuera à détecter automatiquement le mode de pensée même avec l\'adaptateur désactivé. Activez ceci uniquement lorsque vous avez besoin d\'un contrôle plus fin sur la tarification et le budget.","General":"Général","General Settings":"Paramètres généraux","Generate and manage your API access token":"Générer et gérer votre jeton d\'accès API","Generate Lyrics":"Générer des paroles","Generate Music":"Générer de la musique","Generate new backup codes for account recovery":"Générer de nouveaux codes de secours pour la récupération du compte","Generate New Codes":"Générer de nouveaux codes","Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.":"Générez des jetons depuis la page Jetons ; vous pouvez les restreindre par modèle, groupe, IP et limites de débit.","Generated image":"Image générée","Generating new codes will invalidate all existing backup codes.":"La génération de nouveaux codes invalidera tous les codes de sauvegarde existants.","Generating...":"Génération...","Generation quality preset":"Préréglage de qualité de génération","Generic cache":"Cache générique","Get notified when balance falls below this value":"Recevoir une notification lorsque le solde tombe en dessous de cette valeur","Get one here":"Obtenir ici","Get started":"Commencer","Get Started":"Commencer","GitHub":"GitHub","Give the group a recognizable name and optional description.":"Donnez au groupe un nom reconnaissable et une description facultative.","Give this group a recognizable name.":"Donnez un nom reconnaissable à ce groupe.","Global configuration and administrative tools.":"Configuration globale et outils d\'administration.","Global Coverage":"Couverture mondiale","Global Model Configuration":"Configuration globale du modèle","Global throughput":"Débit global","Go Back":"Retour","Go back and edit":"Retour et modifier","Go to Dashboard":"Aller au tableau de bord","Go to first page":"Aller à la première page","Go to home":"Retour à l\'accueil","Go to io.net API Keys":"Accéder aux clés API io.net","Go to last page":"Aller à la dernière page","Go to 
107next page":"Aller à la page suivante","Go to page {{page}}":"Aller à la page {{page}}","Go to previous page":"Aller à la page précédente","Go to settings":"Aller aux paramètres","Go to Settings":"Aller aux paramètres","Good":"Bon","Gotify Application Token":"Jeton d\'application Gotify","Gotify Documentation":"Documentation Gotify","Gotify Server URL":"URL du serveur Gotify","gpt-3.5-turbo":"gpt-3.5-turbo","gpt-3.5-turbo-0125":"gpt-3.5-turbo-0125","gpt-4":"gpt-4","gpt-4, claude-3-opus, etc.":"gpt-4, claude-3-opus, etc.","GPU count":"Nombre de GPU","Greater than":"Supérieur à","Greater Than":"Supérieur à","Greater than or equal":"Supérieur ou égal","Greater Than or Equal":"Supérieur ou égal","Grok":"Grok","Grok Settings":"Paramètres Grok","Group":"Groupe","Group & Quota":"Groupe et Quota","Group added. Click \\"Save Settings\\" to apply.":"Groupe ajouté. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","Group channels by tag for batch operations":"Regrouper les canaux par étiquette pour les opérations par lots","Group config overrides global limits, shares the same period":"La configuration du groupe annule les limites globales et partage la même période","Group deleted. Click \\"Save Settings\\" to apply.":"Groupe supprimé. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","Group description":"Description du groupe","Group details":"Détails du groupe","Group identifier":"Identifiant du groupe","Group is required":"Le groupe est requis","Group name":"Nom du groupe","Group Name":"Nom du groupe","Group name cannot be changed when editing.":"Le nom du groupe ne peut pas être modifié lors de la modification.","Group prices cannot be expanded because this expression is not a standard tiered pricing expression.":"Les prix par groupe ne peuvent pas être détaillés car cette expression n\'est pas une expression tarifaire par paliers standard.","Group Pricing":"Tarification des groupes","Group pricing usage guide":"Guide d\'utilisation des groupes tarifaires","group ratio":"ratio de groupe","Group Ratio":"Ratio de groupe","Group ratios":"Ratios de groupe","Group updated. Click \\"Save Settings\\" to apply.":"Groupe mis à jour. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","Group-based rate limits":"Limites de débit basées sur le groupe","Group:":"Groupe :","Group: {{ratio}}x":"Groupe : {{ratio}}x","Grouped monitor status from Uptime Kuma":"État des moniteurs groupés depuis Uptime Kuma","Groups":"Groupes","Groups *":"Groupes *","Groups that users can select when creating API keys.":"Groupes que les utilisateurs peuvent sélectionner lors de la création de clés API.","Growth":"Croissance","Guardrails":"Garde-fous","Guest":"Invité","h":"h","Haiku Model":"Modèle Haiku","Hang tight while we finish connecting your account.":"Patientez pendant que nous terminons la connexion de votre compte.","Hang tight while we securely link this account to your profile.":"Patientez pendant que nous lions en toute sécurité ce compte à votre profil.","Hardware":"Matériel","Hardware type":"Type de matériel","Has been disabled":"Désactivé avec succès","Has been enabled":"Activé avec succès","Has been invalidated":"Invalidé avec succès","Have a Code?":"Vous avez un code ?","Header":"En-tête","header instead.":".","Header Name":"Nom de l’en-tête","Header navigation":"Navigation d\'en-tête","Header Override":"Remplacement d\'en-tête","Header Passthrough (X-Request-Id)":"Passthrough en-tête (X-Request-Id)","Header Value (supports string or JSON mapping)":"Valeur de l\'en-tête (chaîne ou mappage JSON)","header. Anthropic-formatted endpoints accept the":". Les points de terminaison au format Anthropic acceptent à la place","Health":"Santé","Healthy":"Normal","Hidden — verify to reveal":"Masqué — vérifiez pour révéler","Hide":"Masquer","Hide API key":"Masquer la clé API","Hide setup guide":"Masquer le guide de configuration","High Performance":"Hautes performances","High-risk operation confirmation":"Confirmation d\'opération à haut risque","High-risk status code retry confirmation text":"JE CONFIRME","High-risk status code retry input mismatch":"Le texte saisi 
107ne correspond pas, veuillez réessayer.","High-risk status code retry input placeholder":"Veuillez saisir le texte de confirmation ci-dessus","High-risk status code retry risk check 1":"Je comprends que la relance sur ces codes d\'état peut entraîner des frais normaux facturés par le fournisseur en amont, et que ces frais ne peuvent pas être récupérés.","High-risk status code retry risk check 2":"Je comprends que ces codes d\'état indiquent généralement que la requête a été traitée avec succès par le fournisseur, et que la relance peut entraîner une double facturation.","High-risk status code retry risk check 3":"Je reconnais que ces configurations peuvent entraîner des pertes financières importantes et j\'accepte tous les risques associés.","High-risk status code retry risk check 4":"J\'ai soigneusement vérifié les règles de redirection de codes d\'état ci-dessus et confirme qu\'elles sont correctes.","High-risk status code retry risk disclaimer":"Les règles de redirection suivantes contiennent des configurations à haut risque. La relance sur ces codes d\'état peut entraîner des frais normaux en amont non récupérables. Veuillez vérifier soigneusement.","Higher priority channels are selected first":"Les canaux de priorité plus élevée sont sélectionnés en premier","Historical Usage":"Utilisation historique","History of Midjourney-style image tasks.":"Historique des tâches d\'images style Midjourney.","Hit criteria: If cached tokens exist in usage, it counts as a hit.":"Critère de hit : si des tokens en cache existent dans l\'utilisation, cela compte comme un hit.","Hit Rate":"Taux de succès","Hit tier":"Palier atteint","Home":"Accueil","Home Page Content":"Contenu de la page d\'accueil","Hostname or IP of your SMTP provider":"Nom d\'hôte ou IP de votre fournisseur SMTP","Hour":"Heure","Hour of day":"Heure du jour","Hourly token usage by model across the last 24 hours":"Utilisation horaire des tokens par modèle sur les dernières 24 heures","Hourly token usage by model over the past 24 hours":"Utilisation horaire de tokens par modèle sur les dernières 24 heures","hours":"heures","How client credentials are sent to the token endpoint":"Comment les informations d\'identification client sont envoyées au point de terminaison de jeton","How frequently the system tests all channels":"Fréquence à laquelle le système teste tous les canaux","How It Works":"Comment ça marche","How model mapping works":"Fonctionnement du mappage des modèles","How much to charge for each US dollar of balance (Epay)":"Montant à facturer pour chaque dollar US de solde (Epay)","How this model name should match requests":"Comment ce nom de modèle doit correspondre aux requêtes","How to deliver the resulting image":"Comment délivrer l\'image résultante","How to get an io.net API Key":"Comment obtenir une clé API io.net","How to reset my quota?":"Comment réinitialiser mon quota ?","How to select keys: random or sequential polling":"Comment sélectionner les clés : sondage aléatoire ou séquentiel","How will you use the platform?":"Comment allez-vous utiliser la plateforme ?","https://api.day.app/yourkey/{{title}}/{{content}}":"https://api.day.app/yourkey/{{title}}/{{content}}","https://api.example.com":"https://api.example.com","https://ark.ap-southeast.bytepluses.com":"https://ark.ap-southeast.bytepluses.com","https://ark.cn-beijing.volces.com":"https://ark.cn-beijing.volces.com","https://cloud.siliconflow.cn/i/hij0YNTZ":"https://cloud.siliconflow.cn/i/hij0YNTZ","https://docs.example.com":"https://docs.example.com","https://example.com":"https://example.com","https://example.com/logo.png":"https://example.com/logo.png","https://example.com/qr-code.png":"https://example.com/qr-code.png","https://example.com/topup":"https://example.com/topup","https://example.com/webhook":"https://example.com/webhook","https://gateway.example.com":"https://gateway.example.com","https://github.com/QuantumNous/new-api":"https://github.com/QuantumNous/new-api","https://gotify.example.com":"https://gotify.example.com","https://pay.example.com":"https://pay.example.com","https://provider.com/.well-known/openid-configuration":"https://provider.com/.well-known/openid-configuration","https://status.example.com":"https://status.example.com","https://wechat-server.example.com":"https://wechat-server.example.com","https://worker.example.workers.dev":"https://worker.example.workers.dev","https://your-server.example.com":"https://votre-serveur.example.com","Human-readable name shown to users during Passkey prompts.":"Nom lisible par l\'homme affiché aux utilisateurs lors des invites de clé d\'accès (Passkey).","I confirm enabling high-risk retry":"Je confirme l\'activation de la relance à haut risque","I have read and agree to the":"J\'ai lu et j\'accepte les","I have read and understood the above compliance reminder":"J’ai lu et 
107compris le rappel de conformité ci-dessus","I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.":"J’ai lu et compris le rappel de conformité ci-dessus, je reconnais les risques juridiques associés et confirme assumer la responsabilité juridique liée au déploiement, à l’exploitation et à la facturation.","I understand that disabling 2FA will remove all protection and backup codes":"Je comprends que la désactivation de la 2FA supprimera toute protection et les codes de secours","Icon":"Icône","Icon file must be 100 KB or smaller":"Le fichier icône doit être de 100 Ko ou moins","Icon identifier (e.g. github, gitlab)":"Identifiant d\'icône (par exemple github, gitlab)","ID":"ID","If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.":"Si une erreur en amont contient l\'un de ces mots-clés (insensible à la casse), le canal sera désactivé automatiquement.","If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.":"Si l\'autorisation réussit, le JSON généré sera inséré dans le champ clé. Vous devez encore enregistrer le canal pour le conserver.","If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know what you are doing":"Si vous vous connectez à des projets de relais One API ou New API en amont, utilisez le type OpenAI à la place sauf si vous savez ce que vous faites","If default auto group is enabled, newly created tokens start with auto instead of an empty group.":"Si le groupe auto par défaut est activé, les nouveaux jetons commencent avec auto au lieu d’un groupe vide.","If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.":"Si le canal affinitaire échoue et qu\'une nouvelle tentative réussit sur un autre canal, mettre à jour l\'affinité vers le canal ayant réussi.","If this keeps happening, please report it on GitHub Issues.":"Si cela continue, veuillez le signaler sur GitHub Issues.","If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.":"Si vous fournissez des services d’IA générative au public en Chine continentale, vous remplirez les obligations légales applicables, notamment le dépôt, l’évaluation de sécurité, la sécurité du contenu, le traitement des plaintes, l’étiquetage du contenu généré, la conservation des journaux et la protection des informations personnelles.","Ignored upstream models":"Modèles amont ignorés","Image":"Image","Image Generation":"Génération d\'images","Image In":"Entrée d’image","Image input":"Entrée image","Image input price":"Prix d’entrée image","Image Out":"Sortie d’image","Image output price":"Prix de sortie image","Image Preview":"Aperçu de l\'image","Image ratio":"Ratio d\'image","Image to Video":"Image vers vidéo","Image Tokens":"Tokens image","Import to CC Switch":"Importer vers CC Switch","In Progress":"En cours","In:":"Entrée :","incident":"incident","incidents":"incidents","Incidents":"Incidents","Include Group":"Inclure le groupe","Include Model":"Inclure le modèle","Include Rule Name":"Inclure le nom de la règle","Includes request rules":"Inclut des règles de requête","Including failed requests, 0 = unlimited":"Y compris les requêtes échouées, 0 = illimité","Increased user quota by {{quota}}":"Quota de l\'utilisateur augmenté de {{quota}}","Index":"Index","Initial quota given to new users":"Quota initial donné aux nouveaux utilisateurs","Initialization failed, please try again.":"L\'initialisation a échoué, veuillez réessayer.","Initialize":"Initialiser","Initialize system":"Initialiser le système","Initializing…":"Initialisation…","Inpaint":"Inpainting","Input":"Entrée","Input mode":"Mode d\'entrée","Input price":"Prix d’entrée","Input price is required before saving dependent prices.":"Le prix d’entrée est requis avant d’enregistrer les prix dépendants.","Input tokens":"Jetons d’entrée","Input Tokens":"Tokens d\'entrée","Inset":"Encastré","Inspect requests, errors, and billing details":"Inspecter les requêtes, les erreurs et les détails de facturation","Inspect user prompts":"Inspecter les invites utilisateur","Instance":"Instance","Insufficient balance":"Solde insuffisant","Integrations":"Intégrations","Inter-group overrides":"Dérogations inter-groupes","Inter-group ratio overrides":"Dérogations de ratio inter-groupes","Interface Language":"Langue de l\'interface","Internal Notes":"Notes internes","Internal notes (not shown to users)":"Notes internes (non visibles par les utilisateurs)","Internal Server Error!":"Erreur interne du serveur !","Invalid chat link. Please contact the administrator.":"Lien de chat invalide. Veuillez contacter l\'administrateur.","Invalid chat link. Please contact your administrator.":"Lien de chat invalide. Veuillez contacter votre administrateur.","Invalid code":"Code invalide","Invalid JSON":"JSON invalide","Invalid JSON format":"Format JSON invalide","Invalid JSON format or values out of allowed range":"Format JSON invalide ou valeurs hors plage autorisée","Invalid JSON in parameter override template":"JSON invalide dans le modèle de remplacement de paramètres","Invalid JSON string.":"Chaîne JSON invalide.","Invalid model mapping format":"Format de mappage de modèle invalide","Invalid Passkey registration response":"Réponse d\'enregistrement de passe-clé invalide","Invalid Passkey response":"Réponse Passkey invalide","Invalid payment redirect URL":"URL de redirection de paiement non valide","Invalid reset link, please request a new password reset":"Lien de réinitialisation invali
107de, veuillez demander une nouvelle réinitialisation de mot de passe","Invalid reset link, please request a new password reset.":"Lien de réinitialisation invalide, veuillez demander une nouvelle réinitialisation du mot de passe.","Invalid rules JSON format":"Format JSON des règles invalide","Invalid status code mapping entries: {{entries}}":"Entrées de mappage de code d\'état invalides : {{entries}}","Invalidate":"Invalider","Invalidated":"Invalidé","Invert match":"Inverser la correspondance","Invitation Code":"Code d\'invitation","Invitation Quota":"Quota d\'invitation","Invite Info":"Informations sur l\'invitation","Invited":"Invité","Invited by user ID":"Invité par l\'ID utilisateur","Invited Users":"Utilisateurs invités","Invitee Reward":"Récompense de l\'invité","Inviter":"Inviteur","Inviter Reward":"Récompense de l\'inviteur","Invites":"Invitations","Invoke developer-defined functions with structured arguments":"Appeler des fonctions définies par le développeur avec des arguments structurés","io.net API Key":"Clé API io.net","io.net Deployments":"Déploiements io.net","IP":"IP","IP Address":"Adresse IP","IP Filter Mode":"Mode de filtre IP","IP Restriction":"Restriction IP","IP Whitelist (supports CIDR)":"Liste blanche IP (supporte CIDR)","is less than the configured maximum cache size":"est inférieur à la taille maximale du cache configurée","is the default price; ":"est le prix par défaut ; ","It seems like the page you\'re looking for":"Il semble que la page que vous recherchez","Items":"Éléments","Japanese":"Japonais","Jimeng":"Jimeng","Jina":"Jina","JSON":"JSON","JSON array of group identifiers. When enabled below, new tokens rotate through this list.":"Tableau JSON d\'identifiants de groupe. Lorsqu\'il est activé ci-dessous, les nouveaux jetons alternent dans cette liste.","JSON Editor":"Édition JSON","JSON format error":"Erreur de format JSON","JSON format supports service account JSON files":"Le format JSON prend en charge les fichiers JSON de compte de service","JSON is invali
107d at line {{line}}, column {{column}}.":"Le JSON est invalide à la ligne {{line}}, colonne {{column}}.","JSON is invalid at position {{position}}.":"Le JSON est invalide à la position {{position}}.","JSON is invalid. Please check the syntax.":"Le JSON est invalide. Veuillez vérifier la syntaxe.","JSON map of group → description exposed when users create API keys.":"Carte JSON de groupe → description exposée lorsque les utilisateurs créent des clés API.","JSON map of group → ratio applied when the user selects the group explicitly.":"Carte JSON de groupe → ratio appliqué lorsque l\'utilisateur sélectionne explicitement le groupe.","JSON map of model → multiplier applied to quota billing.":"Carte JSON de modèle → multiplicateur appliqué à la facturation par quota.","JSON map of model → USD cost per request. Takes precedence over ratio based billing.":"Carte JSON de modèle → coût en USD par requête. Prend le pas sur la facturation basée sur le ratio.","JSON mode":"Mode JSON","JSON Mode":"Mode JSON","JSON must be an object":"Le JSON doit être un objet","JSON object:":"Objet JSON :","JSON structure is invalid":"La structure JSON est invalide","JSON Text":"Texte JSON","JSON-based access control rules. Leave empty to allow all users.":"Règles de contrôle d\'accès basées sur JSON. Laisser vide pour autoriser tous les utilisateurs.","Just now":"À l\'instant","JustSong":"JustSong","K":"K","Keep affinity when channel is disabled":"Conserver l\'affinité lorsque le canal est désactivé","Keep enabled if you need to proxy requests for different upstream accounts.":"Gardez activé si vous devez proxifier les requêtes pour différents comptes en amont.","Keep enough balance before production traffic":"Gardez un solde suffisant avant le trafic de production","Keep original value":"Conserver la valeur originale","Keep original value (skip if target exists)":"Conserver la valeur originale (ignorer si la cible existe)","Keep the platform ready":"Gardez la plateforme prête","Keep this above 1 minute to avoid heavy database load":"Gardez cette valeur au-dessus de 1 minute pour éviter une charge excessive de la base de données","Keep-alive Ping":"Ping de maintien de connexion","Key":"Clé","Key Fingerprint":"Empreinte de clé","Key Sources":"Sources de clé","Key Summary":"Résumé de clé","Key Update Mode":"Mode de mise à jour de la clé","Keys, OAuth credentials, and multi-key update behavior.":"Clés, identifiants OAuth et comportement de mise à jour multi-clés.","Kling":"Kling","Knowledge Base ID *":"ID de la base de connaissances *","Knowledge cutoff":"Date de coupure des connaissances","Lake View":"Vue du lac","Landing page with system overview.":"Page d\'accueil avec aperçu du système.","Language preference saved":"Préférence de langue enregistrée","Language Preferences":"Préférences de langue","Language preferences sync across your signed-in devices and affect API error messages.":"Les préférences de langue se synchronisent sur vos appareils connectés et affectent les messages d\'erreur de l\'API.","Last 24h usage":"Utilisation 24h","Last 30 days uptime":"Disponibilité 30 derniers jours","Last check time":"Dernière vérification","Last detected addable models":"Derniers modèles ajoutables détectés","Last Login":"Dernière connexion","Last Seen":"Dernière fois","Last Tested":"Dernier testé","Last updated:":"Dernière mise à jour :","Last Used":"Dernière utilisation","Last used:":"Dernière utilisation :","Latency":"Latence","Latency check":"Contrôle de latence","Latency short":"Lat.","Latency trend (last 24h)":"Tendance de latence (24 dernières heures)","Latest platform updates and notices":"Dernières mises à jour et annonces de la plateforme","Lavender Dream":"Rêve de lavande","Layout":"Disposition","lead":"tête","Leaderboards":"Classements","Learn more":"En savoir plus","Learn more:":"En savoir plus :","Leave":"Quitter","Leave blank to keep the existing credential":"Laissez vide pour conserver l\'identifiant existant","Leave blank to keep the existing key":"Laisser vide pour conserver la clé existante","Leave blank unless rotating the secret":"Laissez vide, sauf si vous faites pivoter le secret","Leave empty for never expires":"Laissez vide pour qu\'il n\'expire jamais","Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Laissez vide pour désactiver l\'exigence d\'accord. Prend en charge Markdown, HTML ou une URL complète pour rediriger les utilisateurs.","Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Laissez vide pour désactiver l\'exigence de politique de confidentialité. Prend en charge Markdown, HTML ou une URL complète pour rediriger les utilisateurs.","Leave empty to disband the tag":"Laissez vide pour dissoudre l\'étiquette","Leave empty to keep existing key":"Laissez vide pour conserver la clé existante","Leave empty to keep unchanged":"Laissez vide pour conserver inchangé","Leave empty to use account email":"Laissez vide pour utiliser l\'e-mail du compte","Leave empty to use default":"Laisser vide pour utiliser la valeur par défaut","Leave empty to use system temp directory":"Laisser vide pour utiliser le répertoire temporaire","Leave empty to use username":"Laissez vide pour utiliser le nom d\'utilisateur","Left to Right":"De gauche à droite","Legacy Format (JSON Object)":"Ancien format (objet JSON)","Legacy format must be a JSON object":"L\'ancien format doit être un objet JSON","Legacy Format Template":"Modèle ancien format","Legal":"Juridique","Less":"Moins","Less than":"Inférieur à","Less Than":"Inférieur à","Less than 1 day left":"Moins d\'un jour restant","Less than or equal":"Inférieur ou égal","Less Than or Equal":"Inférieur ou égal","License":"Licence","Light":"Clair","Lightning Fast":"Extrêmement rapide","Limit period":"Période de limite","Limit Reached":"Limite atteinte","Limit which models can be used with this key":"Limiter les modèles pouvant être utilisés avec cette clé","Limited":"Limité","LingYiWanWu":"LingYiWanWu","Link to your documentation site":"Lien vers votre site de documentation","LinuxDO":"LinuxDO","LinuxDO Client ID":"ID client LinuxDO","LinuxDO Client Secret":"Secret 
107client LinuxDO","List of models supported by this channel. Use comma to separate multiple models.":"Liste des modèles pris en charge par ce canal. Utilisez une virgule pour séparer plusieurs modèles.","List of origins (one per line) allowed for Passkey registration and authentication.":"Liste des origines (une par ligne) autorisées pour l\'enregistrement et l\'authentification des clés d\'accès (Passkey).","List view":"Vue en liste","LLM Leaderboard":"Classement des LLM","LLM prompt helper":"Assistant prompt LLM","Load Balancing":"Équilibrage de charge","Load template...":"Charger le modèle...","Loader":"Chargeur","Loading":"Chargement","Loading channel details":"Chargement des détails du canal","Loading configuration":"Chargement de la configuration","Loading content settings...":"Chargement des paramètres de contenu...","Loading current models...":"Chargement des modèles actuels...","Loading failed":"Échec du chargement","Loading maintenance settings...":"Chargement des paramètres de maintenance...","Loading settings...":"Chargement des paramètres...","Loading setup status…":"Chargement du statut de configuration…","Loading...":"Chargement...","Local":"Local","Local Billing":"Facturation locale","Local models":"Modèles locaux","Locations":"Emplacements","Locked":"Verrouillé","log":"journal","Log Details":"Détails du journal","Log Directory":"Répertoire des journaux","Log File Count":"Nombre de fichiers journaux","Log files older than {{value}} days will be deleted.":"Les fichiers journaux de plus de {{value}} jours seront supprimés.","Log IP address for usage and error logs":"Enregistrer l\'adresse IP pour les journaux d\'utilisation et d\'erreurs","Log Maintenance":"Maintenance des journaux","Log Type":"Type de journal","Logged in successfully via {{method}}":"Connexion réussie via {{method}}","Logic":"Logique","Login":"Connexion","Login failed":"Échec de la connexion","Login Info":"Informations de connexion","Login Method":"Méthode de connexion","Logo":"Logo","Logo URL":"URL du logo","Logs":"Journaux","Low balance":"Solde faible","Lowest median first-token latency":"Latence médiane de premier jeton la plus faible","m":"m","Maintenance":"Maintenance","Make it easier for teammates to pick the right group.":"Faciliter le choix du bon groupe pour les coéquipiers.","Manage":"Gestion","Manage account bindings for this user":"Gérer les liaisons de compte pour cet utilisateur","Manage Bindings":"Gérer les liaisons","Manage catalog visibility and pricing.":"Gérer la visibilité du catalogue et les prix.","Manage custom OAuth providers for user authentication":"Gérer les fournisseurs OAuth personnalisés pour l\'authentification des utilisateurs","Manage Keys":"Gérer les clés","Manage local models for:":"Gérer les modèles locaux pour :","Manage multi-key status and configuration for this channel":"Gérer le statut multi-clés et la configuration pour ce canal","Manage Ollama Models":"Gérer les modèles Ollama","Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.":"Gérer les fichiers journaux du serveur. Les fichiers journaux s\'accumulent au fil du temps ; un nettoyage régulier est recommandé.","Manage subscription plans and pricing.":"Gérer les plans d\'abonnement et les tarifs.","Manage Subscriptions":"Gérer les abonnements","Manage Vendors":"Gérer les fournisseurs","Manage your security settings and account access":"Gérer vos paramètres de sécurité et l\'accès à votre compte","Manual Disabled":"Désactivé manuellement","Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).":"Mapper les champs de la réponse des informations utilisateur vers les attributs utilisateur locaux. Supporte les chemins imbriqués (par exemple ocs.data.id).","Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.":"Mapper les identifiants de modèle aux versions de l\'API Gemini. Une entrée `default` s\'applique lorsqu\'aucune correspondance spécifique n\'est trouvée.","Map request model names to actual provider model names (JSON format)":"Mapper les noms de modèles de requête aux noms réels de modèles du fournisseur (format JSON)","Map response status codes (JSON format)":"Mapper les codes de statut de réponse (format JSON)","Map upstream status codes to different c
107odes":"Mapper les codes de statut amont à différents codes","Market Share":"Part de marché","Marketing":"Marketing","Match All (AND)":"Toutes (AND)","Match Any (OR)":"N\'importe laquelle (OR)","Match Mode":"Mode de correspondance","Match model name exactly":"Correspondance exacte du nom du modèle","Match models containing this name":"Correspondance des modèles contenant ce nom","Match models ending with this name":"Correspondance des modèles se terminant par ce nom","Match models starting with this name":"Correspondance des modèles commençant par ce nom","Match Text":"Texte à rechercher","Match Type":"Type de correspondance","Match Value":"Valeur de correspondance","Match Value (optional)":"Valeur de correspondance (optionnel)","Matched":"Correspondant","Matched Tier":"Palier correspondant","Matching Rules":"Règles de correspondance","Max Disk Cache Size (MB)":"Taille max du cache disque (Mo)","Max Entries":"Entrées max","Max output":"Sortie max","Max Requests (incl. failures)":"Max Requêtes (incl. échecs)","Max Requests (including failures)":"Max Requêtes (incluant les échecs)","Max requests per period":"Nombre max de requêtes par période","Max Success":"Max Succès","Max successful requests":"Nombre max de requêtes réussies","Max Successful Requests":"Max Requêtes réussies","Maximum 1000 characters. Supports Markdown and HTML.":"Maximum 1000 caractères. Prend en charge Markdown et HTML.","Maximum 200 characters":"Maximum 200 caractères","Maximum 500 characters. Supports Markdown and HTML.":"Maximum 500 caractères. Prend en charge Markdown et HTML.","Maximum check-in quota":"Quota maximum de connexion","Maximum input window":"Fenêtre d\'entrée maximale","Maximum number of tokens in the response":"Nombre maximum de jetons dans la réponse","Maximum quota amount awarded for check-in":"Montant maximum de quota attribué pour la connexion","Maximum tokens including hidden reasoning tokens":"Jetons maximum, y compris les jetons de raisonnement masqués","Maximum tokens per response":"Nombre maximal de jetons par réponse","maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647":"maxRequests ≥ 0, maxSuccess ≥ 1, les deux ≤ 2 147 483 647","May be used for training by upstream provider":"Peut être utilisé pour l\'entraînement par le fournisseur amont","Media pricing":"Tarification multimédia","Median time-to-first-token (TTFT) sampled hourly per group":"Latence médiane jusqu\'au premier jeton (TTFT) échantillonnée par heure et par groupe","Medical Q&A, mental health support":"Q&R médicales, soutien en santé mentale","Memory Hits":"Hits mémoire","Memory Threshold (%)":"Seuil mémoire (%)","Merchant ID":"ID du commerçant","Merchant ID is required":"L\'ID marchand est requis","Message Priority":"Priorité du message","Metadata":"Métadonnées","Midjourney":"Midjourney","MidjourneyPlus":"MidjourneyPlus","min downtime":"min d\'interruption","Min Top-up":"Recharge min.","Min Top-up:":"Recharge min. :","MiniMax":"MiniMax","Minimum check-in quota":"Quota minimum de connexion","Minimum LinuxDO trust level required":"Niveau de confiance minimum LinuxDO requis","Minimum quota amount awarded for check-in":"Montant minimum de quota attribué pour la connexion","Minimum recharge amount in USD":"Montant de recharge minimum en USD","Minimum recharge amount to qualify for this discount.":"Montant minimum de recharge pour bénéficier de cette remise.","Minimum top-up (optional)":"Recharge minimum (facultatif)","Minimum top-up (USD)":"Recharge minimum (USD)","Minimum top-up amount must be at least 1":"Le montant minimum de recharge doit être d\'au moins 1","Minimum top-up quantity":"Quantité minimale de recharge","Minimum topup amount: {{amount}}":"Montant minimum de recharge : {{amount}}","Minimum Trust Level":"Niveau de confiance minimum","Minimum:":"Minimum :","Minor blips in the last 30 days":"Légères perturbations sur les 30 derniers jours","Mint a fresh pair below — or pick an existing one further down. Click Save when ready.":"Créez une nouvelle paire ci-dessous, ou choisissez une paire existante plus bas. Cliquez sur Enregistrer lorsque vous êtes prêt.","Minute":"Minute","minutes":"minutes","Missing code":"Code manquant","Missing Models":"Modèles manquants","Missing user data from Passkey login response":"Données utilisateur manquantes de la réponse de connexion Passkey","Mistral":"Mistral","Modalities":"Modalités","Modality":"Modalité","Mode":"Mode","model":"modèle","Model":"Modèle","Model Access":"Accès au modèle","Model Analytics":"Analyse des modèles","Model Analytics Defaults":"Paramètres par défaut de l’analyse des modèles","Model Analytics Filters":"Filtres d’analyse des modèles","model billing support":"prise en charge de la facturation des modèles","Model Call Analytics":"Analyse des appels de modèles","Model context usage":"Utilisation du contexte du modèle","Model deleted":"Modèle supprimé","Model deleted successfully":"Modèle supprimé avec succès","Model Deployment":"Déploiement de modèles","Model deployment service is disabled":"Le service de déploiement de modèles est désactivé","Model Description":"Description du modèle","Model details":"Détails du modèle","Model disabled successfully":"Modèle désactivé avec succès","Model enabled successfully":"Modèle activé avec succès","Model fixed pricing":"Tarification fixe du modèle","Model Group":"Groupe de modèles","Model Limits":"Limites du modèle","Model Mapping":"Mappage de modèle","Model Mapping (JSON)":"Mappage de modèle (JSON)","Model Mapping must be a JSON object like":"Le mappage de modèle doit être un objet JSON tel que","Model mapping must be a JSON object with string values":"Le mappage de modèles doit être un objet JSON avec des valeurs de chaîne","Model mapping must be valid JSON":"La cartographie des modèles doit être un JSON valide","Model mapping values must be strings":"Les valeurs du mappage de modèles doivent être des chaînes","Model name":"Nom du modèle","Model Name":"Nom du modèle","Model Name *":"Nom du modèle *","Model name is required":"Le nom du modèle est requis","Model names copied to clipboard":"Noms des modèles copiés dans le presse-papiers","Model not found":"Modèle introuvable","Model performance metrics":"Indicateurs de performance des modèles","Model Price":"Prix du modèle","Model price is not configured. Please complete model pricing in settings.":"Le prix du modèle n\'est pas configuré. Veuillez compléter la tarification du modèle dans les paramètres.","Model Price Not Configured":"Prix du modèle non configuré","Model prices":"Prix des modèles","Model prices reset successfully":"Prix des modèles réinitialisés avec succès","Model Pricing":"Tarification des modèles","Model pull failed: {{msg}}":"Échec du téléchargement du modèle : {{msg}}","Model ratio":"Ratio modèle","Model ratios":"Ratios de modèle","Model ratios reset successfully":"Ratios des modèles réinitialisés avec succès","Model Regex":"Regex du modèle","Model Regex (one per line)":"Regex du modèle (un par ligne)","Model selected":"Modèle sélectionné","Model Square":"Place des modèles","Model Tags":"Tags de modèle","Model to use for testing":"Modèle à utiliser pour les tests","Model to use when testing channel connectivity":"Modèle à utiliser lors du test de la connectivité du canal","Model Version *":"Version du modèle *","model(s) selected out of":"modèle(s) sélectionné(s) parmi","model(s)? This action cannot be undone.":"modèle(s) ? Cette action ne peut pas être annulée.","models":"modèles","Models":"Modèles","Models *":"Modèles *","Models & Groups":"Modèles & Groupes","Models & Routing":"Modèles et routage","Models appended successfully":"Modèles ajoutés avec succès","Models are required":"Les modèles sont requis","Models climbing the leaderboard":"Modèles qui montent au classement","Models climbing the leaderboard fastest":"Modèles qui grimpent le plus vite au classement","Models directory":"Répertoire des modèles","Models Directory":"Répertoire des modèles","Models fetched successfully":"Modèles récupérés avec succès","Models filled to form":"Modèles remplis pour le formulaire","Models listed here will not automatically append or remove -thinking / -nothinking suffixes.":"Les modèles listés ici n\'ajouteront ni ne supprimeront automatiquement les suffixes -thinking / -nothinking.","Models losing positions":"Modèles perdant des positions","Models losing the most positions":"Modèles qui perdent le plus de places","Models not in list, may fail to invoke":"Modèles non listés, peut échouer lors de l\'invocation","Models that are being used but not configured in the system":"Modèles utilisés mais non configurés dans le système","Models that skip thinking suffix processing":"Modèles qui ignorent le traitement des suffixes thinking","Models updated successfully":"Modèles mis à jour avec succès","Modify existing subscription plan configuration":"Modifier la configuration du plan d\'abonnement existant","Module availability":"Disponibilité du module","MokaAI":"MokaAI","Monitor":"Surveiller","Monitor balance, usage, and request volume":"Surveillez le solde, l\'utilisation et le volume de requêtes","Monitored relay requests":"Requêtes relais surveillées","Monitoring & Alerts":"Surveillance & Alertes","Month":"Mois","Month number":"Numéro du mois","Monthly":"Mensuel","Monthly tokens":"Tokens par mois","months":"mois","Moonshot":"Moonshot","More":"Plus","More Apps":"Plus","more mapping":"plus de mappage","More templates...":"Autres modèles…","More than 999 days left":"Plus de 999 jours restants","More...":"Plus...","Most-used models in the selected period and category":"Modèles les plus utilisés dans la période et catégorie choisies","Move":"Déplacer","Move a request header":"Déplacer un en-tête de requête","Move affiliate rewards to your main balance":"Transférer les récompenses d\'affiliation vers votre solde principal","Move Field":"Déplacer le champ","Move Header":"Déplacer l\'en-tête","Move Request Header":"Déplacer un en-tête de requête","Move source field to target field":"Déplacer le champ source vers le champ cible","ms":"ms","Multi-key channel: Keys will be":"Canal multi-clés : Les clés seront","Multi-Key Management":"Gestion multi-clés","Multi-key management {{action}} on channel (ID: {{id}})":"Gestion multi-clés {{action}} sur le canal (ID : {{id}})","Multi-Key Mode (multiple keys, one channel)":"Mode multi-clés (plusieurs clés, un canal)","Multi-Key Strategy":"Stratég
107ie multi-clés","Multi-key: Polling rotation":"Multi-clé : Rotation par sondage","Multi-key: Random rotation":"Multi-clé : Rotation aléatoire","Multi-protocol Compatible":"Compatible multi-protocole","Multi-region deployment for stable global access":"Déploiement multirégional pour un accès mondial stable","Multi-step thinking before final answer":"Raisonnement en plusieurs étapes avant la réponse finale","Multi-user management with flexible permission allocation":"Gestion multi-utilisateurs avec attribution de permissions flexible","Multilingual translation and localisation":"Traduction multilingue et localisation","Multimodal":"Multimodal","Multiplier":"Multiplicateur","Multiplier applied when":"Multiplicateur appliqué lorsque","Multiplier applied when {{userGroup}} uses {{targetGroup}}":"Multiplicateur appliqué lorsque {{userGroup}} utilise {{targetGroup}}","Multiplier for audio inputs.":"Multiplicateur pour les entrées audio.","Multiplier for audio outputs.":"Multiplicateur pour les sorties audio.","Multiplier for completion tokens.":"Multiplicateur pour les jetons de complétion.","Multiplier for image processing.":"Multiplicateur pour le traitement d\'image.","Multiplier for prompt tokens.":"Multiplicateur pour les tokens de prompt.","Multipliers for recharge pricing based on user groups.":"Multiplicateurs pour la tarification de recharge basés sur les groupes d\'utilisateurs.","Must be a valid URL":"Doit être une URL valide","Must be at least 8 characters":"Doit contenir au moins 8 caractères","My Subscriptions":"Mes abonnements","my-status":"mon-statut","MySQL detected":"MySQL détecté","MySQL is a production-ready relational database. Keep your credentials secure.":"MySQL est une base de données relationnelle prête pour la production. Gardez vos identifiants en sécurité.","MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.":"MySQL est prêt pour la production. Assurez-vous que des sauvegardes automatisées et un utilisateur dédié avec les privilèges minimaux requis sont configurés.","N/A":"N/A","Name":"Nom","Name *":"Nom *","Name for this redemption code (1-20 characters)":"Nom pour ce code d\'échange (1-20 caractères)","Name is available":"Nom disponible","Name is not available":"Nom non disponible","Name must be between {{min}} and {{max}} characters":"Le nom doit contenir entre {{min}} et {{max}} caractères","Name Rule":"Règle de nommage","Name Suffix":"Suffixe du nom","Name the channel and choose the upstream provider.":"Nommez le canal et choisissez le fournisseur amont.","N
107ame the channel, choose the provider, configure API access, and set credentials.":"Nommez le canal, choisissez le fournisseur, configurez l’accès API et définissez les identifiants.","Name, provider type, and availability.":"Nom, type de fournisseur et disponibilité.","[email protected]":"[email protected]","Native format":"Format natif","Need a redemption code?":"Besoin d\'un code d\'échange ?","Needs API key":"Clé API requise","Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.":"JSON imbriqué définissant des règles par groupe pour ajouter (+:), supprimer (-:), ou ajouter des groupes utilisables.","Nested JSON: source group →":"JSON imbriqué : groupe source →","Network proxy for this channel (supports socks5 protocol)":"Proxy réseau pour ce canal (supporte le protocole socks5)","Never":"Jamais","Never expires":"N\'expire jamais","Never used an API Gateway?":"Vous n\'avez jamais utilisé de passerelle API ?","NEW":"NOUVEAU","New API":"New API","New API &lt;[email protected]&gt;":"New API &lt;[email protected]&gt;","New API Project Repository:":"Dépôt du projet New API :","New Format Template":"Modèle nouveau format","New Group":"Nouveau groupe","New model":"Nouveau modèle","New Models ({{count}})":"Nouveaux modèles ({{count}})","New name will be:":"Le nouveau nom sera :","New password":"Nouveau mot de passe","New Password":"Nouveau mot de passe","New password must be different from current password":"Le nouveau mot de passe doit être différent de l\'actuel","New User Quota":"Quota nouvel utilisateur","New version available: {{version}}":"Nouvelle version disponible : {{version}}","NewAPI":"NewAPI","Newly released":"Récemment publiés","Next":"Suivant","Next branch":"Branche suivante","Next page":"Page suivante","Next reset":"Prochaine réinitialisation","No":"Non","No About Content Set":"Aucun contenu « À propos » défini","No Active":"Aucun actif","No additional type-specific settings for this channel type.":"Aucun paramètre supplémentaire spécifique au type pour ce type de canal.","No amount options configured. Add amounts below to get started.":"Aucune option de montant configurée. Ajoutez des montants ci-dessous pour commencer.","No announcements at this time":"Aucune annonce pour le moment","No announcements yet. Click \\"Add Announcement\\" to create one.":"Aucune annonce pour l\'instant. Cliquez sur « Ajouter une annonce » pour en créer une.","No API Domains yet. Click \\"Add API\\" to create one.":"Aucun domaine API pour l\'instant. Cliquez sur \\"Ajouter une API\\" pour en créer un.","No API key yet":"Aucune clé API pour le moment","No API keys available. Create your first API key to get started.":"Aucune clé API disponible. Créez votre première clé API pour commencer.","No API Keys Found":"Aucune clé API trouvée","No API routes configured":"Aucune route API configurée","No app usage data available for this model.":"Aucune donnée d\'utilisation d\'application n\'est disponible pour ce modèle.","No apps match the selected filters":"Aucune application ne correspond aux filtres","No available models":"Aucun modèle disponible","No available Web chat links":"Aucun lien de chat Web disponible","No backup":"Pas de sauvegarde","No base input price":"Aucun prix d’entrée de base","No billing records found":"Aucun enregistrement de facturation trouvé","No capabilities reported for this model.":"Aucune capacité n\'a été signalée pour ce modèle.","No Change":"Aucun changement","No changes":"Aucune modification","No changes made":"Aucune modification effectuée","No changes to save":"Aucune modification à enregistrer","No channel selected":"Aucun canal sélectionné","No channel type found.":"Aucun type de canal trouvé.","No channels available. Create your first channel to get started.":"Aucun canal disponible. Créez votre premier canal pour commencer.","No channels found":"Aucun canal trouvé","No Channels Found":"Aucun canal trouvé","No channels selected":"Aucun canal sélectionné","No chat presets configured. Click \\"Add chat preset\\" to get started.":"Aucun préréglage de chat configuré. Cliquez sur \\"Ajouter un préréglage de chat\\" pour commencer.","No chat presets match your search":"Aucun préréglage de chat ne correspond à votre recherche","No conflict entries available.":"Aucune entrée de conflit disponible.","No conflicts match your search.":"Aucun conflit ne correspond à votre recherche.","No console output":"Aucune sortie console","No containers":"Aucun conteneur","No custom OAuth providers configured yet.":"Aucun fournisseur OAuth personnalisé configuré pour le moment.","No data":"Aucune donnée","No Data":"Aucune donnée","No data available":"Aucune donnée disponible","No deployments available. Create one to get started.":"Aucun déploiement disponible. Créez-en un pour commencer.","No Deployments Found":"Aucun déploiement trouvé","No description available.":"Aucune description disponible.","No discount tiers configured. Click \\"Add discount tier\\" to get started.":"Aucun niveau de réduction configuré. Cliquez sur « Ajouter un niveau de réduction » pour commencer.","No duplicate keys found":"Aucune clé dupliquée trouvée","No enabled tokens available":"Aucun token activé disponible","No endpoints configured. Switch to JSON mode or add rows to define endpoints.":"Aucun point de terminaison configuré. Passez en mode JSON ou ajoutez des lignes pour définir les points de terminaison.","No FAQ entries available":"Aucune entrée FAQ disponible","No FAQ entries yet. Click \\"Add FAQ\\" to create one.":"Aucune entrée FAQ pour l\'instant. Cliquez sur \\"Ajouter une FAQ\\" pour en créer une.","No files match the accepted types.":"Aucun fichier ne correspond aux types acceptés.","No group found.":"Aucun groupe trouvé.","No group-based rate limits configured. Click \\"Add group\\" to get started.":"Aucune limite de taux basée sur les groupes configurée. Cliquez sur \\"Ajouter un groupe\\" pour commencer.","No groups match your search":"Aucun groupe ne correspond à votre recherche","No groups yet. Add a group to get started.":"Aucun groupe pour le moment. Ajoutez un groupe pour commencer.","No header overrides configured.":"Aucune surcharge d\'en-têtes configurée.","No history data available":"Aucune donnée historique disponible","No incidents in the last 24 hours":"Aucun incident au cours des dernières 24 heures","No incidents in the last 30 days":"Aucun incident sur les 30 derniers jours","N
107o Inviter":"Pas d\'inviteur","No keys found":"Aucune clé trouvée","No latency data available":"Aucune donnée de latence disponible","No log entries matched the selected time.":"Aucune entrée de journal ne correspond à l\'heure sélectionnée.","No logs":"Aucun journal","No Logs Found":"Aucun journal trouvé","No mappings configured. Click \\"Add Row\\" to get started.":"Aucun mappage configuré. Cliquez sur « Ajouter une ligne » pour commencer.","No matches found":"Aucune correspondance trouvée","No matching items":"Aucun élément correspondant","No matching results":"Aucun résultat correspondant","No matching rules":"Aucune règle correspondante","No messages yet":"Pas encore de messages","No missing models found.":"Aucun modèle manquant trouvé.","No model found.":"Aucun modèle trouvé.","No model mappings configured. Click \\"Add Mapping\\" to get started.":"Aucun mappage de modèle configuré. Cliquez sur « Ajouter un mappage » pour commencer.","No models available":"Aucun modèle disponible","No models available in this category":"Aucun modèle disponible dans cette catégorie","No models available. Create your first model to get started.":"Aucun modèle disponible. Créez votre premier modèle pour commencer.","No models configured. Use Add model to get started.":"Aucun modèle configuré. Utilisez Ajouter un modèle pour commencer.","No models fetched from upstream":"Aucun modèle récupéré depuis l\'amont","No models fetched yet.":"Aucun modèle récupéré pour l\'instant.","No models found":"Aucun modèle trouvé","No Models Found":"Aucun modèle trouvé","No models found.":"Aucun modèle trouvé.","No models match the selected filters":"Aucun modèle ne correspond aux filtres","No models match your current filters.":"Aucun modèle ne correspond à vos filtres actuels.","No models match your search":"Aucun modèle ne correspond à votre recherche","No models selected":"Aucun modèle sélectionné","No models to add":"Aucun modèle à ajouter","No models to copy":"Aucun modèle à copier","No models to remove":"Aucun modèle à supprimer","No new models to add":"Aucun nouveau modèle à ajouter","No new models yet":"Pas encore de nouveaux modèles","No notable climbers right now":"Aucune progression notable pour le moment","No notable drops right now":"Aucune chute notable pour le moment","No parameter overrides configured.":"Aucune surcharge de paramètres configurée.","No payment methods available. Please contact administrator.":"Aucun moyen de paiement disponible. Veuillez contacter l\'administrateur.","No payment methods configured":"Aucun mode de paiement configuré","No payment methods configured. Click \\"Add method\\" or use templates to get started.":"Aucune méthode de paiement configurée. Cliquez sur \\"Ajouter une méthode\\" ou utilisez des modèles pour commencer.","No payment methods match your search":"Aucune méthode de paiement ne correspond à votre recherche","No performance data available":"Aucune donnée de performance disponible","No plans available":"Aucun plan disponible","No preference":"Aucune préférence","No prefill groups yet":"Aucun groupe de préremplissage pour l\'instant","No price differences found":"Aucune différence de prix trouvée","No processable upstream model updates for this channel":"Aucune mise à jour de modèle en amont traitable pour ce canal","No products configured. Click \\"Add product\\" to get started.":"Aucun produit configuré. Cliquez sur \\"Ajouter un produit\\" pour commencer.","No products match your search":"Aucun produit ne correspond à votre recherche","No providers available":"Aucun fournisseur disponible","No Quota":"Aucun quota","No ratio differences found":"Aucune différence de ratio trouvée","No recent usage":"Aucune utilisation récente","No records found. Try adjusting your filters.":"Aucun enregistrement trouvé. Essayez d\'ajuster vos filtres.","No redemption codes available. Create your first redemption code to get started.":"Aucun code d\'échange disponible. Créez votre premier code d\'échange pour commencer.","No Redemption Codes Found":"Aucun code d\'échange trouvé","No related models available for this channel type":"Aucun modèle associé disponible pour ce type de canal","No release notes provided.":"Aucune note de version fournie.","No Reset":"Pas de réinitialisation","No restriction":"Aucune restriction","No results for \\"{{query}}\\". Try adjusting your search or filters.":"Aucun résultat pour \\"{{query}}\\". Essayez d\'ajuster votre recherche ou vos filtres.","No results found":"Aucun résultat trouvé","No results found.":"Aucun résultat trouvé.","No Retry":"Pas de réessai","No rules yet":"Aucune règle","No rules yet. Add a group below to get started.":"Aucune règle pour le moment. Ajoutez un groupe ci-dessous pour commencer.","No separate media pricing configured.":"Aucune tarification multimédia séparée n’est configurée.","No status code mappings configured.":"Aucun mappage de codes de statut configuré.","No stores on this merchant yet. Set a return URL and click Create to mint your first pair.":"Ce marchand n’a pas encore de boutique. Définissez une URL de retour puis cliquez sur Créer pour générer votre première paire.","No subscription plans yet":"Aucun plan d\'abonnement pour le moment","No subscription records":"Aucun enregistrement d\'abonnement","No Sync":"Pas de synchronisation","No system announcements":"Aucune annonce système","No token found.":"Aucun jeton trouvé.","No tools configured":"Aucun outil configuré","No Upgrade":"Pas de mise à niveau","No upstream price differences found":"Aucune différence de prix amont trouvée","No upstream ratio differences found":"Aucune différence de ratio amont trouvée","No uptime data available":"Aucune donnée de disponibilité disponible","No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.":"Aucun groupe Uptime Kuma pour l\'instant. Cliquez sur « Ajouter un groupe » pour en créer un.","No uptime monitoring configured":"Aucune surveillance de disponibilité configurée","No usage logs available. Logs will appear here once API calls are made.":"Aucun journal d\'utilisation. Les journaux apparaîtront ici une fois les appels API effectués.","No user information available":"Aucune information utilisateur disponible","No user selected":"Aucun utilisateur sélectionné","No users available. Try adjusting your search or filters.":"Aucun utilisateur disponible. Essayez d\'ajuster votre recherche ou vos filtres.","No Users Found":"Aucun utilisateur trouvé","No vendor data available":"Aucune donnée de fournisseur disponible","No X Found":"Aucun X trouvé","Node Name":"Nom du nœud","Non-stream":"Non-streaming","Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.":"Les récompenses d’invitation non nulles nécessitent une confirmation de conformité dans les paramètres de la passerelle de paiement.","None":"Aucun","[email protected]":"[email protected]","Normalized:":"Normalisé :","Not available":"Non disponible","Not backed up":"Non sauvegardé","Not bound":"Non lié","Not Equals":"Différent de","Not Set":"Non défini","Not set yet":"Non défini","Not Started":"Non démarré","Not Submitted":"Non soumis","Not tested":"Non testé","Not used for upstream training by default":"Non utilisé pour l\'entraînement amont par défaut","Not used yet":"Pas encore utilisé","Notice":"Avis","Notification 
107Email":"E-mail de notification","Notification Method":"Méthode de notification","Notifications":"Notifications","Nucleus sampling probability mass":"Masse probabiliste de l\'échantillonnage nucleus","Number of codes to create":"Nombre de codes à créer","Number of completions to generate":"Nombre de complétions à générer","Number of images to generate":"Nombre d\'images à générer","Number of keys to create":"Nombre de clés à créer","Number of times to retry failed requests (0-10)":"Nombre de tentatives de réessai des requêtes échouées (0-10)","Number of tokens per unit quota":"Nombre de jetons par unité de quota","Number of top log probabilities returned per token":"Nombre de log-probabilités retournées par jeton","Number of users invited":"Nombre d\'utilisateurs invités","OAuth Client ID":"ID client OAuth","OAuth Client Secret":"Secret client OAuth","OAuth failed":"Échec de l\'OAuth","OAuth Integrations":"Intégrations OAuth","Object Prune Rules":"Règles de nettoyage d\'objets","Observability":"Observabilité","Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.":"Obtenez la clé API, l\'ID du commerçant et la paire de clés RSA depuis le tableau de bord Waffo, et configurez l\'URL de rappel.","Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: <ServerAddress>/api/waffo-pancake/webhook":"Obtenez l\'ID marchand, le magasin, le produit et les clés de signature dans le tableau de bord Waffo. URL du Webhook : <ServerAddress>/api/waffo-pancake/webhook","Ocean Breeze":"Brise océane","of":"sur","of 3:":"sur 3 :","off":"désactivé","Official":"Officiel","Official documentation":"Documentation officielle","Official Repository":"Dépôt officiel","Official Sync":"Synchronisation Officielle","OhMyGPT":"OhMyGPT","OIDC":"OIDC","OIDC Client ID":"ID Client OIDC","OIDC Client Secret":"Secret Client OIDC","OIDC configuration fetched successfully":"Configuration OIDC récupérée avec succès","OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.":"URL de découverte OIDC. Cliquez sur \\"Découverte automatique\\" pour récupérer les points de terminaison automatiquement.","OIDC endpoints discovered successfully":"Points de terminaison OIDC découverts avec succès","Old Format Template":"Modèle Ancien Format","Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.":"Ancien format : Remplacement direct. Nouveau format : Prend en charge le jugement conditionnel et les opérations JSON personnalisées.","Ollama":"Ollama","Ollama Models":"Modèles Ollama","One API":"One API","One domain per line":"Un domaine par ligne","One domain per line (only used when domain restriction is enabled)":"Un domaine par ligne (utilisé uniquement lorsque la restriction de domaine est activée)","One IP or CIDR range per line":"Une IP ou plage CIDR par ligne","One IP per line (empty for no restriction)":"Une IP par ligne (laisser vide pour aucune restriction)","one keyword per line":"un mot-clé par ligne","Online":"En ligne","Online payment is not enabled. Please contact the administrator.":"Le paiement en ligne n\'est pas activé. Veuillez contacter l\'administrateur.","Online topup is not enabled. Please use redemption code or contact administrator.":"La recharge en ligne n\'est pas activée. Veuillez utiliser un code d\'échange ou contacter l\'administrateur.","Only allow specific email domains":"Autoriser uniquement des domaines d\'e-mail spécifiques","Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.":"Uniquement disponible pour les administrateurs. Lorsque cette option est activée, vous recevrez une notification récapitulative via votre méthode sélectionnée lorsque la vérification planifiée des modèles détecte des changements de modèles en amont ou des échecs de vérification.","Only configured combinations are overridden. All other calls keep the token group base ratio.":"Seules les combinaisons configurées sont remplacées. Les autres appels conservent le ratio de base du groupe du jeton.","Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear."
107:"Seuls les champs sélectionnés seront écrasés. Vous pouvez relancer l\'assistant de synchronisation si de nouveaux conflits apparaissent.","Only successful requests":"Uniquement les requêtes réussies","Only successful requests count toward this limit.":"Seules les requêtes réussies comptent pour cette limite.","Only the last {{value}} log files will be retained; the rest will be deleted.":"Seuls les {{value}} derniers fichiers journaux seront conservés ; le reste sera supprimé.","Oops! Page Not Found!":"Oups ! Page introuvable !","Oops! Something went wrong":"Oups ! Quelque chose s\'est mal passé","Open":"Ouvrir","Open a source model first":"Ouvrez d’abord un modèle source","Open CC Switch":"Ouvrir le commutateur CC","Open in chat":"Ouvrir dans le chat","Open in new tab":"Ouvrir dans un nouvel onglet","Open in New Tab":"Ouvrir dans un nouvel onglet","Open menu":"Ouvrir le menu","Open release":"Ouvrir la version","Open source":"Open source","Open Source":"Open source","Open the io.net console API Keys page":"Ouvrir la page Clés API de la console io.net","Open theme settings":"Ouvrir les paramètres du thème","Open weights":"Poids ouverts","OpenAI":"OpenAI","OpenAI Compatible":"Compatible OpenAI","OpenAI Organization":"Organisation OpenAI","OpenAI Organization ID (optional)":"Identifiant d\'organisation OpenAI (optionnel)","OpenAI, Anthropic, etc.":"OpenAI, Anthropic, etc.","OpenAI, Anthropic, Google, etc.":"OpenAI, Anthropic, Google, etc.","OpenAIMax":"OpenAIMax","OpenRouter":"OpenRouter","opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.":"s\'ouvre dans un client externe. Déclenchez-le depuis la barre latérale ou les actions de clé API pour lancer l\'application configurée.","Operation":"Opération","operation and charging behavior":"exploitation et facturation","Operation Audit Info":"Informations d\'audit d\'opération","Operation failed":"Opération échouée","Operation successful":"Opération réussie","Operation Type":"Type d\'opération","Operations":"Opérations","Operator Admin":"Admin opérateur","Optimize system for self-hosted single-user usage":"Optimiser le système pour une utilisation auto-hébergée par un seul utilisateur","Optimized network architecture ensures millisecond response times":"Architecture réseau optimisée garantissant des temps de réponse en millisecondes","Optional callback override. Leave blank to use server address":"Remplacement optionnel du callback. Laisser vide pour utiliser l\'adresse du serveur","Optional icon identifier for the login button":"Identifiant d\'icône optionnel pour le bouton de connexion","Optional JSON policy to restrict access based on user info fields":"Politique JSON optionnelle pour restreindre l\'accès en fonction des champs d\'informations utilisateur","Optional minimum recharge amount for this method.":"Montant minimum de recharge optionnel pour cette méthode.","Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as":"Multiplicateur optionnel par groupe d\'utilisateurs utilisé lors du calcul des prix de recharge. Fournissez un objet JSON tel que","Optional notes about this channel":"Notes optionnelles sur ce canal","Optional notes about when to use this group":"Notes optionnelles sur le moment d\'utiliser ce groupe","Optional ratio used when upstream cache hits occur.":"Ratio optionnel utilisé en cas de succès du cache en amont.","Optional rule description":"Description facultative de la règle","Optional settings for advanced container configuration.":"Paramètres optionnels pour la configuration avancée du conteneur.","Optional supplementary information (max 100 characters)":"Informations supplémentaires optionnelles (max 100 caractères)","Optional tag for grouping channels":"Étiquette optionnelle pour regrouper les canaux","Opus Model":"Modèle Opus","Or continue with":"Ou continuer avec","Or enter this key manually:":"Ou entrez cette clé manuellement :","or pick existing":"ou choisir une existante","Order completed successfully":"Commande terminée avec succès","Order History":"Historique des commandes","Order Payment Method":"Moyen de paiement (commande)","org-...":"org-...","Original Model":"Modèle Original","Other":"Autre","Outage":"Interruption","Output":"Sortie","Output aspect ratio":"Format d\'image de sortie","Output image size":"Taille de l\'image de sortie","Output price":"Prix de sortie","Output token price for generated tokens.":"Prix des tokens de sortie générés.","Output tokens":"Jetons de sortie","Output Tokens":"Tokens de sortie","overall":"global","Overnight range":"Plage nocturne","override":"remplacer","Override":"Remplacer","Override auto-discovered endpoint":"Remplacer le point de terminaison auto-découvert","Override request headers":"Remplacer les en-têtes de requête","Override request headers (JSON format)":"Surcharge des en-têtes de requête (format JSON)","Override request parameters":"Remplacer les paramètres de requête","Override request parameters (JSON format)":"Remplacer les paramètres de requête (format JSON)","Override request parameters. Cannot override":"Remplacer les paramètres de requête. Impossible de remplacer","Override request parameters. Cannot override stream parameter.":"Remplace les paramètres de requête. Impossible de remplacer le paramètre stream.","Override Rules":"Règles de remplacement","Override the endpoint used for testing. Leave empty to auto detect.":"Remplacer le point de terminaison utilisé pour les tests. Laisser vide pour la détection automatique.","overrides for matching model prefix.":"remplace le tarif si le modèle a ce préf
107ixe.","Overrode user quota from {{from}} to {{to}}":"Quota de l\'utilisateur remplacé de {{from}} à {{to}}","Overview":"Vue d\'ensemble","Overwritten":"Écrasé","Page":"Page","Page {{current}} of {{total}}":"Page {{current}} sur {{total}}","PaLM":"PaLM","Pan":"Panoramique","Pancake":"Pancake","Param Override":"Remplacement de paramètre","Parameter":"Paramètre","Parameter configuration error":"Erreur de configuration des paramètres","Parameter Override":"Remplacement de paramètre","Parameter override must be a valid JSON object":"La substitution de paramètres doit être un objet JSON valide","Parameter override must be valid JSON format":"La substitution de paramètres doit être au format JSON valide","Parameter Override Template (JSON)":"Modèle de remplacement de paramètres (JSON)","Parameter override template must be a JSON object":"Le modèle de remplacement de paramètres doit être un objet JSON","parameter.":"paramètre.","Parameters":"Paramètres","Parsed {{count}} service account file(s)":"{{count}} fichier(s) de compte de service analysé(s)","Partial Submission":"Soumission partielle","Pass Headers":"Transmettre les en-têtes","Pass request body directly to upstream":"Transmettre le corps de la requête directement à l\'upstream","Pass specified request headers to upstream":"Transmettre les en-têtes de requête spécifiés en amont","Pass Through Body":"Corps de transmission directe","Pass Through Headers":"Transmettre les en-têtes","Pass through the anthropic-beta header for beta features":"Transmettre l\'en-tête anthropic-beta pour les fonctionnalités bêta","Pass through the include field for usage obfuscation":"Transmettre le champ include pour l\'obfuscation d\'utilisation","Pass through the inference_geo field for Claude data residency region control":"Transmettre le champ inference_geo pour le contrôle de la région de résidence des données Claude","Pass through the inference_geo field for geographic routing":"Transmettre le champ inference_geo pour le routage géographique","Pass through the safety_identifier field":"Transmettre le champ safety_identifier","Pass through the service_tier field":"Transmettre le champ service_tier","Pass through the speed field for Claude inference speed mode control":"Transmettre le champ speed pour le contrôle du mode de vitesse d\'inférence Claude","Pass when key is missing":"Accepter si la clé est absente","Pass-Through":"Transmission directe","Pass-through Headers (comma-separated or JSON array)":"En-têtes passthrough (séparés par des virgules ou tableau JSON)","Passkey":"Passkey","Passkey Authentication":"Authentification Passkey","Passkey is not available in this browser":"Passkey n\'est pas disponible dans ce navigateur","Passkey is not supported in this environment":"Passkey n\'est pas pris en charge dans cet environnement","Passkey is not supported on this device":"Passkey n\'est pas pris en charge sur cet appareil","Passkey is not supported on this device.":"La Passkey n\'est pas prise en charge sur cet appareil.","Passkey Login":"Connexion avec Passkey","Passkey login failed":"Échec de la connexion Passkey","Passkey login was cancelled":"Connexion Passkey annulée","Passkey login was cancelled or timed out":"Connexion Passkey annulée ou expirée","Passkey not supported on this device":"Passkey non prise en charge sur cet appareil","Passkey registered successfully":"Passkey enregistré avec succès","Passkey registration was cancelled":"L\'enregistrement de la Passkey a été annulé","Passkey removed successfully":"Passkey supprimée avec succès","Passkey reset successfully":"Passkey réinitialisée avec succès","Passthrough Template":"Modèle de transmission","Password":"Mot de passe","Password / Access Token":"Mot de passe / Jeton d\'accès","Password changed successfully":"Mot de passe changé avec succès","Password copied to clipboard: {{password}}":"Mot de passe copié dans le presse-papiers : {{password}}","Password has been copied to clipboard":"Le mot de passe a été copié dans le presse-papiers","Password Login":"Connexion par mot de passe","Password must be at least 8 characters":"Le mot de passe doit comporter au moins 8 caractères","Password must be at least 8 characters long":"Le mot de passe doit comporter au moins 8 caractères","Password Registration":"Inscription par mot de passe","Password reset and copied to clipboard: {{password}}":"Mot de passe réinitialisé et copié dans le presse-papiers : {{password}}","Password reset: {{password}}":"Mot de passe réinitialisé : {{password}}","Passwords do not match":"Les mots de passe ne correspondent pas","Path":"Chemin","Path not set":"Chemin non défini","Path Regex (one per line)":"Regex du chemin (un par ligne)","Path:":"Chemin :","Pay":"Pay","Pay with Balance":"Payer avec le solde","Pay-as-you-go with real-time usage monitoring":"Paiement à l\'usage avec suivi de la consommation en temps réel","Payment":"Paiement","Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.":"Mode agrégateur de paiement — embarquez avec votre propre société enregistrée (entité offshore). Conçu pour les entreprises.","Payment Channel":"Canal de paiement","Payment Gateway":"Passerelle de paiement","Payment initiated":"Paiement initié","Payment Method":"Méthode de paiement","Payment method n
107ame":"Nom du mode de paiement","Payment method name is required":"Le nom du mode de paiement est requis","Payment method type":"Type de mode de paiement","Payment method type is required":"Le type de méthode de paiement est requis","Payment methods":"Méthodes de paiement","Payment Methods":"Modes de paiement","Payment page opened":"Page de paiement ouverte","Payment request failed":"Requête de paiement échouée","Payment return URL":"URL de retour de paiement","Payment return URL is empty. Create the product without a SuccessURL redirect?":"L’URL de retour de paiement est vide. Créer le produit sans redirection SuccessURL ?","Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.":"Les paiements, codes de兑换, forfaits d’abonnement et récompenses d’invitation sont verrouillés jusqu’à ce que l’administrateur racine confirme les conditions de conformité.","Peak":"Pic","Peak throughput":"Débit de pointe","Penalises repetition of frequent tokens":"Pénalise la répétition des jetons fréquents","Pending":"En attente","per":"par","Per 1K tokens":"Par 1K tokens","Per 1M tokens":"Par 1M tokens","per request":"par requête","Per request":"Par requête","Per Request":"Par demande","Per-call":"Par appel","Per-feature metered windows split by model or capability.":"Fenêtres mesurées par fonction, réparties par modèle ou capacité.","Per-group performance":"Performance par groupe","Per-request":"Par requête","Per-request (fixed price)":"Par requête (prix fixe)","Per-token":"Par jeton","Per-token (ratio based)":"Par jeton (basé sur un ratio)","Per-token logit bias map":"Carte de biais des logits par jeton","Percentage:":"Pourcentage :","Performance":"Performances","Performance data is not yet available for this model.":"Aucune donnée de performance n\'est encore disponible pour ce modèle.","Performance health":"Santé des performances","Performance metrics for the last 24 hours":"Indicateurs de performance des dernières 24 heures","Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.":"Les indicateurs de performance présentés ici sont simulés à des fins de prévisualisation et seront remplacés par des données d\'observabilité réelles une fois l\'intégration du backend terminée.","Performance Monitor":"Moniteur de performances","Performance Settings":"Paramètres de performances","Performed {{action}} on user {{username}} (ID: {{id}})":"Action {{action}} effectuée sur l\'utilisateur {{username}} (ID : {{id}})","Period":"Période","Periodically check for upstream model changes":"Vérifier périodiquement les changements de modèles en amont","Periodically send ping frames to keep streaming connections active.":"Envoyer périodiquement des trames ping pour maintenir les connexions de streaming actives.","Permanently delete your account and all data":"Supprimer définitivement votre compte et toutes les données","Permit Passkey registration on non-HTTPS origins (only recommended for development)":"Autoriser l\'enregistrement de Passkey sur des origines non-HTTPS (recommandé uniquement pour le développement)","Perplexity":"Perplexity","Persist your data file":"Conserver votre fichier de données","Personal":"Personnel","Personal area":"Espace personnel","Personal Center Area":"Espace personnel","Personal info settings":"Paramètres d\'informations personnelles","Personal Settings":"Paramètres personnels","Personal settings and profile management.":"Paramètres personnels et gestion du profil.","Personal use":"Usage personnel","Personal use mode":"Mode usage personnel","Pick a date":"Choisir une date","Pick or create both a store and a product before saving.":"Choisissez ou créez à la fois une boutique et un produit avant d’enregistrer.","Ping Interval (seconds)":"Intervalle de ping (secondes)","Plan":"Plan","Plan Name":"Nom du plan","Plan price must be greater than zero":"Le prix du forfait doit être supérieur à zéro","Plan Subtitle":"Sous-titre du plan","Plan Title":"Titre du plan","Plan title is required":"Le titre du forfait est requis","Planned maintenance on Friday at 22:00 UTC...":"Maintenance planifiée vendredi à 22:00 UTC...","Platform":"Plateforme","Playground":"Aire de jeux","Playground and chat functions":"Fonctions de terrain de jeu et de discussion","Playground experiments and live conversations.":"Expérience
107s Playground et conversations en direct.","Please agree to the legal terms first":"Veuillez accepter les conditions légales d\'abord","Please complete the security check to continue.":"Veuillez compléter la vérification de sécurité pour continuer.","Please confirm that you understand the consequences":"Veuillez confirmer que vous comprenez les conséquences","Please enable io.net model deployment service and configure an API key in System Settings.":"Veuillez activer le service de déploiement de modèles io.net et configurer une clé API dans les Paramètres système.","Please enable Two-factor Authentication or Passkey before proceeding":"Veuillez activer l\'authentification à deux facteurs ou une Passkey avant de continuer","Please enter a name":"Veuillez saisir un nom","Please enter a new password":"Veuillez saisir un nouveau mot de passe","Please enter a redemption code":"Veuillez saisir un code de rédemption","Please enter a valid duration":"Veuillez saisir une durée valide","Please enter a valid email address":"Veuillez saisir une adresse e-mail valide","Please enter a valid number":"Veuillez entrer un nombre valide","Please enter a Well-Known URL first":"Veuillez d\'abord saisir une URL Well-Known","Please enter amount":"Veuillez saisir le montant","Please enter an administrator username":"Veuillez saisir un nom d\'utilisateur administrateur","Please enter API key first":"Veuillez saisir la clé API en premier","Please enter chat client name":"Veuillez saisir le nom du client de chat","Please enter email and verification code":"Veuillez saisir l\'email et le code de vérification","Please enter keys first":"Veuillez saisir les clés en premier","Please enter model name":"Veuillez entrer le nom du modèle","Please enter plan title":"Veuillez saisir le titre du plan","Please enter the authentication code.":"Veuillez saisir le code d\'authentification.","Please enter the URL":"Veuillez saisir l\'URL","Please enter the verification code":"Veuillez saisir le code de vérification","Please enter your current password":"Veuillez saisir votre mot de passe actuel","Please enter your email":"Veuillez saisir votre adresse e-mail","Please enter your email first":"Veuillez saisir votre email en premier","Please enter your verification code":"Veuillez saisir votre code de vérification","Please enter your verification code or backup code":"Veuillez saisir votre code de vérification ou votre code de secours","Please fix JSON errors before saving":"Veuillez corriger les erreurs JSON avant d’enregistrer","Please fix the highlighted fields before saving":"Veuillez corriger les champs en surbrillance avant d’enregistrer","Please log in with the appropriate credentials":"Veuillez vous connecter avec les identifiants appropriés","Please select a container":"Veuillez sélectionner un conteneur","Please select a payment method":"Veuillez sélectionner un mode de paiement","Please select a primary model":"Veuillez sélectionner un modèle principal","Please select a subscription plan":"Veuillez sélectionner un plan d\'abonnement","Please select at least one channel":"Veuillez sélectionner au moins un canal","Please select at least one model":"Veuillez sélectionner au moins un modèle","Please select items to delete":"Veuillez sélectionner des éléments à supprimer","Please Select user groups that can access this channel.":"Veuillez sélectionner les groupes d\'utilisateurs qui peuvent accéder à ce canal.","Please set Ollama API Base URL first":"Veuillez d\'abord définir l\'URL de base de l\'API Ollama","Please sign in to view {{module}}.":"Veuillez vous connecter pour voir {{module}}.","Please try again later.":"Veuillez réessayer plus tard.","Please type the following text to confirm:":"Veuillez saisir le texte suivant pour confirmer :","Please upload key file(s)":"Veuillez télécharger le (s) fichier(s) clé (s)","Please wait a moment before trying again.":"Veuillez patienter un instant avant de réessayer.","Please wait a moment, human check is initializing...":"Veuillez patienter un instant, la vérification humaine s\'initialise...","Please wait before editing to avoid overwriting saved values.":"Veuillez patienter avant de modifier afin d\'éviter d\'écraser les valeurs enregistrées.","Policy JSON":"JSON de stratég
107ie","Polling":"Sondage","Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded":"Le mode d\'interrogation nécessite Redis et un cache mémoire, sinon les performances seront considérablement dégradées","Poor":"Mauvais","Port":"Port","Port must be a positive integer":"Le port doit être un entier positif","Post Delta":"Delta post-calcul","PostgreSQL detected":"PostgreSQL détecté","PostgreSQL offers advanced reliability and data integrity for production workloads.":"PostgreSQL offre une fiabilité avancée et une intégrité des données pour les charges de travail en production.","PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.":"PostgreSQL offre de solides garanties de fiabilité. Vérifiez votre fenêtre de maintenance et vos politiques de rétention avant la mise en production.","Power AI applications, manage digital assets, connect the Future":"Propulser les applications IA, gérer les actifs numériques, connecter l\'Avenir","Powerful API Management Platform":"Plateforme puissante de gestion d\'API","Pre-Consume for Free Models":"Pré-consommation pour les modèles gratuits","Pre-consumed":"Pré-consommé","Pre-Consumed Quota":"Quota pré-consommé","Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.":"Préférence enregistrée comme {{pref}}, mais aucun abonnement actif. Le portefeuille sera utilisé automatiquement.","Preferences":"Préférences","Prefill Group Management":"Gestion des groupes de préremplissage","Prefill Groups":"Groupes de préremplissage","Prefill groups help you keep complex configurations in sync.":"Les groupes de préremplissage vous aident à maintenir des configurations complexes synchronisées.","Prefix":"Préfixe","Prefix Match":"Correspondance de préfixe","Prefix used when displaying prices":"Préfixe utilisé lors de l\'affichage des prix","Prefix/Suffix Text":"Texte préfixe/suffixe","Premium chat models":"Modèles de chat Premium","Premium plan, half price":"Offre premium, moitié prix","Preparing chat keys…":"Préparation des clés de chat…","Preparing your chat link, please try again in a moment.":"Préparation de votre lien de discussion, veuillez réessayer dans un instant.","Preparing your chat link…":"Préparation de votre lien de chat…","Prepend":"Ajouter au début","Prepend to Start":"Ajouter au début","Prepend value to array / string / object start":"Ajouter la valeur au début du tableau / chaîne / objet","Preserve the original field when applying this rule":"Conserver le champ original lors de l’application de cette règle","Preset groups":"Groupes prédéfinis","Preset recharge amounts (JSON array)":"Montants de recharge prédéfinis (tableau JSON)","Preset recharge amounts displayed to users":"Montants de recharge prédéfinis affichés aux utilisateurs","Preset Template":"Modèle prédéfini","Preset templates":"Modèles prédéfinis","preset.anthropic":"Anthropic","preset.default":"Par défaut","preset.forest-whisper":"Murmure de la forêt","preset.lake-view":"Vue sur le lac","preset.lavender-dream":"Rêve de lavande","preset.ocean-breeze":"Brise océane","preset.rose-garden":"Roseraie","preset.simple-large":"Simple & Grands Caractères","preset.sunset-glow":"Lueur du couchant","preset.underground":"Souterrain","Press Enter or comma to add tags":"Appuyez sur Entrée ou sur la virgule pour ajouter des tags","Press Enter to use \\"{{value}}\\"":"Appuyez sur Entrée pour utiliser « {{value}} »","Prevent server-side request forgery attacks":"Prévenir les attaques de falsification de requêtes côté serveur","Preview":"Aperçu","Previous":"Précédent","Previous branch":"Branche précédente","Previous page":"Page précédente","Price":"Prix","Price ($/1K calls)":"Prix ($/1K appels)","Price (local currency / USD)":"Prix (devise locale / USD)","Price display":"Affichage des prix","Price display mode":"Mode d\'affichage des prix","Price estimation":"Estimation du prix","Price estimation description":"Après avoir configuré le type de matériel, l\'emplacement de déploiement, le nombre de réplicas, etc., le prix sera calculé automatiquement.","Price ID":"ID du prix","Price mode (USD per 1M tokens)":"Mode de tarification (USD par 1M de jetons)","Price summary":"Résumé des prix","price_xxx":"price_xxx","Price:":"Prix :","Price: High to Low":"Prix : Du plus élevé au plus bas","Price: Low to High":"Prix : Du plus bas au plus élevé","Prices shown per":"Prix affichés par","Prices synced successfully":"Prix synchronisés avec succès","Prices vary by usage tier and request conditions":"Les prix varient selon le palier d’utilisation et les conditions de requête","Pricing":"Tarification","Pricing & Display":"Tarification et Affichage","Pricing by Group":"Tarification par groupe","Pricing Configuration":"Configuration de la tarification","Pricing group example":"Exemple de groupe tarifaire","Pricing groups":"Groupes tarifaires","Pricing mode":"Mode de tarification","Pricing Ratios":"Ratios de tarification","Pricing Type":"Type de tarification","Primary Model":"Modèle principal","Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)":"Priorise la réutilisation du dernier canal ayant réussi, basé sur les clés extraites du contexte de la requête (routage persistant)","Priority":"Priorité","Priority (Default)":"Priorité (Par défaut)","Priority level from 0 (lowest) to 10 (highest), default is 5":"Niveau de priorité de 0 (le plus bas) à 10 (le plus élevé), la valeur par défaut est 5","Priority order for automatic group assignment. New tokens rotate through this list.":"Ordre de priorité pour l\'attribution automatique des groupes. Les nouveaux jetons alternent dans cette liste.","Privacy Policy":"Politique de confidentialité","Private Deployment URL":"URL de déploiement privé","Processing OAuth response...":"Traitement de la réponse OAuth...","Processing...":"Traitement...","Product":"Produit","Product ID":"ID du produit","Product ID is required":"L\'ID de produit est requis","Product Name":"Nom du produit","Productivity":"Productivité","Products":"Produits","Professional team providing 24/7 technical support":"Équipe professionnelle offrant un support technique 24h/24 et 7j/7","Profile":"Profil","Profile updated successfully":"Profil mis à jour avec succès","Programming":"Programmation","Progress":"Progression","Project":"Élément","Promote":"Promouvoir","Promotion codes":"Codes promotionnels","Prompt":"Invite","Prompt (EN)":"Invite (EN)","Prompt cache ratio":"Ratio de cache d\'invite","Prompt caching":"Cache d\'invites","Prompt Caching":"Mise en cache des invites","Prompt Details":"Détails de l\'invite","Prompt price ($/1M tokens)":"Prix du prompt ($/1M de jetons)","Proprietary":"Propriétaire","Provide a JSON object where each key maps to an endpoint definition.":"Fournissez un objet JSON où chaque clé correspond à une définition de point de terminaison.","Provide a valid URL starting with http:// or https://":"Fournissez une URL valide commençant par http:// ou https://","Provide Markdown, HTML, or an external URL for the privacy policy":"Fournir du Markdown, du HTML ou une URL externe pour la politique de confidentialité","Provide Markdown, HTML, or an external URL for the user agreement":"Fournir du Markdown, du HTML ou une URL externe pour l\'accord utilisateur","Provide per
107-category safety overrides as JSON. Use `default` for fallback values.":"Fournir des remplacements de sécurité par catégorie au format JSON. Utilisez `default` pour les valeurs de secours.","Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.":"Fournir des remplacements d\'en-tête par modèle au format JSON. Utile pour activer des fonctionnalités bêta telles que les fenêtres de contexte étendues.","Provider":"Fournisseur","Provider & data privacy":"Fournisseur & confidentialité","Provider created successfully":"Fournisseur créé avec succès","Provider deleted successfully":"Fournisseur supprimé avec succès","Provider Name":"Nom du fournisseur","Provider type (OpenAI, Anthropic, etc.)":"Type de fournisseur (OpenAI, Anthropic, etc.)","Provider updated successfully":"Fournisseur mis à jour avec succès","Provider-specific endpoint, account, and compatibility settings.":"Paramètres de point d’accès, de compte et de compatibilité propres au fournisseur.","Proxy Address":"Adresse du proxy","Prune Object Items":"Nettoyer les éléments objet","Prune object items by conditions":"Nettoyer les éléments d\'objets par conditions","Prune Rule (string or JSON object)":"Règle de nettoyage (chaîne ou objet JSON)","Public model catalog and pricing page.":"Page publique du catalogue des modèles et des tarifs.","Public rankings page based on live usage data.":"Page publique des classements basée sur les données d\'utilisation réelles.","Publish Date":"Date de publication","Published":"Publié","Published models, groups, and model remapping rules.":"Modèles publiés, groupes et règles de remappage des modèles.","Published:":"Publié :","Pull":"Télécharger","Pull model":"Télécharger le modèle","Pulling...":"Téléchargement en cours...","Purchase Limit":"Limite d\'achat","Purchase limit reached":"Limite d\'achat atteinte","Purchase Subscription":"Acheter un abonnement","QR Code Image URL":"URL de l\'image du code QR","QR code is not configured. Please contact support.":"Le code QR n\'est pas configuré. Veuillez contacter le support.","Quantity":"Quantité","QuantumNous":"QuantumNous","Query Balance":"Solde des requêtes","Query Param":"Paramètre de requête","Querying...":"Recherche en cours...","Question":"Question","Queued":"En file","Quick actions":"Actions rapides","Quick insert common payment methods":"Insérer rapidement les méthodes de paiement courantes","Quick Range":"Plage rapide","Quick Setup from Preset":"Configuration rapide à partir d\'un préréglage","Quota":"Quota","Quota ({{currency}})":"Quota ({{currency}})","Quota adjusted successfully":"Quota ajusté avec succès","Quota consumed before charging users":"Quota consommé avant de facturer les utilisateurs","Quota Distribution":"Distribution des quotas","Quota given to invited users":"Quota attribué aux utilisateurs invités","Quota given to users who invite others":"Quota attribué aux utilisateurs qui invitent d\'autres personnes","Quota must be a positive number":"Le quota doit être un nombre positif","Quota must be zero or greater":"Le quota ne peut pas être négatif","Quota Per Unit":"Quota par unité","Quota reminder (tokens)":"Rappel de quota (jetons)","Quota Reset":"Réinitialisation du quota","Quota Settings":"Paramètres de quota","Quota Types":"Types de quotas","Quota Warning Threshold":"Seuil d\'avertissement de quota","Quota:":"Quota :","Radius":"Rayon","Random":"Aléatoire","Randomly select a key from the pool for each request":"Sélectionner aléatoirement une clé du pool pour chaque requête","Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.":"Les données de classement sont actuellement simulées à des fins d\'aperçu et seront remplacées par des analyses en direct une fois l\'intégration backend livrée.","Rankings":"Classements","Rate Limit Windows":"Fenêtres de limitation","Rate Limited":"Limitation de débit","Rate Limiting":"Limitation du débit","Rate limits":"Limites de débit","Ratio":"Ratio","Ratio applied to audio completions for streaming models.":"Ratio appliqué aux complétions audio pour les modèles de streaming.","Ratio applied to audio inputs where supported by the upstream model.":"Ratio appliqué aux entrées audio lorsque pris en charge par le modèle amont.","Ratio applied when creating cache entries for supported models.":"Ratio appliqué lors de la création d\'entrées de cache pour les modèles pris en charge.","Ratio mode":"Mode de ratio","Ratio Type":"Type de ratio","Ratio: {{value}}":"Ratio : {{value}}","Ratios synced successfully":"Ratios synchronisés avec succès","Raw expression":"Expression brute","Raw JSON":"JSON brut","Raw Quota":"Quota brut","Re-enable on success":"Réactiver en cas de succès","Re-login":"Se reconnecter","Ready":"Prêt","Ready to initialize":"Prêt à initialiser","Ready to simplify":"Prêt à simplifier","Real exchange rate between USD and your payment gateway currency":"Taux de change réel entre l\'USD et la devise de votre passerelle de paiement","Reason":"Raison","Reason:":"Raison :","Reasoning":"Raisonnement","Reasoning Effort":"Effort de raisonnement","Receive Upstream Model Update Notifications":"Recevoir les notifications de mise à jour des modèles en amont","Received":"Reçu","Recently launched models":"Modèles récemment lancés","Recently launched models gaining traction":"Modèles récemment publiés et en forte progression","Recharge":"Recharger","Recharge Amount":"Montant de la recharge","Recharge Amount (USD)":"Montant de la recharge (USD)","Recommended":"Recommandé","Recommended actions":"Actions recommandées","Recommended to keep this high to avoid upstream throttling.":"Il est recommandé de maintenir cette valeur élevée pour éviter la limitation en amont.","Record IP Address":"Enregistrer l\'adresse IP","Record quota usage":"Enregistrer l\'utilisation du quota","Recursion Strategy":"Stratég
107ie de récursion","Recursive":"Récursif","Redeem":"Utiliser","Redeem codes":"Échanger des codes","Redeemed By":"Utilisé par","Redeemed:":"Utilisé :","Received amount":"Montant reçu","redemption code":"code d\'échange","Redemption Code":"Code d\'échange","Redemption code deleted successfully":"Code d\'échange supprimé avec succès","Redemption code disabled successfully":"Code d\'échange désactivé avec succès","Redemption code enabled successfully":"Code d\'échange activé avec succès","Redemption code updated successfully":"Code d\'échange mis à jour avec succès","Redemption code(s) created successfully":"Code(s) d\'échange créé(s) avec succès","Redemption Codes":"Codes d\'échange","Redemption codes are disabled until the administrator confirms compliance terms.":"Les codes de兑换 sont désactivés jusqu’à ce que l’administrateur confirme les conditions de conformité.","redemption codes.":"codes de rachat.","Redemption failed":"Rédemption échouée","Redemption successful! Added: {{quota}}":"Échange réussi ! Ajouté : {{quota}}","Redirecting to chat page...":"Redirection vers la page de discussion...","Redirecting to Creem checkout...":"Redirection vers la caisse Creem...","Redirecting to GitHub...":"Redirection vers GitHub...","Redirecting to payment page...":"Redirection vers la page de paiement...","Redirecting to sign in in {{seconds}} seconds.":"Redirection vers la connexion dans {{seconds}} secondes.","Reference Video":"Vidéo de référence","Referral link:":"Lien de parrainage :","Referral Program":"Programme de parrainage","Referral reward transfer is disabled until the administrator confirms compliance terms.":"Le transfert des récompenses de parrainage est désactivé jusqu’à ce que l’administrateur confirme les conditions de conformité.","Refine models by provider, group, type, and tags.":"Affinez les modèles par fournisseur, groupe, type et tags.","Refresh":"Actualiser","Refresh Cache":"Actualiser le cache","Refresh credential":"Actualiser l\'identifiant","Refresh failed":"Échec de l\'actualisation","Refresh interval (minutes)":"Intervalle d\'actualisation (minutes)","Refresh Stats":"Actualiser les statistiques","Refreshing...":"Actualisation...","Refund":"Remboursement","Refund Details":"Détails du remboursement","Regenerate":"Régénérer","Regenerate Backup Codes":"Régénérer les codes de secours","Regex":"Regex","Regex Pattern":"Expression régulière","Regex Replace":"Remplacement regex","Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.":"Enregistrez chaque URL dans l’emplacement webhook correspondant au mode test ou production dans le tableau de bord Pancake. Des points de terminaison séparés évitent que le trafic de test crédite accidentellement les comptes de production.","Register Passkey":"Enregistrer un Passkey","Registered a passkey":"Passkey enregistré","Registration Enabled":"Inscription activée","Registry (optional)":"Registre (optionnel)","Registry secret":"Secret du registre","Registry username":"Nom d\'utilisateur du registre","Reject Reason":"Raison du rejet","Release details":"Détails de la version","Released":"Sorti","Relying Party Display Name":"Nom d\'affichage de la partie de confiance","Relying Party ID":"ID de la partie de confiance","Remaining":"Restant","Remaining quota":"Quota restant","Remaining Quota ({{currency}})":"Quota restant ({{currency}})","Remaining quota units":"Unités de quota restantes","Remaining:":"Restant :","Remark":"Remarque","Remove":"Supprimer","Remove {{value}}":"Retirer {{value}}","Remove ${{amount}}":"Supprimer ${{amount}}","Remove all log entries created before the selected timestamp.":"Supprimer toutes les entrées de journal créées avant l\'horodatage sélectionné.","Remove attachment":"Supprimer la pièce jointe","Remove condition":"Supprimer la condition","Remove Duplicates":"Supprimer les doublons","Remove filter":"Supprimer le filtre","Remove functionResponse.id field":"Supprimer le champ functionResponse.id","Remove mapped targets":"Retirer les cibles mappées","Remove Models":"Supprimer des modèles","Remove Passkey":"Supprimer le Passkey","Remove Passkey?":"Supprimer la clé d\'accès ?","Remove rule group":"Supprimer le groupe de règles","Remove string prefix":"Supprimer le préfixe de la chaîne","Remove string suffix":"Supprimer le suffixe de la chaîne","Remove the target field":"Supprimer le champ cible","Remove tier":"Supprimer le palier","Removed":"Supprimé","Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}":"{{removed}} clé(s) en double supprimée(s). Avant : {{before}}, Après : {{after}}","Removed an OAuth binding for the user":"Liaison OAuth de l\'utilisateur supprimée","Removed Models ({{count}})":"Modèles supprimés ({{count}})","Removes Midjourney flags such as --fast, --relax, and --turbo from user prompts.":"Supprime les drapeaux Midjourney tels que --fast, --relax et --turbo des prompts utilisateur.","Removing Passkey will require you to sign in with your password next time. You can re-register anytime.":"La suppression de la clé d\'accès (Passkey) vous obligera à vous connecter avec votre mot de passe la prochaine fois. Vous pouvez vous réinscrire à tout moment.","Rename":"Renommer","Rename deployment":"Renommer le déploiement","Rename failed":"Échec du renommage","Renamed successfully":"Renommé avec succès","Repeat the administrator password":"Répéter le mot de passe administrateur","Replace":"Remplacer","Replace all existing keys":"Remplacer toutes les clés existantes","Replace channel models":"Remplacer les modèles du canal","Replace mode: Will completely replace all existing keys":"Mode remplacement : Remplacera complètement toutes les clés existantes","Replace With":"Remplacer par","replaced":"remplacé","Replacement Model":"Modèle de remplacement","Replica count":"Nombre de réplicas","Replicate":"Replicate","Report an issue":"Signaler un problème","request":"requête","Request":"Requête","Request Body Disk Cache":"Cache disque du corps de requête","Request Body Field":"Champ du corps de requête","Request Body Memory Cache":"Cache mémoire du corps de requête","Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.":"Le passage du corps de requête est activé. Le corps sera envoyé directement en amont sans conversion.","Request conversion":"Conversion de requête","Request Conversion":"Conversion de requête","Request Count":"Nombre de requêtes","Request failed":"Échec de la requête","Request flow":"Flux de requête","Request Header Field":"Champ d\'en-tête de requête","Request Header Override":"Remplacement des en-têtes de requête","Request Header Overrides":"Remplacements d\'en-têtes de requête","Request ID":"ID de requête","Request Limits":"Limites de requêtes","Request Model":"Modèle demandé","Request Model:":"Modèle demandé :","Request overrides, routing behavior, and upstream model automation":"Surcharges de requête, comportement de routage et automatisation des modèles amont","Request rule pricing":"Règles de tarification de requête","Request success rate sampled over the last 24 hours":"Taux de réussite des requêtes échantillonné sur les dernières 24 heures","Request success rate; {{incidents}} incident buckets in the last 24 hours":"Taux de réussite des requêtes ; {{incidents}} créneaux avec incident sur les dernières 24 heures","Request timed out, please refresh and restart GitHub login":"Délai dépassé, veuillez actualiser la page puis relancer la connexion GitHub","Request-based":"Selon la requête","Requests (24h)":"Requêtes (24 h)","Requests / 24h":"Requêtes / 24 h","Requests per minute":"Requêtes par minute","requests served":"requêtes traitées","Requests will be forwarded to this worker. Trailing slashes are removed automatically.":"Les requêtes seront transmises à ce worker. Les barres obliques finales sont automatiquement supprimées.","Requests:":"Requêtes :","Require email verification for new accounts":"Exiger la vérification de l\'e-mail pour les nouveaux comptes","Require job success before follow-up actions":"Exiger le succès de la tâche avant les actions de suivi","Require login to view models":"Exiger la connexion pour voir les modèles","Require login to view rankings":"Exiger la connexion pour voir les classements","required":"requis","Required":"Requis","Required events:":"Événements requis :","Required provider, authentication, model, and group settings":"Paramètres requis de fournisseur, authentification, modèles et groupes","Required to expose Midjourney-style image generation to end users.":"Requis pour exposer la génération d\'images style Midjourney aux utilisateurs finaux.","Rerank":"Reclasser","Reroll":"Relancer","Research, analysis, scientific reasoning":"Recherche, analyse, raisonnement scientifique","Resend ({{seconds}}s)":"Renvoyer ({{seconds}}
107s)","Reset":"Réinitialiser","Reset 2FA":"Réinitialiser la 2FA","Reset all model prices?":"Réinitialiser tous les prix des modèles ?","Reset all model ratios?":"Réinitialiser tous les ratios de modèle ?","Reset all settings to default values":"Réinitialiser tous les paramètres aux valeurs par défaut","Reset at:":"Réinitialisation à :","Reset balance and used quota":"Réinitialiser le solde et le quota utilisé","Reset Cycle":"Cycle de réinitialisation","Reset email sent, please check your inbox":"Email de réinitialisation envoyé, veuillez vérifier votre boîte de réception","Reset failed":"Échec de la réinitialisation","Reset model ratios":"Ratios de modèle réinitialisés","Reset Passkey":"Réinitialiser le Passkey","Reset password":"Réinitialiser le mot de passe","Reset Period":"Période de réinitialisation","Reset prices":"Réinitialiser les prix","Reset ratios":"Réinitialiser les ratios","Reset Stats":"Réinitialiser les statistiques","Reset the user passkey":"Clé d\'accès de l\'utilisateur réinitialisée","Reset to default":"Réinitialiser par défaut","Reset to Default":"Réinitialiser par défaut","Reset to default configuration":"Réinitialisé à la configuration par défaut","Reset Two-Factor Authentication":"Réinitialiser 2FA","Resets in:":"Réinitialise dans :","Resolve Conflicts":"Résoudre les conflits","Resource Configuration":"Configuration des ressources","Response":"Réponse","Response Time":"Temps de réponse","Responses API Version":"Version de l\'API des réponses","Restore defaults":"Restaurer les paramètres par défaut","Restrict user model request frequency (may impact high concurrency performance)":"Restreindre la fréquence des requêtes du modèle utilisateur (peut impacter les performances en cas de forte concurrence)","Result":"Résultat","Retain last N days":"Conserver les N derniers jours","Retain last N files":"Conserver les N derniers fichiers","Retention days":"Jours de rétention","Retry":"Réessayer","Retry Chain":"Chaîne de tentatives","Retry Suggestion":"Suggestion de relance","Retry Times":"Nombre de tentatives","Return a custom error immediately":"Retourner immédiatement une erreur personnalisée","Return Custom Error":"Retourner une erreur personnalisée","Return data conforming to a JSON schema":"Renvoyer des données conformes à un schéma JSON","Return Error":"Retourner l\'erreur","Return per-token log probabilities":"Retourner les log-probabilités par jeton","Return to dashboard":"Retour au tableau de bord","Return vector embeddings for inputs":"Renvoyer des embeddings vectoriels pour les entrées","Reveal API key":"Afficher la clé API","Reveal key":"Révéler la clé","Revenue":"Revenu","Review & initialize":"Vérifier et initialiser","Review model rates before scaling traffic":"Consulter les tarifs des modèles avant d\'augmenter le trafic","Review your payment details":"Vérifier vos détails de paiement","Review your purchase details before proceeding.":"Vérifiez les détails de votre achat avant de continuer.","Rewards will be added directly to your balance":"Les récompenses seront ajoutées directement à votre solde","Rewrite callback URLs to the local server":"Réécrire les URLs de callback vers le serveur local","Right to Left":"De droite à gauche","Role":"Rôle","Roleplay":"Roleplay","Root":"Racine","Rose Garden":"Jardin de roses","Route":"Route","Route active":"Route active","Route Description":"Description de la route","Route is required":"La route est requise","Route, auth, and balance check in one place":"Routage, authentification et solde au même endroit","Routing & Overrides":"Routage et surcharges","Routing Strategy":"Stratégie de routage","Rows per page":"Lignes par page","RPM":"RPM","RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.":"RPM = requêtes/minute, TPM = jetons/minute, RPD = requêtes/jour. Les limites s\'appliquent par groupe de jetons.","RSA Private Key (Production)":"Clé privée RSA (Production)","RSA Private Key (Sandbox)":"Clé privée RSA (Sandbox)","Rule":"Règle","Rule {{line}} is missing source field":"La règle {{line}} n\'a pas de champ source","Rule {{line}} is missing target field":"La règle {{line}} n\'a pas de champ cible","Rule {{line}} is missing target path":"La règle {{line}} n\'a pas de chemin cible","Rule {{line}} is missing value":"La règle {{line}} n\'a pas de valeur","Rule {{line}}
107 pass_headers format is invalid":"Le format pass_headers de la règle {{line}} est invalide","Rule {{line}} pass_headers is missing header names":"La règle {{line}} pass_headers n\'a pas de noms d\'en-têtes","Rule {{line}} prune_objects is missing conditions":"La règle {{line}} prune_objects n\'a pas de conditions","Rule {{line}} return_error requires a message field":"La règle {{line}} return_error nécessite un champ message","Rule Description (optional)":"Description de la règle (optionnel)","Rule group":"Groupe de règles","rules":"règles","Rules":"Règles","Rules JSON":"Règles JSON","Rules JSON must be an array":"Le JSON des règles doit être un tableau","Run GC":"Exécuter le GC","Run tests for the selected models":"Exécuter les tests pour les modèles sélectionnés","Running":"En cours","Runway":"Durée restante","s":"s","Safety Settings":"Paramètres de sécurité","Same as Local":"Identique au local","Sampling temperature; lower is more deterministic":"Température d\'échantillonnage ; plus c\'est bas, plus c\'est déterministe","Sandbox mode":"Mode sandbox","Save":"Enregistrer","Save all settings":"Enregistrer tous les paramètres","Save Backup Codes":"Sauvegarder les codes de secours","Save changes":"Enregistrer les modifications","Save Changes":"Enregistrer les modifications","Save chat settings":"Enregistrer les paramètres de chat","Save check-in settings":"Enregistrer les paramètres de connexion","Save Creem settings":"Enregistrer les paramètres Creem","Save drawing settings":"Enregistrer les paramètres de dessin","Save Epay settings":"Enregistrer les paramètres Epay","Save failed":"Échec de l\'enregistrement","Save failed, please retry":"Échec de l\'enregistrement, veuillez réessayer","Save general settings":"Enregistrer les paramètres généraux","Save group ratios":"Enregistrer les ratios de groupes","Save io.net settings":"Enregistrer les paramètres io.net","Save log settings":"Enregistrer les paramètres de journal","Save model prices":"Enregistrer les prix des modèles","Save model ratios":"Enregistrer les ratios de modèles","Save Models":"Enregistrer les modèles","Save monitoring rules":"Enregistrer les règles de surveillance","Save navigation":"Enregistrer la navigation","Save notice":"Enregistrer l\'avis","Save Preferences":"Enregistrer les préférences","Save preview":"Aperçu de l’enregistrement","Save rate limits":"Enregistrer les limites de débit","Save sensitive words":"Enregistrer les mots sensibles","Save Settings":"Enregistrer les paramètres","Save sidebar modules":"Enregistrer les modules de la barre latérale","Save SMTP settings":"Enregistrer les paramètres SMTP","Save SSRF settings":"Enregistrer les paramètres SSRF","Save Stripe settings":"Enregistrer les paramètres Stripe","Save these backup codes in a safe place. Each code can only be used once.":"Enregistrez ces codes de secours dans un endroit sûr. Chaque code ne peut être utilisé qu\'une seule fois.","Save these codes in a safe place. Each code can only be used once.":"Enregistrez ces codes dans un endroit sûr. Chaque code ne peut être utilisé qu\'une seule fois.","Save tool prices":"Enregistrer les prix des outils","Save Waffo Pancake settings":"Enregistrer les paramètres Waffo Pancake","Save Worker settings":"Enregistrer les paramètres Worker","Saved successfully":"Enregistré avec succès","Saving...":"Enregistrement en cours...","Scan QR Code":"Scanner le code QR","Scan the QR code to follow the official account and reply with “验证码” to receive your verification code.":"Scannez le code QR pour suivre le compte officiel et répondez par « 验证码 » pour recevoir votre code de vérification.","Scan the QR code with WeChat to bind your account":"Scannez le code QR avec WeChat pour lier votre compte","Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)":"Scannez ce code QR avec votre application d\'authentification (Google Authenticator, Microsoft Authenticator, etc.)","Scenario Templates":"Modèles de scénario","Scheduled channel tests":"Tests de canaux planifiés","scheduling controls":"contrôles d\'ordonnancement","Science":"Science","Scope":"Portée","Scopes":"Portées","Search":"Rechercher","Search by name or URL...":"Rechercher par nom ou URL...","Search by order number...":"Rechercher par numéro de commande...","Search channel type...":"Rechercher un type de canal...","Search chat presets...":"Rechercher des préréglages de chat...","Search colors...":"Rechercher des couleurs...","Search conflicting models or fields":"Rechercher des modèles ou champs en conflit","Search deployments...":"Rechercher des déploiements...","Search feature in development":"Fonctionnalité de recherche en développement","Search group names...":"Rechercher des noms de groupe...","Search groups...":"Rechercher des groupes...","Search missing models":"Rechercher les modèles manquants","Search model name, provider, endpoint, or tag...":"Rechercher un nom de modèle, fournisseur, endpoint ou tag...","Search model name...":"Rechercher le nom du modèle...","Search models":"Rechercher des modèles","Search models or fields...":"Rechercher des modèles ou des champs...","Search models...":"Rechercher des modèles...","Search payment methods...":"Rechercher des méthodes de paiement...","Search payment types...":"Rechercher des types de paiement...","Search products...":"Rechercher des produits...","Search rules...":"Rechercher des règles…","Search tags...":"Rechercher des tags...","Search the public web at inference time":"Rechercher sur le web public lors de l\'inférence","Search vendors...":"Rechercher des fournisseurs...","Search...":"Rechercher...","seconds":"secondes","Secret env (JSON object)":"Env
107ironnement secret (objet JSON)","Secret environment variables (JSON)":"Variables d\'environnement secrètes (JSON)","Secret Key":"Clé secrète","Secure & Reliable":"Sécurisé et fiable","Secured":"Sécurisé","Security":"Sécurité","Security & Limits":"Sécurité et limites","Security Check":"Vérification de sécurité","Security verification":"Vérification de sécurité","Select":"Sélectionner","Select a color":"Sélectionner une couleur","Select a group":"Sélectionner un groupe","Select a group type":"Sélectionner un type de groupe","Select a model to edit pricing":"Sélectionnez un modèle pour modifier sa tarification","Select a preset...":"Sélectionner un préréglage...","Select a product":"Sélectionner un produit","Select a role":"Sélectionner un rôle","Select a rule to edit.":"Sélectionnez une règle à modifier.","Select a store":"Sélectionner une boutique","Select a timestamp before clearing logs.":"Sélectionnez un horodatage avant de vider les journaux.","Select a usage mode to continue":"Sélectionnez un mode d\'utilisation pour continuer","Select a verification method first":"Sélectionnez d\'abord une méthode de vérification","Select all":"Tout sélectionner","Select all (filtered)":"Tout sélectionner (filtré)","Select all models":"Sélectionner tous les modèles","Select All Visible":"Sélectionner tout ce qui est visible","Select an operation mode and enter the amount":"Sélectionnez un mode d\'opération et entrez le montant","Select announcement type":"Sélectionner le type d\'annonce","Select at least one field to overwrite.":"Sélectionnez au moins un champ à écraser.","Select at least one target model":"Sélectionnez au moins un modèle cible","Select body font":"Sélectionner la police du corps de texte","Select border radius":"Sélectionner le rayon de bordure","Select channel type":"Sélectionner le type de canal","Select color preset":"Sélectionner un préréglage de couleur","Select content width":"Sélectionner la largeur du contenu","Select corner radius":"Sélectionner le rayon des coins","Select currency":"Sélectionner la devise","Select date":"Sélectionner la date","Select default chart":"Sélectionner le graphique par défaut","Select default range":"Sélectionner la plage par défaut","Select display mode":"Sélectionner le mode d\'affichage","Select end time":"Sélectionner l\'heure de fin","Select from presets or type custom identifier.":"Sélectionner parmi les préréglages ou saisir un identifiant personnalisé.","Select granularity":"Sélectionner la granularité","Select groups (leave empty to keep current)":"Sélectionner les groupes (laisser vide pour conserver les groupes actuels)","Select interface density":"Sélectionner la densité de l\'interface","Select items...":"Sélectionner des éléments...","Select key format":"Sélectionner le format de clé","Select language":"Sélectionner une langue","Select Language":"Sélectionner la langue","Select layout style":"Sélectionner le style de mise en page","Select locations":"Sélectionner des emplacements","Select Model":"Sélectionner le modèle","Select model {{model}}":"Sélectionner le modèle {{model}}","Select models (empty for allow all)":"Sélectionner les modèles (vide pour autoriser tout)","Select models and apply to channel models list.":"Sélectionnez les modèles et appliquez-les à la liste des modèles de canaux.","Select models or add custom ones":"Sélectionner des modèles ou en ajouter des personnalisés","Select models to process. Unselected \\"add\\" models will be ignored.":"Sélectionnez les modèles à traiter. Les modèles « ajout » non sélectionnés seront ignorés.","Select models to run batch tests.":"Sélectionner les modèles pour exécuter les tests par lots.","Select or enter color value":"Sélectionner ou saisir une valeur de couleur","Select or enter model name":"Sélectionner ou saisir le nom du modèle","Select or enter payment type":"Sélectionner ou saisir le type de paiement","Select payment method":"Sélectionner le mode de paiement","Select preset or enter custom CSS color value.":"Sélectionner un préréglage ou saisir une valeur de couleur CSS personnalisée.","Select publish date":"Sélectionner la date de publication","Select requirement":"Sélectionner l\'exigence","Select row":"Sélectionner la ligne","Select sidebar style":"Sélectionner le style de la barre latérale","Select site direction":"Sélectionner la direction du site","Select start time":"Sélectionner l\'heure de début","Select subscription plan":"Sélectionner un plan d\'abonnement","Select Sync Channels":"Sélectionner les canaux de synchronisation","Select sync channels to compare prices":"Sélectionner les canaux de synchronisation pour comparer les prix","Select sync channels to compare ratios":"Sélectionner les canaux de synchronisation pour comparer les ratios","Select Sync Source":"Sélectionner la source de synchronisation","Select the API endpoint region":"Sélectionner la région du point de terminaison API","Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.":"Sélectionnez les champs que vous souhaitez écraser avec les données en amont. Les champs non sélectionnés conservent leurs valeurs locales.","Select theme preference":"Sélectionner la préférence de thème","Select theme preset":"Sélectionner un préréglage de thème","Select time granularity":"Sélectionner la granularité temporelle","Select vendor":"Sélectionner le fournisseur","Selectable groups":"Groupes sélectionnables","selected":"sélectionné","Selected {{count}}":"{{count}} sélectionné(s)","selected channel(s). Leave empty to remove tag.":"canal(aux) sélectionné(s). Laisser vide pour supprimer l\'étiquette.","Selected conflicts were overwritten successfully.":"Les conflits sélectionnés ont été écrasés avec succès.","Selected when creating a token and used as the default billing group for API calls.":"Sélectionné lors de la création d’un jeton et utilisé comme groupe de facturation par défaut pour les appels API.","Self-Use Mode":"Mode d\'utilisation personnelle","Send":"Envoyer","Send a request":"Envoyer une requête","Send code":"Envoyer le code","Send email alerts when a user falls below this quota":"Envoyer des alertes par e-mail lorsqu\'un utilisateur descend en dessous de ce quota","Sending...":"Envoi en cours...","Sensitive Words":"Mots sensibles","Sent the API key to FluentRead.":"Clé API envoyée à FluentRead.","Separate image/audio prices are enabled.":"Les prix séparés pour l’image et l’audio sont activés.","Serve multiple users or teams with billing and quota control.":"Servir plusieurs utilisateurs ou équipes avec gestion de la facturation et des quotas.","Server Address":"Adresse du serveur","Server IP":"IP du serveur","Server Log Management":"Gestion des journaux serveur","Server logging is not enabled (log directory not configured)":"La journalisation serveur n\'est pas activée (répertoire non configuré)","Server Token":"Jeton de serveur","Service account JSON file(s)":"Fichier(s) JSON de compte de service","Session expired!":"Session expirée !","Session expired?":"Session expirée ?","Set":"Définir","Set a discount rate for a specific recharge amount threshold.":"Définir un taux de réduction pour un seuil de montant de recharge spécifique.","Set a secure password (min. 8 characters)":"Définir un mot de passe sécurisé (min. 8 caractères)","Set a tag for":"Définir un tag pour","Set API key access restrictions":"Définir les restrictions d\'accès de la clé API","Set API key basic information":"Définir les informations de base de la clé API","Set default ranges and charts for model analytics.":"Définissez les plages et graphiques par défaut pour l’analyse des modèles.","Set Field":"Définir le champ","Set filters to customize your dashboard statistics and charts.":"Définir des filtres pour personnaliser les statistiques et les graphiques de votre tableau de bord.","Set filters to narrow down your log search results.":"Définir des filtres pour affiner vos résultats de recherche de journaux.","Set Header":"Définir l\'en-tête","Set Project to io.cloud when creating/selecting key":"Définir le projet sur io.cloud lors de la création/sélection de la clé","Set quota amount and limits":"Définir le quota et les limites","Set Request Header":"Définir un en-tête de requête","Set runtime request header: override entire value, or manipulate comma-separated tokens":"Définir l\'en-tête de requête : remplacer la valeur ou mani
107puler les tokens séparés par des virgules","Set separate prices for cache reads and writes.":"Définissez des prix distincts pour les lectures et écritures de cache.","Set Tag":"Définir un tag","Set tag for selected channels":"Définir un tag pour les canaux sélectionnés","Set the language used across the interface":"Définir la langue utilisée dans l\'interface","Set the user\'s role (cannot be Root)":"Définir le rôle de l\'utilisateur (ne peut pas être Root)","Setting Key":"Clé de paramètre","Setting saved":"Paramètre sauvegardé","Setting up 2FA...":"Configuration de la 2FA...","Setting updated successfully":"Paramètre mis à jour avec succès","Settings":"Paramètres","Settings & Preferences":"Paramètres et préférences","Settings updated successfully":"Paramètres mis à jour avec succès","Session":"Session","Setup guide":"Guide de configuration","Setup guide complete":"Guide de configuration terminé","Setup guide is collapsed. Expand it anytime.":"Le guide de configuration est réduit. Vous pouvez le rouvrir à tout moment.","Setup Instructions":"Instructions de configuration","Setup progress: {{completed}}/{{total}}":"Progression : {{completed}}/{{total}}","Setup Two-Factor Authentication":"Configurer l\'authentification à deux facteurs","Share":"Part","Share your link and earn rewards":"Partagez votre lien et gagnez des récompenses","Shared configuration for all payment gateways":"Configuration partagée pour toutes les passerelles de paiement","Shorten":"Raccourcir","Show":"Afficher","Show All":"Tout afficher","Show all providers including unbound":"Afficher tous les fournisseurs (y compris non liés)","Show only bound providers":"Afficher uniquement les fournisseurs liés","Show prices in currency instead of quota.":"Afficher les prix en devise au lieu du quota.","Show setup guide":"Afficher le guide de configuration","Show token usage statistics in the UI":"Afficher les statistiques d\'utilisation des jetons dans l\'interface utilisateur","Showcase core capabilities with demo credentials and limited access.":"Présenter les fonctionnalités principales avec des identifiants de démonstration et un accès limité.","Showing":"Affichage de","showing •":"affichage •","Sidebar":"Barre latérale","Sidebar collapsed by default for new users":"Barre latérale masquée par défaut pour les nouveaux utilisateurs","Sidebar modules":"Modules de la barre latérale","Sidebar Personal Settings":"Paramètres personnels de la barre latérale","Sign in":"Se connecter","Sign In":"Se connecter","Sign in now":"Se connecter maintenant","Sign in required":"Connexion requise","Sign in with Passkey":"Se connecter avec Passkey","Sign out":"Se déconnecter","Sign up":"S\'inscrire","Signed in":"Connecté","Signed in successfully!":"Connecté avec succès !","Signed in via WeChat":"Connecté via WeChat","Signed in with Passkey":"Connecté avec Passkey","Signed out":"Déconnecté","Significant outages detected":"Pannes significatives détectées","Signing you in with {{provider}}":"Connexion avec {{provider}}","SiliconFlow":"SiliconFlow","Simple":"Simple","Simple mode only returns message; status code and error type use system defaults.":"Le mode simple ne retourne que le message ; le code de statut et le type d\'erreur utilisent les valeurs par défaut.","Simple mode: prune objects by type, e.g. redacted_thinking.":"Mode simple : nettoyer les objets par type, ex. redacted_thinking.","Single Key":"Clé unique","Site & Branding":"Site et marque","Site Key":"Clé du site","Size:":"Taille :","sk_xxx or rk_xxx":"sk_xxx ou rk_xxx","Skip retry on failure":"Ne pas réessayer en cas d\'échec","Skip to Main":"Aller au contenu principal","Slug":"Slug","Slug can only contain letters, numbers, hyphens, and underscores":"Le slug ne peut contenir que des lettres, des chiffres, des tirets et des underscores","Slug is required":"Le slug est requis","Slug must be less than 100 characters":"Le slug doit contenir moins de 100 caractères","Smallest USD amount users can recharge (Epay)":"Montant minimum en USD que les utilisateurs peuvent recharger (Epay)","SMTP Email"
107:"E-mail SMTP","SMTP Host":"Hôte SMTP","smtp.example.com":"smtp.example.com","socks5://user:pass@host:port":"socks5://user:pass@host:port","Soft Errors":"Erreurs douces","Some channels failed: {{errorMsg}}":"Certains canaux ont échoué : {{errorMsg}}","Something went wrong!":"Quelque chose s\'est mal passé !","Sonnet Model":"Modèle Sonnet","Sora":"Sora","Sort":"Trier","Sort by ID":"Trier par ID","Sort Order":"Ordre de tri","Source":"Source","Source Endpoint":"Point source","Source Field":"Champ source","Source Header":"En-tête source","sources":"sources","Space-separated OAuth scopes":"Scopes OAuth séparés par des espaces","Spark model version, e.g., v2.1 (version number in API URL)":"Version du modèle Spark, par exemple v2.1 (numéro de version dans l\'URL de l\'API)","Special billing expression":"Expression de facturation spéciale","Special group":"Groupe spécial","Special ratio rules":"Règles de ratio spéciales","Special ratios override the token group ratio for specific user group and token group combinations.":"Les ratios spéciaux remplacent le ratio du groupe de jeton pour des combinaisons précises de groupe utilisateur et de groupe de jeton.","Special usable group rules":"Règles spéciales de groupes utilisables","Special usable group rules can add, remove, or append selectable token groups for a specific user group.":"Les règles de groupes utilisables spéciaux peuvent ajouter, supprimer ou annexer des groupes de jetons sélectionnables pour un groupe utilisateur précis.","SQLite stores all data in a single file. Make sure that file is persisted 
107when running in containers.":"SQLite stocke toutes les données dans un seul fichier. Assurez-vous que ce fichier est persisté lors de l\'exécution dans des conteneurs.","SSRF Protection":"Protection SSRF","Standard":"Standard","Standard price":"Prix standard","Start":"Début","Start a conversation to see messages here":"Démarrez une conversation pour voir les messages ici","Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.":"Commencez à encaisser des paiements dans le monde entier sans créer de société. Conçu pour les développeurs indépendants, les entrepreneurs individuels OPC et les startups. Waffo Pancake agit comme Merchant of Record et prend en charge la conformité liée à l’encaissement mondial : taxes à la consommation, facturation, gestion des abonnements, remboursements et rétrofacturations. Les développeurs solo peuvent lancer rapidement leur produit et rester concentrés sur celui-ci plutôt que sur la conformité. Intégration en quelques minutes, d’une seule invite à une intégration complète.","Start for free with generous limits. No credit card required.":"Commencez gratuitement avec des limites généreuses. Aucune carte de crédit requise.","Start Time":"Heure de début","Static page describing the platform.":"Page statique décrivant la plateforme.","Statistical count":"Nombre statistique","Statistical quota":"Quota statistique","Statistical tokens":"Jetons statistiques","Statistics reset":"Statistiques réinitialisées","Status":"Statut","Status & Sync":"Statut et synchronisation","Status Code":"Code de statut","Status Code Mapping":"Mappage des codes d\'état","Status code mapping must use valid HTTP status codes":"Le mappage des codes d\'état doit utiliser des codes d\'état HTTP valides","Status Page Slug":"Slug de la page d\'état","Status short":"État","Status:":"Statut :","Stay":"Rester","Stay tuned though!":"Restez à l\'écoute cependant !","Steer behaviour with a system instruction":"Orienter le comportement via une instruction système","Step":"Étape","Stop":"Arrêter","Stop Retry":"Arrêter la relance","Store":"Store","Store + product created":"Boutique + produit créés","Store ID":"ID du magasin","Store ID is required":"L\'ID de magasin est requis","Stored value is not echoed back for security":"Par sécurité, la valeur enregistrée n\'est pas affichée","stream":"Flux","Stream":"Flux","Stream Mode":"Mode streaming","Stream Status":"Statut du flux","Stream tokens incrementally as they are generated":"Diffuser les jetons au fur et à mesure de leur génération","Stream tokens via Server-Sent Events":"Diffuser les jetons via Server-Sent Events","Streaming":"Streaming","String Replace":"Remplacement de texte","Stripe":"Stripe","Stripe API key (leave blank unless updating)":"Clé API Stripe (laisser vide sauf en cas de mise à jour)","Stripe Dashboard":"Tableau de bord Stripe","Stripe Gateway":"Passerelle Stripe","Stripe product price ID":"ID de prix du produit Stripe","Stripe/Creem requires creating products on the third-party platform and entering the ID":"Stripe/Creem nécessite de créer des produits sur la plateforme tierce et d\'entrer l\'ID","Structured output":"Sortie structurée","Submit":"Soumettre","Submit directly":"Soumettre directement","Submit Result":"Soumettre le résultat","Submit Time":"Heure de soumission","Submitted":"Soumis","Submitting":"Envoi en cours","Submitting...":"Envoi...","Submodel":"Submodel","Subscribe Now":"S\'abonner maintenant","Subscribe to a plan for model access":"Souscrivez à un plan pour accéder aux modèles","Subscription":"Abonnement","Subscription Billing":"Facturation d\'abonnement","Subscription First":"Abonnement en priorité","Subscription Management":"Gestion des abonnements","Subscription Only":"Abonnement uniquement","Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.":"La création et la modification des forfaits d’abonnement sont verrouillées jusqu’à ce que l’administrateur confirme les conditions de conformité dans les paramètres de la passerelle de paiement.","Subscription Plans":"Plans d\'abonnement","Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).":"Les forfaits d’abonnement n’utilisent PAS le produit associé : chaque forfait dispose de son propre produit Pancake dédié, défini dans l’administration des abonnements (ou créé automatiquement via le bouton « + Créer »).","Subscription purchased 
107successfully":"Abonnement acheté avec succès","Subtract":"Soustraire","Success":"Succès","Success rate":"Taux de réussite","Successfully created {{count}} API Key(s)":"{{count}} clé(s) API créée(s) avec succès","Successfully created {{count}} redemption codes":"{{count}} codes de réduction créés avec succès","Successfully deleted {{count}} API key(s)":"{{count}} clé(s) API supprimée(s) avec succès","Successfully deleted {{count}} invalid redemption codes":"{{count}} code(s) d\'échange invalide(s) supprimé(s) avec succès","Successfully deleted {{count}} model(s)":"{{count}} modèle(s) supprimé(s) avec succès","Successfully disabled {{count}} model(s)":"{{count}} modèle(s) désactivé(s) avec succès","Successfully enabled {{count}} model(s)":"{{count}} modèle(s) activé(s) avec succès","Suffix":"Suffixe","Suffix Match":"Correspondance de suffixe","SunoAPI":"SunoAPI","Sunset Glow":"Lueur du couchant","Super Admin":"Super Administrateur","Super Large":"Très grand","Support for high concurrency with automatic load balancing":"Prise en charge de la haute concurrence avec équilibrage de charge automatique","Supported Applications":"Applications prises en charge","Supported Imagine Models":"Modèles Imagine pris en charge","Supported modalities":"Modalités prises en charge","Supported parameters":"Paramètres pris en charge","Supported variables":"Variables supportées","Supports `-thinking`, `-thinking-":"Prend en charge `-thinking`, `-thinking-","Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.":"Prend en charge le balisage HTML ou l\'intégration d\'iframe. Entrez le code HTML directement, ou fournissez une URL complète pour l\'intégrer automatiquement en tant qu\'iframe.","Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.":"Prend en charge la configuration en un clic et s\'adapte parfaitement à la configuration multi-protocole NewAPI.","Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.":"Prend en charge PNG, JPG, SVG ou WebP. Taille recommandée : 128×128 ou moins.","Sustained tokens per second":"Jetons par seconde soutenus","Swap Face":"Échanger le visage","Switch affinity on success":"Changer l\'affinité en cas de succès","Switch between the new frontend and the classic frontend. Changes take effect after page reload.":"Basculer entre le nouveau frontend et le frontend classique. Les modifications prennent effet après le rechargement de la page.","Switch to JSON":"Passer à JSON","Switch to Visual":"Passer à l\'affichage visuel","Sync Endpoint":"Point de terminaison de synchronisation","Sync Endpoints":"Points de synchronisation","Sync Fields":"Synchroniser les champs","Sync from the public upstream metadata repository.":"Synchroniser depuis le dépôt de métadonnées public en amont.","Sync Now":"Synchroniser maintenant","Sync this model with official upstream":"Synchroniser ce modèle avec la source amont officielle","Sync Upstream":"Synchroniser l\'amont","Sync Upstream Models":"Synchroniser les modèles amont","Synced upstream models":"Modèles en amont synchronisés","Synchronize models and vendors from an upstream source":"Synchroniser les modèles et les fournisseurs à partir d\'une source amont","Syncing prices, please wait...":"Synchronisation des prix, veuillez patienter...","Syncing...":"Synchronisation...","System":"Système","System Administration":"Administration du système","System Announcements":"Annonces système","System Behavior":"Comportement du système","System data statistics":"Statistiques des données système","System default":"Système par défaut","System Information":"Informations système","System initialized successfully! Redirecting…":"Système initialisé avec succès ! Redirection…","System logo":"Logo du système","System maintenance":"Maintenance du système","System Memory":"Mémoire système","System Memory Stats":"Statistiques de la mémoire système","System Name":"Nom du système","System name is required":"Le nom du système est requis","System Notice":"Avis syst
107ème","System Performance Monitoring":"Surveillance des performances système","System prompt":"Invite système","System Prompt":"Invite système","System Prompt Concatenation":"Concaténation des invites système","System Prompt Override":"Remplacement du prompt système","System settings":"Paramètres système","System Settings":"Paramètres du système","System setup wizard":"Assistant de configuration du système","System task records":"Historique des tâches système","System Version":"Version du système","Table view":"Vue en tableau","Tag":"Balise","Tag Aggregate":"Agrégat de balises","Tag Mode":"Mode Balise","Tag Name":"Nom de l\'étiquette","Tag set successfully":"Tag défini avec succès","Tag updated successfully":"Tag mis à jour avec succès","Tag:":"Balise :","Tags":"Balises","Take photo":"Prendre une photo","Take screenshot":"Prendre une capture d\'écran","Target Endpoint":"Point cible","Target Field":"Champ cible","Target Field Path":"Chemin du champ cible","Target group":"Groupe cible","Target Header":"En-tête cible","Target Path (optional)":"Chemin cible (optionnel)","Target User":"Utilisateur cible","Task":"Tâche","Task ID":"ID de la tâche","Task ID:":"ID de tâche :","Task logs":"Journaux des tâches","Task Logs":"Journaux de tâches","Team Collaboration":"Collaboration d\'équipe","Technical Support":"Support technique","Telegram":"Telegram","Telegram login requires widget integration; coming soon":"La connexion Telegram nécessite l\'intégration d\'un widget ; disponible bientôt","Telegram Login Widget":"Widget de connexion Telegram","Template":"Modèle","Template variables:":"Variables de modèle :","Templates":"Modèles","Templates appended":"Modèles ajoutés","Tencent":"Tencent","Termination requested":"Arrêt demandé","Test":"Tester","Test {{count}} selected":"Tester {{count}} sélectionné(s)","Test All Channels":"Tester tous les canaux","Test Channel Connection":"Tester la connexion du canal","Test Connection":"Tester la connexion","Test connectivity for:":"Tester la connectivité pour :","Test failed":"Échec du test","Test interval (minutes)":"Intervalle de test (minutes)","Test Latency":"Tester la latence","Test Mode":"Mode test","Test Model":"Tester le modèle","Test models and prompts from the browser":"Tester les modèles et les prompts depuis le navigateur","Test selected models":"Tester les modèles sélectionnés","Testing all enabled channels started. Please refresh to see results.":"Test de tous les canaux activés démarré. Veuillez actualiser pour voir les résultats.","Testing...":"Test en cours...","Text":"Texte","Text description of the desired image":"Description textuelle de l\'image souhaitée","Text description of the desired video":"Description textuelle de la vidéo souhaitée","Text Input":"Entrée texte","Text or array of texts to embed":"Texte ou tableau de textes à vectoriser","Text Output":"Sortie texte","Text to Video":"Texte vers vidéo","The administrator account is already initialized. You can keep your existing credentials and continue to the next step.":"Le compte administrateur est déjà initialisé. Vous pouvez conserver vos identifiants existants et passer à l\'étape suivante.","The administrator configured an external link for this document.":"L\'administrateur a configuré un lien externe pour ce document.","The administrator has not configured a privacy policy yet.":"L\'administrateur n\'a pas encore configuré de politique de confidentialité.","The administrator has not configured a user agreement yet.":"L\'administrateur n\'a pas encore configuré d\'accord utilisateur.","The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.":"L\'administrateur n\'a pas encore configuré de contenu \'À propos\'. Vous pouvez le définir dans la page des paramètres, en supportant le HTML ou l\'URL.","The binding will complete automatically after authorization":"La liaison se terminera automatiquement après l\'autorisation","The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.":"Le produit associé alimente les recharges de portefeuille : lorsqu’un utilisateur saisit un montant, new-api lance le paiement sur ce produit Pancake unique et remplace le prix pour la session, sans devoir précréer des SKU de 1 $, 5 $ ou 10 $.","The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.":"La boutique associée est le conteneur parent de tous les produits Pancake que new-api crée depuis cette administration, y compris le produit de recharge de portefeuille et les produits de forfaits d’abonnement. Une seule boutique suffit ; choisissez-en une autre uniquement si vous gérez réellement des catalogues Pancake séparés.","The effective domain for Passkey registration. Must match the current domain or be its parent domain.":"Le domaine effectif pour l\'enregistrement de la clé d\'accès. Doit correspondre au domaine actuel ou être son domaine parent.","The entered text does not match the required text.":"Le texte saisi 
107ne correspond pas au texte requis.","The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.":"L’environnement (test ou production) est déterminé par la clé collée ici : utilisez la clé de test pendant l’intégration, puis remplacez-la par la clé de production lors de la mise en ligne.","The exact model identifier as used in API requests.":"L\'identifiant exact du modèle tel qu\'utilisé dans les requêtes API.","The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.":"Les modèles suivants présentent des conflits de type de facturation (prix fixe vs facturation au ratio). Confirmez pour procéder aux changements.","The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:":"Les modèles suivants dans la redirection du modèle n\'ont pas été ajoutés à la liste \\"Modèles\\" et peuvent échouer lors de l\'invocation en raison de modèles disponibles manquants :","The mapped upstream model(s)":"Le(s) modèle(s) amont mappé(s)","The model you\'re looking for doesn\'t exist.":"Le modèle que vous recherchez n\'existe pas.","The name displayed across the application":"Le nom affiché dans l\'application","The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations":"L\'URL publique de votre serveur, utilisée pour les rappels OAuth, les webhooks et autres intégrations externes","The requested chat preset does not exist or has been removed.":"Le préréglage de discussion demandé n\'existe pas ou a été supprimé.","The setup wizard will use this database during initialization.":"L\'assistant de configuration utilisera cette base de données lors de l\'initialisation.","The site is not available at the moment.":"Le site n\'est pas disponible pour le moment.","The slug is appended to the URL:":"Le slug est ajouté à l\'URL :","The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.":"La synchronisation récupérera les modèles et fournisseurs manquants à partir de la source sélectionnée. Les enregistrements existants ne sont mis à jour que lorsque vous approuvez les conflits.","The token group that will have a custom ratio":"Le groupe de jetons qui aura un ratio personnalisé","The unique identifier for this model":"L\'identifiant unique de ce modèle","The unique name for this vendor":"Le nom unique de ce fournisseur","The URL for this chat client.":"L\'URL de ce client de discussion.","Theme":"Thème","Theme preset":"Préréglage du thème","Theme Settings":"Paramètres du thème","There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?":"Il y a à la fois des modèles à ajouter et à supprimer, mais vous n\'avez sélectionné qu\'un seul type. Confirmer l\'envoi uniquement des éléments sélectionnés ?","These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.":"Ces modèles restent encore sélectionnés mais ne figurent pas dans la liste renvoyée par l\'amont ; les noms qui sont uniquement des clés sources de model_mapping sont exclus. Modifiez la sélection avant d\'enregistrer.","These toggles affect whether certain request fields are passed through to the upstream provider.":"Ces bascules déterminent si certains champs de demande sont transmis au fournisseur en amont.","Thinking Suffix Adapter":"Adaptateur de suffixe thinking","Thinking to Content":"Réflexion vers Contenu","Third-party account bindings (read-only, managed by user in profile settings)":"Liaisons de comptes tiers (lecture seule, gérées par l\'utilisateur dans les paramètres de profil)","Third-party Payment Config":"Configuration de paiement tiers","This action cannot be undone.":"Cette action est irréversible.","This action cannot be undone. This will permanently delete your account and remove all your data from our servers.":"Cette action est irréversible. Cela supprimera définitivement votre compte et toutes vos données de nos serveurs.","This action will permanently remove 2FA protection from your account.":"Cette action supprimera définitivement la protection 2FA de votre compte.","This channel is not an Ollama channel."
107:"Ce canal n\'est pas un canal Ollama.","This channel type does not support fetching models":"Ce type de canal ne prend pas en charge la récupération de modèles","This channel type requires additional configuration":"Ce type de canal nécessite une configuration supplémentaire","This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.":"Cette confirmation déverrouille les fonctionnalités de paiement, de codes de兑换, de forfaits d’abonnement et de récompenses d’invitation. Veuillez lire attentivement les déclarations.","This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.":"Ce réglage contrôle la limitation des requêtes de modèles. La limitation des routes Web/API se configure via les variables d\'environnement et peut encore renvoyer 429.","This data may be unreliable, use with caution":"Ces données peuvent être peu fiables, utilisez-les avec prudence","This device does not support Passkey":"Cet appareil ne prend pas en charge Passkey","This device does not support Passkey verification.":"Cet appareil ne prend pas en charge la vérification par clé d\'accès.","This expression is too complex for the visual editor. Please switch to expression mode to edit.":"Cette expression est trop complexe pour l\'éditeur visuel. Passez en mode expression pour la modifier.","This feature is experimental. Configuration format and behavior may change.":"Cette fonctionnalité est expérimentale. Le format de configuration et le comportement peuvent changer.","This feature requires server-side WeChat configuration":"Cette fonctionnalité nécessite une configuration WeChat côté serveur","This may cause cache failures.":"Cela peut provoquer des échecs de cache.","This may take a few moments while we validate the request and update your session.":"Cela peut prendre quelques instants pendant que nous validons la requête et mettons à jour votre session.","This model has both fixed price and ratio billing conflicts":"Ce modèle présente des conflits de facturation à la fois en prix fixe et au ratio","This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.":"Ce modèle possède à la fois un prix fixe et des paramètres de ratio. L’enregistrement du mode actuel réécrira les champs en conflit.","This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.":"Ce modèle possède à la fois un prix fixe et des prix par token. L’enregistrement du mode actuel réécrira les champs en conflit.","This model is not available in any group, or no group pricing information is configured.":"Ce modèle n\'est disponible dans aucun groupe, ou aucune information de tarification de groupe n\'est configurée.","This month":"Ce mois-ci","This page has not been created yet.":"Cette page n\'a pas encore été cr
107éée.","This plan does not allow balance redemption":"Ce forfait ne permet pas le paiement avec le solde","This project must be used in compliance with the":"Ce projet doit être utilisé conformément aux","This record was written by a pre-upgrade instance and lacks audit info. Upgrade the instance to record server IP, callback IP, payment method and system version.":"Cet enregistrement provient d’une instance avant la mise à niveau et n’inclut pas d’audits. Mettez à jour l’instance pour enregistrer l’IP du serveur, l’IP de callback, le moyen de paiement et la version du système.","This site currently has {{count}} models enabled":"Ce site compte actuellement {{count}} modèles activés","This tier catches any request that did not match earlier tiers.":"Ce palier récupère toute requête qui ne correspond à aucun palier précédent.","this token group":"ce groupe de jetons","this user group":"ce groupe d\'utilisateurs","This user has no bindings":"Cet utilisateur n\'a aucune liaison","This week":"Cette semaine","This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.":"Cela ajoutera 2 règles modèles (Codex CLI et Claude CLI) à la liste de règles existante.","This will clear custom pricing ratios and revert to upstream defaults.":"Cela effacera les ratios de tarification personnalisés et rétablira les valeurs par défaut du fournisseur.","This will delete all":"Cela supprimera tout","This will delete all channel affinity cache entries still in memory.":"Cela supprimera toutes les entrées de cache d\'affinité de canal encore en mémoire.","This will delete temporary cache files that have not been used for more than 10 minutes":"Cela supprimera les fichiers de cache temporaires inutilisés depuis plus de 10 minutes","This will extend the deployment by the specified hours.":"Cela prolongera le déploiement du nombre d\'heures spécifié.","This will permanently delete API key":"Cela supprimera définitivement la clé API","This will permanently delete redemption code":"Cela supprimera définitivement le code d\'échange","This will permanently delete user":"Cela supprimera définitivement l\'utilisateur","This will permanently remove all log entries created before {{date}}.":"Cela supprimera définitivement toutes les entrées de journal créées avant le {{date}}.","This will permanently remove log entries before the selected timestamp.":"Cela supprimera définitivement les entrées de journal antérieures à l\'horodatage sélectionné.","This year":"Cette année","Three steps to get started":"Trois étapes pour commencer","Throughput":"Débit","Throughput by group":"Débit par groupe","Throughput short":"TPS","Throughput trend":"Tendance du débit","Tier":"Palier","Tier conditions":"Conditions du palier","Tier name":"Nom du palier","Tiered":"Par paliers","Tiered (billing expression)":"Par paliers (expression de facturation)","Tiered price table":"Grille de prix par paliers","Tiered pricing":"Tarification par paliers","tiers":"paliers","Time":"Heure","Time Granularity":"Granularité temporelle","Time remaining":"Temps restant","Time window for rate limiting":"Fenêtre de temps pour la limitation de débit","Time-based":"Selon l’heure","Time-sliced cache (Claude)":"Cache segmenté (Claude)","Time:":"Heure :","Timeline":"Chronologie","times":"Fois","Timing":"Durée","to access this resource.":"pour accéder à cette ressource.","to confirm":"pour confirmer","To Lower":"En minuscules","To Lowercase":"En minuscules","to override billing when a user in one group uses a token of another group.":"pour remplacer la facturation lorsqu\'un utilisateur d\'un groupe utilise un jeton d\'un autre groupe.","to the Models list so users can use them before the mapping sends traffic upstream.":"à la liste des modèles afin que les utilisateurs puissent les utiliser avant que le mappage n\'envoie le trafic en amont.","To Upper":"En majuscules","To Uppercase":"En majuscules","to view this resource.":"pour afficher cette ressource.","Today":"Aujourd\'hui","Toggle columns":"Basculer les colonnes","Toggle navigation menu":"Basculer le menu de navigation","Toggle plan":"Basculer le plan","Toggle theme":"Basculer le thème","Token":"Jeton","Token Breakdown":"Détails des tokens","Token Endpoint":"Point de terminaison de jeton","Token Endpoint (Optional)":"Point de terminaison du jeton (Facultatif)","Token estimator":"Estimation des jetons","Token group":"Groupe de jetons","Token management":"Gestion des jetons","Token Management":"Gestion des tokens","Token Mgmt":"Gestion des jetons","Token Name":"Nom du jeton","Token obtained from your Gotify application":"Jeton obtenu depuis votre application Gotify","Token price for audio input.":"Prix par token pour l’entrée audio.","Token price for audio output.":"Prix par token pour la sortie audio.","Token price for cache reads.":"Prix par token pour les lectures du cache.","Token price for creating cache entries.":"Prix par token pour la création d’entrées de cache.","Token price for image input.":"Prix par token pour l’entrée image.","Token prices":"Prix des tokens","Token regenerated and copied to clipboard":"Jeton régénéré et copié dans le presse-papiers","Token share by model author across the last 24 hours":"Part des tokens par auteur de modèle sur les dernières 24 heures","Token share by model author across the past few weeks":"Part des tokens par auteur de modèle au cours des dernières semaines","Token share by model author across the past month":"Part des tokens par auteur de modèle au cours du dernier mois","Token share by model author across the past year":"Part des tokens par auteur de modèle au cours de la dernière année","Token share by model author since launch":"Part des tokens par auteur de modèle depuis le lancement","Token unit":"Unité de tokens","Token usage by model since launch":"Utilisation des tokens par modèle depuis le lancement","Token-based":"Basé sur les jetons","Tokenizer":"Tokeniseur","tokens":"jetons","Tokens":"Jeton","tokens / mo":"jetons / mois","Tokens by category":"Jetons par catégorie","Tokens Only":"Jetons uniquement","Tokens per minute":"Jetons par minute","Tokens since launch":"Jetons depuis le lancement","Tokens-only mode will show raw quota values regardless of this toggle.":"Le mode Tokens uniquement affichera les valeurs de quota brutes indépendamment de ce basculement.","Too many files. Some were not added.":"Trop de fichiers. Certains n\'ont pas été ajoutés.","Too many requests":"Trop de requêtes","Tool / function declarations the model may call":"Déclarations d\'outils / fonctions que le modèle peut appeler","Tool identifier":"Identifiant d’outil","Tool price settings":"Paramètres de prix des out
107ils","Tool prices":"Prix des outils","Tool-choice policy or specific tool name":"Stratégie de choix d\'outil ou nom d\'outil spécifique","Tools":"Outils","Top {{count}}":"Top {{count}}","Top app":"Application principale","Top apps":"Top applications","Top Apps":"Meilleures applications","Top integrations using this model":"Principales intégrations utilisant ce modèle","Top model":"Modèle principal","Top models":"Top modèles","Top Models":"Top Modèles","Top models by traffic":"Modèles les plus utilisés","Top up balance and view billing history.":"Recharger le solde et consulter l\'historique de facturation.","Top Users":"Top utilisateurs","Top vendors":"Top fournisseurs","Top-up":"Recharge","Top-up amount options":"Options de montant de recharge","Top-up Audit Info":"Audits de rechargement","Top-up group ratios":"Ratios de groupe de recharge","Top-Up Link":"Lien de recharge","top-up ratio":"ratio de recharge","Topup Amount":"Montant de la recharge","Total":"Total","Total Allocated":"Total alloué","Total check-ins":"Total des connexions","Total consumed":"Consommé total","Total consumed quota":"Quota total consommé","Total cost":"Coût total","Total Cost":"Coût total","Total Count":"Nombre total","Total earned":"Total gagné","Total Earned":"Total gagné","Total GPUs":"GPUs totaux","Total invitation revenue":"Revenu total des invitations","Total Log Size":"Taille totale des journaux","Total Quota":"Quota total","Total requests allowed per period. 0 = unlimited.":"Total des requêtes autorisées par période. 0 = illimité.","Total requests made":"Requêtes totales effectuées","Total tokens":"Jetons totaux","Total Tokens":"Jetons totaux","Total Usage":"Utilisation totale","Total:":"Total :","TPM":"TPM","Track per-request consumption to power usage analytics. Keeping this on increases database writes.":"Suivre la consommation par requête pour l\'analyse de l\'utilisation. Garder ceci activé augmente les écritures en base de données.","Track usage, costs and performance with real-time analytics":"Suivez l\'utilisation, les coûts et les performances avec des analyses en temps réel","Tracked apps":"Applications suivies","Tracks current account base limits and additional metered usage on Codex upstream.":"Affiche les limites de base et l’utilisation supplémentaire (metered) du compte auprès de Codex en amont.","Trading insights, accounting, advisory":"Analyses de marché, comptabilité, conseil","Transfer":"Transférer","Transfer Amount":"Montant du transfert","Transfer failed":"Transfert échoué","Transfer Rewards":"Transférer les récompenses","Transfer successful":"Transfert réussi","Transfer to Balance":"Transférer vers le solde","Translation":"Traduction","Transparent Billing":"Facturation transparente","Trend":"Tendance","Trending down":"En baisse","Trending up":"En hausse","Triggered garbage collection":"Collecte des déchets déclenchée","Trim leading/trailing whitespace":"Supprimer les espaces en début/fin","Trim Prefix":"Supprimer le préfixe","Trim Space":"Supprimer les espaces","Trim Suffix":"Supprimer le suffixe","Truncate embeddings to this many dimensions":"Tronquer les vecteurs à autant de dimensions","Trusted":"Fiable","Try adjusting your search":"Essayez d\'ajuster votre recherche","Try adjusting your search to locate a missing model.":"Essayez d\'ajuster votre recherche pour localiser un modèle manquant.","TTFT P50":"TTFT P50","TTFT P95":"TTFT P95","TTFT P99":"TTFT P99","TTFT percentiles, throughput, and 30-day uptime by group":"Percentiles TTFT, débit et disponibilité sur 30 jours par groupe","TTL":"TTL","TTL (seconds, 0 = default)":"TTL (secondes, 0 = par défaut)","TTL (seconds)":"TTL (secondes)","Tune selection priority, testing, status handling, and request overrides.":"Ajustez la priorité de sélection, les tests, la gestion des statuts et les surcharges de requête.","Turnstile is enabled but site key is empty.":"Turnstile est activé mais la clé du site est vide.","Tutoring, learning aids, assessment":"Tutorat, aides à l\'apprentissage, évaluation","Two-factor Authentication":"Authentification à deux facteur
107s","Two-Factor Authentication":"Authentification à deux facteurs","Two-factor authentication disabled":"Authentification à deux facteurs désactivée","Two-factor authentication enabled successfully!":"Authentification à deux facteurs activée avec succès!","Two-factor authentication reset":"Authentification à deux facteurs réinitialisée","Two-Step Verification":"Validation en deux étapes","Type":"Type","Type (common)":"Type (commun)","Type *":"Type *","Type a command or search...":"Tapez une commande ou recherchez...","Type the confirmation text here":"Saisissez ici le texte de confirmation","Type-Specific Settings":"Paramètres spécifiques au type","Type:":"Type :","UI granularity only &mdash; data is still aggregated hourly":"Granularité de l\'interface uniquement &mdash; les données sont toujours agrégées par heure","Unable to estimate price for this deployment.":"Impossible d\'estimer le prix pour ce déploiement.","Unable to generate chat link. Please contact your administrator.":"Impossible de générer le lien de discussion. Veuillez contacter votre administrateur.","Unable to load groups":"Impossible de charger les groupes","Unable to load rankings":"Impossible de charger les classements","Unable to load rankings data":"Impossible de charger les données des classements","Unable to open chat":"Impossible d\'ouvrir la discussion","Unable to parse structured pricing":"Impossible d\'analyser la tarification structurée","Unable to prepare chat link. Please ensure you have an enabled API key.":"Impossible de préparer le lien de chat. Veuillez vous assurer d\'avoir une clé API activée.","Unauthorized":"Non autorisé","Unauthorized Access":"Accès non autorisé","Unbind":"Dissocier","Unbind failed":"Échec de la dissociation","Unbound {{provider}}":"{{provider}} dissocié","Underground":"Underground","Understand how user groups, token groups, ratios, and special rules work together.":"Comprendre comment les groupes utilisateur, groupes de jetons, ratios et règles spéciales fonctionnent ensemble.","Understand image inputs alongside text":"Comprendre des entrées image en complément du texte","Unexpected release payload":"Format de version inattendu","Unified API Gateway for":"Passerelle API unifiée pour","Unique identifier for this group.":"Identifiant unique pour ce groupe.","Unit price (local currency / USD)":"Prix unitaire (devise locale / USD)","Unit price (USD)":"Prix unitaire (USD)","Unit price must be greater than 0":"Le prix unitaire doit être supérieur à 0","Units per USD":"Unités par USD","Unknown":"Inconnu","Unknown version":"Version inconnue","Unlimited":"Illimité","Unlimited Quota":"Quota illimité","Unsaved changes":"Modifications non enregistrées","Unset price":"Prix non défini","Until":"Jusqu\'au","Untitled":"Sans titre","Untrusted upstream data:":"Données amont non fiables :","Unused":"Inutilisé","Up to 4 strings that stop generation":"Jusqu\'à 4 chaînes qui arrêtent la génération","Update":"Mettre à jour","Update All Balances":"Mettre à jour tous les soldes","Update API Key":"Mettre à jour la clé API","Update Balance":"Mettre à jour le solde","Update balance for:":"Mise à jour du solde pour :","Update Channel":"Mettre à jour le canal","Update channel configuration and click save when you\'re done.":"Mettez à jour la configuration du canal et cliquez sur Enregistrer lorsque vous avez terminé.","Update configuration":"Mettre à jour la configuration","Update failed":"Échec de la mise à jour","Update Model":"Mettre à jour le modèle","Update model configuration and click save when you\'re done.":"Mettez à jour la configuration du modèle et cliquez sur Enregistrer lorsque vous avez terminé.","Update plan info":"Mettre à jour les informations du plan","Update Provider":"Mettre à jour le fournisseur","Update Redemption Code":"Mettre à jour le code d\'échange","Update succeeded":"Mise à jour réussie","Update the API key by providing necessary info.":"Mettez à jour la clé API en fournissant les informations nécessaires.","Update the configuration for this custom OAuth provider.":"Mettre à jour la configuration de ce fournisseur OAuth personnalisé.","Update the redemption code by providing necessary info.":"Mettez à jour le code de remboursement en fournissant les informations nécessaires.","Update the reusable bundle below.":"Mettez à jour le bundle réutilisable ci-dessous.","Update the user by providing necessary info.":"Mettre à jour l\'utilisateur en fournissant les informations nécessaires.","Update vendor information for {{name}}":"Mettre à jour les informations du fournisseur pour {{name}}","Update your password for account:":"Mettez à jour votre mot de passe pour le compte :","Update your password to keep your account secure":"Mettez à jour votre mot de passe pour sécuriser votre compte","Updated":"Mis à jour","Updated a custom OAuth provider":"Fournisseur OAuth personnalisé mis à jour","Updated a deployment":"Déploiement mis à jour","Updated a model":"Modèle mis à jour","Updated a prefill group":"Groupe de préremplissage mis à jour","Updated a redemption code":"Code de réduction mis à jour","Updated a subscription plan":"Forfait d\'abonnement mis à jour","Updated a vendor":"Fournisseur mis à jour","Updated channel {{name}} (ID: {{id}})":"Canal {{name}} mis à jour (ID : {{id}})","Updated daily":"Mis à jour quotidiennement","Updated successfully":"Mise à jour réussie","Updated system setting {{key}}":"Paramètre système {{key}} mis à jour","Updated user {{username}} (ID: {{id}})":"Utilisateur {{username}} mis à jour (ID : {{id}})","Updating all channel balances. This may take a while. Please refresh to see results.":"Mise à jour de tous les soldes des canaux. Cela peut prendre un certain temps. Veuillez actualiser pour voir les résultats.","Upgrade Group":"Groupe de mise à niveau","Upload":"Téléverser","Upload a single service account JSON file":"Télécharger un seul fichier JSON de compte de service","Upload file":"Téléverser un fichier","Upload files":"Téléverser des fichiers","Upload multiple JSON files in batch modes":"Télécharger plusieurs fichiers JSON en mode batch","Upload or reference a local configuration file.":"Chargez ou référencez un fichier de configuration local.","Upload photo":"Téléverser une photo","Upscale":"Agrandir","Upstream":"Amont","Upstream Model Detection Settings":"Paramètres de détection des modèles en amont","Upstream Model Update Check":"Vérification des mises à jour des modèles en amont","Upstream Model Updates":"Mises à jour des modèles en amont","Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models":"Mises à jour des modèles en amont appliquées : {{added}} ajoutés, {{removed}} supprimés, {{ignored}} ignorés cette fois, {{totalIgnored}} modèles ignorés au total","Upstream price sync":"Synchronisation amont des prix","Upstream prices fetched successfully":"Prix amont récupérés avec succès","Upstream ratios fetched successfully":"Ratios en amont récupérés avec succès","Upstream Request ID":"ID de requête en amont","Upstream Response":"Réponse amont","upstream services integrated":"services en amont intégrés","Upstream Updates":"Mises à jour en amont","uptime":"disponibilité","Uptime":"Temps de fonctionnement","Uptime (30d)":"Disponibilité (30 j)","Uptime (last 30 days)":"Disponibilité (30 derniers jours)","Uptime Kuma":"Uptime Kuma","Uptime Kuma groups saved successfully":"Groupes Uptime Kuma sauvegardés avec succès","Uptime Kuma URL":"URL Uptime Kuma","Uptime since":"Temps de fonctionnement depuis","URL":"URL","URL is required":"L\'URL est requise","URL to your logo image (
107optional)":"URL de votre image de logo (facultatif)","Usage":"Utilisation","Usage at a glance":"Vue d\'ensemble de l\'utilisation","Usage guide":"Guide d\'utilisation","Usage logs":"Journaux d\'utilisation","Usage Logs":"Journaux d\'utilisation","Usage mode":"Mode d\'utilisation","Usage-based":"Basé sur l\'utilisation","USD":"USD","USD Exchange Rate":"Taux de change USD","USD price per 1M input tokens.":"Prix en USD par million de tokens d’entrée.","USD price per 1M tokens.":"Prix en USD par million de tokens.","Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.":"Utilisez +: pour ajouter un groupe, -: pour supprimer un groupe sélectionnable par défaut, ou aucun préfixe pour annexer un groupe.","Use a compatible browser or device with biometric authentication or a security key to register a Passkey.":"Utilisez un navigateur ou un appareil compatible avec l\'authentification biométrique ou une clé de sécurité pour enregistrer une clé d\'accès (Passkey).","Use authenticator code":"Utiliser le code de l\'authentificateur","Use backup code":"Utiliser un code de secours","Use disk cache when request body exceeds this size":"Utiliser le cache disque quand le corps de requête dépasse cette taille","Use external tools to extend capabilities":"Utiliser des outils externes pour étendre les capacités","Use our unified OpenAI-compatible endpoint in your applications":"Utilisez notre point de terminaison unifié compatible OpenAI dans vos applications","Use Passkey to sign in without entering your password.":"Utilisez une clé d\'accès (Passkey) pour vous connecter sans saisir votre mot de passe.","Use presets or upstream discovery to populate the model list faster.":"Utilisez des préréglages ou la découverte en amont pour remplir plus vite la liste des modèles.","Use secure connection when sending emails":"Utiliser une connexion sécurisée lors de l\'envoi d\'e-mails","Use sidebar shortcut":"Utiliser le raccourci de la barre latérale","Use the full-width table to scan prices, then select a row to edit it here.":"Parcourez les prix dans le tableau, puis sélectionnez une ligne pour la modifier ici.","Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.":"Utilisez le tableau des groupes tarifaires pour gérer le ratio et l’apparition du groupe dans la liste de création de jeton.","Use this token for API authentication":"Utilisez ce jeton pour l\'authentification API","Use your Passkey":"Utiliser votre clé d\'accès (Passkey)","used":"utilisé","Used":"Utilisé","Used / Remaining":"Utilisé / Restant","Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.":"Utilisé comme SuccessURL sur le nouveau produit. Une confirmation vous sera demandée si ce champ est laissé vide.","Used for load balancing. Higher weight = more requests":"Utilisé pour l\'équilibrage de charge. Poids plus élevé = plus de requêtes","Used in URLs and API routes":"Utilisé dans les URLs et les routes API","Used Quota":"Quota utilisé","Used to authenticate with io.net deployment API":"Utilisée pour l\'authentification auprès de l\'API de déploiement io.net","Used to authenticate with the worker. Leave blank to keep the existing secret.":"Utilisé pour l\'authentification auprès du worker. Laissez vide pour conserver le secret existant.","Used:":"Utilisé :","User":"Utilisateurs","User {{id}}":"Utilisateur {{id}}","User Agent":"Agent utilisateur","User Agreement":"Accord utilisateur","User Analytics":"Statistiques utilisateur","User Consumption Ranking":"Classement de consommation","User Consumption Trend":"Tendance de consommation","User created successfully":"Utilisateur créé avec succès","User dashboard and quota controls.":"Tableau de bord utilisateur et contrôles de quotas.","User Exclusive Ratio":"Ratio exclusif utilisateur","User group":"Groupe utilisateur","User Group":"Groupe d\'utilisateurs","User group name":"Nom du groupe d\'utilisateurs","User Group: {{ratio}}x":"Groupe utilisateur : {{ratio}}x","User groups that can access channels with this tag":"Groupes d\'utilisateurs pouvant accéder aux canaux avec cette balise","User groups that can access this channel. ":"Groupes d\'utilisateurs qui peuvent accéder à ce canal. ","User ID":"ID utilisateur","User ID Field":"Champ ID utilisateur","User ID:":"ID utilisateur :","User Info Endpoint":"Point de terminaison des informations utilisateur","User Info Endpoint (Optional)":"Point de terminaison d\'informations utilisateur (Facultatif)","User Information":"Informations utilisateur","User Menu":"Menu utilisateur","User personal functions":"Fonctions personnelles de l\'utilisateur","User selectable":"Sélectionnable par l\'utilisateur","User Subscription Management":"Gestion des abonnements utilisateur","User updated successfully":"Utilisateur mis à jour avec succès","User Verification":"Vérification de l\'utilisateur","User-Agent include (one per line)":"User-Agent inclus (un par ligne)","Username":"Nom d\'utilisateur","Username confirmation does not match":"La confirmation du nom d\'utilisateur ne correspond pas","Username Field":"Champ nom d\'utilisateur","Username or Email":"Nom d\'utilisateur ou e-mail","Users":"Utilisateurs","Users call the model on the left. The platform forwards the request to the upstream model on the right.":"Les utilisateurs appellent le modèle à gauche. La plateforme transmet la requête au modèle amont à droite.","Users must wait for a successful drawing before upscales or variations.":"Les utilisateurs doivent attendre une génération réussie avant les upscales ou variations.","Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.":"Les utilisateurs ne voient que les groupes marqués comme sélectionnables. Les groupes non sélectionnables peuvent toujours être attribués par les administrateurs.","uses":"utilisations","Validity":"Validité","Validity Period":"Période de validité","Value":"Valeur","Value (supports JSON or plain text)":"Valeur (JSON ou texte brut)","Value is required":"La valeur est obligatoire","Value must be at least 0":"La valeur doit être au moins 0","Value Regex":"Regex de valeur","variable":"variable","variable) *":"variable) *","Variables":"Variables","Vary":"Varier","Vary (Strong)":"Varier (fort)","Vary (Subtle)":"Varier (subtil)","Vast Range of AI Models":"Vaste gamme de modèles d\'IA","Vendor":"Fournisseur","Vendor deleted successfully":"Fournisseur supprimé avec succès","Vendor Name *":"Nom du fournisseur *","Vendor:":"Fournisseur :","Vendors ranked by aggregated token volume":"Fournisseurs classés par volume de tokens agrégé","Verification code":"Code de vérification","Verification Code":"Code de vérification","Verification code must be 6 digits":"Le co
107de de vérification doit comporter 6 chiffres","Verification code sent! Please check your email.":"Code de vérification envoyé ! Veuillez vérifier votre email.","Verification code updates every 30 seconds.":"Le code de vérification se met à jour toutes les 30 secondes.","Verification email sent":"Email de vérification envoyé","Verification failed":"Échec de la vérification","Verification is not configured properly":"La vérification n\'est pas configurée correctement","Verification required to reveal the saved key.":"Vérification requise pour révéler la clé enregistrée.","Verify":"Vérifier","Verify and Sign In":"Vérifier et se connecter","Verify routing with Playground or your client":"Vérifiez le routage avec Playground ou votre client","Verify Setup":"Vérifier la configuration","Verify your database connection":"Vérifiez votre connexion à la base de données","Verifying credentials and pulling stores from your Pancake account...":"Vérification des identifiants et récupération des boutiques depuis votre compte Pancake...","Version Overrides":"Remplacements de version","Vertex AI":"Vertex AI","Vertex AI API Key mode does not support batch creation":"Le mode clé API Vertex AI ne prend pas en charge la création par lot","Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.":"Vertex AI ne prend pas en charge functionResponse.id. Activez ceci pour supprimer automatiquement ce champ.","Vertex AI Key Format":"Format de clé Vertex AI","Vertex AI service account key must be valid JSON":"La clé de compte de service Vertex AI doit être un JSON valide","Video":"Vidéo","Video length in seconds":"Durée de la vidéo en secondes","Video Remix":"Remix vidéo","Vidu":"Vidu","View":"Afficher","View all currently available models":"Voir tous les modèles actuellement disponibles","View detailed information about this user including balance, usage statistics, and invitation details.":"Afficher des informations détaillées sur cet utilisateur, y compris le solde, les statistiques d\'utilisation et les détails d\'invitation.","View details":"Voir les détails","View document":"Afficher le document","View logs":"Voir les logs","View mode":"Mode d\'affichage","View model statistics and charts":"Afficher les statistiques et graphiques des modèles","View Pricing":"Voir les tarifs","View the complete details for this":"Voir les détails complets de ce","View the complete details for this log entry":"Voir les détails complets de cette entrée de journal","View the complete error message and details":"Voir le message d\'erreur et les détails complets","View the complete prompt and its English translation":"Voir l\'invite complète et sa traduction anglaise","View the generated image":"Voir l\'image générée","View your topup transaction records and payment history":"Afficher vos enregistrements de transactions de recharge et votre historique de paiement","Viewed channel key {{name}} (ID: {{id}})":"Clé du canal {{name}} consultée (ID : {{id}})","Violation Code":"Code de violation","Violation deduction amount":"Montant de la déduction pour violation","Violation Fee":"Frais de violation","Violation Marker":"Marqueur de violation","vip":"vip","VIP users with premium access":"Utilisateurs VIP avec accès premium","Vision":"Vision","Vision, image / video, document chat":"Vision, image / vidéo, conversation sur document","Visit Settings → General and adjust quota options...":"Visitez Paramètres → Général et ajustez les options de quota...","Visitors must authenticate before accessing the pricing directory.":"Les visiteurs doivent s\'authentifier avant d\'accéder au répertoire des prix.","Visitors must authenticate before accessing the rankings page.":"Les visiteurs doivent s\'authentifier avant d\'accéder à la page des classements.","Visual":"Visuel","Visual edit":"Édition visuelle","Visual editor":"Éditeur visuel","Visual Editor":"Éditeur Visuel","Visual indicator color for the API card":"Couleur de l\'indicateur visuel pour la carte API","Visual Mode":"Mode Visuel","Visual Parameter Override":"Remplacement visuel des paramètres","VolcEngine":"VolcEngine","vs. previous":"vs. précédent","Waffo Aggregator Gateway":"Passerelle agrégatrice Waffo","Waffo Pancake Dashboard":"Waffo Pancake Dashboard","Waffo Pancake MoR":"Waffo Pancake MoR","Waffo Pancake Payment Gateway":"Passerelle de paiement Waffo Pancake","Waffo Pancake product created":"Produit Waffo Pancake créé","Waffo Pancake product creation failed":"Échec de la création du produit Waffo Pancake","Waffo Pancake save failed":"Échec de l’enregistrement Waffo Pancake","Waffo Pancake settings saved":"Paramètres Waffo Pancake enregistrés","Waffo Payment":"Paiement Waffo","Waffo Payment Gateway":"Passerelle de paiement Waffo","Waffo Public Key (Production)":"Clé publique Waffo (Production)","Waffo Public Key (Sandbox)":"Clé publique Waffo (Sandbox)","Waiting":"En attente","Waiting for email...":"En attente de l\'e-mail...","Wallet":"Portefeuille","Wallet First":"Portefeuille en priorité","Wallet Management":"Gestion du portefeuille","Wallet management and personal preferences.":"Gestion du portefeuille et préférences personnelles.","Wallet Only":"Portefeuille uniquement","Warning":"Avertissement","Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.":"Avertissement : L\'URL de base ne doit pas se terminer par /v1. La nouvelle API le gérera automatiquement. Cela peut causer des échecs de requêtes.","Warning: Disabling 2FA will make your account less secure.":"Avertissement : La désactivation de la 2FA rendra votre compte moins sécurisé.","Warning: This action is permanent and irreversible!":"Avertissement : Cette action est permanente et irréversible !","We apologize for the inconvenience.":"Nous nous excusons pour le désagrément.","We could not load the setup status.":"Nous n\'avons pas pu charger l\'état de la configuration.","We will prompt your device to confirm using biometrics or your hardware key.":"Nous allons demander à votre appareil de confirmer en utilisant la biométrie ou votre clé matérielle.","We\'ll be back online shortly.":"Nous serons de retour en ligne sous peu.","Web search":"Recherche web","Web Search":"Recherche web","Webhook Configuration:":"Configuration du Webhook :","Webhook public key (production)":"Clé publique Webhook (production)","Webhook public key (production) is required":"La clé publique Webhook (production) est requise","Webhook public key (sandbox)":"Clé publique Webhook (sandbox)","Webhook public key (sandbox) is required":"La clé publique Webhook (sandbox) est requise","Webhook secret":"Secret du Webhook","Webhook Secret":"Secret du Webhook","Webhook signing secret (leave blank unless updating)":"Secret de signature du Webhook (laisser vide sauf en cas de mise à jour)","Webhook URL":"URL du Webhook","Webhook URL (Production):":"URL du webhook (production) :","Webhook URL (Test):":"URL du webhook (test) :","Webhook URL:":"URL du Webhook :","Website is under maintenance!":"Le site web est en maintenance !","WeChat":"WeChat","WeChat login QR code":"Code QR de connexion WeChat","WeChat Pay":"WeChat Pay","WeChat QR code will be displayed here":"Le code QR WeChat sera affiché ici","WeChat sign in":"Connexion WeChat","Week":"Semaine","Weekday":"Jour de la semaine","Weekly":"Hebdomadaire","Weekly token usage by model across the past few weeks":"Utilisation hebdomadaire des tokens par modèle au cours des dernières semaines","Weekly token usage by model across the past year":"Utilisation hebdomadaire de tokens par modèle sur l’année écoulée","Weekly token usage by model since launch":"Utilisation hebdomadaire de tokens par modèle depuis le lancement","Weekly Window":"Fenêtre hebdomadaire","Weight":"Poids","Weighted by request count":"Pondéré par le nombre de requêtes","Welcome back!":"Bienvenue de retour !","Welcome to our New API...":"Bienvenue sur notre New API...","Well-Known URL":"URL bien connue","Well-Known URL must start with http:// or https://":"L\'URL bien connue doit commencer par http:// ou https://","What would you like to know?":"Que voulez-vous savoir ?","When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.":"Quand un jeton utilise le groupe auto, le système essaie les groupes de haut en bas jusqu’à trouver un groupe disponible.","When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.":"Si les conditions sont remplies, le prix final est multiplié par X. Plusieurs correspondances se multiplient ; les valeurs < 1 agissent comme des remises.","When enabled, if channels in the current group fail, it will try channels in the next group in order.":"Lorsqu\'elle est activée, si les canaux du groupe actuel échouent, le système essaiera les canaux du groupe suivant dans l\'ordre.","When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel."
107:"Lorsque cette option est activée, conserver l\'entrée d\'affinité même si le canal affinitaire est désactivé ou n\'est plus utilisable pour le groupe/modèle actuel. Laissez-la désactivée pour supprimer l\'entrée et sélectionner un autre canal.","When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.":"Lorsqu\'activé, les corps de requête volumineux sont temporairement stockés sur disque, réduisant considérablement l\'utilisation mémoire. SSD recommandé.","When enabled, Midjourney callbacks are accepted (reveals server IP).":"Lorsque activé, les callbacks Midjourney sont acceptés (révèle l\'IP du serveur).","When enabled, newly created tokens start in the first auto group.":"Lorsqu\'elle est activée, les jetons nouvellement créés commencent dans le premier groupe automatique.","When enabled, prompts are scanned before reaching upstream models.":"Lorsqu\'elle est activée, les invites sont scannées avant d\'atteindre les modèles en amont.","When enabled, the store field will be blocked":"Lorsqu\'il est activé, le champ de la boutique sera bloqué","When enabled, users can pick this group when creating tokens.":"Une fois activé, les utilisateurs peuvent choisir ce groupe lors de la création de jetons.","When enabled, violation requests will incur additional charges.":"Lorsqu\'activé, les requêtes en violation entraîneront des frais supplémentaires.","When enabled, zero-cost models also pre-consume quota before final settlement.":"Lorsqu\'elle est activée, les modèles à coût zéro pré-consomment également du quota avant le règlement final.","When no conditions are set, the operation always executes.":"Sans conditions, l\'opération s\'exécute toujours.","When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.":"Lorsque la surveillance des performances est activée et que les ressources dépassent le seuil, les nouvelles requêtes Relay seront rejetées.","When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.":"Lors de l\'exécution dans des conteneurs ou des environnements éphémères, assurez-vous que le fichier SQLite est mappé à un stockage persistant pour éviter la perte de données au redémarrage.","Whitelist":"Liste blanche","Whitelist (Only allow listed domains)":"Liste blanche (Autoriser uniquement les domaines listés)","Whitelist (Only allow listed IPs)":"Liste blanche (Autoriser uniquement les adresses IP listées)","whsec_xxx":"whsec_xxx","Why only one store + product?":"Pourquoi une seule boutique + un seul produit ?","Window:":"Fenêtre :","Wire encoding for the embedding vectors":"Encodage filaire pour les vecteurs","with conflicts":"avec des conflits","with the API key from your token settings.":"par la clé API de votre page de jetons.","Without additional conditions, only the type above is used for pruning.":"Sans conditions supplémentaires, seul le type ci-dessus est utilisé pour le nettoyage.","Worker Access Key":"Clé d\'accès du Worker","Worker Proxy":"Proxy Worker","Worker URL":"URL du Worker","Workspaces":"Espaces de travail","Write value to the target field":"Écrire la valeur dans le champ cible","x":"x","xAI":"xAI","Xinference":"Xinference","Xunfei":"Xunfei","Year":"Année","years":"ans","Yes":"Oui","You are about to delete {{count}} API key(s).":"Vous êtes sur le point de supprimer {{count}} clé(s) API.","You are running the latest version ({{version}}).":"Vous utilisez la dernière version ({{version}}).","You can close this tab once the binding completes or a success message appears in the original window.":"Vous pouvez fermer cet onglet une fois la liaison terminée ou qu\'un message de succès apparaît dans la fenêtre d\'origine.","You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.":"Vous pouvez les ajouter manuellement dans \\"Noms de modèles personnalisés\\", cliquer sur \\"Remplir\\" puis soumettre, ou utiliser les opérations ci-dessous pour les gérer automatiquement.","You can only check in once per day":"Vous ne pouvez vous connecter qu\'une fois par jour","You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.":"Vous vous engagez à ne pas utiliser ce système pour mettre en œuvre, faciliter ou indirectement réaliser des actes violant les lois et règlements applicables, les exigences réglementaires, les règles des plateformes, l’intérêt public ou les droits et intérêts légitimes de tiers.","You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.":"Vous vous engagez à utiliser les API, comptes, clés, quotas et capacités de service en amont uniquement dans le cadre d’une autorisation légale obtenue auprès des fournisseurs de services en amont, fournisseurs de modèles ou ayants droit concernés, et à ne pas effectuer de revente, trafic, distribution ou autre commercialisation non conforme sans autorisation.","You don\'t have necessary permission":"Vous n\'avez pas la permission nécessaire","You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.":"Vous avez légalement obtenu l’autorisation pour les API de modèles, comptes, clés et quotas connectés.","You have unsaved changes":"Vous avez des modifications non enregistrées","You have unsaved changes. Are you sure you want to leave?":"Vous avez des modifications non enregistrées. Êtes-vous sûr de vouloir quitter ?","You Pay":"Vous payez","You save":"Vous économisez","You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.":"Vous comprenez et assumez indépendamment la responsabilité juridique découlant du déploiement, de l’exploitation et de la facturation.","You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.":"Vous comprenez que ce rappel de conformité est uniquement un avis de risque et ne constitue ni un conseil juridique, ni une conclusion d’examen de conformité, ni une garantie de la légalité de votre utilisation de ce système ; vous devez consulter des conseillers juridiques ou conformité professionnels selon votre situation réelle.","You will be redirected to Telegram to complete the binding process.":"Vous serez redirigé vers Telegram pour terminer le processus de liaison.","You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.":"Vous serez redirigé automatiquement. Vous pouvez revenir à la page précédente si rien ne se passe après quelques secondes.","your AI integration?":"votre intégration IA ?","Your Azure OpenAI endpoint URL":"Votre URL de point de terminaison Azure OpenAI","Your Bot Name":"Nom de votre Bot","Your Cloudflare Account ID":"Votre ID de compte Cloudflare","Your Discord OAuth Client ID":"Votre ID client OAuth Discord","Your Discord OAuth Client Secret":"Votre secret 
107client OAuth Discord","Your GitHub OAuth Client ID":"Votre ID Client OAuth GitHub","Your GitHub OAuth Client Secret":"Votre Secret Client OAuth GitHub","Your new backup codes are ready":"Vos nouveaux codes de secours sont prêts","Your Referral Link":"Votre lien de parrainage","Your setup guide is collapsed so usage stays in focus.":"Le guide de configuration est réduit afin de garder l\'utilisation au premier plan.","Your system access token for API authentication. Keep it secure and don\'t share it with others.":"Votre jeton d\'accès système pour l\'authentification API. Gardez-le en sécurité et ne le partagez pas avec d\'autres.","Your Telegram Bot Token":"Votre Jeton de Bot Telegram","Your transaction history will appear here":"Votre historique de transactions apparaîtra ici","Your Turnstile secret key":"Votre clé secrète Turnstile","Your Turnstile site key":"Votre clé de site Turnstile","Zero retention":"Aucune rétention","Zhipu":"Zhipu","Zhipu V4":"Zhipu V4","Zoom":"Zoom"}}'),M=JSON.parse('{"translation":{"360":"360","1000":"1000","10000":"10000","_copy":"_copy",",":", ",", and":"、および",",and ":", and ","、":", ","? This action cannot be undone.":"? この操作は元に戻せません。",". Please fix the JSON before saving.":"。保存する前にJSONを修正してください。",". This action cannot be undone.":"。この操作は元に戻せません。","...":"...","\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"":"\\"default \\":\\" us - central 1 \\", \\"claude -3 -5 - sonnet -20240620 \\":\\" europe - west 1 \\"","({{total}} total, {{omit}} omitted)":"(合計 {{total}} 件、{{omit}} 件を省略)","(Leave empty to dissolve tag)":"(タグを解除するには空欄のままにしてください)","(Optional: redirect model names)":"(オプション: モデル名をリダイレクト)","(Override all channels\' groups)":"(全チャネルのグループを上書き)","(Override all channels\' models)":"(全チャネルのモデルを上書き)","[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]":"[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]","{\\"original-model\\": \\"replacement-model\\"}":"{\\" original - model \\":\\" replacement - model \\"}","{{category}} Models":"{{category}} モデル","{{count}} channel(s) deleted":"{{count}} 個のチャネルを削除しました","{{count}} channel(s) disabled":"{{count}} 個のチャネルを無効にしました","{{count}} channel(s) enabled":"{{count}} 個のチャネルを有効にしました","{{count}} channel(s) failed to disable":"{{count}} 個のチャネルの無効化に失敗しました","{{count}} channel(s) failed to enable":"{{count}} 個のチャネルの有効化に失敗しました","{{count}} days ago":"{{count}} 日前","{{count}} days remaining":"残り {{count}} 日","{{count}} disabled channel(s) deleted":"{{count}} 個の無効チャネルを削除しました","{{count}} hours ago":"{{count}} 時間前","{{count}} incidents":"{{count}} 件のインシデント","{{count}} incidents in the last 24 hours":"過去 24 時間に {{count}} 件のインシデント","{{count}} incidents in the last 30 days":"過去 30 日間で {{count}} 件のインシデント","{{count}} IP(s)":"{{count}} IP","{{count}} log entries removed.":"{{count}} 件のログエントリを削除しました。","{{count}} minutes ago":"{{count}} 分前","{{count}} models":"{{count}} モデル","{{count}} months ago":"{{count}} ヶ月前","{{count}} override":"{{count}} 個のオーバーライド","{{count}} selected targets available for bulk copy.":"一括コピーに使用できる対象が {{count}} 個選択されています。","{{count}} tiers":"{{count}} 段階","{{count}} vendors":"{{count}} ベンダー","{{count}} weeks ago":"{{count}} 週間前","{{field}} updated to {{value}}":"{{field}} を {{value}} に更新しました","{{field}} updated to {{value}} for tag: {{tag}}":"タグ「{{tag}}」の {{field}} を {{value}} に更新しました","{{method}} {{route}}":"{{method}} {{route}}","{{modality}} not supported":"{{modality}} はサポートされていません","{{modality}} supported":"{{modality}} をサポート","{{n}} model(s) selected":"{{n}}
107 件のモデルを選択済み","{{value}}ms":"{{value}}ミリ秒","{{value}}s":"{{value}}秒","@lobehub/icons key":"@lobehub/icons キー","@lobehub/icons key name":"@lobehub/icons キー名","/status/":"/status/","/your/endpoint":"/your/endpoint","#1 App":"#1 アプリ","#1 by usage":"利用量1位","#1 Model":"#1 モデル","% off":"% OFF","`, and `-nothinking` suffixes while routing to the correct Gemini variant.":"`, および `-nothinking` サフィックスを、正しい Gemini バリアントにルーティングする際に使用します。","© 2025 Your Company. All rights reserved.":"© 2025 Your Company. 全著作権所有。","+{{count}} more":"他 {{count}} ä»¶","| Based on":"| に基づく","0 means data is kept permanently":"0 はデータを永続的に保持することを意味します","0 means unlimited":"0は無制限を意味します","1 Day":"1日","1 day ago":"1日前","1 hour":"1 時間","1 Hour":"1時間","1 hour ago":"1時間前","1 minute":"1 分","1 minute ago":"1分前","1 Month":"1ヶ月","1 month ago":"1ヶ月前","1 week ago":"1週間前","1 year ago":"1年前","1. Create an application in your Gotify server":"1. Gotifyサーバーでアプリケーションを作成します","10 / page":"10 / ページ","100 / page":"100 / ページ","14 Days":"14日","192.168.1.1&#10;10.0.0.0/8":"192.168.1.1&#10;10.0.0.0/8","1M":"1M","1W":"1W","2. Copy the application token":"2. アプリケーショントークンをコピーします","20 / page":"20 / ページ","24 Hours":"24時間","24 hours ago":"24時間前","29 Days":"29日","3. Enter your Gotify server URL and token above":"3. 上記にGotifyサーバーのURLとトークンを入力します","30 Days":"30日","30 days ago":"30日前","30d change":"30日変化","5 minutes":"5 分","5-Hour Window":"5時間ウィンドウ","50 / page":"50 / ページ","7 Days":"7日","7 days ago":"7日前","80,443,8080":"80,443,8080","A billing multiplier. Lower ratios mean lower API call costs.":"課金倍率です。倍率が低いほど API 呼び出しコストは低くなります。","A focused home for keys, balance, routing, and service health.":"キー、残高、ルーティング、サービス状態を集約したホームです。","About":"このサービスについて","About {{days}} days left":"約 {{days}} 日分","Accept Unpriced Models":"価格設定されていないモデルを許可","Accepts a JSON array of model identifiers that support the Imagine API.":"Imagine APIをサポートするモデル識別子のJSON配列を受け入れます。","Accepts comma-separated status codes and inclusive ranges.":"カンマ区切りのステータスコードと包含範囲を受け入れます。","Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.":"標準的で統一されたAPIプロトコルを介して、膨大なモデルにアクセス。AIアプリケーションを強化し、デジタル資産を管理し、未来へと繋げます。","Access Denied Message":"アクセス拒否メッセージ","Access Forbidden":"アクセス禁止","Access Policy (JSON)":"アクセスポリシー (JSON)","Access previous conversations and start new ones.":"以前の会話にアクセスし、新しい会話を開始します。","Access Token":"アクセストークン","AccessKey / SecretAccessKey":"AccessKey/SecretAccessKey","Account Binding Management":"アカウント連携管理","Account Bindings":"アカウントバインディング","Account created! Please sign in":"アカウントが作成されました!ログインしてください","Account deleted successfully":"アカウントが正常に削除されました","Account ID *":"アカウントID *","Account Info":"アカウント情報","Account used when authenticating with the SMTP server":"SMTPサーバーで認証する際に使用されるアカウント","acknowledge the related legal risks":"関連する法的リスクを認識します","Across all groups":"全グループを通じて","Action":"アクション","Action confirmation":"操作確認","Actions":"操作","active":"有効","Active":"有効","Active apps":"アクティブなアプリ","Active Cache Count":"アクティブキャッシュ数","Active Files":"アクティブファイル","Active models":"アクティブなモデル","active users":"アクティブユーザー","Actual Amount":"実際の金額","Actual Model":"実際のモデル","Actual Model:":"実際のモデル:","Adapt `-thinking` suffix requests to Anthropic native thinking behavior while keeping billing predictable.":"`-thinking` サフィックス付きリクエストを Anthropic ネイティブの思考動作に適配し、課金を予測可能に保ちます。","Add":"追加","Add \\"{{value}}\\"":"\\"{{value}}\\" を追加","Add {{title}}":"{{title}}を追加","Add a group identifier to the auto assignment list.":"自動割り当てリストにã
107‚°ãƒ«ãƒ¼ãƒ—識別子を追加します。","Add a new API key by providing necessary info.":"必要な情報を提供して新しいAPIキーを追加。","Add a new channel by providing the necessary information.":"必要な情報を提供して新しいチャネルを追加。","Add a new model to the system by providing the necessary information.":"必要な情報を提供してシステムに新しいモデルを追加してください。","Add a new user by providing necessary info.":"必要な情報を提供して新しいユーザーを追加します。","Add a new vendor to the system":"システムに新しいベンダーを追加","Add an extra layer of security to your account":"アカウントにセキュリティの追加レイヤーを追加します","Add and submit":"追加して送信","Add Announcement":"お知らせを追加","Add API":"API追加","Add API Shortcut":"API ショートカットを追加","Add auto group":"自動グループを追加","Add chat preset":"チャットプリセットを追加","Add condition":"条件を追加","Add Condition":"条件を追加","Add credits":"クレジットを追加","Add custom model \\"{{value}}\\"":"カスタムモデル「{{value}}」を追加","Add discount tier":"割引ティアを追加","Add each model or tag you want to include.":"含めたい各モデルまたはタグを追加。","Add FAQ":"FAQ追加","Add from available models...":"利用可能なモデルから追加...","Add Funds":"残高チャージ","Add group":"グループを追加","Add Group":"グループを追加","Add group rate limit":"グループレート制限を追加","Add group rules":"グループルールを追加","Add Mapping":"マッピングを追加","Add method":"メソッドを追加","Add missing models":"不足しているモデルを追加","Add Mode":"モードを追加","Add model":"モデル追加","Add Model":"モデルを追加","Add model pricing":"モデル料金を追加","Add Models":"モデルを追加","Add new amount":"新しい金額を追加","Add new redemption code(s) by providing necessary info.":"必要な情報を提供して新しい引き換えコードを追加します。","Add OAuth Provider":"OAuthプロバイダーを追加","Add param/header":"パラメータ/ヘッダーを追加","Add payment method":"決済方法を追加","Add photos or files":"写真やファイルを追加","Add product":"製品を追加","Add Provider":"プロバイダーを追加","Add Quota":"クォータを追加","Add ratio override":"倍率オーバーライドを追加","Add Row":"行を追加","Add Rule":"ルールを追加","Add rule group":"ルールグループを追加","Add selectable group":"選択可能なグループを追加","Add subscription":"サブスクリプションを追加","Add tags...":"タグを追加...","Add tier":"ティアを追加","Add time condition":"時間条件を追加","Add time rule group":"時間ルールグループを追加","Add Uptime Kuma Group":"Uptime Kuma グループを追加","Add User":"ユーザーを追加","Add user group":"ユーザーグループを追加","Add your API keys, set up channels and configure access permissions":"APIキーを追加し、チャネルを設定してアクセス権限を構成します","Added {{count}} model(s)":"{{count}} 個のモデルを追加しました","Added successfully":"追加に成功しました","Additional Conditions":"追加条件","Additional information":"追加情報","Additional Information":"追加情報","Additional Limit":"追加上限","Additional Limits":"追加上限","Additional metered capability":"追加の従量制機能","Adjust filters, then search to refresh the logs.":"フィルターを調整してから検索し、ログを更新します。","Adjust Quota":"クォータを調整","Adjust response formatting, prompt behavior, proxy, and upstream automation.":"レスポンス形式、プロンプト動作、プロキシ、上流自動化を調整します。","Adjust the appearance and layout to suit your preferences.":"好みに合わせて外観とレイアウトを調整します。","Admin":"管理者","Admin access required":"管理者アクセスが必要です","Admin area":"管理者エリア","Admin notes (only visible to admins)":"管理者メモ 
107(管理者のみに表示)","Admin Only":"管理者のみ","Administer user accounts and roles.":"ユーザーアカウントとロールを管理します。","Administrator account":"管理者アカウント","Administrator username":"管理者ユーザー名","Advanced":"高度な設定","Advanced Configuration":"詳細設定","Advanced options":"詳細オプション","Advanced Options":"詳細オプション","Advanced platform configuration.":"高度なプラットフォーム設定。","Advanced Settings":"詳細設定","Advanced text editing":"高度なテキスト編集","Aesthetic style":"スタイル","After clicking the button, you\'ll be asked to authorize the bot":"ボタンをクリックすると、ボットの認証を求められます","After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?":"無効化するとユーザーに表示されなくなりますが、過去の注文には影響しません。続行しますか?","After enabling, the plan will be shown to users. Continue?":"有効化するとユーザーに表示されます。続行しますか?","After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?":"無効化するとこのサブスクリプションは即座に停止されます。履歴記録には影響しません。続行しますか?","After scanning, the binding will complete automatically":"スキャン後、バインドは自動的に完了します","Agent ID *":"エージェントID *","Aggregate tokens delivered across the platform":"プラットフォーム全体で提供された累計トークン","Aggregate traffic across every category":"全カテゴリの合計トラフィック","Aggregated across enabled groups":"有効なグループで集計","Aggregated across the apps below":"下記アプリで集計","Aggregated traffic by upstream model provider":"上流モデルプロバイダー別の集計トラフィック","Aggregated usage metrics and trend charts.":"集計された使用量メトリクスとトレンドチャート。","aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.":"50以上のAIプロバイダーを統一APIで集約。アクセス管理、コスト追跡、スケーリングを簡単に。","Aggregation bucket":"集計バケット","AGPL v3.0 License":"AGPL v3.0ライセンス","AI Application Infrastructure Foundation":"AI アプリケーションのインフラ基盤","AI model testing environment":"AIモデルテスト環境","AI models":"AIモデル","AI models supported":"AIモデル対応","AI Proxy":"AIプロキシ","AI Proxy Library":"AIプロキシライブラリ","AIGC2D":"AIGC2D","AILS":"AILS","AK/SK mode: use AccessKey|SecretAccessKey|Region":"AK/SKモード: AccessKey | SecretAccessKey | Regionを使用","Ali":"Ali","Alipay":"Alipay","All":"すべて","All categories":"すべてのカテゴリ","All conditions must match before this tier is used.":"この段階を使用するには、すべての条件に一致する必要があります。","All edits are overwrite operations. Leave fields empty to keep current values unchanged.":"すべての編集は上書き操作です。現在の値を変更しないままにするには、フィールドを空のままにしてください。","All files exceed the maximum size.":"すべてのファイルが最大サイズを超えています。","All Groups":"すべてのグループ","All Models":"すべてのモデル","All models in use are properly configured.":"使用中のすべてのモデルが適切に構成されています。","All Must Match (AND)":"すべて一致(AND)","All requests must include":"すべてのリクエストには","All Status":"すべてのステータス","All Sync Status":"すべての同期状態","All systems operational":"すべて正常稼働中","All Tags":"すべてのタグ","All Types":"すべてのタイプ","All upstream data is trusted":"すべてのアップストリームデータは信頼されています","All Vendors":"すべてのベンダー","All-time":"全期間","Allocated Memory":"割り当て済みメモリ","Allow accountFilter parameter":"accountFilter パラメータを許可","Allow balance redemption":"残高での交換を許可","Allow Claude beta query passthrough":"Claude ベータクエリのパススルーを許可","Allow clients to query configured ratios via `/api/ratio`.":"クライアントが `/api/ratio` 経由で設定された比率を照会できるようにします。","Allow HTTP image requests":"HTTP画像リクエストを許可","Allow include usage obfuscation passthrough":"使用量難読化のパススルーを許可","Allow inference geography passthrough":"推論ジオグラフィのパススルーを許可","Allow inference_geo passthrough":"inference_geo パススルーを許可","Allow Insecure Origins":"安全でã
107ªã„オリジンを許可","Allow new users to register":"新規ユーザーの登録を許可","Allow Private IPs":"プライベートIPを許可","Allow registration with password":"パスワードによる登録を許可","Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)":"プライベートIP範囲へのリクエストを許可 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)","Allow Retry":"リトライ許可","Allow safety_identifier passthrough":"SAFETY_IDENTIFIERパススルーを許可する","Allow service_tier passthrough":"Service_tierパススルーを許可する","Allow speed passthrough":"speed パススルーを許可","Allow upstream callbacks":"アップストリームコールバックを許可","Allow users to check in daily for random quota rewards":"ユーザーが毎日チェックインしてランダムなクォータ報酬を受け取れるようにする","Allow users to enter promo codes":"ユーザーがプロモーションコードを入力できるようにする","Allow users to log in with password":"ユーザーがパスワードでログインできるようにする","Allow users to register and sign in with Passkey (WebAuthn)":"ユーザーがPasskey (WebAuthn) で登録およびサインインできるようにする","Allow users to sign in with Discord":"ユーザーがDiscordでログインできるようにする","Allow users to sign in with GitHub":"ユーザーがGitHubでサインインできるようにする","Allow users to sign in with LinuxDO":"ユーザーがLinuxDOでサインインできるようにする","Allow users to sign in with OpenID Connect":"ユーザーがOpenID Connectでサインインできるようにする","Allow users to sign in with Telegram":"ユーザーがTelegramでサインインできるようにする","Allow users to sign in with this provider":"このプロバイダーでサインインを許可する","Allow users to sign in with WeChat":"ユーザーがWeChatでサインインできるようにする","Allow using models without price configuration":"価格設定なしでモデルの使用を許可","Allowed":"許可","Allowed Origins":"許可するオリジン","Allowed Ports":"許可するポート","Already have an account?":"アカウントをお持ちの方?","Always matches (default tier).":"常に一致(デフォルト ティア)。","Amount":"金額","Amount cannot be changed when editing.":"編集時は金額を変更できません。","Amount discount":"割引額","Amount Due":"お支払い金額","Amount must be a whole number":"金額は整数でなければなりません","Amount must be greater than 0":"金額は 0 より大きくなければなりません","Amount of quota to credit to user account.":"ユーザーアカウントに付与するクォータの量。","Amount options must be a JSON array":"金額オプションは JSON 配列でなければなりません","Amount to pay:":"支払い金額:","An unexpected error occurred":"予期せぬエラーが発生しました","and":"および","Announcement added. Click \\"Save Settings\\" to apply.":"お知らせが追加されました。\\"設定を保存\\" をクリックして適用してください。","Announcement content":"お知らせの内容","Announcement deleted. Click \\"Save Settings\\" to apply.":"お知らせが削除されました。\\"設定を保存\\" をクリックして適用してください。","Announcement Details":"お知らせの詳細","Announcement displayed to users (supports Markdown & HTML)":"ユーザーに表示されるお知らせ (Markdown & HTML対応)","Announcement updated. Click \\"Save Settings\\" to apply.":"お知らせが更新されました。\\"設定を保存\\" をクリックして適用してください。","Announcements":"お知らせ","Announcements saved successfully":"お知らせが正常に保存されました","Answer":"回答","Answers for common access and billing questions":"アクセスと請求に関するよくある質問への回答","Anthropic":"Anthropic","Any Match (OR)":"いずれか一致(OR)","API":"API","API Access":"API アクセス","API Addresses":"APIアドレス","API Base URL (Important: Not Chat API) *":"APIベースURL (重要: チャットAPIではありません) *","API Base URL *":"APIベースURL *","API Endpoints":"APIエンドポイント","API Info":"API情報","API info added. Click \\"Save Settings\\" to apply.":"API情報が追加されました。「Save Settings」をクリックして適用してください。","API info deleted. Click \\"Save Settings\\" to apply.":"API情報が削除されました。「Save Settings」をクリックして適用してください。","API info saved successfully":"API情報が正常に保存さã
107‚Œã¾ã—た","API info updated. Click \\"Save Settings\\" to apply.":"API情報が更新されました。「Save Settings」をクリックして適用してください。","API key":"APIキー","API Key":"APIキー","API Key (one per line for batch mode)":"API キー (バッチモード時は1行に1つ)","API Key (Production)":"APIキー(本番)","API Key (Sandbox)":"APIキー(サンドボックス)","API Key *":"APIキー *","API Key created successfully":"APIキーが正常に作成されました","API Key deleted successfully":"APIキーが正常に削除されました","API Key disabled successfully":"APIキーが正常に無効化されました","API Key enabled successfully":"APIキーが正常に有効化されました","API key from the provider":"プロバイダからのAPIキー","API key is required":"APIキーが必要です","API Key mode (does not support batch creation)":"APIキー モード(一括作成には対応していません)","API Key mode: use APIKey|Region":"APIキーモード: use APIKey | Region","API Key updated successfully":"APIキーが正常に更新されました","API Keys":"APIキー","API Private Key":"API 秘密鍵","API Requests":"APIリクエスト","API secret":"APIシークレット","API token management":"APIトークン管理","API URL":"API URL","API usage records":"API使用記録","API2GPT":"API2GPT","App":"アプリ","App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.":"ここに表示されているアプリランキングはプレビュー用のシミュレーションデータです。バックエンド連携の完了後、実データに置き換えられます。","Append":"末尾に追加","Append mode: New keys will be added to the end of the existing key list":"追記モード: 新しいキーは既存のキー一覧の末尾に追加されます","Append Template":"テンプレートを追加","Append to channel":"チャネルに追加","Append to End":"末尾に追加","Append to existing keys":"既存のキーに追加","Append value to array / string / object end":"配列/文字列/オブジェクトの末尾に値を追加","appended":"追加済み","Application":"アプリケーション","Applied {{name}} pricing to {{count}} models":"{{name}} の料金を {{count}} 個のモデルに適用しました","Applied upstream model changes to {{count}} channels":"{{count}} 件のチャネルに上流モデルの変更を適用しました","Applied upstream model changes to channel (ID: {{id}})":"チャネル(ID: {{id}})に上流モデルの変更を適用しました","Applies to custom completion endpoints. JSON map of model → ratio.":"カスタム補完エンドポイントに適用されます。モデル → 比率のJSONマップ。","Apply All Upstream Updates":"すべてのアップストリーム更新を適用","Apply Filters":"フィルターを適用","Apply IP Filter to Resolved Domains":"解決されたドメインにIPフィルターを適用","Apply Overwrite":"上書き適用","Apply Sync":"同期を適用","Applying...":"適用中...","Approx.":"約","apps":"アプリ","Apps":"アプリ","apps tracked":"個のアプリを追跡","Apps using the most tokens through new-api":"new-api 経由で最も多くのトークンを利用しているアプリ","are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.":"もここにリストされています。`/v1/models` レスポンスをユーザーフレンドリーに保ち、ベンダー固有の名前を隠すために、Models からこれらを削除します。","Are you sure you want to delete":"削除してもよろしいですか","Are you sure you want to delete {{count}} model(s)? This action cannot be undone.":"{{count}} 個のモデルを削除してもよろしいですか?この操作は元に戻せません。","Are you sure you want to delete all auto-disabled keys? This action cannot be undone.":"すべての自動無効化されたキーを削除してもよろしいですか?この操作は元に戻せません。","Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.":"デプロイ \\"{{name}}\\" を削除してもよろしいですか?この操作は元に戻せません。","Are you sure you want to delete this key? This action cannot be undone.":"このキーを削除してもよろしいですか?この操作は元に戻せません。","Are you sure you want to disable all enabled keys?":"すべての有効なキーを無効にすることをよろしいですか?","Are you sure you want to enable all keys?":"すべてのキーを有効にすることをよろしいですか?","Are you sure you want to manually complete this order? The user will be credited 
107with the corresponding quota.":"この注文を手動で完了してもよろしいですか?ユーザーには対応するクォータがクレジットされます。","Are you sure you want to sign out? You will need to sign in again to access your account.":"ログアウトしてもよろしいですか?アカウントにアクセスするには再度ログインする必要があります。","Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.":"このユーザーの{{provider}}連携を解除してもよろしいですか?このユーザーはこの方法でログインできなくなります。","Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.":"{{provider}}の連携を解除してもよろしいですか?この方法でログインできなくなります。","Are you sure?":"よろしいですか?","Area Chart":"面グラフ","Args (space separated)":"引数 (スペース区切り)","Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.":"チャットクライアントプリセットの配列。各項目は、クライアント名とそのURLという1つのキーと値のペアを持つオブジェクトです。","Asc":"昇順","Ask anything":"何でも質問する","Assigned by administrator only":"管理者のみ割り当て","Assigned by administrators and used to represent a user level, such as default or vip.":"管理者が割り当て、default や vip などのユーザーレベルを表します。","Async task refund":"非同期タスク返金","At least one model regex pattern is required":"少なくとも1つのモデル正規表現パターンが必要です","At least one valid key source is required":"少なくとも1つの有効なキーソースが必要です","Attach":"添付","Audio":"音声","Audio comp.":"音声補完","Audio completion ratio":"音声補完倍率","Audio In":"音声入力","Audio input":"音声入力","Audio Input":"音声入力","Audio input price":"音声入力価格","Audio Input Price":"音声入力価格","Audio Out":"音声出力","Audio output":"音声出力","Audio Output":"音声出力","Audio output price":"音声出力価格","Audio output price requires an audio input price.":"音声出力価格には音声入力価格が必要です。","Audio playback failed":"音声の再生に失敗しました","Audio Preview":"音声プレビュー","Audio ratio":"音声倍率","Audio Tokens":"音声トークン","Auth configured":"認証設定済み","Auth Style":"認証スタイル","auth.resetPasswordConfirm.backToLogin":"ログインに戻る","auth.resetPasswordConfirm.confirm":"パスワードリセットを確認","auth.resetPasswordConfirm.description":"新しいパスワードを生成するには、リセット要求を確認してください。","auth.resetPasswordConfirm.retry":"再試行 ({{seconds}}秒)","auth.resetPasswordConfirm.success":"パスワードが正常にリセットされました","Authentication":"認証","Authentication Method":"認証方式","Authenticator code":"認証コード","Authorization Endpoint":"認可エンドポイント","Authorization Endpoint (Optional)":"認証エンドポイント (オプション)","Authorize":"認証","Auto":"自動","Auto (Circuit Breaker)":"自動(サーキットブレーカー)","Auto assignment order":"自動割り当て順序","Auto Ban":"自動BAN","Auto detect (default)":"自動検出 (デフォルト)","Auto Disabled":"自動無効化","Auto group behavior":"auto グループの動作","Auto Group Chain":"自動グループチェーン","Auto refresh":"自動更新","Auto Sync Upstream Models":"アップストリームモデルの自動同期","Auto-disable status codes":"自動無効化するステータスコード","Auto-discover":"自動検出","Auto-discovers endpoints from the provider":"プロバイダーからエンドポイントを自動検出します","Auto-fill when one field exists and another is missing":"一方のフィールドがあり他方が欠けている場合に自動補完","Auto-retry status codes":"自動リトライするステータスコード","Automatically disable channel on repeated failures":"繰り返しの失敗でチャネルを自動的に無効にする","Automatically disable channels exceeding this response time":"この
107応答時間を超えるチャネルを自動的に無効にする","Automatically disable channels when tests fail":"テストが失敗したときにチャネルを自動的に無効にする","Automatically probe all channels in the background":"バックグラウンドですべてのチャネルを自動的にプローブする","Automatically replaces upstream callback URLs with the server address.":"アップストリームコールバック URL をサーバーアドレスに自動的に置き換えます。","Automatically selects the best available group with circuit breaker mechanism":"回路ブレーカーメカニズム付きで最適な利用可能なグループを自動的に選択","Automatically sync model list when upstream changes are detected":"アップストリームの変更が検出されたときにモデルリストを自動的に同期","Availability (last 24h)":"可用性(過去 24 時間)","Available":"空き","Available disk space":"利用可能なディスク容量","Available Models":"利用可能なモデル","Available Rewards":"利用可能な報酬","Average latency":"平均レイテンシ","Average latency, TTFT, and success rate by group":"グループ別の平均レイテンシ、TTFT、成功率","Average latency, TTFT, TPS, and success rate":"平均レイテンシ、TTFT、TPS、成功率","Average RPM":"平均RPM","Average time-to-first-token (TTFT) by group":"グループ別の平均 Time to First Token(TTFT)","Average tokens per second sustained per group":"グループごとに持続する平均スループット (tokens/秒)","Average TPM":"平均TPM","Average TTFT":"平均 TTFT","AWS":"AWS","AWS Bedrock Claude Compat":"AWS Bedrock Claude 互換テンプレート","AWS Key Format":"AWSキーフォーマット","Azure":"Azure","AZURE_OPENAI_ENDPOINT *":"AZURE_OPENAI_ENDPOINT *","Back":"戻る","Back to Dashboard":"ダッシュボードに戻る","Back to Home":"ホームに戻る","Back to login":"ログインに戻る","Back to Models":"モデルに戻る","Backed up":"バックアップ済み","Background job tracker for queued work.":"キューされた作業のためのバックグラウンドジョブトラッカー。","Backup Code":"バックアップコード","Backup code must be in format XXXX-XXXX":"バックアップコードはXXXX-XXXX形式で入力してください","Backup codes regenerated successfully":"バックアップコードが正常に再生成されました","Backup codes remaining: {{count}}":"残りのバックアップコード: {{count}}","Bad Request":"不正リクエスト","Badge Color":"バッジの色","Baidu":"Baidu","Baidu V2":"Baidu V 2","Balance":"残高","Balance and top-up management":"残高とチャージ管理","Balance depleted":"残高なし","Balance is shown in quota units":"残高はクォータ単位で表示されます","Balance queried successfully":"残高の取得に成功しました","Balance updated successfully":"残高が正常に更新されました","Balance updated: {{balance}}":"残高更新:{{balance}}","Bar Chart":"棒グラフ","Bark Push URL":"BarkプッシュURL","Base address provided by your Epay service":"Epayサービスによって提供されるベースアドレス","Base amount. Actual deduction = base amount × system group rate.":"基本金額。実際の控除 = 基本金額 × システムグループ倍率。","Base input and output token prices for this tier.":"この段階の入力および出力トークンの基本価格です。","Base input price only":"基本入力価格のみ","Base Limits":"基本枠","Base multipliers applied when users select specific groups.":"ユーザーが特定のグループを選択したときに適用される基本乗数。","Base Price":"基本価格","Base rate limit windows for this account.":"このアカウント向けの基本レート制限ウィンドウ。","Base URL":"ベースURL","Base URL is required for this channel type":"このチャネルタイプには Base URL が必要です","Base URL of your Uptime Kuma instance":"Uptime KumaインスタンスのベースURL","Basic Authentication":"基本認証","Basic Configuration":"基本設定","Basic Info":"基本情報","Basic Information":"基本情報","Basic Templates":"基本テンプレート","Batch Add (one key per line)":"一括追加(1行に1つのキー)","Batch delete failed":"一括削除に失敗しました","Batch deleted {{count}} channels":"{{count}} 件のチャネルを一括削除しました","Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed":"一括検出完了:{{channels}} チャネル、{{add}} 個追加、{{remove}} 個削除、{{fails}} 個失敗","Batch detection failed":"一括検出に失敗しました","Batch disable failed":"一括無効化に失敗しました","Batch Edit":"一括編集","Batch edit all channels with this tag. Leave fields empty to keep current values.":"このタグを持つすべてのチャネルを一括編集します。現在の値を維持するには、フィールドを空のままにしてください。","Batch Edit by Tag":"タグによる一括編集","Batch enable failed":"一括有効化に失敗しました","Batch processing failed":"一括処理に失敗しました","Batch set tag for {{count}} channels":"{{count}} 件のチャネルにタグを一括設定しました","Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed":"一括上流モデル更新を処理しました:{{channels}} チャネル、{{added}} 個追加、{{removed}} 個削除、{{fails}} 個失敗","Best for single-tenant deployments. Pricing and billing options stay hidden.":"シングルテナント環境に最適です。料金設定や請求オプションは非表示になります。","Best TTFT":"最良 TTFT","Billable input tokens":"課金対象の入力トークン","Billable output tokens":"課金対象の出力トークン","Billing":"請求","Billing & Payment":"請求と支払い","Billing currency":"請求通貨","Billing Details":"課金詳細","Billing History":"請求履歴","Billing Mode":"課金モード","Billing Process":"課金プロセス","Billing Source":"課金ソース","Bind":"バインド","Bind a Pancake store + product":"Pancake のストアと商品を紐付ける","Bind an email address to your account.":"アカウントにメールアドレスを紐付けます。","Bind Email":"メールアドレス連携","Bind Telegram Account":"Telegram連携","Bind WeChat Account":"WeChatアカウント連携","Binding Information":"連携情報","Binding successful!":"紐付けが成功しました!","Binding your {{provider}} account":"{{provider}} アカウントをバインド中","Binding...":"連携中...","Bindings":"バインド","Blacklist":"ブラックリスト","Blacklist (Block listed domains)":"ブラックリスト (ブロックされたドメイン)","Blacklist (Block listed IPs)":"ブラックリスト (ブロックされたIPアドレス)","Blank Rule":"空のルール","Blend":"ブレンド","Block email aliases (e.g., [email protected])":"メールエイリアスをブロック (例: [email protected])","Blocked keywords":"ブロックされたキーワード","Blocks messages when sensitive keywords are detected.":"機密性の高いキーワードが検出された場合にメッセージをブロックします。","Body param":"ボディパラメータ","Border radius":"角丸","Bot Name":"ボット名","Bot Protection":"ボット保護","Bot Token":"ボットトークン","Bot:":"ボット:","Bound":"連携済み","Bound a subscription":"サブスクリプションを紐付けました","Bound Channels":"バインドされたチャネル","Bound Only":"バインド済みのã
107¿","Bound product:":"紐付け済み商品:","Bound store:":"紐付け済みストア:","Bring channels back online after successful checks":"チェックが成功した後、チャネルをオンラインに戻します","Browse and compare":"参照と比較","Browse available models and pricing":"利用可能なモデルと料金を確認","Browse rankings by category":"カテゴリ別にランキングを表示","Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.":"予算トークン = 最大トークン × 比率。0.002から1までの小数を指定できます。アップストリームの請求と一致させることを推奨します。","Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.":"予算トークン = 最大トークン × 比率。0.1から1までの小数を指定できます。","Budget Tokens Ratio":"予算トークン比率","Budgets":"予算","Build on your API gateway in minutes":"数分で API ゲートウェイ上に構築できます","Built for developers,":"開発者のために構築、","Built-in":"組み込み","Built-in Device":"内蔵デバイス","Built-in: phone fingerprint/face, or Windows Hello; External: USB security key":"内蔵: 電話の指紋/顔認証、またはWindows Hello。外部: USBセキュリティキー","by":"によって","By category":"カテゴリ別","By model author":"モデル提供者別","Cache":"キャッシュ","Cache create (1h) price":"キャッシュ作成価格 (1時間)","Cache create price":"キャッシュ作成価格","Cache Creation":"キャッシュ作成","Cache Creation (1h)":"キャッシュ作成 (1h)","Cache Creation (5m)":"キャッシュ作成 (5m)","Cache Directory":"キャッシュディレクトリ","Cache Directory Disk Space":"キャッシュディレクトリのディスク容量","Cache Directory Info":"キャッシュディレクトリ情報","Cache Entries":"キャッシュエントリ","Cache mode":"キャッシュモード","Cache pricing":"キャッシュ料金","Cache ratio":"キャッシュ倍率","Cache Read":"キャッシュ読み取り","Cache read price":"キャッシュ読み取り価格","Cache repeated prompt prefixes for cheaper, faster reuse":"繰り返しのプロンプト先頭部分をキャッシュし、低コスト・高速に再利用","Cache write":"キャッシュ書き込み","Cache Write":"キャッシュ書き込み","Cache Write (1h)":"キャッシュ書込 (1h)","Cache Write (5m)":"キャッシュ書込 (5m)","Cache write price":"キャッシュ書き込み価格","Cached":"キャッシュ","Cached input":"キャッシュ入力","Calculated price: ${{price}} per 1M tokens":"計算価格:${{price}} / 1M トークン","Calculated ratio: {{ratio}}":"計算倍率:{{ratio}}","Calculating...":"計算中...","Call Count Distribution":"呼び出し回数分布","Call Count Ranking":"呼び出し回数ランキング","Call Proportion":"呼び出し比率","Call Trend":"呼び出し傾向","Callback address":"コールバックアドレス","Callback Caller IP":"コールバック呼び出し元 IP","Callback notification URL":"コールバック通知URL","Callback Payment Method":"コールバック支払い方法","Cancel":"キャンセル","Cancelled":"キャンセル","Cancelled at":"キャンセル日時","Capabilities":"機能","Capture a reusable bundle of models, tags, or endpoints.":"モデル、タグ、またはエンドポイントの再利用可能なバンドルを保存。","Card view":"カード表示","Category":"カテゴリ","Category Name":"分類名称","Category name is required":"カテゴリ名は必須です","Category name must be less than 50 characters":"カテゴリ名は50文字以内にしてください","Caution":"注意","CC Switch":"CC 切替","Centered":"中央揃え","Chain":"チェーン","Change":"変更","Change language":"言語を変更","Change Password":"パスワードの変更","Change To":"変更先","Changed Fields":"変更されたフィールド","Changes are written to the settings draft on save.":"保存すると変更は設定ドラフトに書き込まれます。","Changing...":"変更中...","Channel":"チャネル","Channel Affinity":"チャネルアフィニティ","Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"チャネルアフィニティは、リクエストコンテキストまたは JSON Body から抽出したキーに基づいて、前回成功したチャネルを優先的に再利用します。","Channel Affinity: Upstream Cache Hit":"チャネルアフィニティ:上流キャッシュヒット","Channel copied successfully":"チャネルが正常にコピーされました","Channel created successfully":"チャネルが正常に作成されました","Channel deleted successfully":"チャネルが正常に削除されました","Channel disabled successfully":"チャネルが正常に無効化されました","Channel enabled successfully":"チャネルが正常に有効化されました","Channel Extra Settings":"チャネル詳細設定","Channel ID":"チャネルID","Channel key":"チャネルキー","Channel key unlocked":"チャネルキーが解除されました","Channel models":"チャネルモデル","Channel name is required":"チャネル名が必要です","Channel test completed":"チャネルテストが完了しました","Channel type is required":"チャネルタイプが必要です","Channel updated successfully":"チャネルが正常に更新されました","Channel-specific settings (JSON format)":"チャネル固有の設定 (JSON 形式)","Channel:":"チャネル:","channel(s)? This action cannot be undone.":"チャネルを削除しますか?この操作は元に戻せません。","Channels":"チャネル","Channels deleted successfully":"チャネルが正常に削除されました","Character chat, storytelling, persona":"キャラクター会話・ストーリーテリング・ペルソナ","Chart Preferences":"チャートの環境設定","Chart Settings":"チャート設定","Chat":"チャット","Chat area":"チャットエリア","Chat Area":"チャットエリア","Chat Client Name":"チャットクライアント名","Chat client name is required":"チャットクライアント名は必須です","Chat configuration JSON":"チャット設定JSON","Chat preset not found":"チャットプリセットが見つかりません","Chat Presets":"チャットプリセット","Chat session management":"チャットセッション管理","ChatCompletions -> Responses Compatibility":"ChatCompletions → レスポンス互換","Check for updates":"更新を確認","Check in daily to receive random quota rewards":"毎日チェックインして、ランダムなノルマ報酬を受け取りましょう","Check in now":"今すぐチェックイン","Check line {{line}} for a missing comma.":"{{line}}
107 行目にカンマの抜けがないか確認してください。","Check out the Quick Start":"クイックスタートをご確認ください","Check resolved IPs against IP filters even when accessing by domain":"ドメインによるアクセスであっても、解決されたIPをIPフィルターと照合してチェックします","Check-in failed":"チェックインできませんでした","Check-in Rewards":"チェックイン報酬","Check-in Settings":"チェックイン設定","Check-in successful! Received":"チェックインに成功しました!受け取りました","Checked in":"チェックイン済み","Checking connection":"接続を確認しています","Checking name...":"名前をチェック中...","Checking updates...":"更新を確認中...","checkout.session.completed":"checkout.session.completed","checkout.session.expired":"checkout.session.expired","ChatGPT Subscription (Codex)":"ChatGPT Subscription (Codex)","Chinese":"中国語","Choose a username":"ユーザー名を選択","Choose an amount and payment method":"金額と支払い方法を選択してください","Choose between default expanded, compact icon-only, or full layout mode":"デフォルトの展開表示、コンパクトなアイコンのみ、またはフルレイアウトモードから選択します","Choose between inset, floating, or standard sidebar layout":"インセット、フローティング、または標準のサイドバーレイアウトから選択します","Choose between left-to-right or right-to-left site direction":"左から右、または右から左のサイトの方向を選択します","Choose between system preference, light mode, or dark mode":"システム設定、ライトモード、またはダークモードから選択します","Choose channels to sync upstream ratio configurations from":"アップストリームの比率設定を同期するチャネルを選択してください","Choose Group":"グループを選択","Choose how quota values are shown to users":"クォータ値がユーザーにどのように表示されるかを選択してください","Choose how the platform will operate":"プラットフォームの運用方法を選択","Choose how to filter domains":"ドメインをフィルタリングする方法を選択してください","Choose how to filter IP addresses":"IPアドレスをフィルタリングする方法を選択してください","Choose the bundle type and define the items inside it.":"バンドルタイプを選択し、その中のアイテムを定義してください。","Choose the default charts, range, and time granularity for model analytics.":"モデル分析のデフォルトチャート、範囲、時間粒度を選択します。","Choose where to fetch upstream metadata.":"アップストリームのメタデータをどこからフェッチするかを選択してください。","Choose which charts are selected by default when opening model analytics.":"モデル分析を開いたときにデフォルトで選択されるチャートを選択します。","Classic (Legacy Frontend)":"クラシック(旧フロントエンド)","Claude":"Claude","Claude CLI Header Passthrough":"Claude CLI ヘッダーパススルー","Clean":"問題なし","Clean history logs":"履歴ログをクリーンアップ","Clean logs":"ログをクリア","Clean up inactive cache":"非アクティブキャッシュをクリーンアップ","Clean Up Log Files":"ログファイルをクリーンアップ","Cleaned up {{count}} log files, freed {{size}}":"{{count}}個のログファイルをクリーンアップし、{{size}}を解放しました","Cleaning...":"クリア中...","Cleanup failed":"クリーンアップ失敗","Cleanup Mode":"クリーンアップ方式","Clear":"クリア","Clear all":"すべてクリア","Clear All":"すべてクリア","Clear All Cache":"全キャッシュをクリア","Clear all filters":"すべてのフィルターをクリア","Clear cache for this rule":"このルールのキャッシュをクリア","Clear filters":"フィルターをクリア","Clear Mapping":"マッピングをクリア","Clear mode flags in prompts":"プロンプト内のモードフラグをクリア","Clear search":"検索をクリア","Clear selection":"選択をクリア","Clear selection (Escape)":"選択をクリア (Escape)","Cleared":"クリア済み","Cleared {{bindingType}} binding for user {{username}}":"ユーザー {{username}} の {{bindingType}} 連携を解除しました","Cleared all models":"すべてのモデルをクリアしました","Cleared channel affinity cache":"チャネルアフィニティキャッシュをクリアしました","Cleared disk cache":"ディスクキャッシュをクリアしました","Cleared historical logs":"履歴ログをクリアしました","Cleared log files":"ログファイルをクリアしました","Click \\"Create Plan\\" to create your first subscription plan":"「プラン作成」をクリックして最初のプランを作成してください","Click \\"Generate\\" to create a token":"「生成」をクリックしてトークンを作成","Click any category to drill into 
107its models, apps, and trends":"カテゴリをクリックすると、そのモデル・アプリ・トレンドを掘り下げて確認できます","Click for details":"クリックして詳細を表示","Click save when you\'re done.":"完了したら「保存」をクリックしてください。","Click save when you&apos;re done.":"完了したら保存をクリックしてください。","Click the button below to bind your Telegram account":"下のボタンをクリックしてTelegramアカウントをバインドしてください","Click to open deployment":"クリックして展開を開く","Click to preview audio":"クリックして音声をプレビュー","Click to preview video":"クリックして動画をプレビュー","Click to update balance":"クリックして残高を更新","Click to view Codex usage":"Codex利用状況を見る","Click to view full details":"クリックして詳細を表示","Click to view full error message":"クリックしてエラーメッセージ全文を表示","Click to view full prompt":"クリックしてプロンプト全文を表示","Click to view image":"クリックして画像を表示","Client header value":"クライアントヘッダー値","Client ID":"クライアントID","Client Secret":"クライアントシークレット","Close":"閉じる","Close dialog":"ダイアログを閉じる","Close menu":"メニューを閉じる","Close Today":"今日は表示しない","Cloudflare":"Cloudflare","CNY":"CNY","CNY per USD":"1 USD あたりの CNY","Code":"コード","Code generation, refactoring, autocomplete":"コード生成・リファクタリング・補完","Code interpreter":"コードインタプリタ","Code samples":"コードサンプル","Codes copied!":"コードをコピーしました!","Codex":"Codex","Codex Account & Usage":"Codex アカウントと使用量","Codex channels do not support batch creation":"Codex チャネルは一括作成をサポートしていません","Codex channels use an OAuth JSON credential as the key.":"CodexチャネルはOAuth JSON認証情報をキーとして使用します。","Codex CLI Header Passthrough":"Codex CLI ヘッダーパススルー","Codex credential must be a JSON object with access_token and account_id":"Codex 認証情報は access_token と account_id を含む JSON オブジェクトである必要があります","Cohere":"Cohere","Collapse":"折りたたむ","Collapse All":"すべて折りたたむ","Collect relay latency and success-rate metrics for the model square.":"モデル広場向けに Relay のレイテンシと成功率メトリクスを収集します。","Color":"カラー","Color is required":"色は必須です","Color preset":"カラープリセット","Color:":"色:","Comfortable":"快適","Coming Soon!":"近日公開!","Comma-separated exact model names. Prefix with regex: to ignore by regular expression.":"完全一致のモデル名をカンマ区切りで入力します。regex: で始めると正規表現で除外できます。","Comma-separated list of allowed ports (empty = all ports)":"許可されたポートのカンマ区切りリスト (空欄 = すべてのポート)","Comma-separated model names (leave empty to keep current)":"カンマ区切りのモデル名 (空欄のままにすると現在の設定を維持)","Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo":"カンマ区切りのモデル名、例: gpt-4,gpt-3.5-turbo","Command":"コマンド","Common":"共通","Common Keys":"よく使うキー","Common Logs":"一般的なログ","Common ports include 25, 465, and 587":"一般的なポートには 25, 465, 587 が含まれます","Common User":"一般ユーザー","Community driven, self-hosted, and extensible":"コミュニティ主導、セルフホスト可能、拡張可能","Compact":"コンパクト","Compare each vendor\'s token share across the past few weeks":"過去数週間における各ベンダーのトークンシェアを比較","Compare each vendor\'s token share across the past year":"過去1年における各ベンダーのトークンシェアを比較","Compare each vend
107or\'s token share over the past 24 hours":"過去24時間における各ベンダーのトークンシェアを比較","Compare each vendor\'s token share over the past month":"過去1か月における各ベンダーのトークンシェアを比較","Compare each vendor\'s token share since launch":"ローンチ以降の各ベンダーのトークンシェアを比較","Compare the most popular models on the platform":"プラットフォームで最も人気のあるモデルを比較","compatible API routes":"互換APIルート","Compatible API routes for common AI application workflows":"一般的なAIアプリケーションワークフロー向けの互換APIルート","Complete API documentation with multi-language SDK support":"多言語SDKをサポートする完全なAPIドキュメント","Complete Order":"手動チャージ","Complete these steps to finish the initial installation.":"初期インストールを完了するには、これらの手順を完了してください。","Completed":"完了","Completed top-up order for the user":"ユーザーのチャージ注文を完了しました","Completion":"補完","Completion price":"補完価格","Completion price ($/1M tokens)":"完了価格 (トークン100万あたり$)","Completion ratio":"補完倍率","Compliance confirmation required":"コンプライアンス確認が必要です","Compliance confirmed":"コンプライアンス確認済み","Compliance confirmed successfully":"コンプライアンス確認が完了しました","Concatenate channel system prompt with user&apos;s prompt":"チャネルのシステムプロンプトをユーザーのプロンプトと連結する","Condition Path":"条件パス","Condition Settings":"条件設定","Condition Value":"条件値","Conditional multipliers":"条件付き乗数","Conditions":"条件","Conditions (AND)":"条件(AND)","Confidence":"信頼度","Configuration":"設定","Configuration File":"設定ファイル","Configuration for Creem payment integration":"Creem決済統合の設定","Configuration for Epay payment integration":"Epay決済連携のための設定","Configuration for Stripe payment integration":"Stripe決済連携のための設定","Configuration required":"設定が必要です","Configure":"設定","Configure a Creem product for user recharge options.":"ユーザー チャージオプション用の Creem 製品を設定。","Configure a custom ratio for when users use a specific token group.":"ユーザーが特定のトークングループを使用する際のカスタム倍率を設定します。","Configure a group that users can select when creating API keys.":"ユーザーがAPIキー作成時に選択できるグループを設定します。","Configure a new custom OAuth provider for user authentication.":"ユーザー認証のための新しいカスタムOAuthプロバイダーを設定します。","Configure a payment method for user recharge options.":"ユーザーのチャージオプションのための支払い方法を設定します。","Configure a predefined chat link for end users.":"エンドユーザー向けの事前定義されたチャットリンクを設定します。","Configure and deploy a new container instance.":"新しいコンテナインスタンスを設定してデプロイします。","Configure API documentation links for the dashboard":"ダッシュボード用のAPIドキュメントリンクを設定","Configure at:":"設定場所:","Configure available payment methods. Provide a JSON array.":"利用可能な支払い方法を設定します。JSON配列を提供してください。","Configure Creem products. Provide a JSON array.":"Creem製品を設定。JSON配列を提供してください。","Configure discount rates based on recharge amounts":"チャージ金額に基づいた割引率を設定","Configure experimental data export for the dashboard":"ダッシュボード用の実験的なデータエクスポートを設定","Configure in your Creem dashboard":"Creem ダッシュボードで設定","Configure keyword filtering for prompts and responses.":"プロンプトと応答のキーワードフィルタリングを設定します。","Configure model, caching, and group ratios used for billing":"請求に使用されるモデル、キャッシュ、およびグループ比率を設定します。","Configure monitoring status page groups for the dashboard":"ダッシュボードの監視ステータスページグループを設定します。","Configure per-model ratio for image inputs or outputs.":"画像の入力または出力のモデルごとの比率を設定します。","Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.":"ツールごとの単価($/1K 回)を設定します。リクエスト課金モデルでは追加工具料金はかかりません。","Configure pricing ratios for a specific model.":"特定のモデルの料金比率を設定します。","Configure rate limiting rules for a specific user group.":"特定のユーザーグループのレート制限ルールを設定します。","Configure the ratio for this group.":"このグループの比率を設定します。","Configure upstream providers and routing.":"アップストリームプロバイダーとルーティングを設定。","Configure Waffo Pancake hosted checkout integration for USD-priced top-ups":"USD 建てのチャージ用に Waffo Pancake のホスト型チェックアウト連携を設定","Configure Waffo payment aggregation platform integration":"Waffo決済アグリゲーションプラットフォームの連携を設定","Configure your account behavior preferences":"アカウントの動作設定を設定します。","Configure your account preferences and integrations":"アカウントの設定と統合を設定します。","Configured routes and latency checks":"設定済みルートとレイテンシ確認","Confirm":"確認","Confirm Action":"アクションの確認","Confirm and enable":"確認して有効化","Confirm Batch Update":"バッチ更新の確認","Confirm Billing Conflicts":"請求の競合を確認","Confirm Changes":"変更を確認","Confirm Cleanup":"クリーンアップを確認","Confirm cleanup of inactive disk cache?":"非アクティブなディスクキャッシュをクリーンアップしますか?","Confirm clearing all channel affinity cache":"全チャネルアフィニティキャッシュのクリアを確認","Confirm clearing cache for this rule":"このルールのキャッシュクリアを確認","Confirm compliance":"コンプライアンスを確認","Confirm compliance terms":"コンプライアンス条件を確認","Confirm Creem Purchase":"Creem 購入を確認","Confirm delete":"削除の確認","Confirm disable":"無効化を確認","Confirm enable":"有効化を確認","Confirm invalidate":"無効化を確認","Confirm log cleanup":"ログクリーンアップの確認","Confirm log file cleanup?":"ログファイルをクリーンアップしますか?","Confirm New Password":"新しいパスワードの確認","Confirm password":"パスワードの確認","Confirm Payment":"支払いの確認","Confirm Selection":"選択の確認","Confirm settings and finish setup":"設定を確認してセットアップを完了","confirm that I bear legal responsibility arising from deployment":"デプロイに起因する法的責任を負うことを確認します","Confirm Unbind":"連携解除を確認","Confirm your identity before removing this Passkey from your account.":"このパスキーをアカウントから削除する前に、本人確認を行ってください。","Confirm your identity with Two-factor Authentication before registering a Passkey.":"パスキーを登録する前に、二要素認証で本人確認を行ってください。","Confirmed at {{time}} by user #{{userId}}":"ユーザー #{{userId}} が {{time}} に確認しました","Confirmed payment compliance":"支払いコンプライアンスを確認しました","Conflict":"競合","Connect":"接続","Connect through OpenAI, Claude, Gemini, and other compatible API routes":"OpenAI、Claude、Gemini、その他の互換APIルートから接続","Connected to io.net service normally.":"io.net サービスに正常に接続しました。","Connection error":"接続エラー","Connection failed":"接続に失敗しました","Connection successful":"接続に成功しました","Console":"コンソール","Console area":"コンソールエリア","Console Area":"コンソールエリア","Console Content":"コンソールコンテンツ","Consume":"消費","Consumed 
107in the last 24 hours":"直近24時間の消費量","Container":"コンテナ","Container name":"コンテナ名","Containers":"コンテナ","Contains":"含む","Contains Match":"含む一致","Content":"コンテンツ","Content displayed on the home page (supports Markdown)":"ホームページに表示されるコンテンツ(Markdownをサポート)","Content not found.":"コンテンツが見つかりません。","Content not modified!":"コンテンツが変更されていません!","Content width":"コンテンツ幅","Context":"コンテキスト","Continue":"続行","Continue with {{name}}":"{{name}} で続行","Continue with Discord":"Discord で続行","Continue with GitHub":"GitHub で続行","Continue with LinuxDO":"LinuxDO で続行","Continue with OIDC":"OIDC で続行","Continue with Telegram":"Telegram で続行","Continue with WeChat":"WeChat で続行","Contract review, compliance, summarisation":"契約レビュー・コンプライアンス・要約","Control which models are exposed and which groups may use them.":"公開するモデルと、それらを利用できるグループを制御します。","Controls how much the model thinks before answering":"モデルが回答前に考える深さを制御します","Controls whether user verification (biometrics/PIN) is required during Passkey flows.":"Passkeyフロー中にユーザー認証(生体認証/PIN)が必要かどうかを制御します。","Conversion rate from USD to your custom currency":"USDからカスタム通貨への換算レート","Convert reasoning_content to <think> tag in content":"content内のreasoning_contentを<think>タグに変換","Convert string to lowercase":"文字列を小文字に変換","Convert string to uppercase":"文字列を大文字に変換","Copied":"コピーしました","Copied {{count}} key(s)":"{{count}} 件のキーをコピーしました","Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})":"チャネルを複製しました(元 ID: {{sourceId}})→ {{name}}(新 ID: {{id}})","Copied to clipboard":"クリップボードにコピーしました","Copied: {{model}}":"コピーしました: {{model}}","Copied!":"コピーしました!","Copy":"コピー","Copy {{name}} pricing":"{{name}} の料金をコピー","Copy a request header":"リクエストヘッダーをコピー","Copy All":"すべてコピー","Copy all backup codes":"すべてのバックアップコードをコピー","Copy All Codes":"すべてのコードをコピー","Copy API key":"APIキーをコピー","Copy Channel":"チャネルをコピー","Copy code":"コードをコピー","Copy Connection Info":"接続情報をコピー","Copy failed":"コピーに失敗しました","Copy Field":"フィールドをコピー","Copy Header":"ヘッダーをコピー","Copy Key":"キーをコピー","Copy Link":"リンクをコピー","Copy model name":"モデル名をコピー","Copy model names":"モデル名をコピー","Copy prompt":"プロンプトをコピー","Copy ready-to-run curl":"そのまま実行できる curl をコピー","Copy redemption code":"引き換えコードをコピー","Copy referral link":"紹介リンクをコピー","Copy Request Header":"リクエストヘッダーをコピー","Copy secret key":"シークレットキーをコピー","Copy selected codes":"選択したコードをコピー","Copy selected keys":"選択したキーをコピー","Copy source field to target field":"ソースフィールドをターゲットフィールドにコピー","Copy the key and paste it here":"キーをコピーしてここに貼り付けてください","Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.":"このプロンプトをコピーしてLLM(ChatGPT / Claudeなど)に送り、課金式の設計を依頼してください。","Copy to clipboard":"クリップボードにコピー","Copy token":"トークンをコピー","Copy URL":"URLをコピー","Copying...":"コピー中...","Copywriting, ad creative, SEO":"コピーライティング・広告クリエイティブ・SEO","Core concepts":"基本概念","Core Configuration":"コア設定","Core Features":"主要機能","Core pricing":"基本料金","Cost":"コスト","Cost in USD per request, regardless of tokens used.":"使用されたトークンに関係なく、リクエストあたりのUSDでのコスト。","Cost Tracking":"コスト追跡","Count must be between {{min}} and {{max}}":"カウントは{{min}}から{{max}}
107の間である必要があります","Coze":"Coze","CPU Threshold (%)":"CPU 閾値 (%)","Create":"新規作成","Create a copy of:":"コピーを作成:","Create a key for your app or service":"アプリまたはサービス用のキーを作成","Create a new user group to configure ratio overrides for.":"レートの上書きを設定するための新しいユーザーグループを作成します。","Create account":"アカウントを作成","Create an account":"アカウントを作成","Create an API key to unlock the real request":"実際のリクエストを使うには API キーを作成してください","Create and review invite or credit codes.":"招待コードまたはクレジットコードを作成および確認。","Create API Key":"APIキーを作成","Create cache":"キャッシュを作成","Create cache ratio":"キャッシュ倍率を作成","Create Channel":"チャネルを作成","Create Code":"コードを作成","Create credentials for the root user":"管理者アカウントの認証情報を作成","Create deployment":"デプロイを作成","Create Model":"モデルを作成","Create multiple API keys at once (random suffix will be added to names)":"一度に複数のAPIキーを一括作成(名前にランダムな接尾辞が追加されます)","Create multiple channels from multiple keys":"複数のキーから複数のチャネルを作成","Create multiple redemption codes at once (1-100)":"複数の引き換えコードを一度に作成します (1-100)","Create new subscription plan":"新しいサブスクリプションプランを作成","Create or update frequently asked questions for users":"ユーザー向けのよくある質問を作成または更新します","Create or update system announcements for the dashboard":"ダッシュボードのシステムアナウンスを作成または更新します","Create Plan":"プラン作成","Create Prefill Group":"プレフィルグループを作成","Create Provider":"プロバイダーを作成","Create Redemption Code":"引き換えコードを作成","Create request parameter override rules with a visual editor or raw JSON.":"ビジュアルエディタまたは生のJSONでリクエストパラメータオーバーライドルールを作成します。","Create request parameter override rules without editing raw JSON.":"生の JSON を編集せずにリクエストパラメータ上書きルールを作成します。","Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.":"モデル、タグ、エンドポイント、およびユーザーグループの再利用可能なバンドルを作成し、コンソールの他の場所での設定を高速化します。","Create succeeded":"作成に成功しました","Create Vendor":"ベンダーを作成","Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.":"ダッシュボードのどこでもモデル、タグ、またはエンドポイントの選択を再利用するために、最初のグループを作成します。","Create, revoke, and audit API tokens.":"APIトークンを作成、取り消し、監査。","Created":"作成済み","Created {{count}} redemption codes named {{name}} ({{quota}} each)":"{{count}} 件の引換コード {{name}} を作成しました(各 {{quota}})","Created a custom OAuth provider":"カスタム OAuth プロバイダーを作成しました","Created a deployment":"デプロイメントを作成しました","Created a model":"モデルを作成しました","Created a prefill group":"プリフィルグループを作成しました","Created a subscription plan":"サブスクリプションプランを作成しました","Created a vendor":"ベンダーを作成しました","Created At":"作成日時","Created channel {{name}} (type {{type}}, count {{count}})":"チャネル {{name}} を作成しました(タイプ {{type}}、数 {{count}})","Created user {{username}} (role {{role}})":"ユーザー {{username}} を作成しました(ロール {{role}})","Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.":"保存済みストアに、このプランのタイトルと価格を使って Pancake 商品を作成します。事前に支払い設定で Waffo Pancake を完全に設定する必要があります。","Creating...":"作成中...","Creation failed":"作成に失敗しました","Credential refreshed":"認証情報を更新しました","Credentials":"認証情報","Credentials verification failed":"認証情報ã
107®æ¤œè¨¼ã«å¤±æ•—しました","Credentials verification failed — double-check Merchant ID and API private key.":"認証情報の検証に失敗しました。Merchant ID と API 秘密鍵を再確認してください。","Credit remaining":"残りクレジット","Creem API key (leave blank unless updating)":"Creem API キー (更新しない限り空白のまま)","Creem Gateway":"Creem ゲートウェイ","Creem Payment":"Creem 決済","Creem product ID from your Creem dashboard.":"Creem ダッシュボードから取得した Creem 製品 ID。","Creem products must be a JSON array":"Creem 製品は JSON 配列でなければなりません","Cross-group":"グループ横断","Cross-group retry":"グループ横断リトライ","Currency":"通貨","Currency & Display":"通貨と表示","Current Balance":"現在の残高","Current Billing":"現在の請求","Current Cache Size":"現在のキャッシュサイズ","Current domain":"現在のドメイン","Current email: {{email}}. Enter a new email to change.":"現在のメール: {{email}}。変更するには新しいメールアドレスを入力してください。","Current key":"現在のキー","Current legacy JSON is invali
107d, cannot append":"現在の旧形式JSONが無効なため、追加できません","Current Level Only":"現在の階層のみ","Current models for the longest channel in this tag. May not include all models from all channels.":"このタグ内の最も長いチャネルの現在のモデル。すべてのチャネルのすべてのモデルが含まれているわけではない場合があります。","Current Password":"現在のパスワード","Current Price":"現在の価格","Current quota":"現在のクォータ","Current Value":"現在の値","Current version":"現在のバージョン","Current:":"現在:","Custom":"カスタム","Custom (seconds)":"カスタム(秒)","Custom Amount":"カスタム金額","Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.":"カスタムAPIベースURL。公式チャネルの場合、New APIには組み込みのアドレスがあります。これは、サードパーティのプロキシサイトまたは特別なエンドポイントに対してのみ入力してください。/v1 や末尾のスラッシュを追加しないでください。","Custom API base URL. Leave empty to use provider default.":"カスタム API ベース URL。プロバイダのデフォルトを使用する場合は空にしてください。","Custom Currency":"カスタム通貨","Custom Currency Symbol":"カスタム通貨記号","Custom currency symbol is required":"カスタム通貨記号は必須です","Custom database driver detected.":"カスタムデータベースドライバーが検出されました。","Custom Error Response":"カスタムエラーレスポンス","Custom Home Page":"カスタムホームページ","Custom message shown when access is denied":"アクセス拒否時に表示されるカスタムメッセージ","Custom model (comma-separated)":"カスタムモデル (コンマ区切り)","Custom module":"カスタムモジュール","Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.":"特定のユーザーグループが特定のトークングループを使用する場合のカスタム乗数。例: VIPユーザーが「edit_this」グループトークンを使用する場合、0.9倍のレートが適用されます。","Custom OAuth":"カスタム OAuth","Custom OAuth Providers":"カスタムOAuthプロバイダー","Custom Seconds":"カスタム秒数","Custom sidebar section":"カスタムサイドバーセクション","Custom Time Range":"カスタム時間範囲","Custom Zoom":"カスタムズーム","Customize sidebar display content":"サイドバーの表示内容をカスタマイズ","Daily":"毎日","Daily Check-in":"毎日のチェックイン","Daily token usage by model across the past few weeks":"過去数週間のモデル別日次トークン使用量","Daily token usage by model across the past month":"過去 1 か月にわたるモデル別の日次トークン使用量","Daily token usage by model over the past month":"過去1か月のモデル別日次トークン使用量","Daily uptime over the last 30 days":"過去 30 日間の日次稼働率","Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes":"日次稼働率。{{incidents}} 件のインシデント、合計 {{minutes}} 分","Dark":"ダーク","Dashboard":"ダッシュボード","Dashboard Preferences":"ダッシュボードの環境設定","Dashboards, tokens, and usage analytics.":"ダッシュボード、トークン、使用状況アナリティクス。","Data Dashboard":"データダッシュボード","Data directory:":"データディレクトリ:","Data is stored locally on this device. Use system backups to keep a safe copy.":"データはこのデバイスにローカルに保存されます。安全なコピーを保持するためにシステムバックアップを使用してください。","Data management and log viewing":"データ管理とログ閲覧","Data retention":"データ保持","Database":"データベース","Database check":"データベース確認","Date and time when this announcement should be displayed":"このアナウンスが表示されるべき日時","Date Range":"期間","Day":"日","Day of month":"月内の日","days":"日","Days to Retain":"保持日数","Decreased user quota by {{quota}}":"ユーザーのクォータを {{quota}} 減らしました","Deducted by subscription":"サブスクリプションで控除","DeepSeek":"DeepSeek","default":"デフォルト","Default":"デフォルト","Default (New Frontend)":"デフォルト(新フロントエンド)","Default / range":"デフォルト / 範囲","Default API Version *":"デフォルトのAPIバージョン *","Default API version for this channel":"このチャネルのデフォルトのAPIバージョン","Default Collapse Sidebar":"デフォルトのサイドバー折りたたみ","Default consumption chart":"デフォルトの消費チャート","Default Max Tokens":"デフォルトの最大トークン","Default model call chart":"デフォルトのモデル呼び出しチャート","Default range":"デフォルト範囲","Default Responses API version, if empty, will use the API version above":"デフォルトの応答APIバージョン。ç©
107ºã®å ´åˆã€ä¸Šè¨˜ã®APIバージョンが使用されます","Default system prompt for this channel":"このチャネルのデフォルトのシステムプロンプト","Default time granularity":"デフォルトの時間粒度","Default to auto groups":"デフォルトで自動グループ化","Default TTL (seconds)":"デフォルト TTL(秒)","Defaults to the wallet page when empty":"空欄の場合はウォレットページを既定にします","Define API endpoints for this model (JSON format)":"このモデルのAPIエンドポイントを定義します (JSON形式)","Define endpoint mappings for each provider.":"各プロバイダーごとにエンドポイントのマッピングを定義してください。","Define per-group rules to add, remove, or append selectable groups for specific user groups.":"特定のユーザーグループに対して選択可能なグループを追加、削除、または追加するグループごとのルールを定義します。","Degraded performance recently":"最近パフォーマンスが低下しています","Delete":"削除","Delete (":"削除 (","Delete {{count}} API key(s)?":"{{count}}個のAPIキーを削除しますか?","Delete a runtime request header":"ランタイムリクエストヘッダーを削除","Delete Account":"アカウント削除","Delete All Disabled":"すべての無効なものを削除","Delete All Disabled Channels?":"すべての無効なチャネルを削除しますか?","Delete Auto-Disabled":"自動無効化されたものを削除","Delete Channel":"チャネルを削除","Delete Channels?":"チャネルを削除しますか?","Delete condition":"条件を削除","Delete Condition":"条件を削除","Delete failed":"削除に失敗しました","Delete Field":"フィールドを削除","Delete group":"グループを削除","Delete Header":"ヘッダーを削除","Delete Invalid":"無効を削除","Delete invalid codes":"無効なコードを削除","Delete invalid codes (used/disabled/expired)":"無効なコード(使用済み/無効/期限切れ)を削除","Delete invalid redemption codes":"無効な引き換えコードを削除","Delete Invalid Redemption Codes?":"無効な引き換えコードを削除しますか?","Delete logs":"ログを削除","Delete mapping":"マッピングを削除","Delete Model":"モデルを削除","Delete Models?":"モデルを削除しますか?","Delete Provider":"プロバイダーを削除","Delete Request Header":"リクエストヘッダーを削除","Delete selected API keys":"選択したAPIキーを削除","Delete selected channels":"選択したチャネルを削除","Delete selected models":"選択したモデルを削除","Deleted":"削除済み","Deleted a custom OAuth provider":"カスタム OAuth プロバイダーを削除しました","Deleted a deployment":"デプロイメントを削除しました","Deleted a model":"モデルを削除しました","Deleted a passkey":"パスキーを削除しました","Deleted a prefill group":"プリフィルグループを削除しました","Deleted a redemption code":"引換コードを削除しました","Deleted a vendor":"ベンダーを削除しました","Deleted all disabled channels ({{count}})":"無効なチャネルをすべて削除しました({{count}})","Deleted channel {{name}} (ID: {{id}})":"チャネル {{name}} を削除しました(ID: {{id}})","Deleted invalid redemption codes":"無効な引換コードを削除しました","Deleted successfully":"削除しました","Deleted user {{username}} (ID: {{id}})":"ユーザー {{username}} を削除しました(ID: {{id}})","Deleting will permanently remove this subscription record (including benefit details). Continue?":"削除するとこのサブスクリプション記録(特典詳細を含む)が完全に削除されます。続行しますか?","Deleting...":"削除中...","Demo site":"デモサイト","Demo site mode":"デモサイトモード","Demo Site Mode":"デモサイトモード","Demote":"降格","Density":"密度","Deploy your own gateway and start routing requests through your configured upstream services.":"独自のゲートウェイをデプロイし、設定済みのアップストリームサービスへリクエストをルーティングできます。","Deployment created successfully":"デプロイを作成しました","Deployment details":"デプロイメントの詳細","Deployment ID":"デプロイ ID","Deployment location":"デプロイ先","Deployment logs":"デプロイログ","Deployment Region *":"デプロイリージョン *","Deployment requested":"デプロイメントが要求されました","Deployments":"デプロイ","Desc":"降順","Describe":"説明","Describe this model...":"このモデルを説明...","Describe this vendor...":"このベンダーを説明...","Description":"説明","Description is required":"説明は必須です","Designed and Developed by":"設計・開発","designed for scale":"スケールのために設計","Destroyed":"破棄済み","Detailed request logs for investigations.":"調査のための詳細なリクエストログ。","Details":"詳細","Detect All Upstream Updates":"すべてのアップストリーム更新を検出","Detected database":"検出されたデータベース","Detected high-risk status code redirect rules":"以下の高リスクステータスコードリダイレクトルールが検出されました:","Detection complete: {{add}} to add, {{remove}} to remove":"検出完了:{{add}} 個追加、{{remove}} 個削除","Detection failed":"検出に失敗しました","Determines how this group is applied elsewhere.":"このグループが他の場所でどのように適用されるかを決定します。","Deterministic sampling seed (best-effort)":"可能な限り再現性のã
107‚るサンプリングシード","Developer Friendly":"開発者向け","Device Type Preference":"優先デバイスタイプ","Dify":"Dify","Dify channels only support chatflow and agent, and agent does not support images":"Dify チャネルは chatflow と agent のみサポートしており、agent は画像をサポートしていません","Digest:":"ダイジェスト:","Direction":"方向","Directory File Count":"ディレクトリファイル数","Directory Total Size":"ディレクトリ合計サイズ","Disable":"無効にする","Disable 2FA":"2FAを無効にする","Disable All":"すべて無効にする","Disable on failure":"失敗時に無効にする","Disable selected channels":"選択したチャネルを無効にする","Disable selected models":"選択したモデルを無効にする","Disable store passthrough":"ストアパススルーを無効にする","Disable this key?":"このキーを無効にしますか?","Disable threshold (seconds)":"無効化しきい値(秒)","Disable Two-Factor Authentication":"二要素認証を無効にする","disabled":"無効","Disabled":"無効","Disabled all channels with tag: {{tag}}":"タグ「{{tag}}」の全チャネルを無効にしました","Disabled channels with tag {{tag}}":"タグ {{tag}} のチャネルを無効化しました","Disabled lanes are omitted on save.":"無効な価格レーンは保存時に省略されます。","Disabled Reason":"無効化の理由","Disabled Time":"無効化された時刻","Disabling...":"無効化中...","Discord":"Discord","Discount":"特典","Discount map by recharge amount (JSON object)":"リチャージ額による割引マップ(JSONオブジェクト)","Discount Rate":"割引率","Discount rate must be ≤ 1":"割引率は 1 以下でなければなりません","Discount rate must be greater than 0":"割引率は 0 より大きくなければなりません","Discount Rate:":"割引率:","Discount ratio for cache hits.":"キャッシュヒットに対する割引率。","Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel.":"免責事項:個人利用に限ります。認証情報を配布・共有しないでください。このチャネルには前提条件があり、事前の設定が必要です。手順とリスクを理解した上で利用し、OpenAI の利用規約および関連ポリシーを遵守してください。認証情報と設定は Codex CLI 連携専用であり、他のクライアント、プラットフォーム、またはチャネルでは利用できません。","Discouraged":"非推奨","Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.":"厳選された AI モデルを見つけ、価格と機能を比較し、あらゆるシナリオに適したモデルを選択できます。","Discover the leading models in each domain":"各分野をリードするモデルを発見","Discover the most-used models and rising vendors on the platform, updated from live usage data.":"ライブ利用データに基づいて更新される、プラットフォームで最も使われているモデルと伸びているベンダーを確認できます。","Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.":"プラットフォーム上で最も使われているモデル・人気アプリ・台頭するベンダーを発見しましょう。すべてのカテゴリで継続的に更新されます。","Discovering...":"検出中...","Disk cache cleared":"ディスクキャッシュをクリアしました","Disk Cache Settings":"ディスクキャッシュ設定","Disk Cache Threshold (MB)":"ディスクキャッシュ閾値 (MB)","Disk cache, system performance monitoring, and operation statistics":"ディスクキャッシュ、システムパフォーマンス監視、運用統計","Disk Hits":"ディスクヒット","Disk Threshold (%)":"ディスク閾値 (%)","Display in Currency":"通貨で表示","Display Mode":"表示モード","Dis
107play name":"表示名","Display Name":"表示名","Display name and email used in outgoing messages":"送信メッセージで使用される表示名とメールアドレス","Display Name Field":"表示名フィールド","Display name for this chat client.":"このチャットクライアントの表示名。","Display name for this monitoring group (max 50 characters)":"この監視グループの表示名(最大50文字)","Display name for this payment method.":"この支払い方法の表示名。","Display name shown to users.":"ユーザーに表示される表示名。","Display Options":"表示オプション","Display Token Statistics":"トークン統計を表示","Displayed in":"表示単位","Displays the mobile sidebar.":"モバイルサイドバーを表示します。","Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.":"この機能を過信しないでください。IPは偽装される可能性があります。nginx、CDNなどのゲートウェイと併用してください。","Do not repeat check-in; only once per day":"チェックインを繰り返さないでください;1日1回のみ","Do regex replacement in the target field":"ターゲットフィールドで正規表現置換","Do string replacement in the target field":"ターゲットフィールドで文字列置換","Docs":"ドキュメント","Documentation Link":"ドキュメントリンク","Documentation or external knowledge base.":"ドキュメントまたは外部知識ベース。","does not exist or might have been removed.":"存在しないか、削除された可能性があります。","Domain":"ドメイン","Domain Filter Mode":"ドメインフィルターモード","Don\'t have an account?":"アカウントをお持ちでないですか?","Done":"完了","Doubao custom API address editing unlocked":"豆包カスタムAPI アドレス編集がアンロックされました","DoubaoVideo":"DoubaoVideo","Double check the configuration below. Your system will be locked until initialization is complete.":"下記の設定を再確認してください。初期化が完了するまでシステムはロックされます。","Download":"ダウンロード","Draw":"描画","Drawing":"画像生成","Drawing logs":"描画ログ","Drawing Logs":"画像生成履歴","Drawing task records":"描画タスク記録","Duplicate":"複製","Duplicate group names: {{names}}":"重複するグループ名: {{names}}","Duplicate source model mappings are not allowed":"重複したソースモデルのマッピングは許可されていません","Duplicate source model(s): {{models}}":"重複したソースモデル: {{models}}","Duration":"所要時間","Duration (hours)":"期間(時間)","Duration Settings":"有効期間設定","Duration Unit":"期間単位","Duration Value":"期間値","Dynamic Pricing":"ダイナミック価格設定","e.g. Â¥ or HK$":"例: Â¥ または HK$","e.g. 401, 403, 429, 500-599":"例:401, 403, 429, 500-599","e.g. 8 means 1 USD = 8 units":"例: 8 は 1 USD = 8 単位 を意味します","e.g. Basic Plan":"例:ベーシックプラン","e.g. Clean tool parameters to avoid upstream validation errors":"例:ツールパラメータを整理して上流の検証エラーを回避","e.g. example.com":"例: example.com","e.g. llama3.1:8b":"例: llama3.1:8b","e.g. My GitLab":"例: My GitLab","e.g. my-gitlab":"例: my-gitlab","e.g. New API Console":"例: New API コンソール","e.g. openid profile email":"例: openid profile email","e.g. Suitable for light usage":"例:ライトユーザー向け","e.g. This request does not meet access policy":"例:このリクエストはアクセスポリシーを満たしていません","e.g., 0.95":"例: 0.95","e.g., 100":"例: 100","e.g., 123456":"例: 123456","e.g., 2025-04-01-preview":"例: 2025-04-01-preview","e.g., 50":"例: 50","e.g., 500000":"例: 500000","e.g., 7342866812345":"例: 7342866812345","e.g., 8 means 8 local currency per USD":"例: 8 は 1 USD あたり 8 現地通貨 を意味します","e.g., Alipay, WeChat":"ä¾
107‹: Alipay、WeChat","e.g., Basic Package":"例: 基本パッケージ","e.g., CN2 GIA":"例: CN2 GIA","e.g., Core APIs, OpenAI, Claude":"例: Core APIs、OpenAI、Claude","e.g., d6b5da8hk1awo8nap34ube6gh":"例: d6b5da8hk1awo8nap34ube6gh","e.g., default, vip, premium":"例: default、vip、premium","e.g., gpt-4, claude-3":"例:gpt-4、claude-3","e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$":"例: gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$","e.g., https://api.example.com (path before /suno)":"例: https://api.example.com (/suno の前のパス)","e.g., https://api.openai.com/v1/chat/completions":"例: https://api.openai.com/v1/chat/completions","e.g., https://ark.cn-beijing.volces.com":"例: https://ark.cn-beijing.volces.com","e.g., https://docs-test-001.openai.azure.com":"例: https://docs-test-001.openai.azure.com","e.g., https://fastgpt.run/api/openapi":"例: https://fastgpt.run/api/openapi","e.g., OpenAI GPT-4 Production":"例: OpenAI GPT -4 Production","e.g., preview":"例: preview","e.g., prod_xxx":"例: prod_xxx","e.g., Recommended for China Mainland Users":"例: 中国本土ユーザーにおすすめ","e.g., us-central1 or JSON format for model-specific regions":"例: us-central1 またはモデル固有のリージョンを示す JSON 形式","e.g., v2.1":"例: v2.1","Each backup code can only be used once.":"各バックアップコードは1回しか使用できません。","Each item must be an object with a single key-value pair.":"各項目は単一のキーと値のペアを持つオブジェクトでなければなりません。","Each item must have exactly one key-value pair.":"各項目には正確に 1 つのキーと値のペアが必要です。","Each line represents one keyword. Leave blank to disable the list but keep the switch states.":"各行は1つのキーワードを表します。リストを無効にするが、スイッチの状態を維持するには、空白のままにしてください。","Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.":"各層は 0~2 個の条件(len、p、c に対して)を設定でき、最後の層は条件なしのキャッチオール層です。キャッシュヒットによって p が下がり層が誤判定されるのを防ぐため、層の条件には len(キャッシュヒットを含む完全な入力長)を使用してください。","Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.":"各階層は最大2つの条件をサポートします。最後の階層は条件なしのフォールバックです。キャッシュヒットで課金対象の入力トークンが減っても誤った階層にならないよう、条件には完全な入力長を使用してください。","Each tier supports up to 2 conditions. The last tier without conditions is the fallback.":"各段階は最大 2 つの条件に対応します。条件のない最後の段階がフォールバックです。","Earn rewards when your referrals add funds. Transfer accumulated rewards to your balance anytime.":"紹介者が資金を追加すると報酬を獲得できます。いつでも蓄積された報酬を残高に振り替えることができます。","Edit":"編集","Edit {{title}}":"{{title}}を編集","Edit all channels with tag:":"タグを持つすべてのチャネルを編集:","Edit Announcement":"お知らせを編集","Edit API Shortcut":"API ショートカットを編集","Edit billing ratios and user-selectable groups in one table.":"課金倍率とユーザーが選択できるグループを1つの表で編集します。","Edit Channel":"チャネルを編集","Edit chat preset":"チャットプリセットを編集","Edit discount tier":"割引ティアを編集","Edit FAQ":"FAQ を編集","Edit group rate limit":"グループレート制限を編集","E
107dit JSON object directly. Suitable for simple parameter overrides.":"JSONオブジェクトを直接編集します。シンプルなパラメータオーバーライドに適しています。","Edit JSON text directly. Format will be validated on save.":"JSONテキストを直接編集します。保存時にフォーマットが検証されます。","Edit model":"モデルを編集","Edit Model":"モデルを編集","Edit model pricing":"モデル料金を編集","Edit OAuth Provider":"OAuthプロバイダーを編集","Edit payment method":"決済方法を編集","Edit Prefill Group":"プリフィルグループを編集","Edit product":"製品を編集","Edit ratio override":"倍率オーバーライドを編集","Edit Rule":"ルール編集","Edit selectable group":"選択可能なグループを編集","Edit Tag":"タグ編集","Edit Tag:":"タグを編集:","Edit Uptime Kuma Group":"Uptime Kuma グループを編集","Edit Vendor":"ベンダーを編集","edit_this":"edit_this","Edited channels with tag {{tag}}":"タグ {{tag}} のチャネルを編集しました","Editor mode":"エディターモード","Education":"教育","Email":"メールアドレス","Email (required for verification)":"メールアドレス(認証に必須)","Email Address":"メールアドレス","Email Alias Restriction":"メールエイリアスの制限","Email bound successfully!":"メールが正常に紐付けられました!","Email Domain Restriction":"メールドメインの制限","Email Domain Whitelist":"メールドメインのホワイトリスト","Email Field":"メールフィールド","Email Verification":"メール認証","Email, summarisation, knowledge work":"メール・要約・ナレッジワーク","Embeddings":"埋め込み","Empty":"空","Empty value will be saved as {}.":"空の値は {} として保存されます。","Enable":"有効にする","Enable 2FA":"2FA を有効にする","Enable All":"すべて有効にする","Enable check-in feature":"チェックイン機能を有効にする","Enable Data Dashboard":"データダッシュボードを有効にする","Enable demo mode with limited functionality":"機能が制限されたデモモードを有効にする","Enable Discord OAuth":"Discord OAuthを有効にする","Enable Disk Cache":"ディスクキャッシュを有効にする","Enable drawing features":"描画機能を有効にする","Enable filtering":"フィルタリングを有効にする","Enable FunctionCall thoughtSignature Fill":"FunctionCall用のthoughtSignature自動付与を有効化","Enable GitHub OAuth":"GitHub OAuthを有効にする","Enable Groups":"グループを有効にする","Enable if this is an OpenRouter enterprise account with special response format":"特別な応答形式を持つOpenRouterエンタープライズアカウントである場合に有効にします","Enable io.net deployments":"io.net デプロイを有効化","Enable io.net model deployment service in console":"コンソールで io.net モデルデプロイサービスを有効化","Enable LinuxDO OAuth":"LinuxDO OAuthを有効にする","Enable model performance metrics":"モデル性能メトリクスを有効化","Enable OIDC":"OIDCを有効にする","Enable or disable this channel":"このチャネルを有効または無効にする","Enable or disable this model":"このモデルを有効または無効にする","Enable Passkey":"Passkeyを有効にする","Enable Performance Monitoring":"パフォーマンス監視を有効にする","Enable rate limiting":"レート制限を有効にする","Enable Request Passthrough":"リクエストパススルーを有効にする","Enable selected channels":"選択したチャネルを有効にする","Enable selected models":"選択したモデルを有効にする","Enable SSL/TLS":"SSL/TLSを有効にする","Enable SSRF Protection":"SSRF保護を有効にする","Enable streaming mode for the test request.":"テストリクエストのストリーミングモードを有効にします。","Enable Telegram OAuth":"Telegram OAuthを有効にする","Enable test mode for Creem payments":"Creem 決済のテストモードを有効にする","Enable this key?":"このキーを有効にしますか?","Enable Turnstile":"Turnstileを有効にする","Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.":"機密性の高い操作を解除するには、プロフィールで二要素認証またはPasskeyを有効にしてください。","Enable unlimited quota for this API key":"このAPIキーの無制限のクォータを有効にする","Enable violation deduction":"違反料金控除を有効にする","Enable Waffo":"Waffoを有効化","Enable Waffo Pancake":"Waffo Pancake を有効にする","Enable WeChat Auth":"WeChat認証を有効にする","Enable when proxying workers that fetch images over HTTP.":"HTTP経由で画像をフェッチするワーカーをプロキシする場合に有効にします。","Enabled":"有効","Enabled all channels with tag: {{tag}}":"タグ「{{tag}}」の全チャネルを有効にしました","Enabled channels with tag {{tag}}":"タグ {{tag}} のチャネルを有効化しました","Enabled Status":"有効ステータス","Enabling...":"有効化中...","Encourages introducing new topics":"新しい話題への展開を促進します","End":"終了","End Error":"終了エラー","End Reason":"終了理由","End Time":"終了時間","End-user identifier for abuse monitoring":"悪用検知用のエンドユーザー識別子","Endpoint":"エンドポイント","Endpoint config":"エンドポイント設定","Endpoint Configuration":"エンドポイント設定","Endpoint Type":"エンドポイントタイプ","Endpoint, provider-specific settings, and credentials.":"エンドポイント、プロバイダー固有の設定、認証情報。","Endpoint:":"エンドポイント:","Endpoints":"エンドポイント","English":"英語","Ensure Prefix":"プレフィックスを保証","Ensure Suffix":"サフィックスを保証","Ensure the string has a specified prefix":"文字列に指定のプレフィックスがあることを確認","Ensure the string has a specified suffix":"文字列に指定のサフィックスがあることを確認","Enter 6-digit code":"6桁のコードを入力","Enter a name":"名前を入力","Enter a new name":"新しい名前を入力してください","Enter a positive or negative amount to adjust the quota":"クォータを調整するために正または負の値を入力してください","Enter a valid email or leave blank":"有効なメールアドレスを入力するか空白にしてください","Enter a value and press Enter":"値を入力してEnterを押してください","Enter amount in {{currency}}":"{{currency}}で金額を入力","Enter amount in tokens":"トークンで金額を入力","Enter announcement content (supports Markdown & HTML)":"アナウンス内容を入力(Mark
107down & HTML対応)","Enter announcement content (supports Markdown/HTML)":"アナウンス内容を入力(Markdown/HTML対応)","Enter API Key":"API キーを入力","Enter API key for this channel":"このチャネルの API キーを入力してください","Enter API Key, format: APIKey|Region":"APIキーを入力してください。形式: APIKey | Region","Enter API Key, one per line, format: APIKey|Region":"APIキーを1行に1つずつ入力してください。形式: APIKey | Region","Enter application token":"アプリケーショントークンを入力","Enter authenticator code":"認証コードを入力","Enter backup code (e.g., CAWD-OQDV)":"バックアップコードを入力(例:CAWD-OQDV)","Enter code":"コードを入力","Enter code or backup code":"コードまたはバックアップコードを入力","Enter Completion price to calculate ratio":"比率を計算するために Completion 価格を入力","Enter Creem API key":"Creem API キーを入力","Enter custom API endpoint URL":"カスタムAPIエンドポイントURLを入力","Enter deployment region or JSON mapping:":"デプロイリージョンまたはJSONマッピングを入力:","Enter display name":"表示名を入力","Enter HTML code (e.g., <p>About us...</p>) or a URL (e.g., https://example.com) to embed as iframe":"HTMLコード(例:<p>About us...</p>)またはURL(例:https://example.com)を入力してiframeとして埋め込みます","Enter Input price to calculate ratio":"比率を計算するために Input 価格を入力","Enter JSON to override request headers":"リクエストヘッダーを上書きする JSON を入力","Enter key, format: AccessKey|SecretAccessKey|Region":"キーを入力してください、形式: AccessKey | SecretAccessKey | Region","Enter key, one per line, format: AccessKey|SecretAccessKey|Region":"キーを入力してください。1行に1つ、形式: AccessKey | SecretAccessKey | Region","Enter model name":"モデル名を入力","Enter new key to update":"更新する新しいキーを入力","Enter new key to update, or leave empty to keep current key":"更新する新しいキーを入力するか、空欄にして現在のキーを保持","Enter new tag name (leave empty to disband tag)":"新しいタグ名を入力してください(タグを解散するには空欄にしてください)","Enter new tag name or leave empty":"新しいタグ名を入力するか、空欄にする","Enter new token to update":"更新する新しいトークンを入力","Enter one API key per line for batch creation":"一括作成のため、1行に1つのAPIキーを入力してください","Enter one key per line for batch creation":"一括作成のため、1行に1つのキーを入力してください","Enter one keyword per line":"1行に1つのキーワードを入力","Enter password":"パスワードを入力","Enter password (8-20 characters)":"パスワードを入力 (8~20文字)","Enter password (min 8 characters)":"パスワードを入力(最小8文字)","Enter quota in {{currency}}":"{{currency}} でクォータを入力","Enter quota in tokens":"トークン単位でクォータを入力","Enter secret key":"シークレットキーを入力","Enter system prompt (user prompt takes priority)":"システムプロンプトを入力 (ユーザープロンプトが優先されます)","Enter tag name (optional)":"タグ名を入力 (オプション)","Enter the 6-digit code from your authenticator app":"認証アプリからの6桁のコードを入力","Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.":"認証アプリからの6桁のワンタイムパスワードまたは8文字のバックアップコードを入力してください。","Enter the complete URL, supports":"完全なURLを入力、サポート","Enter the Coze agent ID":"CozeエージェントIDを入力","Enter the full URL of your Gotify server":"Gotifyサーバーの完全なURLを入力","Enter the knowledge base ID":"ナレッジベースIDを入力","Enter the path before /suno, usually just the domain":"/suno の前のパスを入力してください。通常はドメインのみです","Enter the quota amount in {{currency}}":"{{currency}}
107 でクォータ数を入力","Enter the quota amount in tokens":"トークン単位でクォータ額を入力","Enter the verification code":"確認コードを入力","Enter threshold":"しきい値を入力","Enter token counts to preview the estimated cost (excluding group multipliers).":"トークン数を入力して、推定コストを表示します(グループ倍率は除く)。","Enter URL...":"URLを入力...","Enter username":"ユーザー名を入力","Enter verification code":"確認コードを入力","Enter webhook secret":"Webhook シークレットを入力","Enter your authenticator code or a backup code":"認証コードまたはバックアップコードを入力","Enter your email":"メールアドレスを入力","Enter your redemption code":"引き換えコードを入力","Enter your registered email and we will send you a link to reset your password.":"登録済みのメールアドレスを入力してください。パスワードをリセットするためのリンクをお送りします。","Enter your username":"ユーザー名を入力","Enter your username or email":"ユーザー名またはメールアドレスを入力","Enterprise Account":"エンタープライズアカウント","Enterprise-grade security with comprehensive permission management":"包括的な権限管理を備えたエンタープライズグレードのセキュリティ","Entrypoint (space separated)":"Entrypoint (スペース区切り)","Env (JSON object)":"Env (JSON オブジェクト)","Environment variables":"環境変数","Environment variables (JSON)":"環境変数(JSON)","Epay endpoint":"Epayエンドポイント","Epay Gateway":"Epayゲートウェイ","Epay merchant ID":"Epay マーチャントID","Epay secret key":"Epayシークレットキー","Equals":"等しい","Error":"エラー","Error Code (optional)":"エラーコード(任意)","Error Message":"エラーメッセージ","Error Message (required)":"エラーメッセージ(必須)","Error Type (optional)":"エラータイプ(任意)","Estimated cost":"推定コスト","Estimated quota cost":"想定クォートコスト","Exact":"完全一致","Exact Match":"完全一致","Example":"サンプル","Example (all channels):":"例(全チャネル):","Example (specific channels):":"例(特定チャネル):","Example:":"例:","example.com&#10;blocked-site.com":"example.com &#10;blocked-site.com","example.com&#10;company.com":"example.com &#10;company.com","Excellent":"優秀","Exchange rate is required":"為替レートは必須です","Exchange rate must be greater than 0":"為替レートは 0 より大きくする必要があります","Execute code in a sandbox during the response":"応答中にサンドボックスでコードを実行","Exhausted":"使い切り","Existing account will be reused":"既存のアカウントが再利用されます","Existing Models ({{count}})":"既存のモデル ({{count}})","Exists":"存在","Expand":"展開","Expand All":"すべて展開","Expected a JSON array of group identifiers":"グループ識別子の JSON 配列が必要です","Expected a JSON array.":"JSON 配列が必要です。","Experiment with prompts and models in real time.":"プロンプトとモデルをリアルタイムで実験する。","Expiration Time":"有効期限","expired":"期限切れ","Expired":"有効期限切れ","Expired at":"有効期限","Expired time cannot be earlier than current time":"有効期限は現在時刻より早く設定できません","Expires":"有効期限","Expose ratio API":"倍率APIを公開","Exposes the pricing/models catalog in the top navigation.":"価格/モデルカタログをトップナビゲーションに表示します。","Expression":"式","Expression based":"式ベース","Expression billing":"式による課金","Expression editor":"式エディター","Expression error":"式のエラー","Expression pricing":"式による料金","Extend":"延長","Extend deployment":"デプロイメントを延長","Extend failed":"延長に失敗しました","Extended successfully":"正常に延長されました","External Device":"外部デバイス","External link for users to purchase quota":"ユーザーがクォータを購入するための外部リンク","External operations":"外部運用","External operations mode":"外部運用モード","External Speed Test":"外部スピードテスト","Extra":"追加","Extra Notes (Optional)":"追加のメモ (オプション)","extras":"追加項目","Fail Reason":"失敗理由","Fail Reason Details":"失敗理由の詳細","Failed":"失敗","Failed to {{action}} user":"ユーザーの{{action}}に失敗しました","Failed to adjust quota":"クォータの調整に失敗しました","Failed to apply overwrite.":"オーバーライトの適用に失敗しました。","Failed to bind email":"メールのバインドにå
107¤±æ•—しました","Failed to change password":"パスワードの変更に失敗しました","Failed to check for updates":"更新の確認に失敗しました","Failed to clean logs":"ログのクリーンアップに失敗しました","Failed to complete order":"注文の完了に失敗しました","Failed to complete Passkey login":"Passkeyログインの完了に失敗しました","Failed to confirm compliance":"コンプライアンス確認に失敗しました","Failed to contact GitHub releases API":"GitHub Releases API に接続できませんでした","Failed to copy":"コピーに失敗しました","Failed to copy channel":"チャネルのコピーに失敗しました","Failed to copy keys":"キーのコピーに失敗しました","Failed to copy model names":"モデル名のコピーに失敗しました","Failed to copy to clipboard":"クリップボードにコピーできませんでした","Failed to create API key":"APIキーの作成に失敗しました","Failed to create channel":"チャネルの作成に失敗しました","Failed to create deployment":"デプロイの作成に失敗しました","Failed to create provider":"プロバイダーの作成に失敗しました","Failed to create redemption code":"引き換えコードの作成に失敗しました","Failed to create user":"ユーザーの作成に失敗しました","Failed to delete {{count}} model(s)":"{{count}} 個のモデルの削除に失敗しました","Failed to delete account":"アカウントの削除に失敗しました","Failed to delete API key":"APIキーの削除に失敗しました","Failed to delete API keys":"APIキーの削除に失敗しました","Failed to delete channel":"チャネルの削除に失敗しました","Failed to delete disabled channels":"無効化されたチャネルの削除に失敗しました","Failed to delete invalid redemption codes":"無効な引き換えコードの削除に失敗しました","Failed to delete model":"モデルの削除に失敗しました","Failed to delete provider":"プロバイダーの削除に失敗しました","Failed to delete redemption code":"引き換えコードの削除に失敗しました","Failed to delete user":"ユーザーの削除に失敗しました","Failed to delete vendor":"ベンダーの削除に失敗しました","Failed to disable {{count}} model(s)":"{{count}} 個のモデルの無効化に失敗しました","Failed to disable 2FA":"2FAの無効化に失敗しました","Failed to disable channels":"チャネルの無効化に失敗しました","Failed to disable model":"モデルの無効化に失敗しました","Failed to disable tag channels":"タグチャネルの無効化に失敗しました","Failed to discover OIDC endpoints":"OIDCエンドポイントの検出に失敗しました","Failed to enable {{count}} model(s)":"{{count}} 個のモデルの有効化に失敗しました","Failed to enable 2FA":"2FA の有効化に失敗しました","Failed to enable channels":"チャネルの有効化に失敗しました","Failed to enable model":"モデルの有効化に失敗しました","Failed to enable tag channels":"タグチャネルの有効化に失敗しました","Failed to fetch channel key":"チャネルキーの取得に失敗しました","Failed to fetch checkin status":"チェックインステータスの取得に失敗しました","Failed to fetch deployment details":"デプロイメント詳細の取得に失敗しました","Failed to fetch models":"モデルの取得に失敗しました","Failed to fetch OIDC configuration. Please check the URL and network status":"OIDC構成の取得に失敗しました。URLとネットワーク状態を確認してください","Failed to fetch upstream prices":"上流価格の取得に失敗しました","Failed to fetch upstream ratios":"アップストリーム比率の取得に失敗しました","Failed to fetch usage":"利用状況の取得に失敗しました","Failed to fetch user information":"ユーザー情報の取得に失敗しました","Failed to fix abilities":"アビリティの修正に失敗しました","Failed to generate token":"トークンの生成に失敗しました","Failed to initialize OAuth":"OAuthの初期化に失敗しました","Failed to initialize system":"システムの初期化に失敗しました","Failed to load":"読み込みに失敗しました","Failed to load API keys":"APIキーの読み込みに失敗しました","Failed to load billing history":"請求履歴の読み込みに失敗しました","Failed to load home page content":"ホームページの内容の読み込みに失敗しました","Failed to load image":"画像の読み込みに失敗しました","Failed to load key status":"キー状態の読み込みに失敗しました","Failed to load logs":"ログの読み込みに失敗しました","Failed to load Passkey status":"Passkeyのステータスの読み込みに失敗しました","Failed to load profile":"プロファイルの読み込みに失敗しました","Failed to load redemption codes":"引き換えコードの読み込みに失敗しました","Failed to load setup data":"セットアップデータの読み込みに失敗しました","Failed to load setup status":"セットアップ状態の読み込みに失敗しました","Failed to load tag data":"タグデータの読み込みに失敗しました","Failed to load users":"ユーザーの読み込みに失敗しました","Failed to parse group items":"グループアイテムの解析に失敗しました","Failed to parse JSON file: {{name}}":"JSONファイルの解析に失敗しました: __ PH_0 __","Failed to query balance":"残高の取得に失敗しました","Failed to refresh cache stats":"キャッシュ統計の更新に失敗","Failed to refresh credential":"認証情報ã
107®æ›´æ–°ã«å¤±æ•—しました","Failed to regenerate backup codes":"バックアップコードの再生成に失敗しました","Failed to register Passkey":"Passkeyの登録に失敗しました","Failed to remove Passkey":"パスキーの削除に失敗しました","Failed to reset 2FA":"2FAのリセットに失敗しました","Failed to reset model ratios":"モデル比率のリセットに失敗しました","Failed to reset Passkey":"パスキーのリセットに失敗しました","Failed to save":"保存に失敗","Failed to save announcements":"お知らせの保存に失敗しました","Failed to save API info":"API情報の保存に失敗しました","Failed to save FAQ":"FAQの保存に失敗しました","Failed to save Uptime Kuma groups":"Uptime Kumaグループの保存に失敗しました","Failed to search API keys":"APIキーの検索に失敗しました","Failed to search redemption codes":"引き換えコードの検索に失敗しました","Failed to search users":"ユーザーの検索に失敗しました","Failed to send verification code":"認証コードの送信に失敗しました","Failed to set tag":"タグの設定に失敗しました","Failed to setup 2FA":"2FA の設定に失敗しました","Failed to start {{provider}} login":"{{provider}} ログインの開始に失敗しました","Failed to start Discord login":"Discordログインの開始に失敗しました","Failed to start GitHub login":"GitHubログインの開始に失敗しました","Failed to start LinuxDO login":"LinuxDOログインの開始に失敗しました","Failed to start OIDC login":"OIDCログインの開始に失敗しました","Failed to start Passkey login":"Passkeyログインの開始に失敗しました","Failed to start Passkey registration":"パスキー登録の開始に失敗しました","Failed to start testing all channels":"すべてのチャネルのテストを開始できませんでした","Failed to sync prices":"価格の同期に失敗しました","Failed to sync ratios":"比率の同期に失敗しました","Failed to test all channels":"すべてのチャネルのテストに失敗しました","Failed to test channel":"チャネルのテストに失敗しました","Failed to update all balances":"すべての残高を更新できませんでした","Failed to update API key":"APIキーの更新に失敗しました","Failed to update API key status":"APIキー状態の更新に失敗しました","Failed to update balance":"残高を更新できませんでした","Failed to update channel":"チャネルの更新に失敗しました","Failed to update models":"モデルの更新に失敗しました","Failed to update profile":"プロフィールを更新できませんでした","Failed to update provider":"プロバイダーの更新に失敗しました","Failed to update redemption code":"引き換えコードの更新に失敗しました","Failed to update redemption code status":"引き換えコードのステータスの更新に失敗しました","Failed to update setting":"設定の更新に失敗しました","Failed to update settings":"設定を更新できませんでした","Failed to update tag":"タグの更新に失敗しました","Failed to update user":"ユーザーの更新に失敗しました","Failure keywords":"失敗キーワード","Fair":"公平","Fallback tier":"フォールバック段階","FAQ":"FAQ","FAQ added. Click \\"Save Settings\\" to apply.":"FAQ が追加されました。「設定を保存」をクリックして適用してください。","FAQ deleted. Click \\"Save Settings\\" to apply.":"FAQ が削除されました。「設定を保存」をクリックして適用してください。","FAQ saved successfully":"FAQ が正常に保存されました","FAQ updated. Click \\"Save Settings\\" to apply.":"FAQ が更新されました。「設定を保存」をクリックして適用してください。","FastGPT":"FastGPT","Feature in development":"開発中の機能です","Fee":"手数料","Fee Amount":"料金額","Fetch available models for:":"利用可能なモデルを取得:","Fetch from Upstream":"Upstreamからフェッチ","Fetch Models":"モデルを取得","Fetched {{count}} model(s) from upstream":"上流から {{count}} 個のモデルを取得しました","Fetched {{count}} models":"{{count}} 個のモデルを取得しました","Fetching prefill groups...":"プリフィルグループをフェッチ中...","Fetching upstream prices...":"上流価格を取得中...","Fetching upstream ratios...":"アップストリーム比率をフェッチ中...","field":"フィールド","Field Mapping":"フィールドマッピング","Field passthrough controls":"フィールドパススルーコントロール","Field Path":"フィールドパス","File":"ファイル","File Search":"ファイル検索","Files to Retain":"保持ファイル数","Fill All Models":"すべてのモデルを埋める","Fill Codex CLI / Claude CLI Templates":"Codex CLI / Claude CLI テンプレートを入力","Fill example (all channels)":"例を入力(全チャネル)","Fill example (specific channels)":"例を入力(特定チャネル)","Fill in both Merchant ID and API Private Key before creating.":"作成前に Merchant ID と API 秘密鍵の両方を入力してください。","Fill in the credentials above to begin.":"開始するには上記の認証情報を入力してください。","Fill in the following info to create a new subscription plan":"以下の情報を入力して新しいサブスクリプションプランを作成","Fill Related Models":"関連モデルを入力","Fill Template":"テンプレートを入力","Fill Templates":"テンプレートを入力","Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format":"OpenAI形式を利用するGemini/VertexチャネルにのみthoughtSignatureを付与します","Filled {{count}} model(s)":"{{count}} 個のモデルを補完しました","Filled {{count}} related model(s)":"{{count}} 個の関連モデルを補完しました","Filter":"フィルター","Filter by API key...":"APIキーでフィルター...","Filter by channel ID":"チャネルIDでフィルター","Filter by group":"グループでフィルター","Filter by Midjourney task ID":"MidjourneyタスクIDでフィルター","Filter by model name...":"モデル名でフィルター...","Filter by model...":"モデルでフィルタリング...","Filter by name or ID...":"名前またはIDでフィルター...","Filter by name, ID, or key...":"名前、ID、またはキーでフィルター...","Filter by name...":"名前でフィルター...","Filter by price field":"価格フィールドでフィルター","Filter by ratio type":"倍率タイプで絞り込み","Filter by request ID":"リクエストIDで絞り込み","Filter by task ID":"タスクIDでフィルター","Filter by token name":"トークン名でフィルター","Filter by username":"ユーザー名でフィルター","Filter by username, name or email...":"ユーザー名、名前またはメールアドレスでフィルター...","Filter Dashboard Models":"ダッシュボードモデルをフィルタリング","Filter models by provider, group, type, endpoint, and tags.":"プロバイダー、グループ、タイプ、エンドポイント、タグでモデルを絞り込みます。","Filter models by type, endpoint, vendor, group and tags":"タイプ、エンドポイント、ベンダー、グループ、タグでモデルをフィルタリング","Filter models...":"モデルをフィルタリング...","Filter the model analytics view by time range and user.":"時間範囲とユーザーでモデル分析ビューを絞り込みます。","Filter...":"フィルター…","Filters":"フィルター","Filters active":"フィルター有効","Final Consumed":"最終消費","Final cost = base × multiplier when conditions match":"条件に一致する場合 最終費用 = 基準 × 倍率","Final price multiplier (0.95 = 5% discount":"最終価格乗数 (0.95 = 5%割引","Finance":"金融","Finish Time":"完了時刻","First API request":"最初の API リクエスト","First/Last Frame to Video":"先頭/末尾フレームから動画","Fix Abilities":"アビリティを修正","Fixed abilities: {{success}} succeeded, {{fails}} failed":"能力修正:{{success}} 件成功、{{fails}} 件失敗","Fixed price":"固定価格","Fixed price (USD)":"固定価格 (USD)","Fixed request price":"固定リクエスト価格","Floating":"フローティング","FluentRead extension not detected. Please ensure it is installed and active.":"FluentRead 拡張機能が検出されませんでした。インストールされていて有効になっていることを確認してください。","Flush interval (minutes)":"書き込み間隔(分)","Follow the guided steps to prepare your workspace before the first login.":"初回ログイン前に、ガイド付きの手順に従ってワークスペースを準備してください。","Font":"フォント","Footer":"フッター","Footer text displayed at the bottom of pages":"ページ下部に表示されるフッターテキスト","footer.columns.about.links.aboutProject":"プロジェクトについて","footer.columns.about.links.contact":"お問い合わせ","footer.columns.about.links.features":"機能","footer.columns.about.title":"私たちについて","footer.columns.docs.links.apiDocs":"APIドキュメント","footer.columns.docs.links.installation":"インストールガイド","footer.columns.docs.links.quickStart":"クイックスタート","footer.columns.docs.title":"ドキュメント","footer.columns.related.links.midjourney":"Midjourney-Proxy","footer.columns.related.links.newApiKeyTool":"new-api-key-tool","footer.columns.related.links.oneApi":"1つのAPI","footer.columns.related.title":"関連プロジェクト","footer.defaultCopyright":"すã
107¹ã¦ã®æ¨©åˆ©ã‚’留保します。","footer.newapi.projectAttributionSuffix":"すべての権利を留保します。プロジェクトコントリビューターにより設計・開発されています。","For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment":"2025 å¹´ 5 月 10 日以降に追加されたチャネルの場合、デプロイ時にモデル名から「.」を削除する必要はありません","For private deployments, format: https://fastgpt.run/api/openapi":"プライベートデプロイメントの場合、形式: https://fastgpt.run/api/openapi","Force a syntactically valid JSON response":"構文的に有効な JSON 応答を強制","Force AUTH LOGIN":"AUTH LOGINを強制","Force Format":"強制フォーマット","Force format response to OpenAI standard (OpenAI channel only)":"応答をOpenAI標準に強制フォーマット (OpenAIチャネルのみ)","Force JSON object or schema-conforming output":"JSON オブジェクトまたはスキーマ準拠の出力を強制します","Force SMTP authentication using AUTH LOGIN method":"AUTH LOGIN方式を使用してSMTP認証を強制する","Force-disabled two-factor authentication for the user":"ユーザーの二段階認証を強制的に無効化しました","Forest Whisper":"フォレストウィスパー","Forgot password":"パスワードを忘れた場合","Forgot password?":"パスワードをお忘れですか?","Form reset to saved values":"フォームが保存された値にリセットされました","Format":"形式","Format JSON":"JSONをフォーマット","Format:":"形式:","Format: Access Key ID|Secret Access Key":"形式: Access Key ID|Secret Access Key","Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)":"形式: AccessKey|SecretKey (upstream が New API の場合、ApiKey のみ)","Format: Ak|Sk|Region":"形式: Ak|Sk|Region","Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041":"形式: APIKey-AppId、例: fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041","Format: APIKey|SecretKey":"形式: APIKey|SecretKey","Format: APPID|APISecret|APIKey":"形式: APPID|APISecret|APIKey","Format: AppId|SecretId|SecretKey":"形式: AppId|SecretId|SecretKey","Forward requests directly to upstream providers without any post-processing.":"ポストプロセスなしで、リクエストをアップストリームプロバイダーに直接転送します。","Frames per second":"フレームレート","Free: {{free}} / Total: {{total}}":"空き容量: {{free}} / 合計: {{total}}","Friendly name to identify this channel":"このチャネルを識別するための表示名","From Address":"差出人アドレス","From IO.NET deployment":"IO.NET展開から","From model redirect, not yet added to models list":"モデルリダイレクトから、まだモデルリストに追加されていません","Frontend Theme":"フロントエンドテーマ","Full API Key":"完全なAPIキー","Full Base URL (supports":"完全なベースURL (サポート","Full Code":"完全なコード","Full input length":"完全な入力長","Full layout":"フルレイアウト","Full width":"全幅","Function calling":"関数呼び出し","Functions":"関数","GC Count":"GC 回数","GC executed":"GC 実行完了","GC execution failed":"GC 実行失敗","Gemini":"Gemini","Gemini Image 4K":"Gemini Image 4K","Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.":"アダプターが無効になっていても、Geminiは思考モードを自動検出します。価格設定と予算編成をより細かく制御する必要がある場合にのみ、これを有効にしてください。","General":"一般","General Settings":"一般設定","Generate and manage your API access token":"API アクセス トークンを生成および管理","Generate Lyrics":"歌詞を生成","Generate Music":"音楽を生成","Generate new backup codes for account recovery":"アカウント復旧用の新しいバックアップコードを生成","Generate New Codes":"新しいコードを生成","Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.":"トークンページから API キーを発行できます。モデル、グループ、IP、レート制限ごとに細かく権限を設定可能です。","Generated image":"生成された画像","Generating new codes will invalidate all existing backup codes.":"新しいコードを生成すると、既存のすべてのバックアップコードが無効になります。","Generating...":"生成中...","Generation quality preset":"生成品質プリセット","Generic cache":"汎用キャッシュ","Get notified when balance falls below this value":"残高がこの値を下回ったときに通知を受け取る","Get one here":"こちらから取得","Get started":"はじめる","Get Started":"開始する","GitHub":"GitHub","Give the group a recognizable name and optional description.":"グループに認識しやすい名前とオプションの説明を付けます。","Give this group a recognizable name.":"このグループに認識しやすい名前を付けます。","Global configuration and administrative tools.":"グローバル設定と管理ツール。","Global Coverage":"グローバルカバレッジ","Global Model Configuration":"グローバルモデル設定","Global throughput":"全体スループット","Go Back":"戻る","Go back and edit":"戻って編集","Go to Dashboard":"ダッシュボードへ移動","Go to first page":"最初のページへ移動","Go to home":"ホームへ戻る","Go to io.net API Keys":"io.net API キーへ移動","Go to last page":"最後のページへ移動","Go to 
107next page":"次のページへ移動","Go to page {{page}}":"{{page}}ページ目へ移動","Go to previous page":"前のページへ移動","Go to settings":"設定へ","Go to Settings":"設定へ移動","Good":"良好","Gotify Application Token":"Gotify アプリケーショントークン","Gotify Documentation":"Gotify ドキュメント","Gotify Server URL":"Gotify サーバー URL","gpt-3.5-turbo":"gpt-3.5-turbo","gpt-3.5-turbo-0125":"gpt-3.5-turbo-0125","gpt-4":"gpt-4","gpt-4, claude-3-opus, etc.":"gpt-4、claude-3-opus など","GPU count":"GPU 数","Greater than":"より大きい","Greater Than":"より大きい","Greater than or equal":"以上","Greater Than or Equal":"以上","Grok":"Grok","Grok Settings":"Grok 設定","Group":"グループ","Group & Quota":"グループとクォータ","Group added. Click \\"Save Settings\\" to apply.":"グループが追加されました。「Save Settings」をクリックして適用してください。","Group channels by tag for batch operations":"バッチ操作のためにタグでチャネルをグループ化","Group config overrides global limits, shares the same period":"グループ設定はグローバル制限を上書きし、同じ期間を共有します","Group deleted. Click \\"Save Settings\\" to apply.":"グループが削除されました。「Save Settings」をクリックして適用してください。","Group description":"グループの説明","Group details":"グループの詳細","Group identifier":"グループ識別子","Group is required":"グループは必須です","Group name":"グループ名","Group Name":"グループ名","Group name cannot be changed when editing.":"編集時はグループ名を変更できません。","Group prices cannot be expanded because this expression is not a standard tiered pricing expression.":"この式は標準の段階制料金式ではないため、グループ別価格を展開できません。","Group Pricing":"グループ料金","Group pricing usage guide":"グループ料金の使用ガイド","group ratio":"グループ倍率","Group Ratio":"グループ倍率","Group ratios":"グループ比率","Group updated. Click \\"Save Settings\\" to apply.":"グループが更新されました。「Save Settings」をクリックして適用してください。","Group-based rate limits":"グループベースのレート制限","Group:":"グループ:","Group: {{ratio}}x":"グループ:{{ratio}}x","Grouped monitor status from Uptime Kuma":"Uptime Kuma からのグループ別監視状態","Groups":"グループ","Groups *":"グループ *","Groups that users can select when creating API keys.":"ユーザーが API キー作成時に選択できるグループ。","Growth":"成長","Guardrails":"ガードレール","Guest":"ゲスト","h":"h","Haiku Model":"Haiku モデル","Hang tight while we finish connecting your account.":"アカウントの接続を完了するまでお待ちください。","Hang tight while we securely link this account to your profile.":"このアカウントをプロファイルに安全にリンクするまでお待ちください。","Hardware":"ハードウェア","Hardware type":"ハードウェアタイプ","Has been disabled":"無効化されました","Has been enabled":"有効化されました","Has been invalidated":"無効化されました","Have a Code?":"コードをお持ちですか?","Header":"ヘッダー","header instead.":" ヘッダーも利用できます。","Header Name":"ヘッダー名","Header navigation":"ヘッダーナビゲーション","Header Override":"ヘッダー上書き","Header Passthrough (X-Request-Id)":"ヘッダーパススルー(X-Request-Id)","Header Value (supports string or JSON mapping)":"ヘッダー値(文字列またはJSONマッピング対応)","header. Anthropic-formatted endpoints accept the":" ヘッダーが必要です。Anthropic 形式のエンドポイントでは","Health":"ヘルスケア","Healthy":"正常","Hidden — verify to reveal":"非表示 — 確認して表示","Hide":"非表示にする","Hide API key":"APIキーを非表示","Hide setup guide":"セットアップガイドを非表示","High Performance":"高パフォーマンス","High-risk operation confirmation":"高リスク操作の確認","High-risk status code retry confirmation text":"確認します","High-risk status code retry input mismatch":"入力テキストが一致しません。もう一度お試しください。","High-risk status code retry input placeholder":"上記の確認テキストを入力してください","High-risk status code retry risk check 1":"これらのステータスコードでリトライすると、上流プロバイダーに正常に課金される可能性があり、その費用は回収できないことを理解しています。","High-risk status code retry risk check 2":"これらのステータスコードは通常、リクエストが上流プロバイダーによって正常に処理されたことを示しており、リトライすると二重課金が発生する可能性があることを理解しています。","High-risk status code retry risk check 3":"これらの設定が重大な経済的損失を引き起こす可能性があることを認め、すべての関連リスクを受け入れます。","High-risk status code retry risk check 4":"上記のステータスコードリダイレクトルールを注意深く確認し、正しいことを確認しました。","High-risk status code retry risk disclaimer":"以下のステータスコードリダイレクトルールには高リスクの設定が含まれています。これらのステータスコードでリトライすると、上流の正常な課金が発生し、回収できない可能性があります。","Higher priority channels are selected first":"優先度の高いチャネルが先に選択されます","Historical Usage":"履歴使用状況","History of Midjourney-style image tasks.":"Midjourneyスタイルの画像タスクの
107履歴。","Hit criteria: If cached tokens exist in usage, it counts as a hit.":"ヒット判定:usage に cached tokens が存在すればヒットとみなします。","Hit Rate":"ヒット率","Hit tier":"一致したティア","Home":"ホーム","Home Page Content":"ホームコンテンツ","Hostname or IP of your SMTP provider":"SMTP プロバイダーのホスト名または IP","Hour":"時間","Hour of day":"時刻(時)","Hourly token usage by model across the last 24 hours":"過去 24 時間にわたるモデル別の時間ごとのトークン使用量","Hourly token usage by model over the past 24 hours":"過去24時間のモデル別時間単位のトークン使用量","hours":"時間","How client credentials are sent to the token endpoint":"クライアント認証情報がトークンエンドポイントに送信される方法","How frequently the system tests all channels":"システムがすべてのチャネルをテストする頻度","How It Works":"仕組み","How model mapping works":"モデルマッピングの仕組み","How much to charge for each US dollar of balance (Epay)":"残高の 1 米ドルあたりに請求する金額 (Epay)","How this model name should match requests":"このモデル名がリクエストとどのように一致すべきか","How to deliver the resulting image":"画像結果の返却方法","How to get an io.net API Key":"io.net API キーの取得方法","How to reset my quota?":"クォータをリセットするには?","How to select keys: random or sequential polling":"キーの選択方法: ランダムまたは順次ポーリング","How will you use the platform?":"プラットフォームをどのように使用しますか?","https://api.day.app/yourkey/{{title}}/{{content}}":"https://api.day.app/yourkey/{{title}}/{{content}}","https://api.example.com":"https://api.example.com","https://ark.ap-southeast.bytepluses.com":"https://ark.ap-southeast.bytepluses.com","https://ark.cn-beijing.volces.com":"https://ark.cn-beijing.volces.com","https://cloud.siliconflow.cn/i/hij0YNTZ":"https://cloud.siliconflow.cn/i/hij0YNTZ","https://docs.example.com":"https://docs.example.com","https://example.com":"https://example.com","https://example.com/logo.png":"https://example.com/logo.png","https://example.com/qr-code.png":"https://example.com/qr-code.png","https://example.com/topup":"https://example.com/topup","https://example.com/webhook":"https://example.com/webhook","https://gateway.example.com":"https://gateway.example.com","https://github.com/QuantumNous/new-api":"https://github.com/QuantumNous/new-api","https://gotify.example.com":"https://gotify.example.com","https://pay.example.com":"https://pay.example.com","https://provider.com/.well-known/openid-configuration":"https://provider.com/.well-known/openid-configuration","https://status.example.com":"https://status.example.com","https://wechat-server.example.com":"https://wechat-server.example.com","https://worker.example.workers.dev":"https://worker.example.workers.dev","https://your-server.example.com":"https://your-server.example.com","Human-readable name shown to users during Passkey prompts.":"パスキーのプロンプト中にユーザーに表示される、人間が読める名前。","I confirm enabling high-risk retry":"高リスクリトライの有効化を確認します","I have read and agree to the":"私は以下を読み、同意します","I have read and understood the above compliance reminder":"上記のコンプライアンス注意事項を読み、理解しました","I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.":"上記のコンプライアンス注意事項を読み理解し、関連する法的リスクを認識したうえで、デプロイ、運用、課金行為に起因する法的責任を負うことを確認します。","I understand that disabling 2FA will remove all protection and backup codes":"2FA を無効にすると、すべての保護とバックアップコードが削除されることを理解しています","Icon":"アイコン","Icon file must be 100 KB or smaller":"アイコンファイルは100KB以下である必要があります","Icon identifier (e.g. github, gitlab)":"アイコン識別子 (例: github, gitlab)","ID":"ID","If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.":"アップストリームエラーにこれらのキーワードのいずれかが含まれている場合 (大文字と小文字を区別しない)、チャネルは自動的に無効になります。","If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.":"認証が成功すると、生成されたJSONがキー欄に挿入されます。保存するにはチャネルを保存してください。","If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know 
107what you are doing":"上流の One API または New API リレープロジェクトに接続する場合、知っている場合を除き OpenAI タイプを使用してください","If default auto group is enabled, newly created tokens start with auto instead of an empty group.":"デフォルト auto グループを有効にすると、新規トークンは空グループではなく auto で開始します。","If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.":"アフィニティチャネルが失敗し、別のチャネルでリトライが成功した場合、アフィニティを成功したチャネルに更新します。","If this keeps happening, please report it on GitHub Issues.":"この問題が続く場合は、GitHub Issues で報告してください。","If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.":"中国本土で一般向けに生成 AI サービスを提供する場合、届出、セキュリティ評価、コンテンツ安全、苦情対応、生成コンテンツのラベル表示、ログ保存、個人情報保護などの法的義務を履行します。","Ignored upstream models":"無視する上流モデル","Image":"画像","Image Generation":"画像生成","Image In":"画像入力","Image input":"画像入力","Image input price":"画像入力価格","Image Out":"画像出力","Image output price":"画像出力価格","Image Preview":"画像プレビュー","Image ratio":"画像倍率","Image to Video":"画像から動画","Image Tokens":"画像トークン","Import to CC Switch":"CC Switch にインポート","In Progress":"処理中","In:":"入力:","incident":"件","incidents":"件","Incidents":"インシデント","Include Group":"グループを含む","Include Model":"モデルを含む","Include Rule Name":"ルール名を含む","Includes request rules":"リクエストルールを含む","Including failed requests, 0 = unlimited":"失敗したリクエストを含む、0 = 無制限","Increased user quota by {{quota}}":"ユーザーのクォータを {{quota}} 増やしました","Index":"インデックス","Initial quota given to new users":"新規ユーザーに付与される初期クォータ","Initialization failed, please try again.":"初期化に失敗しました。もう一度お試しください。","Initialize":"初期化","Initialize system":"システム初期化","Initializing…":"初期化中…","Inpaint":"インペイント","Input":"入力","Input mode":"入力モード","Input price":"入力価格","Input price is required before saving dependent prices.":"依存する価格を保存する前に入力価格が必要です。","Input tokens":"入力トークン","Input Tokens":"入力トークン","Inset":"インセット","Inspect requests, errors, and billing details":"リクエスト、エラー、請求詳細を確認","Inspect user prompts":"ユーザープロンプトの検査","Instance":"インスタンス","Insufficient balance":"残高が不足しています","Integrations":"統合","Inter-group overrides":"グループ間上書き","Inter-group ratio overrides":"グループ間比率上書き","Interface Language":"インターフェース言語","Internal Notes":"内部メモ","Internal notes (not shown to users)":":内部メモ(ユーザーには表示されません)","Internal Server Error!":"内部サーバーエラー!","Invalid chat link. Please contact the administrator.":"無効なチャットリンクです。管理者に連絡してください。","Invalid chat link. Please contact your administrator.":"無効なチャットリンクです。管理者に連絡してください。","Invalid code":"無効なコード","Invalid JSON":"JSON が無効です","Invalid JSON format":"無効な JSON 形式","Invalid JSON format or values out of allowed range":"無効な JSON 形式または値が許可された範囲外です","Invalid JSON in parameter override template":"パラメータオーバーライドテンプレートのJSONが無効です","Invalid JSON string.":"無効な JSON 文字列です。","Invalid model mapping format":"無効なモデルマッピング形式","Invalid Passkey registration response":"無効なパスキー登録応答","Invalid Passkey response":"無効なパスキー応答","Invalid payment redirect URL":"無効な支払いリダイレクトURL","Invalid reset link, please request a new password reset":"無効なリセットリンクです。新しいパスワードリセットをリクエストしてください","Invalid reset link, please request a new password reset.":"無効なリセットリンクです。新しいパスワードリセットをリクエストしてください。","Invalid rules JSON format":"ルール JSON の形式が不正です","Invalid status code mapping entr
107ies: {{entries}}":"無効なステータスコードマッピング:{{entries}}","Invalidate":"無効化","Invalidated":"無効化済み","Invert match":"一致を反転","Invitation Code":"招待コード","Invitation Quota":"招待クォータ","Invite Info":"招待情報","Invited":"招待済み","Invited by user ID":"ユーザーIDによる招待","Invited Users":"招待されたユーザー","Invitee Reward":"招待された側の報酬","Inviter":"招待者","Inviter Reward":"招待した側の報酬","Invites":"招待","Invoke developer-defined functions with structured arguments":"構造化された引数で開発者定義の関数を呼び出す","io.net API Key":"io.net API キー","io.net Deployments":"io.net デプロイ","IP":"IP","IP Address":"IPアドレス","IP Filter Mode":"IP フィルターモード","IP Restriction":"IP制限","IP Whitelist (supports CIDR)":"IP ホワイトリスト(CIDR対応)","is less than the configured maximum cache size":"設定された最大キャッシュサイズより小さい","is the default price; ":"はデフォルト価格です; ","It seems like the page you\'re looking for":"お探しのページは","Items":"項目","Japanese":"日本語","Jimeng":"Jimeng","Jina":"Jina","JSON":"JSON","JSON array of group identifiers. When enabled below, new tokens rotate through this list.":"グループ識別子のJSON配列。以下で有効にすると、新しいトークンはこのリストをローテーションします。","JSON Editor":"JSON編集","JSON format error":"JSONフォーマットエラー","JSON format supports service account JSON files":"JSON形式はサービスアカウントJSONファイルをサポートします","JSON is invali
107d at line {{line}}, column {{column}}.":"JSON は {{line}} 行目、{{column}} 列目で無効です。","JSON is invalid at position {{position}}.":"JSON は位置 {{position}} で無効です。","JSON is invalid. Please check the syntax.":"JSON が無効です。構文を確認してください。","JSON map of group → description exposed when users create API keys.":"ユーザーがAPIキーを作成する際に公開される、グループ → 説明のJSONマップ。","JSON map of group → ratio applied when the user selects the group explicitly.":"ユーザーがグループを明示的に選択したときに適用される、グループ → 比率のJSONマップ。","JSON map of model → multiplier applied to quota billing.":"モデル → クォータ請求に適用される乗数のJSONマップ。","JSON map of model → USD cost per request. Takes precedence over ratio based billing.":"モデル → リクエストあたりのUSDコストのJSONマップ。比率ベースの請求よりも優先されます。","JSON mode":"JSON モード","JSON Mode":"JSONモード","JSON must be an object":"JSON はオブジェクトである必要があります","JSON object:":"JSONオブジェクト:","JSON structure is invalid":"JSON 構造が無効です","JSON Text":"JSONテキスト","JSON-based access control rules. Leave empty to allow all users.":"JSONベースのアクセス制御ルール。すべてのユーザーを許可する場合は空のままにしてください。","Just now":"たった今","JustSong":"JustSong","K":"K","Keep affinity when channel is disabled":"チャネル無効時にアフィニティを保持","Keep enabled if you need to proxy requests for different upstream accounts.":"異なる上流アカウントのリクエストをプロキシする必要がある場合は有効にしたままにしてください。","Keep enough balance before production traffic":"本番トラフィック前に十分な残高を確保","Keep original value":"元の値を保持","Keep original value (skip if target exists)":"元の値を保持(ターゲットが存在する場合はスキップ)","Keep the platform ready":"プラットフォームを準備状態に保つ","Keep this above 1 minute to avoid heavy database load":"データベースへの負荷を避けるため、これを1分以上に保ってください","Keep-alive Ping":"キープアライブPing","Key":"キー","Key Fingerprint":"キーフィンガープリント","Key Sources":"キーソース","Key Summary":"キー概要","Key Update Mode":"キー更新モード","Keys, OAuth credentials, and multi-key update behavior.":"キー、OAuth 認証情報、マルチキー更新動作を管理します。","Kling":"Kling","Knowledge Base ID *":"ナレッジベースID *","Knowledge cutoff":"知識のカットオフ","Lake View":"レイクビュー","Landing page with system overview.":"システム概要付きランディングページ。","Language preference saved":"言語設定を保存しました","Language Preferences":"言語設定","Language preferences sync across your signed-in devices and affect API error messages.":"言語設定はログイン中のすべてのデバイスで同期され、API のエラーメッセージ言語にも反映されます。","Last 24h usage":"直近24時間の使用量","Last 30 days uptime":"直近 30 日の稼働率","Last check time":"最終チェック時刻","Last detected addable models":"最後に検出された追加可能モデル","Last Login":"最終ログイン","Last Seen":"最終確認","Last Tested":"最終テスト日時","Last updated:":"最終更新日:","Last Used":"最終使用","Last used:":"最終使用日:","Latency":"レイテンシ","Latency check":"レイテンシ確認","Latency short":"遅延","Latency trend (last 24h)":"レイテンシ推移(直近 24 時間)","Latest platform updates and notices":"最新のプラットフォーム更新と通知","Lavender Dream":"ラベンダードリーム","Layout":"レイアウト","lead":"リード","Leaderboards":"ランキング","Learn more":"詳細はこちら","Learn more:":"詳細はこちら:","Leave":"退出","Leave blank to keep the existing credential":"既存の認証情報を保持するには、空白のままにしてください","Leave blank to keep the existing key":"空欄のままにすると既存のキーを保持します","Leave blank unless rotating the secret":"シークレットをローテーションする場合を除き、空白のままにしてください","Leave empty for never expires":"期限切れなしにするには空のままにしてください","Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.":"利用規約の要件を無効にするには空のままにしてください。Mark
107down、HTML、またはユーザーをリダイレクトするための完全なURLをサポートします。","Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.":"プライバシーポリシーの要件を無効にするには空のままにしてください。Markdown、HTML、またはユーザーをリダイレクトするための完全なURLをサポートします。","Leave empty to disband the tag":"タグを解散するには空のままにしてください","Leave empty to keep existing key":"空欄のままにすると既存のキーを保持します","Leave empty to keep unchanged":"変更しない場合は空欄のまま","Leave empty to use account email":"アカウントのメールアドレスを使用するには空のままにしてください","Leave empty to use default":"デフォルトを使用する場合は空欄にしてください","Leave empty to use system temp directory":"空欄でシステムの一時ディレクトリを使用","Leave empty to use username":"ユーザー名を使用するには空のままにしてください","Left to Right":"左から右","Legacy Format (JSON Object)":"旧形式(JSONオブジェクト)","Legacy format must be a JSON object":"旧形式はJSONオブジェクトである必要があります","Legacy Format Template":"旧フォーマットテンプレート","Legal":"法務","Less":"少ない","Less than":"より小さい","Less Than":"より小さい","Less than 1 day left":"残り1日未満","Less than or equal":"以下","Less Than or Equal":"以下","License":"ライセンス","Light":"ライト","Lightning Fast":"超高速","Limit period":"制限期間","Limit Reached":"上限に達しました","Limit which models can be used with this key":"このキーで使用できるモデルを制限する","Limited":"制限","LingYiWanWu":"LingYiWanWu","Link to your documentation site":"ドキュメントサイトへのリンク","LinuxDO":"LinuxDO","LinuxDO Client ID":"LinuxDO クライアントID","LinuxDO Client Secret":"LinuxDO クライアントシークレット","List of models supported by this channel. Use comma to separate multiple models.":"このチャネルがサポートするモデルのリストです。複数のモデルはカンマで区切ってください。","List of origins (one per line) allowed for Passkey registration and authentication.":"Passkeyの登録と認証が許可されているオリジン(1行に1つ)のリスト。","List view":"リスト表示","LLM Leaderboard":"LLM リーダーボード","LLM prompt helper":"LLMプロンプトヘルパー","Load Balancing":"ロードバランシング","Load template...":"テンプレートをロード...","Loader":"ローダー","Loading":"読み込み中","Loading channel details":"チャネル詳細を読み込み中","Loading configuration":"設定を読み込んでいます","Loading content settings...":"コンテンツ設定をロード中...","Loading current models...":"現在のモデルをロード中...","Loading failed":"読み込みに失敗しました","Loading maintenance settings...":"メンテナンス設定をロード中...","Loading settings...":"設定をロード中...","Loading setup status…":"セットアップステータスをロード中…","Loading...":"読み込み中...","Local":"ローカル","Local Billing":"ローカル課金","Local models":"ローカルモデル","Locations":"場所","Locked":"ロック済み","log":"ログ","Log Details":"ログの詳細","Log Directory":"ログディレクトリ","Log File Count":"ログファイル数","Log files older than {{value}} days will be deleted.":"{{value}}日前より古いログファイルが削除されます。","Log IP address for usage and error logs":"使用状況およびエラーログのためにIPアドレスを記録する","Log Maintenance":"ログのメンテナンス","Log Type":"ログタイプ","Logged in successfully via {{method}}":"{{method}} でログインに成功しました","Logic":"ロジック","Login":"ログイン","Login failed":"ログインに失敗しました","Login Info":"ログイン情報","Login Method":"ログイン方法","Logo":"ロゴ","Logo URL":"ロゴURL","Logs":"ログ","Low balance":"残高不足","Lowest median first-token latency":"最初のトークンまでã
107®ä¸­å¤®å€¤ãƒ¬ã‚¤ãƒ†ãƒ³ã‚·ã®æœ€å°å€¤","m":"m","Maintenance":"メンテナンス","Make it easier for teammates to pick the right group.":"チームメイトが適切なグループを選択しやすくする。","Manage":"管理","Manage account bindings for this user":"このユーザーのアカウントバインドを管理","Manage Bindings":"バインド管理","Manage catalog visibility and pricing.":"カタログの表示と価格設定を管理。","Manage custom OAuth providers for user authentication":"ユーザー認証用のカスタムOAuthプロバイダーの管理","Manage Keys":"キーの管理","Manage local models for:":"次のローカルモデルを管理します。","Manage multi-key status and configuration for this channel":"このチャネルのマルチキーのステータスと構成を管理する","Manage Ollama Models":"オラマモデルの管理","Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.":"サーバーログファイルを管理します。ログファイルは時間とともに蓄積されるため、定期的なクリーンアップでディスク容量を解放することを推奨します。","Manage subscription plans and pricing.":"サブスクリプションプランと価格設定を管理します。","Manage Subscriptions":"サブスクリプションの管理","Manage Vendors":"ベンダーの管理","Manage your security settings and account access":"セキュリティ設定とアカウントアクセスを管理する","Manual Disabled":"手動無効","Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).":"ユーザー情報レスポンスのフィールドをローカルユーザー属性にマッピングします。ネストされたパスをサポートします (例: ocs.data.id)。","Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.":"モデル識別子をGemini APIバージョンにマッピングします。特定の一致が見つからない場合は、`default`エントリが適用されます。","Map request model names to actual provider model names (JSON format)":"リクエストのモデル名を実際のプロバイダーのモデル名にマッピング (JSON 形式)","Map response status codes (JSON format)":"応答ステータスコードをマッピング(JSON形式)","Map upstream status codes to different codes":"アップストリームのステータスコードを別のコードにマッピングする","Market Share":"マーケットシェア","Marketing":"マーケティング","Match All (AND)":"すべて一致(AND)","Match Any (OR)":"いずれか一致(OR)","Match Mode":"マッチモード","Match model name exactly":"モデル名を正確に一致","Match models containing this name":"この名前を含むモデルを一致","Match models ending with this name":"この名前で終わるモデルを一致","Match models starting with this name":"この名前で始まるモデルを一致","Match Text":"一致テキスト","Match Type":"一致タイプ","Match Value":"マッチ値","Match Value (optional)":"マッチ値(任意)","Matched":"一致","Matched Tier":"一致した階層","Matching Rules":"マッチングルール","Max Disk Cache Size (MB)":"ディスクキャッシュ最大容量 (MB)","Max Entries":"最大エントリ数","Max output":"最大出力","Max Requests (incl. failures)":"最大リクエスト数(失敗を含む)","Max Requests (including failures)":"最大リクエスト数(失敗を含む)","Max requests per period":"期間あたりの最大リクエスト数","Max Success":"最大成功数","Max successful requests":"最大成功リクエスト数","Max Successful Requests":"最大成功リクエスト数","Maximum 1000 characters. Supports Markdown and HTML.":"最大1000文字。MarkdownとHTMLをサポートしています。","Maximum 200 characters":"最大200文字","Maximum 500 characters. Supports Markdown and HTML.":"最大500文字。MarkdownとHTMLをサポートしています。","Maximum check-in quota":"最大チェックインクォータ","Maximum input window":"最大入力ウィンドウ","Maximum number of tokens in the response":"レスポンスの最大トークン数","Maximum quota amount awarded for check-in":"チェックインで付与される最大クォータ量","Maximum tokens including hidden reasoning tokens":"隠れ推論トークンを含む最大トークン数","Maximum tokens per response":"1 回の応答あたりの最大トークン数","maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647":"maxRequests ≥ 0、maxSuccess ≥ 1、両方とも ≤ 2,147,483,647","May be used for training by upstream provider":"上流プロバイダーが学習に利用する可能性があります","Media pricing":"メディア料金","Median time-to-first-token (TTFT) sampled hourly per group":"グループ別に毎時サンプリングした最初のトークンまでã
107®ä¸­å¤®å€¤ãƒ¬ã‚¤ãƒ†ãƒ³ã‚· (TTFT)","Medical Q&A, mental health support":"医療Q&A・メンタルヘルスサポート","Memory Hits":"メモリヒット","Memory Threshold (%)":"メモリ閾値 (%)","Merchant ID":"マーチャントID","Merchant ID is required":"マーチャント ID は必須です","Message Priority":"メッセージの優先度","Metadata":"メタデータ","Midjourney":"Midjourney","MidjourneyPlus":"MidjourneyPlus","min downtime":"分のダウンタイム","Min Top-up":"最低チャージ額","Min Top-up:":"最小チャージ額:","MiniMax":"MiniMax","Minimum check-in quota":"最小チェックインクォータ","Minimum LinuxDO trust level required":"必要な最小LinuxDOトラストレベル","Minimum quota amount awarded for check-in":"チェックインで付与される最小クォータ量","Minimum recharge amount in USD":"米ドルでの最小リチャージ額","Minimum recharge amount to qualify for this discount.":"この割引の対象となる最小チャージ額。","Minimum top-up (optional)":"最小チャージ額(オプション)","Minimum top-up (USD)":"最小チャージ額(USD)","Minimum top-up amount must be at least 1":"最低チャージ額は 1 以上である必要があります","Minimum top-up quantity":"最小チャージ数量","Minimum topup amount: {{amount}}":"最低チャージ金額:{{amount}}","Minimum Trust Level":"最小トラストレベル","Minimum:":"最小:","Minor blips in the last 30 days":"直近 30 日で軽微な障害あり","Mint a fresh pair below — or pick an existing one further down. Click Save when ready.":"下で新しいペアを作成するか、さらに下で既存のものを選択してください。準備ができたら保存をクリックします。","Minute":"分","minutes":"分","Missing code":"コードが不足しています","Missing Models":"不足しているモデル","Missing user data from Passkey login response":"パスキーログイン応答からユーザーデータが欠落しています","Mistral":"Mistral","Modalities":"モダリティ","Modality":"モダリティ","Mode":"モード","model":"モデル","Model":"モデル","Model Access":"モデルアクセス","Model Analytics":"モデル分析","Model Analytics Defaults":"モデル分析のデフォルト設定","Model Analytics Filters":"モデル分析フィルター","model billing support":"モデル課金対応","Model Call Analytics":"モデル呼び出し分析","Model context usage":"モデルのコンテキスト使用量","Model deleted":"モデルが削除されました","Model deleted successfully":"モデルが正常に削除されました","Model Deployment":"モデルデプロイ","Model deployment service is disabled":"モデルデプロイサービスが無効です","Model Description":"モデルの説明","Model details":"モデル詳細","Model disabled successfully":"モデルが正常に無効化されました","Model enabled successfully":"モデルが正常に有効化されました","Model fixed pricing":"モデルの固定価格設定","Model Group":"モデルグループ","Model Limits":"モデル制限","Model Mapping":"モデルマッピング","Model Mapping (JSON)":"モデルマッピング (JSON)","Model Mapping must be a JSON object like":"モデルマッピングは次のようなJSONオブジェクトである必要があります","Model mapping must be a JSON object with string values":"モデルマッピングは文字列値を持つ JSON オブジェクトである必要があります","Model mapping must be valid JSON":"モデルマッピングは有効な JSON である必要があります","Model mapping values must be strings":"モデルマッピングの値は文字列である必要があります","Model name":"モデル名","Model Name":"モデル名","Model Name *":"モデル名 *","Model name is required":"モデル名は必須です","Model names copied to clipboard":"モデル名がクリップボードにコピーされました","Model not found":"モデルが見つかりません","Model performance metrics":"モデル性能メトリクス","Model Price":"モデル価格","Model price is not configured. Please complete model pricing in settings.":"モデル価格が未設定です。設定でモデル料金を補完してください。","Model Price Not Configured":"モデル価格が未設定","Model prices":"モデル価格","Model prices reset successfully":"モデル価格が正常にリセットされました","Model Pricing":"モデル料金","Model pull failed: {{msg}}":"モデルのプルに失敗しました: __ PH_0 __","Model ratio":"モデル倍率","Model ratios":"モデル比率","Model ratios reset successfully":"モデル比率が正常にリセットされました","Model Regex":"モデル正規表現","Model Regex (one per line)":"モデル正規表現(1行に1つ)","Model selected":"選択済みモデル","Model Square":"モデル広場","Model Tags":"モデルタグ","Model to use for testing":"テストに使用するモデル","Model to use when testing channel connectivity":"チャネル接続性をテストする際に使用するモデル","Model Version *":"モデルバージョン *","model(s) selected out of":"選択されたモデル","model(s)? This action cannot be undone.":"モデルを削除しますか?この操作は元に戻せません。","models":"モデル","Models":"モデル","Models *":"モデル *","Models & Groups":"モデルとグループ","Models & Routing":"モデルとルーティング","Models appended successfully":"モデルが正常に追加されました","Models are required":"モデルが必要です","Models climbing the leaderboard":"ランキング上昇中のモデル","Models climbing the leaderboard fastest":"ランキングで最も急上昇しているモデル","Models directory":"モデルディレクトリ","Models Directory":"モデルディレクトリ","Models fetched successfully":"モデルが正常に取得されました","Models filled to form":"フォームにモデルが記入されました","Models listed here will not automatically append or remove -thinking / -nothinking suffixes.":"ここに記載されたモデルは、-thinking / -nothinking サフィックスの自動付与・削除を行いません。","Models losing positions":"順位を下げているモデル","Models losing the most positions":"順位を最も落としているモデル","Models not in list, may fail to invoke":"リストにないモデル、呼び出しに失敗する可能性があります","Models that are being used but not configured in the system":"使用されているがシステムに設定されていないモデル","Models that skip thinking suffix processing":"thinking サフィックス処理をスキップするモデル","Models updated successfully":"モデルが正常に更新されました","Modify existing subscription plan configuration":"既存のサブスクリプションプラン設定を変更","Module availability":"モジュールの可用性","MokaAI":"MokaAI","Monitor":"モニタリング","Monitor balance, usage, and request volume":"残高、使用量、リクエスト数を監視","Monitored relay requests":"監視対象のリレーリクエスト","Monitoring & Alerts":"監視とã
107‚¢ãƒ©ãƒ¼ãƒˆ","Month":"月","Month number":"月番号","Monthly":"毎月","Monthly tokens":"月間トークン","months":"ヶ月","Moonshot":"Moonshot","More":"もっと見る","More Apps":"さらに","more mapping":"さらにマッピング","More templates...":"ほかのテンプレート…","More than 999 days left":"999日以上","More...":"その他...","Most-used models in the selected period and category":"選択した期間とカテゴリで最も使われているモデル","Move":"移動","Move a request header":"リクエストヘッダーを移動","Move affiliate rewards to your main balance":"アフィリエイト報酬をメイン残高に移動する","Move Field":"フィールドを移動","Move Header":"ヘッダーを移動","Move Request Header":"リクエストヘッダーを移動","Move source field to target field":"ソースフィールドをターゲットフィールドに移動","ms":"ms","Multi-key channel: Keys will be":"マルチキーチャネル: キーは","Multi-Key Management":"マルチキー管理","Multi-key management {{action}} on channel (ID: {{id}})":"チャネル(ID: {{id}})でマルチキー管理操作 {{action}} を実行しました","Multi-Key Mode (multiple keys, one channel)":"マルチキー モード (複数のキー、1つのチャネル)","Multi-Key Strategy":"マルチキー戦略","Multi-key: Polling rotation":"マルチキー:ポーリングローテーション","Multi-key: Random rotation":"マルチキー:ランダムローテーション","Multi-protocol Compatible":"マルチプロトコル互換","Multi-region deployment for stable global access":"安定したグローバルアクセスを実現するマルチリージョンデプロイメント","Multi-step thinking before final answer":"最終回答の前に複数ステップで思考","Multi-user management with flexible permission allocation":"柔軟な権限割り当てが可能なマルチユーザー管理","Multilingual translation and localisation":"多言語翻訳とローカライズ","Multimodal":"マルチモーダル","Multiplier":"乗数","Multiplier applied when":"乗数が適用されるとき","Multiplier applied when {{userGroup}} uses {{targetGroup}}":"{{userGroup}}が{{targetGroup}}を使用する際に適用される倍率","Multiplier for audio inputs.":"音声入力の乗数。","Multiplier for audio outputs.":"音声出力の乗数。","Multiplier for completion tokens.":"完了トークンの乗数。","Multiplier for image processing.":"画像処理の乗数。","Multiplier for prompt tokens.":"プロンプトトークンの乗数。","Multipliers for recharge pricing based on user groups.":"ユーザーグループに基づいたリチャージ価格設定の乗数。","Must be a valid URL":"有効な URL を入力してください","Must be at least 8 characters":"8文字以上である必要があります","My Subscriptions":"マイサブスクリプション","my-status":"my-status","MySQL detected":"MySQLが検出されました","MySQL is a production-ready relational database. Keep your credentials secure.":"MySQL は本番環境対応のリレーショナルデータベースです。認証情報を安全に管理してください。","MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.":"MySQLは本番環境に対応しています。自動バックアップと、最小限必要な権限を持つ専用ユーザーが設定されていることを確認してください。","N/A":"該当なし","Name":"名称","Name *":"名前 *","Name for this redemption code (1-20 characters)":"この引き換えコードの名前(1~20文字)","Name is available":"名前が利用可能です","Name is not available":"名前が利用できません","Name must be between {{min}} and {{max}} characters":"名前は{{min}}文字以上{{max}}文字以下である必要があります","Name Rule":"名前ルール","Name Suffix":"名前サフィックス","Name the channel and choose the upstream provider.":"チャネル名を設定し、上流プロバイダーを選択します。","Name the channel, choose the provider, configure API access, and set credentials.":"チャネル名を設定し、プロバイダーを選択し、API アクセスと認証情報を設定します。","Name, provider type, and availability.":"名前、プロバイダー種別、利用可否。","[email protected]":"[email protected]","Native format":"ネイティブ形式","Need a redemption code?":"引き換えコードが必要ですか?","Needs API key":"API キーが必要","Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.":"追加 (+:)、削除 (-:)、または使用可能なグループの追加を行うグループごとのルールを定義するネストされたJSON。","Nested JSON: source group →":"ネストされたJSON: ソースグループ →","Network proxy for this channel (supports socks5 protocol)":"このチャネルのネットワークプロキシ (socks5プロトコルをサポート)","Never":"しない","Never expires":"無期限","Never used an API Gateway?":"APIゲートウェイを一度も使用したことがありませんか?","NEW":"NEW","New API":"新しいAPI","New API &lt;[email protected]&gt;":"新しいAPI __ PH_0 __","New API Project Repository:":"New APIプロジェクトリポジトリ:","New Format Template":"新フォーマットテンプレート","New Group":"新しいグループ","New model":"新しいモデル","New Models ({{count}})":"新しいモデル ({{count}})","New name will be:":"新しい名前は次のようになります:","New password":"新しいパスワード","New Password":"新しいパスワード","New password must be different from current password":"新しいパスワードは現在のものと異なっていなければなりません","New User Quota":"新しいユーザー割り当て","New version available: {{version}}":"新しいバージョンが利用可能です:{{version}}","NewAPI":"NewAPI","Newly released":"最新リリース","Next":"次へ","Next branch":"次のブランチ","Next page":"次のページ","Next reset"
107:"次のリセット","No":"いいえ","No About Content Set":"概要コンテンツが設定されていません","No Active":"アクティブなし","No additional type-specific settings for this channel type.":"このチャネルタイプには、追加のタイプ固有の設定はありません。","No amount options configured. Add amounts below to get started.":"金額オプションは設定されていません。開始するには、以下の金額を追加してください。","No announcements at this time":"現在のお知らせはありません","No announcements yet. Click \\"Add Announcement\\" to create one.":"お知らせはまだありません。「お知らせを追加」をクリックして作成してください。","No API Domains yet. Click \\"Add API\\" to create one.":"まだAPIドメインはありません。「APIを追加」をクリックして作成してください。","No API key yet":"API キーはまだありません","No API keys available. Create your first API key to get started.":"利用可能なAPIキーがありません。最初のAPIキーを作成して開始してください。","No API Keys Found":"APIキーが見つかりません","No API routes configured":"APIルートが設定されていません","No app usage data available for this model.":"このモデルのアプリ利用データはまだありません。","No apps match the selected filters":"条件に一致するアプリはありません","No available models":"利用可能なモデルがありません","No available Web chat links":"利用可能なWebチャットリンクがありません","No backup":"バックアップなし","No base input price":"基本入力価格なし","No billing records found":"請求記録が見つかりません","No capabilities reported for this model.":"このモデルには報告されている機能がありません。","No Change":"変更なし","No changes":"変更なし","No changes made":"変更はありません","No changes to save":"保存する変更がありません","No channel selected":"チャネルが選択されていません","No channel type found.":"チャネルタイプが見つかりません。","No channels available. Create your first channel to get started.":"利用可能なチャネルがありません。最初のチャネルを作成して開始してください。","No channels found":"チャネルが見つかりません","No Channels Found":"チャネルが見つかりません","No channels selected":"チャネルが選択されていません","No chat presets configured. Click \\"Add chat preset\\" to get started.":"チャットプリセットが設定されていません。「チャットプリセットを追加」をクリックして開始してください。","No chat presets match your search":"検索に一致するチャットプリセットがありません","No conflict entries available.":"利用可能な競合エントリはありません。","No conflicts match your search.":"検索条件に一致する競合はありません。","No console output":"コンソール出力なし","No containers":"コンテナがありません","No custom OAuth providers configured yet.":"カスタムOAuthプロバイダーはまだ設定されていません。","No data":"データがありません","No Data":"データなし","No data available":"データがありません","No deployments available. Create one to get started.":"利用可能なデプロイメントがありません。開始するには1つ作成してください。","No Deployments Found":"デプロイメントが見つかりません","No description available.":"説明はありません。","No discount tiers configured. Click \\"Add discount tier\\" to get started.":"割引ティアは設定されていません。「割引ティアを追加」をクリックして開始してください。","No duplicate keys found":"重複キーが見つかりませんでした","No enabled tokens available":"有効なトークンがありません","No endpoints configured. Switch to JSON mode or add rows to define endpoints.":"エンドポイントが設定されていません。JSONモードに切り替えるか、エンドポイントを定義するために行を追加してください。","No FAQ entries available":"FAQエントリがありません","No FAQ entries yet. Click \\"Add FAQ\\" to create one.":"FAQエントリはまだありません。「FAQを追加」をクリックして作成してください。","No files match the accepted types.":"許可された種類に一致するファイルがありません。","No group found.":"グループが見つかりません。","No group-based rate limits configured. Click \\"Add group\\" to get started.":"グループベースのレート制限が設定されていません。\\"グループを追加\\" をクリックして開始してください。","No groups match your search":"検索に一致するグループがありません","No groups yet. Add a group to get started.":"グループはまだありません。グループを追加して開始してください。","No header overrides configured.":"ヘッダーのオーバーライドが設定されていません。","No history data available":"履歴データがありません","No incidents in the last 24 hours":"過去 24 時間にイãƒ
107³ã‚·ãƒ‡ãƒ³ãƒˆã¯ã‚りません","No incidents in the last 30 days":"過去 30 日間でインシデントはありません","No Inviter":"招待者なし","No keys found":"キーが見つかりません","No latency data available":"レイテンシデータがありません","No log entries matched the selected time.":"選択した時間に一致するログエントリはありません。","No logs":"ログがありません","No Logs Found":"ログが見つかりません","No mappings configured. Click \\"Add Row\\" to get started.":"マッピングが設定されていません。「行を追加」をクリックして開始してください。","No matches found":"一致するものが見つかりません","No matching items":"一致する項目がありません","No matching results":"一致する結果がありません","No matching rules":"一致するルールがありません","No messages yet":"まだメッセージがありません","No missing models found.":"不足しているモデルは見つかりません。","No model found.":"モデルが見つかりません。","No model mappings configured. Click \\"Add Mapping\\" to get started.":"モデルマッピングは設定されていません。「マッピングを追加」をクリックして開始してください。","No models available":"利用可能なモデルがありません","No models available in this category":"このカテゴリにはモデルがありません","No models available. Create your first model to get started.":"利用可能なモデルがありません。最初のモデルを作成して開始してください。","No models configured. Use Add model to get started.":"モデルが設定されていません。モデルを追加して開始してください。","No models fetched from upstream":"アップストリームからモデルを取得できませんでした","No models fetched yet.":"まだモデルはフェッチされていません。","No models found":"モデルが見つかりません","No Models Found":"モデルが見つかりません","No models found.":"モデルが見つかりません。","No models match the selected filters":"条件に一致するモデルはありません","No models match your current filters.":"現在のフィルターに一致するモデルはありません。","No models match your search":"検索に一致するモデルがありません","No models selected":"モデルが選択されていません","No models to add":"追加するモデルがありません","No models to copy":"コピーするモデルがありません","No models to remove":"削除するモデルがありません","No new models to add":"追加する新しいモデルはありません","No new models yet":"新しいモデルはまだありません","No notable climbers right now":"現在、目立った上昇はありません","No notable drops right now":"現在、目立った下降はありません","No parameter overrides configured.":"パラメータのオーバーライドが設定されていません。","No payment methods available. Please contact administrator.":"利用可能な支払い方法がありません。管理者に連絡してください。","No payment methods configured":"決済方法が設定されていません","No payment methods configured. Click \\"Add method\\" or use templates to get started.":"支払い方法が設定されていません。「メソッドを追加」をクリックするか、テンプレートを使用して開始してください。","No payment methods match your search":"検索に一致する支払い方法がありません","No performance data available":"利用可能なパフォーマンスデータはありません","No plans available":"利用可能なプランがありません","No preference":"設定なし","No prefill groups yet":"まだ事前入力グループはありません","No price differences found":"価格差異は見つかりませんでした","No processable upstream model updates for this channel":"このチャネルには処理可能な上流モデル更新がありません","No products configured. Click \\"Add product\\" to get started.":"製品が設定されていません。「製品を追加」をクリックして開始してください。","No products match your search":"検索に一致する製品がありません","No providers available":"利用可能なプロバイダーがありません","No Quota":"クォータなし","No ratio differences found":"比率の差異は見つかりませんでした","No recent usage":"最近の使用なし","No records foun
107d. Try adjusting your filters.":"記録が見つかりません。フィルターを調整してみてください。","No redemption codes available. Create your first redemption code to get started.":"利用可能な引き換えコードがありません。最初の引き換えコードを作成して開始してください。","No Redemption Codes Found":"引き換えコードが見つかりません","No related models available for this channel type":"このチャネルタイプに関連するモデルが利用できません","No release notes provided.":"リリースノートは提供されていません。","No Reset":"リセットなし","No restriction":"制限なし","No results for \\"{{query}}\\". Try adjusting your search or filters.":"\\"{{query}}\\" の結果が見つかりません。検索条件やフィルターを調整してみてください。","No results found":"検索結果がありません","No results found.":"結果が見つかりません。","No Retry":"リトライなし","No rules yet":"ルールがありません","No rules yet. Add a group below to get started.":"まだルールがありません。下にグループを追加して開始してください。","No separate media pricing configured.":"個別のメディア料金は設定されていません。","No status code mappings configured.":"ステータスコードのマッピングが設定されていません。","No stores on this merchant yet. Set a return URL and click Create to mint your first pair.":"このマーチャントにはまだストアがありません。戻り URL を設定し、作成をクリックして最初のペアを作成してください。","No subscription plans yet":"サブスクリプションプランがありません","No subscription records":"サブスクリプション記録がありません","No Sync":"同期なし","No system announcements":"システムのお知らせがありません","No token found.":"トークンが見つかりません。","No tools configured":"ツールが未設定です","No Upgrade":"アップグレードなし","No upstream price differences found":"上流価格の差異は見つかりませんでした","No upstream ratio differences found":"アップストリームの比率の差は見つかりません","No uptime data available":"稼働率データがありません","No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.":"Uptime Kumaグループはまだありません。「グループを追加」をクリックして作成してください。","No uptime monitoring configured":"アップタイム監視が設定されていません","No usage logs available. Logs will appear here once API calls are made.":"使用ログはありません。API呼び出し後にログがここに表示されます。","No user information available":"ユーザー情報はありません","No user selected":"ユーザーが選択されていません","No users available. Try adjusting your search or filters.":"利用可能なユーザーがいません。検索またはフィルターを調整してみてください。","No Users Found":"ユーザーが見つかりません","No vendor data available":"ベンダーデータがありません","No X Found":"X が見つかりません","Node Name":"ノード名","Non-stream":"非ストリーミング","Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.":"0 以外の招待報酬には、支払いゲートウェイ設定でのコンプライアンス確認が必要です。","None":"なし","[email protected]":"[email protected]","Normalized:":"正規化:","Not available":"利用できません","Not backed up":"未バックアップ","Not bound":"未バインド","Not Equals":"等しくない","Not Set":"未設定","Not set yet":"未設定","Not Started":"未開始","Not Submitted":"未送信","Not tested":"未テスト","Not used for upstream training by default":"デフォルトで上流の学習には使用されません","Not used yet":"未使用","Notice":"通知","Notification 
107Email":"通知メール","Notification Method":"通知方法","Notifications":"通知","Nucleus sampling probability mass":"核サンプリングの累積確率","Number of codes to create":"作成するコードの数","Number of completions to generate":"生成する候補数","Number of images to generate":"生成する画像枚数","Number of keys to create":"作成するキーの数","Number of times to retry failed requests (0-10)":"失敗したリクエストを再試行する回数 (0-10)","Number of tokens per unit quota":"単位クォータあたりのトークン数","Number of top log probabilities returned per token":"トークンごとに返される上位対数確率の数","Number of users invited":"招待されたユーザー数","OAuth Client ID":"OAuthクライアントID","OAuth Client Secret":"OAuthクライアントシークレット","OAuth failed":"OAuth に失敗しました","OAuth Integrations":"OAuth連携","Object Prune Rules":"オブジェクト削除ルール","Observability":"可観測性","Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.":"Waffoダッシュボードから APIキー、マーチャントID、RSAキーペアを取得し、コールバックURLを設定してください。","Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: <ServerAddress>/api/waffo-pancake/webhook":"Waffo ダッシュボードでマーチャント、ストア、プロダクト、署名用キーを取得してください。Webhook URL: <ServerAddress>/api/waffo-pancake/webhook","Ocean Breeze":"オーシャンブリーズ","of":"件、合計","of 3:":"3のうち:","off":"オフ","Official":"公式","Official documentation":"公式ドキュメント","Official Repository":"公式リポジトリ","Official Sync":"公式同期","OhMyGPT":"OhMyGPT","OIDC":"OIDC","OIDC Client ID":"OIDCクライアントID","OIDC Client Secret":"OIDCクライアントシークレット","OIDC configuration fetched successfully":"OIDC 設定が正常に取得されました","OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.":"OIDCディスカバリーURL。「自動検出」をクリックすると、エンドポイントを自動的に取得します。","OIDC endpoints discovered successfully":"OIDCエンドポイントの検出に成功しました","Old Format Template":"旧形式テンプレート","Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.":"旧形式: 直接上書き。新形式: 条件判定とカスタムJSON操作をサポートします。","Ollama":"Ollama","Ollama Models":"Ollamaモデル","One API":"1つのAPI","One domain per line":"1行に1つのドメイン","One domain per line (only used when domain restriction is enabled)":"1行に1つのドメイン (ドメイン制限が有効な場合のみ使用されます)","One IP or CIDR range per line":"1行に1つのIPまたはCIDR範囲","One IP per line (empty for no restriction)":"1行に1つのIP (制限なしの場合は空欄)","one keyword per line":"1行に1つのキーワード","Online":"オンライン","Online payment is not enabled. Please contact the administrator.":"オンライン決済が有効になっていません。管理者にお問い合わせください。","Online topup is not enabled. Please use redemption code or contact administrator.":"オンラインチャージは有効になっていません。引き換えコードを使用するか、管理者に連絡してください。","Only allow specific email domains":"特定のEメール ドメインのみを許可する","Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.":"管理者のみ利用可能です。有効にすると、スケジュールされたモデルチェックでアップストリームモデルの変更やチェック失敗が検出された際に、選択した方法で概要通知を受け取ります。","Only configured combinations are overridden. All other calls keep the token group base ratio.":"設定済みの組み合わせだけが上書きされます。他の呼び出しはトークングループの基本倍率を維持します。","Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear."
107:"選択されたフィールドのみが上書きされます。新しい競合が発生した場合は、同期ウィザードを再実行できます。","Only successful requests":"成功したリクエストのみ","Only successful requests count toward this limit.":"成功したリクエストのみがこの制限にカウントされます。","Only the last {{value}} log files will be retained; the rest will be deleted.":"最新の{{value}}個のログファイルのみ保持され、残りは削除されます。","Oops! Page Not Found!":"おっと!ページが見つかりません!","Oops! Something went wrong":"おっと!何か問題が発生しました","Open":"開く","Open a source model first":"先にソースモデルを開いてください","Open CC Switch":"CC Switch を開く","Open in chat":"チャットで開く","Open in new tab":"新しいタブで開く","Open in New Tab":"新しいタブで開く","Open menu":"メニューを開く","Open release":"リリースを開く","Open source":"オープンソース","Open Source":"オープンソース","Open the io.net console API Keys page":"io.netコンソールAPIキーページを開く","Open theme settings":"テーマ設定を開く","Open weights":"公開ウェイト","OpenAI":"OpenAI","OpenAI Compatible":"OpenAI互換","OpenAI Organization":"OpenAI組織","OpenAI Organization ID (optional)":"OpenAI 組織 ID (オプション)","OpenAI, Anthropic, etc.":"OpenAI、Anthropicなど","OpenAI, Anthropic, Google, etc.":"OpenAI、Anthropic、Googleなど","OpenAIMax":"OpenAIMax","OpenRouter":"OpenRouter","opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.":"外部クライアントで開きます。サイドバーまたはAPIキーアクションからトリガーして、設定されたアプリケーションを起動します。","Operation":"操作","operation and charging behavior":"運用および課金行為","Operation Audit Info":"操作監査情報","Operation failed":"操作に失敗しました","Operation successful":"操作が成功しました","Operation Type":"操作タイプ","Operations":"運用","Operator Admin":"オペレーター管理","Optimize system for self-hosted single-user usage":"セルフホスト型の単一ユーザー使用向けにシステムを最適化する","Optimized network architecture ensures millisecond response times":"最適化されたネットワークアーキテクチャによりミリ秒単位の応答時間を保証","Optional callback override. Leave blank to use server address":"オプションのコールバック上書き。サーバーアドレスを使用するには空欄のままにします","Optional icon identifier for the login button":"ログインボタン用のオプションのアイコン識別子","Optional JSON policy to restrict access based on user info fields":"ユーザー情報フィールドに基づいてアクセスを制限するためのオプションのJSONポリシー","Optional minimum recharge amount for this method.":"この方法のオプションの最小チャージ額。","Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as":"チャージ料金を計算する際に使用されるユーザーグループごとのオプションの乗数。次のようなJSONオブジェクトを提供してください","Optional notes about this channel":"このチャネルに関するオプションのノート","Optional notes about when to use this group":"このグループを使用する時期に関するオプションのメモ","Optional ratio used when upstream cache hits occur.":"アップストリームキャッシュヒットが発生したときに使用されるオプションの比率。","Optional rule description":"任意のルール説明","Optional settings for advanced container configuration.":"高度なコンテナ設定のためのオプション設定。","Optional supplementary information (max 100 characters)":"オプションの補足情報 (最大100文字)","Optional tag for grouping channels":"チャネルをグループ化するためのオプションのタグ","Opus Model":"Opus モデル","Or continue with":"または、以下で続行","Or enter this key manually:":"または、このキーを手動で入力してください:","or pick existing":"または既存のものを選択","Order completed successfully":"注文が正常に完了しました","Order History":"注文履歴","Order Payment Method":"注文の支払い方法","org-...":"org-...","Original Model":"オリジナルモデル","Other":"その他","Outage":"ダウンタイム","Output":"出力","Output aspect ratio":"出力アスペクト比","Output image size":"出力画像サイズ","Output price":"出力価格","Output token price for generated tokens.":"生成された出力トークンの価格。","Output tokens":"出力トークン","Output Tokens":"出力トークン","overall":"全体","Overnight range":"日跨ぎ範囲","override":"上書き","Override":"上書き","Override auto-discovered endpoint":"自動検出されたエンドポイントを上書きする","Override request headers":"リクエストヘッダーを上書きする","Override request headers (JSON format)":"リクエストヘッダーのオーバーライド (JSON 形式)","Override request parameters":"リクエストパラメータを上書き","Override request parameters (JSON format)":"リクエストパラメータの上書き (JSON形式)","Override request parameters. Cannot override":"リクエストパラメーターを上書きします。上書きできません","Override request parameters. Cannot override stream parameter.":"リクエストパラメータを上書きします。stream パラメータは上書きできません。","Override Rules":"上書きルール","Override the endpoint used for testing. Leave empty to auto detect.":"テストに使用されるエンドポイントを上書きします。自動検出するには空のままにします。","overrides for matching model prefix.":"は一致するモデル接頭辞に上書きします。","Overrode user quota from {{from}} to {{to}}":"ユーザーのクォータを {{from}} から {{to}} に上書きしました","Overview":"概要","Overwritten":"上書き済み","Page":"ページ","Page {{current}} of {{total}}":"{{total}} ページ中 {{current}} ページ目","PaLM":"PaLM","Pan":"パン","Pancake":"Pancake","Param Override":"パラメータ上書き","Parameter":"パラメータ","Parameter configuration error":"パラメータ設定エラー","Parameter Override":"パラメータのオーバーライド","Parameter override must be a valid JSON object":"パラメータオーバーライドは有効なJSONオブジェクトである必要があります","Parameter override must be valid JSON format":"パラメータオーバーライドは有効なJSON形式である必要があります","Parameter Override Template (JSON)":"パラメータオーバーライドテンプレート (JSON)","Parameter override template must be a JSON object":"パラメータオーバーライドテンプレートはJSONオブジェクトである必要があります","parameter.":"パラメーター。","Parameters":"パラメータ","Parsed {{count}} service account file(s)":"__ PH_0 __サービスアカウントファイルを解析しました","Partial Submission":"部分送信","Pass Headers":"ヘッダーをパススルー","Pass request body directly to upstream":"リクエストボディを直接アップストリームに渡す","Pass specified request headers to upstream":"指定のリクエストヘッダーを上流に透過","Pass Through Body":"ボディをパススルー","Pass Through Headers":"ヘッダー透過","Pass through the anthropic-beta header for beta features":"ベータ機能用に anthropic-beta ヘッダーをパススルー","Pass through the include field for usage obfuscation":"使用量難読化用に include フィールドをパススルー","Pass through the inference_geo field for Claude data residency region control":"Claude データ駐留推論リージョン制御用に inference_geo フィールドをパススルー","Pass through the inference_geo field for geographic routing":"地理的ルーティング用に inference_geo フィールドをパススルー","Pass through the safety_identifier field":"SAFETY_IDENTIFIERフィールドを通過する","Pass through the service_tier field":"SERVICE_TIERフィールドを通過する","Pass through the speed field for Claude inference speed mode control":"Claude 推論速度モード制御用に speed フィールドをパススルー","Pass when key is missing":"キーがなã
107„場合は通過","Pass-Through":"パススルー","Pass-through Headers (comma-separated or JSON array)":"パススルーヘッダー(カンマ区切りまたはJSON配列)","Passkey":"Passkey","Passkey Authentication":"パスキー認証","Passkey is not available in this browser":"このブラウザではパスキーが利用できません","Passkey is not supported in this environment":"この環境ではパスキーはサポートされていません","Passkey is not supported on this device":"このデバイスではパスキーがサポートされていません","Passkey is not supported on this device.":"このデバイスではパスキーはサポートされていません。","Passkey Login":"Passkeyログイン","Passkey login failed":"パスキーログインに失敗しました","Passkey login was cancelled":"パスキーログインがキャンセルされました","Passkey login was cancelled or timed out":"パスキーログインがキャンセルまたはタイムアウトされました","Passkey not supported on this device":"このデバイスではパスキーはサポートされていません","Passkey registered successfully":"パスキーが正常に登録されました","Passkey registration was cancelled":"パスキーの登録がキャンセルされました","Passkey removed successfully":"パスキーが正常に削除されました","Passkey reset successfully":"パスキーが正常にリセットされました","Passthrough Template":"透過テンプレート","Password":"パスワード","Password / Access Token":"パスワード / アクセストークン","Password changed successfully":"パスワードが正常に変更されました","Password copied to clipboard: {{password}}":"パスワードがクリップボードにコピーされました:{{password}}","Password has been copied to clipboard":"パスワードがクリップボードにコピーされました","Password Login":"パスワードログイン","Password must be at least 8 characters":"パスワードは少なくとも8文字である必要があります","Password must be at least 8 characters long":"パスワードは8文字以上である必要があります","Password Registration":"パスワード登録","Password reset and copied to clipboard: {{password}}":"パスワードがリセットされ、クリップボードにコピーされました:{{password}}","Password reset: {{password}}":"パスワードがリセットされました:{{password}}","Passwords do not match":"パスワードが一致しません","Path":"パス","Path not set":"パス未設定","Path Regex (one per line)":"パス正規表現(1行に1つ)","Path:":"パス:","Pay":"Pay","Pay with Balance":"残高で支払う","Pay-as-you-go with real-time usage monitoring":"リアルタイム使用量監視付き従量課金制","Payment":"支払い","Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.":"決済アグリゲーターモード — 自社の登録済み法人(オフショア法人)でオンボーディングします。エンタープライズ向けです。","Payment Channel":"決済チャネル","Payment Gateway":"決済ゲートウェイ","Payment initiated":"支払いが開始されました","Payment Method":"チャージ方法","Payment method name":"決済方法名","Payment method name is required":"決済方法名は必須です","Payment method type":"決済方法タイプ","Payment method type is required":"支払い方法のタイプは必須です","Payment methods":"支払方法","Payment Methods":"決済方法","Payment page opened":"決済ページが開きました","Payment request failed":"支払いリクエストが失敗しました","Payment return URL":"決済完了後のリダイレクトURL","Payment return URL is empty. Create the product without a SuccessURL redirect?":"支払い戻り URL が空です。SuccessURL リダイレクトなしで商品を作成しますか?","Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.":"ルート管理者がコンプライアンス条件を確認するまで、支払い、引換コード、サブスクリプションプラン、招待報酬はロックされます。","Peak":"ピーク","Peak throughput":"ピークスループット","Penalises repetition of frequent tokens":"頻出トークンの繰り返しを抑制します","Pending":"保留中","per":"あたり","Per 1K tokens":"1Kトークンあたり","Per 1M tokens":"1Mトークンあたり","per request":"リクエストごと","Per request":"リクエストごと","Per Request":"リクエストごと","Per-call":"呼び出しごと","Per-feature metered windows split by model or capability.":"機能ごとの従量制ウィンドウ。モデルまたは能力別に分かれます。","Per-group performance":"グループ別パフォーマンス","Per-request":"リクエスト単位","Per-request (fixed price)":"リクエストごと (固定価格)","Per-token":"トークン単位","Per-token (ratio based)":"トークンごと (比率ベース)","Per-token logit bias map":"トークンごとの logit バイアス","Percentage:":"パーセンテージ:","Performance":"パフォーマンス","Performance data is not yet available for this model.":"このモデルのパフォーマンスデータはまだ利用できません。","Performance health":"パフォーマンス状態","Performance metrics for the last 24 hours":"直近24時間のパフォーマンス指標","Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.":"ここに表示されているパフォーマンス指標はプレビュー用のシミュレーションデータです。バックエンド連携の完了後、実データに置き換えられます。","Performance Monitor":"パフォーマンス監視","Performance Settings":"パフォーマンス設定","Performed {{action}} on user {{username}} (ID: {{id}})":"ユーザー {{username}}(ID: {{id}})に対して {{action}} を実行しました","Period":"期間","Periodically check for upstream model changes":"アップストリームモデルの変更を定期的にチェック","Periodically send ping frames to keep streaming connections active.":"ストリーミング接続をアクティブに保つために、定期的にpingフレームを送信します。","Permanently delete your account and all data":"アカウントとすべてのデータを永久に削除","Permit Passkey registration on non-HTTPS origins (only recommended for development)":"非HTTPSオリジンでのパスキー登録を許可する(開発でのみ推奨)","Perplexity":"Perplexity","Persist your data file":"データファイルを永続化する","Personal":"個人","Personal area":"個人エリア","Personal Center Area":"パーソナルセンターエリア","Personal info settings":"個人情報設定","Personal Settings":"個人設定","Personal settings and profile management."
107:"個人設定とプロフィール管理。","Personal use":"個人利用","Personal use mode":"個人利用モード","Pick a date":"日付を選択","Pick or create both a store and a product before saving.":"保存する前に、ストアと商品の両方を選択または作成してください。","Ping Interval (seconds)":"Ping間隔(秒)","Plan":"プラン","Plan Name":"プラン名","Plan price must be greater than zero":"プラン価格は 0 より大きい必要があります","Plan Subtitle":"プランサブタイトル","Plan Title":"プラン名","Plan title is required":"プランタイトルは必須です","Planned maintenance on Friday at 22:00 UTC...":"金曜日 22:00 UTC に計画メンテナンスがあります...","Platform":"プラットフォーム","Playground":"プレイグラウンド","Playground and chat functions":"プレイグラウンドとチャット機能","Playground experiments and live conversations.":"Playgroundの実験とライブ会話。","Please agree to the legal terms first":"先に利用規約に同意してください","Please complete the security check to continue.":"続行するにはセキュリティチェックを完了してください。","Please confirm that you understand the consequences":"結果を理解したことを確認してください","Please enable io.net model deployment service and configure an API key in System Settings.":"システム設定で io.net モデルデプロイサービスを有効にし、API キーを設定してください。","Please enable Two-factor Authentication or Passkey before proceeding":"続行する前に、二要素認証またはパスキーを有効にしてください","Please enter a name":"名前を入力してください","Please enter a new password":"新しいパスワードを入力してください","Please enter a redemption code":"引き換えコードを入力してください","Please enter a valid duration":"有効な期間を入力してください","Please enter a valid email address":"有効なメールアドレスを入力してください","Please enter a valid number":"有効な数値を入力してください","Please enter a Well-Known URL first":"まずWell-Known URLを入力してください","Please enter amount":"金額を入力してください","Please enter an administrator username":"管理者ユーザー名を入力してください","Please enter API key first":"まずAPIキーを入力してください","Please enter chat client name":"チャットクライアント名を入力してください","Please enter email and verification code":"メールアドレスと認証コードを入力してください","Please enter keys first":"まずキーを入力してください","Please enter model name":"サブモデルを入力してください","Please enter plan title":"プラン名を入力してください","Please enter the authentication code.":"認証コードを入力してください。","Please enter the URL":"URLを入力してください","Please enter the verification code":"確認コードを入力してください","Please enter your current password":"現在のパスワードを入力してください","Please enter your email":"メールアドレスを入力してください","Please enter your email first":"まずメールアドレスを入力してください","Please enter your verification code":"認証コードを入力してください","Please enter your verification code or backup code":"認証コードまたはバックアップコードを入力してください","Please fix JSON errors before saving":"保存する前に JSON エラーを直してください","Please fix the highlighted fields before saving":"保存する前に強調表示された項目を修正してください","Please log in with the appropriate credentials":"適切な認証情報でログインしてください","Please select a container":"コンテナを選択してください","Please select a payment method":"お支払い方法を選択してください","Please select a primary model":"プライマリモデルを選択してください","Please select a subscription plan":"サブスクリプションプランを選択してください","Please select at least one channel":"少なくとも1つのチャネルを選択してください","Please select at least one model":"少なくとも1つのモデルを選択してください","Please select items to delete":"削除する項目を選択してください","Please Select user groups that can access this channel."
107:"このチャネルにアクセスできるユーザーグループを選択してください。","Please set Ollama API Base URL first":"最初にOllama APIベースURLを設定してください","Please sign in to view {{module}}.":"{{module}} を表示するにはログインしてください。","Please try again later.":"後でもう一度お試しください。","Please type the following text to confirm:":"確認するには次のテキストを入力してください:","Please upload key file(s)":"キーファイルをアップロードしてください","Please wait a moment before trying again.":"しばらく待ってからもう一度お試しください。","Please wait a moment, human check is initializing...":"しばらくお待ちください、人間チェックを初期化中です...","Please wait before editing to avoid overwriting saved values.":"保存済みの値を上書きしないよう、編集前に読み込み完了をお待ちください。","Policy JSON":"ポリシーJSON","Polling":"ポーリング","Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded":"ポーリングモードにはRedisとメモリキャッシュが必要です。そうでない場合、パフォーマンスが大幅に低下します","Poor":"悪い","Port":"ポート","Port must be a positive integer":"ポートは正の整数でなければなりません","Post Delta":"事後差額","PostgreSQL detected":"PostgreSQLが検出されました","PostgreSQL offers advanced reliability and data integrity for production workloads.":"PostgreSQL は本番ワークロード向けの高度な信頼性とデータ整合性を提供します。","PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.":"PostgreSQLは強力な信頼性保証を提供します。本番稼働する前に、メンテナンスウィンドウと保持ポリシーを再確認してください。","Power AI applications, manage digital assets, connect the Future":"AIアプリケーションを支え、デジタル資産を管理し、未来をつなぐ","Powerful API Management Platform":"強力なAPI管理プラットフォーム","Pre-Consume for Free Models":"無料モデルの事前消費","Pre-consumed":"事前消費","Pre-Consumed Quota":"事前消費クォータ","Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.":"設定は{{pref}}として保存されましたが、アクティブなサブスクリプションがありません。ウォレットが自動的に使用されます。","Preferences":"環境設定","Prefill Group Management":"プリフィルグループ管理","Prefill Groups":"プリフィルグループ","Prefill groups help you keep complex configurations in sync.":"プリフィルグループは、複雑な設定を同期させるのに役立ちます。","Prefix":"プレフィックス","Prefix Match":"プレフィックス一致","Prefix used when displaying prices":"価格表示に使用されるプレフィックス","Prefix/Suffix Text":"プレフィックス/サフィックステキスト","Premium chat models":"プレミアムチャットモデル","Premium plan, half price":"プレミアムプラン、半額","Preparing chat keys…":"チャットキーを準備中…","Preparing your chat link, please try again in a moment.":"チャットリンクを準備中です。しばらくお待ちになってから再度お試しください。","Preparing your chat link…":"チャットリンクを準備中…","Prepend":"先頭に追加","Prepend to Start":"先頭に追加","Prepend value to array / string / object start":"配列/文字列/オブジェクトの先頭に値を追加","Preserve the original field when applying this rule":"このルール適用時に元のフィールドを保持します","Preset groups":"プリセットグループ","Preset recharge amounts (JSON array)":"プリセットチャージ金額 (JSON配列)","Preset recharge amounts displayed to users":"ユーザーに表示されるプリセットチャージ金額","Preset Template":"プリセットテンプレート","Preset templates":"プリセットのテンプレート","preset.anthropic":"Anthropic","preset.default":"デフォルト","preset.forest-whisper":"フォレストウィスパー","preset.lake-view":"レイクビュー","preset.lavender-dream":"ラベンダードリーム","preset.ocean-breeze":"オーシャンブリーズ","preset.rose-garden":"ローズガーデン","preset.simple-large":"特大フォントãƒ
107»ã‚·ãƒ³ãƒ—ル","preset.sunset-glow":"サンセットグロウ","preset.underground":"アンダーグラウンド","Press Enter or comma to add tags":"Enterキーまたはコンマを押してタグを追加","Press Enter to use \\"{{value}}\\"":"Enter キーを押して「{{value}}」を使用","Prevent server-side request forgery attacks":"サーバーサイドリクエストフォージェリ攻撃を防ぐ","Preview":"プレビュー","Previous":"前へ","Previous branch":"前のブランチ","Previous page":"前のページ","Price":"価格","Price ($/1K calls)":"価格($/1K 回)","Price (local currency / USD)":"価格 (現地通貨 / USD)","Price display":"価格表示","Price display mode":"価格表示モード","Price estimation":"料金見積もり","Price estimation description":"ハードウェアタイプ、デプロイ場所、レプリカ数などを設定すると、料金が自動的に計算されます。","Price ID":"価格 ID","Price mode (USD per 1M tokens)":"価格モード (100万トークンあたりのUSD)","Price summary":"価格概要","price_xxx":"price_xxx","Price:":"価格:","Price: High to Low":"価格:高い順","Price: Low to High":"価格:低い順","Prices shown per":"価格表示単位","Prices synced successfully":"価格が正常に同期されました","Prices vary by usage tier and request conditions":"価格は利用ティアとリクエスト条件で変動します","Pricing":"価格設定","Pricing & Display":"価格設定と表示","Pricing by Group":"グループ別価格設定","Pricing Configuration":"価格設定","Pricing group example":"料金グループの例","Pricing groups":"料金グループ","Pricing mode":"価格モード","Pricing Ratios":"価格比率","Pricing Type":"価格タイプ","Primary Model":"プライマリモデル","Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)":"リクエストコンテキストから抽出したキーに基づいて、前回成功したチャネルを優先的に再利用します(スティッキールーティング)","Priority":"優先度","Priority (Default)":"優先度 (デフォルト)","Priority level from 0 (lowest) to 10 (highest), default is 5":"優先度レベル (0が最低、10が最高、デフォルトは5)","Priority order for automatic group assignment. New tokens rotate through this list.":"自動グループ割り当ての優先順位。新しいトークンはこのリストをローテーションします。","Privacy Policy":"プライバシーポリシー","Private Deployment URL":"プライベートデプロイメントURL","Processing OAuth response...":"OAuth応答を処理中...","Processing...":"処理中...","Product":"商品","Product ID":"商品 ID","Product ID is required":"プロダクト ID は必須です","Product Name":"商品名","Productivity":"生産性","Products":"商品","Professional team providing 24/7 technical support":"24時間年中無休のテクニカルサポートを提供するプロフェッショナルチーム","Profile":"プロフィール","Profile updated successfully":"プロフィールが正常に更新されました","Programming":"プログラミング","Progress":"進捗","Project":"プロジェクト","Promote":"昇格","Promotion codes":"プロモーションコード","Prompt":"プロンプト","Prompt (EN)":"プロンプト(英語)","Prompt cache ratio":"プロンプトキャッシュ倍率","Prompt caching":"プロンプトキャッシュ","Prompt Caching":"プロンプトキャッシング","Prompt Details":"プロンプトの詳細","Prompt price ($/1M tokens)":"プロンプト価格 (100万トークンあたり$)","Proprietary":"プロプライエタリ","Provide a JSON object where each key maps to an endpoint definition.":"各キーがエンドポイント定義にマップされる JSON オブジェクトを提供してください。","Provide a valid URL starting with http:// or https://":"http:// または https:// で始まる有効な URL を入力してください","Provide Markdown, HTML, or an external URL for the privacy policy":"プライバシーポリシーにMar
107kdown、HTML、または外部URLを提供する","Provide Markdown, HTML, or an external URL for the user agreement":"ユーザー同意書にMarkdown、HTML、または外部URLを提供する","Provide per-category safety overrides as JSON. Use `default` for fallback values.":"カテゴリごとの安全オーバーライドをJSONとして提供します。フォールバック値には`default`を使用してください。","Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.":"モデルごとのヘッダーオーバーライドをJSONとして提供します。拡張コンテキストウィンドウなどのベータ機能を有効にするのに役立ちます。","Provider":"プロバイダ","Provider & data privacy":"プロバイダーとデータ保護","Provider created successfully":"プロバイダーの作成に成功しました","Provider deleted successfully":"プロバイダーの削除に成功しました","Provider Name":"プロバイダー名","Provider type (OpenAI, Anthropic, etc.)":"プロバイダタイプ (OpenAI, Anthropic など)","Provider updated successfully":"プロバイダーが正常に更新されました","Provider-specific endpoint, account, and compatibility settings.":"プロバイダー固有のエンドポイント、アカウント、互換性設定です。","Proxy Address":"プロキシアドレス","Prune Object Items":"オブジェクト項目を整理","Prune object items by conditions":"条件に基づいてオブジェクト項目を削除","Prune Rule (string or JSON object)":"削除ルール(文字列またはJSONオブジェクト)","Public model catalog and pricing page.":"モデルカタログと料金の公開ページ。","Public rankings page based on live usage data.":"実際の利用データに基づく公開ランキングページ。","Publish Date":"公開日","Published":"公開済み","Published models, groups, and model remapping rules.":"公開モデル、グループ、モデルの再マッピングルール。","Published:":"公開済み:","Pull":"プル","Pull model":"モデルをプル","Pulling...":"プル中...","Purchase Limit":"購入上限","Purchase limit reached":"購入上限に達しました","Purchase Subscription":"サブスクリプションを購入","QR Code Image URL":"QRコード画像URL","QR code is not configured. Please contact support.":"QRコードが設定されていません。サポートにお問い合わせください。","Quantity":"数量","QuantumNous":"QuantumNous","Query Balance":"クエリ残高","Query Param":"クエリパラメータ","Querying...":"クエリ中...","Question":"質問","Queued":"キュー中","Quick actions":"クイック操作","Quick insert common payment methods":"一般的な支払い方法をすばやく挿入","Quick Range":"クイック範囲","Quick Setup from Preset":"プリセットからクイックセットアップ","Quota":"クォータ","Quota ({{currency}})":"クォータ ({{currency}})","Quota adjusted successfully":"クォータの調整に成功しました","Quota consumed before charging users":"ユーザーに請求する前に消費されるクォータ","Quota Distribution":"クォータの分配","Quota given to invited users":"招待されたユーザーに付与されるクォータ","Quota given to users who invite others":"他のユーザーを招待したユーザーに付与されるクォータ","Quota must be a positive number":"クォータは正の数である必要があります","Quota must be zero or greater":"クォータは負の値にできません","Quota Per Unit":"ユニットあたりのクォータ","Quota reminder (tokens)":"クォータリマインダー (トークン)","Quota Reset":"クォータリセット","Quota Settings":"クォータ設定","Quota Types":"クォータタイプ","Quota Warning Threshold":"クォータ警告しきい値","Quota:":"クォータ:","Radius":"角丸","Random":"ランダム","Randomly select a key from the pool for each request":"各リクエストごとにプールからランダムにキーを選択","Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.":"現在のランキングデータはプレビュー用のシミュレーションです。バックエンド連携が完了次第、リアルタイム分析データに置き換わります。","Rankings":"ランキング","Rate Limit Windows":"レート制限ウィンドウ","Rate Limited":"レート制限","Rate Limiting":"レート制限","Rate limits":"レート制限","Ratio":"倍率","Ratio applied to audio completions for streaming models.":"ストリーミングモデルの音声補完に適用される比率。","Ratio applied to audio inputs where supported by the upstream model.":"アップストリームモデルでサポートされている場合の音声入力に適用される比率。","Ratio applied when creating cache entries for supported models.":"サポートされているモデルのキャッシュエントリ作成時に適用される倍率","Ratio mode":"比率モード","Ratio Type":"比率タイプ","Ratio: {{value}}":"倍率:{{value}}","Ratios synced successfully":"比率が正常に同期されました","Raw expression":"元の式","Raw JSON":"生 JSON","Raw Quota":"元のクォータ","Re-enable on success":"成功時に再有効化","Re-login":"再ログイン","Ready":"準備完了","Ready to initialize":"初期化準備完了","Ready to simplify":"シンプルにする準備は","Real exchange rate between USD and your payment gateway currency":"USDと決済ゲートウェイ通貨の間の
107実質為替レート","Reason":"理由","Reason:":"理由:","Reasoning":"理由","Reasoning Effort":"推論強度","Receive Upstream Model Update Notifications":"アップストリームモデル更新通知を受け取る","Received":"受信済み","Recently launched models":"最近リリースされたモデル","Recently launched models gaining traction":"最近リリースされ勢いのあるモデル","Recharge":"チャージ","Recharge Amount":"チャージ額","Recharge Amount (USD)":"チャージ額 (USD)","Recommended":"推奨","Recommended actions":"おすすめの操作","Recommended to keep this high to avoid upstream throttling.":"アップストリームのスロットリングを避けるため、これを高く保つことを推奨します。","Record IP Address":"IPアドレスを記録","Record quota usage":"クォータ使用量を記録","Recursion Strategy":"再帰戦略","Recursive":"再帰","Redeem":"引き換え","Redeem codes":"コードを交換","Redeemed By":"引き換え元","Redeemed:":"引き換え済み:","Received amount":"受け取り額","redemption code":"引き換えコード","Redemption Code":"引き換えコード","Redemption code deleted successfully":"引き換えコードを正常に削除しました","Redemption code disabled successfully":"引き換えコードを正常に無効にしました","Redemption code enabled successfully":"引き換えコードを正常に有効にしました","Redemption code updated successfully":"引き換えコードを正常に更新しました","Redemption code(s) created successfully":"引き換えコードが正常に作成されました","Redemption Codes":"引き換えコード","Redemption codes are disabled until the administrator confirms compliance terms.":"管理者がコンプライアンス条件を確認するまで、引換コードは無効です。","redemption codes.":"引き換えコード。","Redemption failed":"交換に失敗しました","Redemption successful! Added: {{quota}}":"引き換え成功!追加:{{quota}}","Redirecting to chat page...":"チャットページにリダイレクト中...","Redirecting to Creem checkout...":"Creemチェックアウトにリダイレクト中...","Redirecting to GitHub...":"GitHub にリダイレクトしています...","Redirecting to payment page...":"支払いページにリダイレクト中...","Redirecting to sign in in {{seconds}} seconds.":"{{seconds}} 秒後にログインページへ移動します。","Reference Video":"参照動画","Referral link:":"紹介リンク:","Referral Program":"紹介プログラム","Referral reward transfer is disabled until the administrator confirms compliance terms.":"管理者がコンプライアンス条件を確認するまで、紹介報酬の移転は無効です。","Refine models by provider, group, type, and tags.":"プロバイダー、グループ、タイプ、タグでモデルを絞り込みます。","Refresh":"更新","Refresh Cache":"キャッシュ更新","Refresh credential":"認証情報を更新","Refresh failed":"更新に失敗しました","Refresh interval (minutes)":"更新間隔 (分)","Refresh Stats":"統計を更新","Refreshing...":"更新中...","Refund":"返金","Refund Details":"返金詳細","Regenerate":"再生成","Regenerate Backup Codes":"バックアップコードを再生成","Regex":"正規表現","Regex Pattern":"正規表現パターン","Regex Replace":"正規表現置換","Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.":"Pancake ダッシュボードで、各 URL を対応するテストモードまたは本番モードの Webhook スロットに登録してください。エンドポイントを分けることで、テスト通信が誤って本番アカウントに入金されることを防ぎます。","Register Passkey":"Passkeyの登録","Registered a passkey":"パスキーを登録しました","Registration Enabled":"登録が有効","Registry (optional)":"レジストリ (オプション)","Registry secret":"レジストリ シークレット","Registry username":"レジストリ ユーザー名","Reject Reason":"拒否理由","Release details":"リリース詳細","Released":"公開日","Relying Party Display Name":"依拠当事者表示名","Relying Party ID":"依拠当事者ID","Remaining":"残り","Remaining quota":"残りクォータ","Remaining Quota ({{currency}})":"残りのクォータ ({{currency}})","Remaining quota units":"残りクォータ単位","Remaining:":"残り:","Remark":"備考","Remove":"削除","Remove {{value}}":"{{value}} を削除","Remove ${{amount}}":"${{amount}}を削除","Remove all log entries created before the selected timestamp.":"選択したタイムスタンプより前に作成されたすべてのログエントリを削除します。","Remove attachment":"添付ファイルを削除","Remove c
107ondition":"条件を削除","Remove Duplicates":"重複を削除","Remove filter":"フィルターを削除","Remove functionResponse.id field":"functionResponse.id フィールドを削除","Remove mapped targets":"マッピング先を削除","Remove Models":"モデルを削除","Remove Passkey":"Passkey連携解除","Remove Passkey?":"Passkeyを削除しますか?","Remove rule group":"ルールグループを削除","Remove string prefix":"文字列のプレフィックスを除去","Remove string suffix":"文字列のサフィックスを除去","Remove the target field":"ターゲットフィールドを削除","Remove tier":"ティアを削除","Removed":"削除済み","Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}":"{{removed}} 個の重複キーを削除しました。削除前:{{before}}、削除後:{{after}}","Removed an OAuth binding for the user":"ユーザーの OAuth 連携を解除しました","Removed Models ({{count}})":"削除済みモデル ({{count}})","Removes Midjourney flags such as --fast, --relax, and --turbo from user prompts.":"ユーザー プロンプトから --fast、--relax、--turbo などの Midjourney フラグを削除します。","Removing Passkey will require you to sign in with your password next time. You can re-register anytime.":"Passkeyを削除すると、次回からパスワードでサインインする必要があります。いつでも再登録できます。","Rename":"名前変更","Rename deployment":"デプロイメントの名前を変更","Rename failed":"名前変更に失敗しました","Renamed successfully":"名前が正常に変更されました","Repeat the administrator password":"管理者パスワードの再入力","Replace":"置換","Replace all existing keys":"既存のすべてのキーを置き換える","Replace channel models":"チャネルモデルを置き換える","Replace mode: Will completely replace all existing keys":"置換モード: 既存のすべてのキーを完全に置き換えます","Replace With":"置換後","replaced":"置換済み","Replacement Model":"代替モデル","Replica count":"レプリカ数","Replicate":"Replicate","Report an issue":"問題を報告","request":"リクエスト","Request":"リクエスト","Request Body Disk Cache":"リクエストボディのディスクキャッシュ","Request Body Field":"リクエストボディフィールド","Request Body Memory Cache":"リクエストボディのメモリキャッシュ","Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.":"リクエストボディのパススルーが有効です。リクエストボディは変換なしで直接アップストリームに送信されます。","Request conversion":"リクエスト変換","Request Conversion":"リクエスト変換","Request Count":"リクエスト数","Request failed":"リクエスト失敗","Request flow":"リクエストフロー","Request Header Field":"リクエストヘッダーフィールド","Request Header Override":"リクエストヘッダー上書き","Request Header Overrides":"リクエストヘッダーの上書き","Request ID":"リクエストID","Request Limits":"リクエスト制限","Request Model":"リクエストモデル","Request Model:":"リクエストモデル:","Request overrides, routing behavior, and upstream model automation":"リクエスト上書き、ルーティング動作、上流モデル自動化","Request rule pricing":"リクエストルールの課金","Request success rate sampled over the last 24 hours":"過去 24 時間にサンプリングされたリクエスト成功率","Request success rate; {{incidents}} incident buckets in the last 24 hours":"リクエスト成功率;過去 24 時間に {{incidents}} 個のインシデント時間枠","Request timed out, please refresh and restart GitHub login":"タイムアウトしました。ページをリロードして GitHub ログインをやり直してください","Request-based":"リクエスト条件あり","Requests (24h)":"リクエスト (24h)","Requests / 24h":"リクエスト / 24h","Requests per minute":"1分あたりのリクエスト数","requests served":"処理されたリクエスト","Requests will be forwarded to this worker. Trailing slashes are removed automatically.":"リクエストはこのワーカーに転送されます。末尾のスラッシュは自動的に削除されます。","Requests:":"リクエスト:","Require email verification for new accounts":"新しいアカウントにメール認証を要求する","Require job success before follow-up actions":"フォローアップ アクション前にジョブの成功を要求","Require login to view models":"モデルを表示するにはログインを要求する","Require login to view rankings":"ランキングを表示するにはログインを要求する","required":"必須","Required":"必須","Required events:":"必須イベント:","Required provider, authentication, model, and group settings":"必須のプロバイダー、認証、モデル、グループ設定","Required to expose Midjourney-style image generation to end users.":"エンドユーザーに Midjourney スタイルの画像生成を公開するために必要です。","Rerank":"再ランク付け","Reroll":"やり直し","Research, analysis, scientific reasoning":"リサーチ・分析・科学的推論","Resend ({{seconds}}s)":"再送信 ({{seconds}}
107秒)","Reset":"リセット","Reset 2FA":"2FAをリセット","Reset all model prices?":"すべてのモデル価格をリセットしますか?","Reset all model ratios?":"すべてのモデル比率をリセットしますか?","Reset all settings to default values":"すべての設定をデフォルト値にリセット","Reset at:":"リセット日時:","Reset balance and used quota":"残高と使用済みクォータをリセット","Reset Cycle":"リセット周期","Reset email sent, please check your inbox":"リセットメールを送信しました、受信箱を確認してください","Reset failed":"リセット失敗","Reset model ratios":"モデル倍率をリセットしました","Reset Passkey":"Passkeyリセット","Reset password":"パスワードをリセット","Reset Period":"リセット期間","Reset prices":"価格をリセット","Reset ratios":"比率をリセット","Reset Stats":"統計をリセット","Reset the user passkey":"ユーザーのパスキーをリセットしました","Reset to default":"デフォルトにリセット","Reset to Default":"デフォルトにリセット","Reset to default configuration":"デフォルト設定にリセットしました","Reset Two-Factor Authentication":"2要素認証のリセット","Resets in:":"リセットまで:","Resolve Conflicts":"競合を解決","Resource Configuration":"リソース設定","Response":"レスポンス","Response Time":"応答時間","Responses API Version":"応答APIバージョン","Restore defaults":"既定に戻す","Restrict user model request frequency (may impact high concurrency performance)":"ユーザーモデルのリクエスト頻度を制限する(高並行性パフォーマンスに影響を与える可能性があります)","Result":"結果","Retain last N days":"最新N日間を保持","Retain last N files":"最新N個のファイルを保持","Retention days":"保持日数","Retry":"再試行","Retry Chain":"リトライチェーン","Retry Suggestion":"リトライ提案","Retry Times":"再試行回数","Return a custom error immediately":"即座にカスタムエラーを返す","Return Custom Error":"カスタムエラーを返す","Return data conforming to a JSON schema":"JSON スキーマに準拠したデータを返却","Return Error":"エラーを返す","Return per-token log probabilities":"トークンごとの対数確率を返します","Return to dashboard":"ダッシュボードに戻る","Return vector embeddings for inputs":"入力に対してベクトル埋め込みを返却","Reveal API key":"APIキーを表示","Reveal key":"キーを表示","Revenue":"収益","Review & initialize":"確認して初期化","Review model rates before scaling traffic":"トラフィック拡大前にモデル料金を確認","Review your payment details":"支払い詳細を確認","Review your purchase details before proceeding.":"続行前に購入詳細を確認してください。","Rewards will be added directly to your balance":"報酬は直接残高に追加されます","Rewrite callback URLs to the local server":"コールバック URL をローカルサーバーに書き換え","Right to Left":"右から左","Role":"ロール","Roleplay":"ロールプレイ","Root":"ルート","Rose Garden":"ローズガーデン","Route":"ルート","Route active":"ルート有効","Route Description":"ルートの説明","Route is required":"ルートは必須です","Route, auth, and balance check in one place":"ルート、認証、残高確認を一か所に集約","Routing & Overrides":"ルーティングと上書き","Routing Strategy":"ルーティング戦略","Rows per page":"ページあたりの行数","RPM":"RPM","RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.":"RPM = 1 分あたりリクエスト数、TPM = 1 分あたりトークン数、RPD = 1 日あたりリクエスト数。制限はトークングループ単位で適用されます。","RSA Private Key (Production)":"RSA秘密鍵(本番)","RSA Private Key (Sandbox)":"RSA秘密鍵(サãƒ
107³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ï¼‰","Rule":"ルール","Rule {{line}} is missing source field":"ルール {{line}} にソースフィールドがありません","Rule {{line}} is missing target field":"ルール {{line}} にターゲットフィールドがありません","Rule {{line}} is missing target path":"ルール {{line}} にターゲットパスがありません","Rule {{line}} is missing value":"ルール {{line}} に値がありません","Rule {{line}} pass_headers format is invalid":"ルール {{line}} のpass_headers形式が無効です","Rule {{line}} pass_headers is missing header names":"ルール {{line}} のpass_headersにヘッダー名がありません","Rule {{line}} prune_objects is missing conditions":"ルール {{line}} のprune_objectsに条件がありません","Rule {{line}} return_error requires a message field":"ルール {{line}} のreturn_errorにはmessageフィールドが必要です","Rule Description (optional)":"ルール説明(任意)","Rule group":"ルールグループ","rules":"ルール","Rules":"ルール","Rules JSON":"ルール JSON","Rules JSON must be an array":"ルール JSON は配列である必要があります","Run GC":"GC 実行","Run tests for the selected models":"選択したモデルのテストを実行","Running":"実行中","Runway":"残り期間","s":"s","Safety Settings":"安全設定","Same as Local":"ローカルと同じ","Sampling temperature; lower is more deterministic":"サンプリング温度。低いほど決定論的になります","Sandbox mode":"サンドボックスモード","Save":"保存","Save all settings":"すべての設定を保存","Save Backup Codes":"バックアップコードを保存","Save changes":"変更を保存","Save Changes":"変更を保存","Save chat settings":"チャット設定を保存","Save check-in settings":"チェックイン設定を保存","Save Creem settings":"Creem設定を保存","Save drawing settings":"描画設定を保存","Save Epay settings":"Epay設定を保存","Save failed":"保存に失敗しました","Save failed, please retry":"保存に失敗しました。もう一度お試しください","Save general settings":"一般設定を保存","Save group ratios":"グループ比率を保存","Save io.net settings":"io.net設定を保存","Save log settings":"ログ設定を保存","Save model prices":"モデル価格を保存","Save model ratios":"モデル比率を保存","Save Models":"モデルを保存","Save monitoring rules":"監視ルールを保存","Save navigation":"ナビゲーションを保存","Save notice":"通知を保存","Save Preferences":"設定を保存","Save preview":"保存プレビュー","Save rate limits":"レート制限を保存","Save sensitive words":"敏感な言葉を保存","Save Settings":"設定を保存","Save sidebar modules":"サイドバーモジュールを保存","Save SMTP settings":"SMTP設定を保存","Save SSRF settings":"SSRF 設定を保存","Save Stripe settings":"Stripe設定を保存","Save these backup codes in a safe place. Each code can only be used once.":"これらのバックアップコードを安全な場所に保存してください。各コードは一度だけ使用できます。","Save these codes in a safe place. Each code can only be used once.":"これらのコードを安全な場所に保存してください。各コードは一度だけ使用できます。","Save tool prices":"ツール価格を保存","Save Waffo Pancake settings":"Waffo Pancake 設定を保存","Save Worker settings":"Worker設定を保存","Saved successfully":"保存しました","Saving...":"保存中...","Scan QR Code":"QRコードをスキャン","Scan the QR code to follow the official account and reply with “验证码” to receive your verification code.":"公式アカウントのQRコードを読み取り、「验证码」と返信して認証コードを受け取ってください。","Scan the QR code with WeChat to bind your account":"WeChatでQRコードをスキャンしてアカウントをバインド","Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)":"このQRコードを認証アプリ(Google Authenticator、Microsoft Authenticatorなど)でスキャンしてください。","Scenario Templates":"シナリオテンプレート","Scheduled channel tests":"スケジュールされたチャネルテスト","scheduling controls":"スケジューリング制御","Science":"科学","Scope":"スコープ","Scopes":"スコープ","Search":"検索","Search by name or URL...":"名前またはURLで検索...","Search by order number...":"注文番号で検索...","Search channel type...":"チャネルタイプを検索...","Search chat presets...":"チャットプリセットを検索...","Search colors...":"色を検索...","Search conflicting models or fields":"競合するモデルまたはフィールドを検索","Search deployments...":"デプロイを検索...","Search feature in development":"検索機能は開発中です","Search group names...":"グループ名を検索...","Search groups...":"グループを検索...","Search missing models":"不足しているモデルを検索","Search model name, provider, endpoint, or tag...":"モデル名、プロバイダー、エンドポイント、タグを検索...","Search model name...":"モデル名を検索...","Search models":"モデルを検索","Search models or fields...":"モデルまたはフィールドを検索...","Search models...":"モデル名で検索...","Search payment methods...":"支払い方法を検索...","Search payment types...":"支払いタイプを検索...","Search products...":"商品を検索...","Search rules...":"ルールを検索…","Search tags...":"タグを検索...","Search the public web at inference time":"推論時に公開ウェブを検索","Search vendors...":"ベンダーを検索...","Search...":"検索...","seconds":"秒","Secret env (JSON object)":"シークレット env (JSON オブジェクト)","Secret environment variables (JSON)":"シークレット環境変数(JSON)","Secret Key":"シークレットキー","Secure & Reliable":"セキュア&信頼性","Secured":"保護済み","Security":"セキュリティ","Security & Limits":"セキュリティと制限","Security Check":"セキュリティチェック","Security verification":"セキュリティ確認","Select":"選択","Select a color":"色を選択","Select a group":"グループを選択","Select a group type":"グループタイプを選択","Select a model to edit pricing":"料金を編集するモデルを選択","Select a preset...":"プリセットを選択...","Select a product":"商品を選択","Select a role":"ロールを選択","Select a rule to edit.":"編集するルールを選択してください。","Select a store":"ストアを選択","Select a timestamp before clearing logs.":"ログをクリアする前にタイムスタンプを選択してください。","Select a usage mode to continue":"続行するには使用モードを選択してください","Select a verification method first":"まず検証方法を選択してください","Select all":"すã
107¹ã¦é¸æŠž","Select all (filtered)":"フィルタ結果をすべて選択(S)","Select all models":"すべてのモデルを選択","Select All Visible":"表示中のすべてを選択","Select an operation mode and enter the amount":"操作モードを選択し、金額を入力してください","Select announcement type":"アナウンスメントタイプを選択","Select at least one field to overwrite.":"上書きするフィールドを少なくとも 1 つ選択してください。","Select at least one target model":"少なくとも1つの対象モデルを選択してください","Select body font":"本文フォントを選択","Select border radius":"角丸を選択","Select channel type":"チャネルタイプを選択","Select color preset":"カラープリセットを選択","Select content width":"コンテンツ幅を選択","Select corner radius":"角の丸みを選択","Select currency":"通貨を選択","Select date":"日付を選択","Select default chart":"デフォルトチャートを選択","Select default range":"デフォルト範囲を選択","Select display mode":"表示モードを選択","Select end time":"終了時間を選択","Select from presets or type custom identifier.":"プリセットから選択するか、カスタム識別子を入力してください。","Select granularity":"粒度を選択","Select groups (leave empty to keep current)":"グループを選択 (現在の設定を維持するには空のままにしてください)","Select interface density":"インターフェイスの密度を選択","Select items...":"項目を選択...","Select key format":"キーフォーマットを選択","Select language":"言語を選択","Select Language":"言語を選択","Select layout style":"レイアウトスタイルを選択","Select locations":"ロケーションを選択","Select Model":"モデルを選択","Select model {{model}}":"モデル {{model}} を選択","Select models (empty for allow all)":"モデルを選択 (すべて許可する場合は空)","Select models and apply to channel models list.":"モデルを選択し、チャネルモデルリストに適用します。","Select models or add custom ones":"モデルを選択するか、カスタムモデルを追加","Select models to process. Unselected \\"add\\" models will be ignored.":"処理するモデルを選択してください。未選択の「追加」モデルは無視されます。","Select models to run batch tests.":"バッチテストを実行するモデルを選択してください。","Select or enter color value":"色の値を選択または入力","Select or enter model name":"モデル名を選択または入力","Select or enter payment type":"支払いタイプを選択または入力","Select payment method":"お支払い方法を選択","Select preset or enter custom CSS color value.":"プリセットを選択するか、カスタムCSSカラー値を入力してください。","Select publish date":"公開日を選択","Select requirement":"要件を選択","Select row":"行を選択","Select sidebar style":"サイドバースタイルを選択","Select site direction":"サイトの方向を選択","Select start time":"開始時間を選択","Select subscription plan":"サブスクリプションプランを選択","Select Sync Channels":"同期チャネルを選択","Select sync channels to compare prices":"価格比較のために同期チャネルを選択してください","Select sync channels to compare ratios":"比率を比較するために同期チャネルを選択","Select Sync Source":"同期元を選択","Select the API endpoint region":"APIエンドポイントのリージョンを選択","Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.":"アップストリームデータで上書きしたいフィールドを選択してください。選択されていないフィールドはローカル値を保持します。","Select theme preference":"テーマの好みを選択","Select theme preset":"テーマプリセットを選択","Select time granularity":"時間の粒度を選択","Select vendor":"ベンダーを選択","Selectable groups":"選択可能なグループ","selected":"選択済み","Selected {{count}}":"{{count}} 件選択済み","selected channel(s). Leave empty to remove tag.":"選択されたチャネル。タグを削除するには空のままにしてください。","Selected conflicts were overwritten successfully.":"選択した競合が正常に上書きされました。","Selected when creating a token and used as the default billing group for API calls.":"トークン作成時に選択され、API 呼び出しのデフォルト課金グループとして使われます。","Self-Use Mode":"セルフユースモード","Send":"送信","Send a request":"リクエストを送信","Send code":"コードを送信","Send email alerts when a user falls below this quota":"ユーザーがこのクォータを下回ったときにメールアラートを送信","Sending...":"送信中...","Sensitive Words":"機密語","Sent the API key to FluentRead.":"API キーを FluentRead に送信しました。","Separate image/audio prices are enabled.":"画像/音声の個別料金が有効です。","Serve multiple users or teams with billing and quota control.":"課金とクォータ管理で複数のユーザーやチームにサービスを提供します。","Server Address":"サーバーURL","Server IP":"サーバー IP","Server Log Management":"サーバーログ管理","Server logging is not enabled (log directory not configured)":"サーバーログが有効になっていません(ログディレクトリが未設定)","Server Token":"サーバートークン","Service account JSON file(s)":"サービスアカウントJSONファイル","Session expired!":"セッションが期限切れです!","Session expired?":"セッションが期限切れになりましたか?","Set":"設定","Set a discount rate for a specific recharge amount threshold.":"特定のチャージ金額のしきい値に対して割引率を設定します。","Set a secure password (min. 8 characters)":"安全なパスワードを設定してください (最低8文字)","Set a tag for":"のタグを設定","Set API key access restrictions":"API キーのアクセス制限を設定","Set API key basic information":"API キーの基本情報を設定","Set default ranges and charts for model analytics.":"モデル分析の既定の範囲とチャートを設定します。","Set Field":"フィールドを設定","Set filters to customize your dashboard statistics and charts.":"ダッシュボードの統計とグラフをカスタマイズするためにフィルターを設定します。","Set filters to narrow down your log search results.":"ログ検索結果を絞り込むためにフィルターを設定します。","Set Header":"ヘッダーを設定","Set Project to io.cloud when creating/selecting key":"キーを作成/選択する際にプロジェクトを io.cloud に設定","Set quota amount and limits":"クォータ量と制限を設定","Set Request Header":"リクエストヘッダーを設定","Set runtime request header: override entire value, or manipulate comma-separated tokens":"ランタイムリクエストヘッダーを設定:値全体を上書き、またはカンマ区切りトークンを操作","Set separate prices for cache reads and writes.":"キャッシュ読み取りと書き込みに個別の料金を設定します。","Set Tag":"タグを設定","Set tag for selected channels":"選択したチャネルにタグを設定","Set the language used across the interface":"インターフェースで使用する言語を設定します","Set the user\'s role (cannot be Root)":"ユーザーのロールを設定します(Rootにはできません)","Setting Key":"設定キー","Setting saved":"設定が保存さã
107‚Œã¾ã—た","Setting up 2FA...":"2FAを設定中...","Setting updated successfully":"設定が正常に更新されました","Settings":"設定","Settings & Preferences":"設定と環境設定","Settings updated successfully":"設定が正常に更新されました","Session":"セッション","Setup guide":"セットアップガイド","Setup guide complete":"セットアップガイド完了","Setup guide is collapsed. Expand it anytime.":"セットアップガイドは折りたたまれています。いつでも展開できます。","Setup Instructions":"セットアップ手順","Setup progress: {{completed}}/{{total}}":"セットアップ進捗: {{completed}}/{{total}}","Setup Two-Factor Authentication":"2要素認証を設定","Share":"シェア","Share your link and earn rewards":"リンクを共有して報酬を獲得","Shared configuration for all payment gateways":"すべての決済ゲートウェイの共有設定","Shorten":"短縮","Show":"表示","Show All":"すべて表示","Show all providers including unbound":"未バインドを含むすべてのプロバイダーを表示","Show only bound providers":"バインド済みのプロバイダーのみ表示","Show prices in currency instead of quota.":"クォータではなく通貨で価格を表示。","Show setup guide":"セットアップガイドを表示","Show token usage statistics in the UI":"UIでトークン使用統計を表示","Showcase core capabilities with demo credentials and limited access.":"デモ用の認証情報と制限付きアクセスでコア機能を紹介します。","Showing":"表示","showing •":"表示中 •","Sidebar":"サイドバー","Sidebar collapsed by default for new users":"新規ユーザー向けにサイドバーをデフォルトで折りたたむ","Sidebar modules":"サイドバーモジュール","Sidebar Personal Settings":"サイドバー個人設定","Sign in":"ログイン","Sign In":"ログイン","Sign in now":"今すぐログイン","Sign in required":"ログインが必要です","Sign in with Passkey":"Passkeyでログイン","Sign out":"ログアウト","Sign up":"サインアップ","Signed in":"サインインしました","Signed in successfully!":"サインインに成功しました!","Signed in via WeChat":"WeChat経由でサインインしました","Signed in with Passkey":"パスキーでサインインしました","Signed out":"サインアウトしました","Significant outages detected":"大規模な障害を検出","Signing you in with {{provider}}":"{{provider}} でサインイン中","SiliconFlow":"SiliconFlow","Simple":"シンプル","Simple mode only returns message; status code and error type use system defaults.":"シンプルモードはメッセージのみ返します。ステータスコードとエラータイプはシステムデフォルトを使用します。","Simple mode: prune objects by type, e.g. redacted_thinking.":"シンプルモード:typeでオブジェクトを削除(例:redacted_thinking)。","Single Key":"単一キー","Site & Branding":"サイトとブランド","Site Key":"サイトキー","Size:":"サイズ:","sk_xxx or rk_xxx":"sk_xxx または rk_xxx","Skip retry on failure":"失敗時にリトライしない","Skip to Main":"メインコンテンツへスキップ","Slug":"スラッグ","Slug can only contain letters, numbers, hyphens, and underscores":"スラッグには英数字、ハイフン、アンダースコアのみ使用できます","Slug is required":"スラッグは必須です","Slug must be less than 100 characters":"スラッグは100文字以内にしてください","Smallest USD amount users can recharge (Epay)":"ユーザーがチャージできる最小USD金額 (Epay)","SMTP Email":"SMTPメール","SMTP Host":"SMTPホスト","smtp.example.com":"smtp.example.com","socks5://user:pass@host:port":"socks5://user:pass@host:port","Soft Errors":"ソフトエラー","Some channels failed: {{errorMsg}}":"一部のチャネルが失敗しました:{{errorMsg}}","Something went wrong!":"問題が発生しました!","Sonnet Model":"Sonnet モデル","Sora":"Sora","Sort":"並べ替え","Sort by ID":"IDでソート","Sort Order":"並び順","Source":"ソース","Source Endpoint":"ソースエンドポイント","Source Field":"コピー元フィールド","Source Header":"コピー元ヘッダー","sources":"ソース","Space-separated OAuth scopes":"スペース区切りのOAuthスコープ","Spark model version, e.g., v2.1 (version number in API URL)":"Sparkモデルバージョン(例:v2.1、API URLのバージョン番号)","Special billing expression":"特殊な課金式","Special group":"特別グループ","Special ratio rules":"特殊な倍率ルール","Special ratios override the token group ratio for specific user group and token group combinations.":"特殊倍率は、特定のユーザーグループとトークングループの組み合わせでトークングループ倍率を上書きします。","Special usable group rules":"特別な使用可能グループルール","Special usable group rules can add, remove, or append selectable token groups for a specific user group.":"特殊利用可能グループルールでは、特定ユーザーグループ向けに選択可能なトークングループを追加、削除、追記できます。","SQLite stores all data in a single file. Make sure that file is persisted 
107when running in containers.":"SQLite はすべてのデータを単一ファイルに保存します。コンテナで実行する場合は、ファイルが永続化されていることを確認してください。","SSRF Protection":"SSRF保護","Standard":"標準","Standard price":"標準価格","Start":"開始","Start a conversation to see messages here":"会話を開始すると、ここにメッセージが表示されます","Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.":"法人を設立せずに世界中で決済を受け付けられます。個人開発者、OPC 個人事業主、スタートアップ向けに設計されています。Waffo Pancake は Merchant of Record として、消費税、請求書、サブスクリプション管理、返金、チャージバックなど、グローバル決済のコンプライアンス負担を引き受けます。個人開発者はコンプライアンスではなくプロダクトに集中しながら素早くローンチできます。数分でオンボーディングし、1 つのプロンプトから完全な統合まで進められます。","Start for free with generous limits. No credit card required.":"豊富な無料枠で始められます。クレジットカードは不要です。","Start Time":"開始時間","Static page describing the platform.":"プラットフォームを説明する静的ページ。","Statistical count":"統計数","Statistical quota":"統計クォータ","Statistical tokens":"統計トークン","Statistics reset":"統計をリセットしました","Status":"ステータス","Status & Sync":"ステータスと同期","Status Code":"ステータスコード","Status Code Mapping":"ステータスコードマッピング","Status code mapping must use valid HTTP status codes":"ステータスコードマッピングには有効な HTTP ステータスコードを使用する必要があります","Status Page Slug":"ステータスページスラッグ","Status short":"状態","Status:":"ステータス:","Stay":"残る","Stay tuned though!":"引き続きご期待ください!","Steer behaviour with a system instruction":"システム指示でモデルの挙動を制御","Step":"ステップ","Stop":"停止","Stop Retry":"リトライ停止","Store":"Store","Store + product created":"ストア + 商品を作成しました","Store ID":"ストア ID","Store ID is required":"ストア ID は必須です","Stored value is not echoed back for security":"セキュリティのため、保存済みの値は表示されません","stream":"ストリーム","Stream":"ストリーム","Stream Mode":"ストリーミングモード","Stream Status":"ストリーム状態","Stream tokens incrementally as they are generated":"トークンを生成と同時にストリーミング","Stream tokens via Server-Sent Events":"Server-Sent Events でトークンをストリーミング","Streaming":"ストリーミング","String Replace":"文字列置換","Stripe":"Stripe","Stripe API key (leave blank unless updating)":"Stripe APIキー(更新する場合を除き空白のままにしてください)","Stripe Dashboard":"Stripeダッシュボード","Stripe Gateway":"Stripeゲートウェイ","Stripe product price ID":"Stripe製品価格ID","Stripe/Creem requires creating products on the third-party platform and entering the ID":"Stripe/Creem はサードパーティプラットフォームで商品を作成し、IDを入力する必要があります","Structured output":"構造化出力","Submit":"送信","Submit directly":"直接送信","Submit Result":"結果を送信","Submit Time":"送信時刻","Submitted":"送信済み","Submitting":"送信中","Submitting...":"送信中...","Submodel":"Submodel","Subscribe Now":"今すぐ購è
107ª­","Subscribe to a plan for model access":"モデルアクセスのためにプランを登録","Subscription":"サブスクリプション","Subscription Billing":"サブスクリプション課金","Subscription First":"サブスクリプション優先","Subscription Management":"サブスクリプション管理","Subscription Only":"サブスクリプションのみ","Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.":"管理者が支払いゲートウェイ設定でコンプライアンス条件を確認するまで、サブスクリプションプランの作成と変更はロックされます。","Subscription Plans":"サブスクリプションプラン","Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).":"サブスクリプションプランは紐付け済み商品を使用しません。各プランには専用の Pancake 商品があり、サブスクリプション管理画面で設定します(または「+ 作成」ボタンで自動作成します)。","Subscription purchased successfully":"サブスクリプションを購入しました","Subtract":"減算","Success":"成功","Success rate":"成功率","Successfully created {{count}} API Key(s)":"{{count}}個のAPIキーが正常に作成されました","Successfully created {{count}} redemption codes":"{{count}}件の引き換えコードが正常に作成されました","Successfully deleted {{count}} API key(s)":"{{count}}個のAPIキーが正常に削除されました","Successfully deleted {{count}} invalid redemption codes":"{{count}} 件の無効な引き換えコードを削除しました","Successfully deleted {{count}} model(s)":"{{count}} 個のモデルを削除しました","Successfully disabled {{count}} model(s)":"{{count}} 個のモデルを無効にしました","Successfully enabled {{count}} model(s)":"{{count}} 個のモデルを有効にしました","Suffix":"サフィックス","Suffix Match":"サフィックス一致","SunoAPI":"SunoAPI","Sunset Glow":"サンセットグロウ","Super Admin":"スーパー管理者","Super Large":"極大","Support for high concurrency with automatic load balancing":"自動ロードバランシングによる高並行性のサポート","Supported Applications":"サポートされているアプリケーション","Supported Imagine Models":"対応Imagineモデル","Supported modalities":"サポートされるモダリティ","Supported parameters":"対応パラメータ","Supported variables":"サポートされる変数","Supports `-thinking`, `-thinking-":"「-thinking」、「-thinking-」をサポートします","Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.":"HTMLマークアップまたはiframe埋め込みをサポートします。HTMLコードを直接入力するか、完全なURLを提供してiframeとして自動的に埋め込みます。","Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.":"ワンクリック設定をサポートし、NewAPIマルチプロトコル設定に完全に適応します。","Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.":"PNG、JPG、SVG、WebPに対応。推奨サイズ: 128×128以下。","Sustained tokens per second":"持続的な毎秒トークン数","Swap Face":"顔入れ替え","Switch affinity on success":"成功時にアフィニティを切替","Switch between the new frontend and the classic frontend. Changes take effect after page reload.":"新フロントエンドとクラシックフロントエンドを切り替えます。保存後、ページを再読み込みすると反映されます。","Switch to JSON":"JSONに切り替え","Switch to Visual":"ビジュアルに切り替え","Sync Endpoint":"同期エンドポイント","Sync Endpoints":"同期エンドポイント","Sync Fields":"フィールド同期","Sync from the public upstream metadata repository.":"公開上流メタデータリポジトリから同期します。","Sync Now":"今すぐ同期","Sync this model with official upstream":"このモデルを公式アップストリームと同期","Sync Upstream":"アップストリームを同期","Sync Upstream Models":"アップストリームモデルを同期","Synced upstream models":"上流モデルを同期しました","Synchronize models and vendors from an upstream source":"アップストリームソースからモデルとベンダーを同期","Syncing prices, please wait...":"価格を同期中、しばらくお待ちください...","Syncing...":"同期中...","System":"システム","System Administration":"システム管理","System Announcements":"システムのお知らせ","System Behavior":"システムの動作","System data statistics":"システムデータ統計","System default":"システムデフォルト","System Information":"システム情報","System initialized successfully! Redirecting…":"システムが正常に初期化さã
107‚Œã¾ã—た!リダイレクト中…","System logo":"システムロゴ","System maintenance":"システムメンテナンス","System Memory":"システムメモリ","System Memory Stats":"システムメモリ統計","System Name":"システム名称","System name is required":"システム名は必須です","System Notice":"システムからのお知らせ","System Performance Monitoring":"システムパフォーマンス監視","System prompt":"システムプロンプト","System Prompt":"システムプロンプト","System Prompt Concatenation":"システムプロンプトの連結","System Prompt Override":"システムプロンプト上書き","System settings":"システム設定","System Settings":"システム設定","System setup wizard":"システムセットアップウィザード","System task records":"システムタスク記録","System Version":"システムバージョン","Table view":"テーブル表示","Tag":"タグ","Tag Aggregate":"タグ集計","Tag Mode":"タグモード","Tag Name":"タグ名","Tag set successfully":"タグが正常に設定されました","Tag updated successfully":"タグが正常に更新されました","Tag:":"タグ:","Tags":"タグ","Take photo":"写真を撮る","Take screenshot":"スクリーンショットを撮る","Target Endpoint":"ターゲットエンドポイント","Target Field":"コピー先フィールド","Target Field Path":"ターゲットフィールドパス","Target group":"ターゲットグループ","Target Header":"コピー先ヘッダー","Target Path (optional)":"ターゲットパス(任意)","Target User":"対象ユーザー","Task":"タスク","Task ID":"タスクID","Task ID:":"タスクID:","Task logs":"タスクログ","Task Logs":"タスク履歴","Team Collaboration":"チームコラボレーション","Technical Support":"テクニカルサポート","Telegram":"Telegram","Telegram login requires widget integration; coming soon":"Telegramログインにはウィジェット統合が必要です;近日公開","Telegram Login Widget":"Telegramログインウィジェット","Template":"テンプレート","Template variables:":"テンプレート変数:","Templates":"テンプレート","Templates appended":"テンプレートが追加されました","Tencent":"テンセント","Termination requested":"終了リクエスト済み","Test":"テスト","Test {{count}} selected":"選択済み {{count}} 件をテスト","Test All Channels":"すべてのチャネルをテスト","Test Channel Connection":"チャネル接続をテスト","Test Connection":"接続をテスト","Test connectivity for:":"接続性をテスト:","Test failed":"テストに失敗しました","Test interval (minutes)":"テスト間隔(分)","Test Latency":"レイテンシをテスト","Test Mode":"テストモード","Test Model":"モデルをテスト","Test models and prompts from the browser":"ブラウザでモデルとプロンプトをテスト","Test selected models":"選択したモデルをテスト","Testing all enabled channels started. Please refresh to see results.":"有効な全チャネルのテストを開始しました。結果を確認するにはページを更新してください。","Testing...":"テスト中...","Text":"テキスト","Text description of the desired image":"生成したい画像のテキスト説明","Text description of the desired video":"生成したい動画のテキスト説明","Text Input":"テキスト入力","Text or array of texts to embed":"ベクトル化するテキストまたは配列","Text Output":"テキスト出力","Text to Video":"テキストから動画","The administrator account is already initialized. You can keep your existing credentials and continue to the next step.":"管理者アカウントはすでに初期化されています。既存の認証情報を保持して、次のステップに進むことができます。","The administrator configured an external link for this document.":"管理者がこのドキュメントの外部リンクを設定しました。","The administrator has not configured a privacy policy yet.":"管理者がまだプライバシーポリシーを設定していません。","The administrator has not configured a user agreement yet.":"管理者がまだ利用規約を設定していません。","The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.":"管理者はまだ「概要」コンテンツを設定していません。設定ページでHTMLまたはURLをサポートして設定できます。","The binding will complete automatically after authorization":"認証後、バインディングは自動的に完了します","The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.":"紐付け済み商品はウォレットチャージに使用されます。ユーザーが任意の金額を入力すると、new-api はこの単一の Pancake 商品でチェックアウトを実行し、セッションごとに価格を上書きします。$1 / $5 / $10 の SKU を事前作成する必要はありません。","The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.":"紐付け済みストアは、この管理画面から new-api が作成するすべての Pancake 商品の親コンテナです。ウォレットチャージ商品とサブスクリプションプラン商品が含まれます。通常は 1 つのストアで十分です。別々の Pancake カタログを本当に運用する場合のã
107¿åˆ¥ã®ã‚¹ãƒˆã‚¢ã‚’固定してください。","The effective domain for Passkey registration. Must match the current domain or be its parent domain.":"Passkey登録のための有効なドメイン。現在のドメインまたはその親ドメインと一致する必要があります。","The entered text does not match the required text.":"入力したテキストが必要なテキストと一致しません。","The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.":"環境(テスト/本番)はここに貼り付けるキーで決まります。統合中はテストキーを使用し、本番公開時に本番キーへ切り替えてください。","The exact model identifier as used in API requests.":"APIリクエストで使用される正確なモデル識別子。","The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.":"以下のモデルには請求タイプ(固定価格 vs 比率請求)の競合があります。変更を続行するには確認してください。","The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:":"モデルリダイレクト内の以下のモデルは\\"モデル\\"リストに追加されていないため、利用可能なモデルが不足して呼び出しが失敗する可能性があります:","The mapped upstream model(s)":"マッピングされたアップストリームモデル","The model you\'re looking for doesn\'t exist.":"お探しのモデルは存在しません。","The name displayed across the application":"アプリケーション全体に表示される名前","The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations":"OAuthコールバック、Webhook、その他の外部統合に使用されるサーバーの公開URL","The requested chat preset does not exist or has been removed.":"要求されたチャットプリセットは存在しないか、削除されました。","The setup wizard will use this database during initialization.":"セットアップウィザードは初期化時にこのデータベースを使用します。","The site is not available at the moment.":"現在、このサイトは利用できません。","The slug is appended to the URL:":"スラッグがURLに追加されます:","The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.":"同期により、選択されたソースから不足しているモデルとベンダーが取得されます。既存のレコードは、競合を承認した場合にのみ更新されます。","The token group that will have a custom ratio":"カスタム比率を持つトークングループ","The unique identifier for this model":"このモデルの一意の識別子","The unique name for this vendor":"このベンダーの一意の名前","The URL for this chat client.":"このチャットクライアントのURL。","Theme":"テーマ","Theme preset":"テーマプリセット","Theme Settings":"テーマ設定","There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?":"追加と削除の両方のモデルが保留中ですが、一方のタイプのみ選択されています。選択した項目のみ送信してよろしいですか?","These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.":"これらはまだ選択中ですが上流のリストにありません。model_mapping にのみソース別名として載る名前は除外されています。保存前に選択を調整してください。","These toggles affect whether certain request fields are passed through to the upstream provider.":"これらの切り替えは、特定の要求フィールドがアップストリームプロバイダーに渡されるかどうかに影響します。","Thinking Suffix Adapter":"思考サフィックスアダプター","Thinking to Content":"思考からコンテンツへ","Third-party account bindings (read-only, managed by user in profile settings)":"サードパーティアカウントのバインディング(読み取り専用、プロファイル設定でユーザーが管理)","Third-party Payment Config":"サードパーティ決済設定","This action cannot be undone.":"この操作は元に戻せません。","This action cannot be undone. This will permanently delete your account and remove all your data from our servers.":"この操作は元に戻せません。これにより、あなたのアカウントは完全に削除され、すべてのデータがサーバーから削除されます。","This action will permanently remove 2FA protection from your account.":"この操作により、アカウントから2FA保護が完全に削除されます。","This channel is not an Ollama channel."
107:"このチャネルはOllamaチャネルではありません。","This channel type does not support fetching models":"このチャネルタイプはモデルの取得をサポートしていません","This channel type requires additional configuration":"このチャネルタイプには追加設定が必要です","This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.":"この確認により、支払い、引換コード、サブスクリプションプラン、招待報酬の機能が解除されます。各項目をよく読んでください。","This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.":"これはモデルリクエストのレート制限を制御します。Web/API ルートのスロットリングは環境変数で設定され、引き続き 429 を返す場合があります。","This data may be unreliable, use with caution":"このデータは信頼できない可能性があります。注意して使用してください","This device does not support Passkey":"このデバイスはPasskeyをサポートしていません","This device does not support Passkey verification.":"このデバイスはPasskey認証をサポートしていません。","This expression is too complex for the visual editor. Please switch to expression mode to edit.":"この式はビジュアルエディタでは扱いにくいです。式モードに切り替えて編集してください。","This feature is experimental. Configuration format and behavior may change.":"この機能は実験的です。設定フォーマットや動作は変更される可能性があります。","This feature requires server-side WeChat configuration":"この機能にはサーバー側のWeChat設定が必要です","This may cause cache failures.":"これによりキャッシュ障害が発生する可能性があります。","This may take a few moments while we validate the request and update your session.":"リクエストを検証し、セッションを更新するのに数分かかる場合があります。","This model has both fixed price and ratio billing conflicts":"このモデルには固定価格と比率請求の両方の競合があります","This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.":"このモデルには固定価格と比率設定の両方があります。現在のモードで保存すると、競合するフィールドが上書きされます。","This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.":"このモデルには固定価格とトークン価格設定の両方があります。現在のモードで保存すると、競合するフィールドが上書きされます。","This model is not available in any group, or no group pricing information is configured.":"このモデルはどのグループでも利用できないか、グループの料金情報が設定されていません。","This month":"今月","This page has not been created yet.":"このページはまだ作成されていません。","This plan does not allow balance redemption":"このプランでは残高での交換は許可されていません","This project must be used in compliance with the":"このプロジェクトは、以下を遵守して使用する必要があります","This record was written by a pre-upgrade instance and lacks audit info. Upgrade the instance to record server IP, callback IP, payment method and system version.":"古いバージョンのインスタンスがこの記録を書き込み、監査情報がありません。最新に更新し、サーバーIP・コールバックIP・支払方法・OSバージョンの記録を有効にしてください。","This site currently has {{count}} models enabled":"このサイトでは現在 {{count}} 個のモデルが有効です","This tier catches any request that did not match earlier tiers.":"この段階は、前の段階に一致しなかったすべてのリクエストを受け取ります。","this token group":"このトークングループ","this user group":"このユーザーグループ","This user has no bindings":"このユーザーには連携がありません","This week":"今週","This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.":"既存のルールリストに2つのテンプレートルール(Codex CLIとClaude CLI)を追加します。","This will clear custom pricing ratios and revert to upstream defaults.":"これにより、カスタム料金比率がクリアされ、上位のデフォルトに戻ります。","This will delete all":"これによりすべて削除されます","This will delete all channel affinity cache entries still in memory.":"メモリ内のすべてのチャネルアフィニティキャッシュエントリが削除されます。","This will delete temporary cache files that have not been used for more than 10 minutes":"10分以上使用されていない一時キャッシュファイルが削除されます","This will extend the deployment by the specified hours.":"これにより、デプロイメントを指定された時間分延長します。","This will permanently delete API key":"これによりAPIキーが完全に削除されます","This will permanently delete redemption code":"これにより引き換えコードが完全に削除されます","This will permanently delete user":"これによりユーザーが完全に削除されます","This will permanently remove all log entries created before {{date}}.":"{{date}} より前に作成されたすべてのログエントリが完全に削除されます。","This will permanently remove log entries before the selected timestamp.":"選択したタイムスタンプより前のログエントリが完全に削除されます。","This year":"今年","Three steps to get started":"3ステップで始める","Throughput":"スループット","Throughput by group":"グループ別スループット","Throughput short":"TPS","Throughput trend":"スループット推移","Tier":"ティア","Tier conditions":"段階条件","Tier name":"ティア名","Tiered":"段階的","Tiered (billing expression)":"段階的(課金式)","Tiered price table":"段階別価格表","Tiered pricing":"階層料金","tiers":"階層","Time":"時間","Time Granularity":"時間の粒度","Time remaining":"残り時間","Time window for rate limiting":"レート制限の時間枠","Time-based":"時間条件あり","Time-sliced cache (Claude)":"時間分割キャッシュ(Claude)","Time:":"時間:","Timeline":"タイムライン","times":"回","Timing":"所要時間","to access this resource.":"このリソースにアクセスするには。","to confirm":"確認する","To Lower":"小文字に変換","To Lowercase":"小文字化","to override billing when a user in one group uses a token of another group.":"あるグループのユーザーが別のグループのトークンを使用する場合に、請求を上書きするため。","to the Models list so users can use them before the mapping sends traffic upstream.":"マッピングがトラフィックをアップストリームに送信する前にユーザーが使用できるように、モデルリストに追加します。","To Upper":"大文字に変換","To Uppercase":"大文字化","to view this resource.":"このリソースを表示するには。","Today":"今日","Toggle columns":"列の切り替え","Toggle navigation menu":"ナビゲーションメニューの切り替え","Toggle plan":"プランの切り替え","Toggle theme":"テーマの切り替え","Token":"トークン","Token Breakdown":"トークン内訳","Token Endpoint":"トークンエンドポイント","Token Endpoint (Optional)":"トークンエンドポイント (オプション)","Token estimator":"トークン見積り","Token group":"トークングループ","Token management":"トークン管理","Token Management":"トークン管理","Token Mgmt":"トークン管理","Token Name":"トークン名","Token obtained from your Gotify application":"Gotifyアプリケーションから取得したトークン","Token price for audio input.":"音声入力のトークン価格。","Token price for audio output.":"音声出力のトークン価格。","Token price for cache reads.":"キャッシュ読み取りのトークン価格。","Token price for creating cache entries.":"キャッシュ作成のトークン価格。","Token price for image input.":"画像入力のトークン価格。","Token prices":"トークン価格","Token regenerated and copied to clipboard":"トークンが再生成され、クリップボードにコピーされました","Token share by model author across the last 24 hours":"過去 24 時間におけるモデル提供者別のトークンシェア","Token share by model author across the past few weeks":"過去数週間におけるモデル提供者別のトークンシェア","Token share by model author across the past month":"過去 1 か月におけるモデル提供者別のトークンシェア","Token share by model author across the past year":"過去 1 年間におけるモデル提供者別のトークンシェア","Token share by model author since launch":"リリース以降のモデル提供者別のトークンシェア","Token unit":"トークン単位","Token usage by model since launch":"リリース以降のモデル別トークン使用量","Token-based":"トークンベース","Tokenizer":"トークナイザー","tokens":"トークン","Tokens":"トークン","tokens / mo":"トークン / 月","Tokens by category":"カテゴリ別トークン","Tokens Only":"トークンのみ","Tokens per minute":"1分あたりのトークン","Tokens since launch":"リリース以降のトークン","Tokens-only mode will show raw quota values regardless of this toggle.":"トークンのみモードでは、このトグルに関係なく生のクォータ値が表示されます。","Too many files. Some were not added.":"ファイルが多すぎます。一部は追加されませんでした。","Too many requests":"リクエストが多すぎます","Tool / function declarations the model may call":"モデルが呼び出せるツール / 関数の宣言","Tool identifier":"ツールID","Tool price settings":"ツール価格設定","Tool prices":"ツール価格","Tool-choice policy or specific tool name":"ツール選択ポリシーまたは具体的なツール名","Tools":"ツール","Top {{count}}":"上位 {{count}}","Top app":"トップアプリ","Top apps":"人気アプリ","Top Apps":"人気アプリ","Top integrations using this model":"このモデルを利用する主要な連携","Top model":"トップモデル","Top models":"人気モデル","Top Models":"トップモデル","Top models by traffic":"トラフィック上位モデル","Top up balance and view billing history.":"残高をチャージし、請求履歴を確認。","Top Users":"上位ユーザー","Top vend
107ors":"人気ベンダー","Top-up":"チャージ","Top-up amount options":"トップアップ金額オプション","Top-up Audit Info":"入金の監査情報","Top-up group ratios":"トップアップグループ比率","Top-Up Link":"チャージリンク","top-up ratio":"チャージ倍率","Topup Amount":"チャージ額","Total":"合計","Total Allocated":"総割り当て","Total check-ins":"総チェックイン数","Total consumed":"合計消費量","Total consumed quota":"合計消費クォータ","Total cost":"総費用","Total Cost":"総コスト","Total Count":"合計数","Total earned":"总收入","Total Earned":"総収益","Total GPUs":"合計 GPU","Total invitation revenue":"招待による総収益","Total Log Size":"ログ合計サイズ","Total Quota":"合計クォータ","Total requests allowed per period. 0 = unlimited.":"期間ごとに許可されるリクエストの総数。0 = 無制限。","Total requests made":"合計リクエスト数","Total tokens":"合計トークン","Total Tokens":"合計トークン","Total Usage":"総使用量","Total:":"合計:","TPM":"TPM","Track per-request consumption to power usage analytics. Keeping this on increases database writes.":"リクエストごとの消費を追跡し、使用状況分析に利用します。これをオンにすると、データベースへの書き込みが増加します。","Track usage, costs and performance with real-time analytics":"リアルタイム分析で使用量、コスト、パフォーマンスを追跡","Tracked apps":"追跡中のアプリ","Tracks current account base limits and additional metered usage on Codex upstream.":"Codex 上でのアカウント基礎枠と追加従量の利用量を表示します。","Trading insights, accounting, advisory":"トレーディング分析・会計・アドバイザリー","Transfer":"振替","Transfer Amount":"振替金額","Transfer failed":"転送に失敗しました","Transfer Rewards":"報酬の振替","Transfer successful":"転送が成功しました","Transfer to Balance":"残高への振替","Translation":"翻訳","Transparent Billing":"透明性のある請求","Trend":"トレンド","Trending down":"下降中","Trending up":"上昇中","Triggered garbage collection":"ガベージコレクションを実行しました","Trim leading/trailing whitespace":"先頭/末尾の空白を除去","Trim Prefix":"プレフィックス削除","Trim Space":"空白削除","Trim Suffix":"サフィックス削除","Truncate embeddings to this many dimensions":"指定した次元数にベクトルを切り詰めます","Trusted":"信頼済み","Try adjusting your search":"検索条件を調整してみてください","Try adjusting your search to locate a missing model.":"見つからないモデルを見つけるには、検索を調整してみてください。","TTFT P50":"TTFT P50","TTFT P95":"TTFT P95","TTFT P99":"TTFT P99","TTFT percentiles, throughput, and 30-day uptime by group":"グループ別の TTFT 分位数、スループット、30 日間の稼働率","TTL":"TTL","TTL (seconds, 0 = default)":"TTL(秒、0 = デフォルト)","TTL (seconds)":"TTL(秒)","Tune selection priority, testing, status handling, and request overrides.":"選択優先度、テスト、ステータス処理、リクエスト上書きを調整します。","Turnstile is enabled but site key is empty.":"Turnstile が有効ですが、サイトキーが空です。","Tutoring, learning aids, assessment":"個別指導・学習補助・評価","Two-factor Authentication":"2要素認証","Two-Factor Authentication":"2要素認証","Two-factor authentication disabled":"二要素認証が無効になりました","Two-factor authentication enabled successfully!":"二要素認証が正常に有効化されました!","Two-factor authentication reset":"二要素認証がリセットされました","Two-Step Verification":"2段階認証","Type":"タイプ","Type (common)":"タイプ(共通)","Type *":"タイプ *","Type a command or search...":"コマンドまたは検索を入力...","Type the confirmation text here":"確認テキストをここに入力","Type-Specific Settings":"タイプ固有の設定","Type:":"タイプ:","UI granularity only &mdash;
107 data is still aggregated hourly":"UIの粒度のみ &mdash; データは引き続き時間単位で集計されます","Unable to estimate price for this deployment.":"このデプロイメントの価格を推定できません。","Unable to generate chat link. Please contact your administrator.":"チャットリンクを生成できません。管理者にご連絡ください。","Unable to load groups":"グループをロードできません","Unable to load rankings":"ランキングを読み込めません","Unable to load rankings data":"ランキングデータを読み込めません","Unable to open chat":"チャットを開けません","Unable to parse structured pricing":"構造化された価格を解析できません","Unable to prepare chat link. Please ensure you have an enabled API key.":"チャットリンクを準備できません。有効な API キーが設定されていることを確認してください。","Unauthorized":"未認証","Unauthorized Access":"不正アクセス","Unbind":"連携解除","Unbind failed":"連携解除に失敗しました","Unbound {{provider}}":"{{provider}}の連携を解除しました","Underground":"アンダーグラウンド","Understand how user groups, token groups, ratios, and special rules work together.":"ユーザーグループ、トークングループ、倍率、特殊ルールがどのように連携するかを理解します。","Understand image inputs alongside text":"テキストとともに画像入力を理解","Unexpected release payload":"予期しないリリースデータ","Unified API Gateway for":"統合APIゲートウェイ -","Unique identifier for this group.":"このグループの一意の識別子。","Unit price (local currency / USD)":"単価 (現地通貨 / USD)","Unit price (USD)":"単価 (USD)","Unit price must be greater than 0":"単価は 0 より大きい必要があります","Units per USD":"USDあたりのユニット数","Unknown":"不明","Unknown version":"不明なバージョン","Unlimited":"無制限","Unlimited Quota":"無制限のクォータ","Unsaved changes":"未保存の変更","Unset price":"価格未設定","Until":"まで","Untitled":"無題","Untrusted upstream data:":"信頼されていないアップストリームデータ:","Unused":"未使用","Up to 4 strings that stop generation":"生成を停止する文字列を最大 4 個まで","Update":"更新","Update All Balances":"すべての残高を更新","Update API Key":"API キーを更新","Update Balance":"残高を更新","Update balance for:":"残高を更新:","Update Channel":"チャネルを更新","Update channel configuration and click save when you\'re done.":"チャネル設定を更新し、完了したら保存をクリックしてください。","Update configuration":"設定を更新","Update failed":"更新に失敗しました","Update Model":"モデルを更新","Update model configuration and click save when you\'re done.":"モデル設定を更新し、完了したら保存をクリックしてください。","Update plan info":"プラン情報を更新","Update Provider":"プロバイダーを更新","Update Redemption Code":"引き換えコードを更新","Update succeeded":"更新に成功しました","Update the API key by providing necessary info.":"必要な情報を提供して API キーを更新してください。","Update the configuration for this custom OAuth provider.":"このカスタムOAuthプロバイダーの設定を更新します。","Update the redemption code by providing necessary info.":"必要な情報を提供して、引き換えコードを更新してください。","Update the reusable bundle below.":"以下の再利用可能なバンドルを更新してください。","Update the user by providing necessary info.":"必要な情報を提供してユーザーを更新します。","Update vendor information for {{name}}":"{{name}} のベンダー情報を更新","Update your password for account:":"アカウントのパスワードを更新:","Update your password to keep your account secure":"アカウントを安全に保つためにパスワードを更新してください","Updated":"更新されました","Updated a custom OAuth provider":"カスタム OAuth プロバイダーを更新しました","Updated a deployment":"デプロイメントを更新しました","Updated a model":"モデルを更新しました","Updated a prefill group":"プリフィルグループを更新しました","Updated a redemption code":"引換コードを更新しました","Updated a subscription plan":"サブスクリプションプランを更新しました","Updated a vendor":"ベンダーを更新しました","Updated channel {{name}} (ID: {{id}})":"チャネル {{name}} を更新しました(ID: {{id}})","Updated daily":"毎日更新","Updated successfully":"正常に更新されました","Updated system setting {{key}}":"システム設定 {{key}} を更新しました","Updated user {{username}} (ID: {{id}})":"ユーザー {{username}} を更新しました(ID: {{id}})","Updating all channel balances. This may take a while. Please refresh to see results.":"すã
107¹ã¦ã®ãƒãƒ£ãƒãƒ«æ®‹é«˜ã‚’更新中です。これには少し時間がかかる場合があります。結果を確認するには更新してください。","Upgrade Group":"グループをアップグレード","Upload":"アップロード","Upload a single service account JSON file":"単一のサービスアカウントJSONファイルをアップロードする","Upload file":"ファイルをアップロード","Upload files":"ファイルをアップロード","Upload multiple JSON files in batch modes":"バッチモードで複数のJSONファイルをアップロードする","Upload or reference a local configuration file.":"ローカルの構成ファイルをアップロードまたは参照してください。","Upload photo":"写真をアップロード","Upscale":"アップスケール","Upstream":"アップストリーム","Upstream Model Detection Settings":"アップストリームモデル検出設定","Upstream Model Update Check":"アップストリームモデル更新チェック","Upstream Model Updates":"上流モデルの更新","Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models":"上流モデル更新を処理しました:{{added}} 個追加、{{removed}} 個削除、今回 {{ignored}} 個無視、合計 {{totalIgnored}} 個の無視モデル","Upstream price sync":"アップストリーム価格同期","Upstream prices fetched successfully":"上流価格を正常に取得しました","Upstream ratios fetched successfully":"アップストリーム比率が正常に取得されました","Upstream Request ID":"上流リクエストID","Upstream Response":"アップストリームレスポンス","upstream services integrated":"アップストリームサービス連携","Upstream Updates":"アップストリーム更新","uptime":"稼働時間","Uptime":"稼働時間","Uptime (30d)":"稼働率 (30 日)","Uptime (last 30 days)":"稼働率(過去 30 日間)","Uptime Kuma":"稼働時間Kuma","Uptime Kuma groups saved successfully":"Uptime Kuma グループが正常に保存されました","Uptime Kuma URL":"稼働時間KUMA URL","Uptime since":"稼働開始日時","URL":"URL","URL is required":"URL は必須です","URL to your logo image (optional)":"ロゴ画像のURL (オプション)","Usage":"使用量","Usage at a glance":"使用状況の概要","Usage guide":"使用ガイド","Usage logs":"使用ログ","Usage Logs":"利用履歴","Usage mode":"利用モード","Usage-based":"使用量ベース","USD":"USD","USD Exchange Rate":"USD 為替レート","USD price per 1M input tokens.":"100万入力トークンあたりのUSD価格。","USD price per 1M tokens.":"100万トークンあたりのUSD価格。","Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.":"+: はグループ追加、-: はデフォルト選択可能グループの削除、接頭辞なしはグループ追記に使います。","Use a compatible browser or device with biometric authentication or a security key to register a Passkey.":"生体認証またはセキュリティキーを備えた互換性のあるブラウザまたはデバイスを使用して、パスキーを登録してください。","Use authenticator code":"認証コードを使用","Use backup code":"バックアップコードを使用","Use disk cache when request body exceeds this size":"リクエストボディがこのサイズを超えた場合にディスクキャッシュを使用","Use external tools to extend capabilities":"外部ツールを利用して機能を拡張","Use our unified OpenAI-compatible endpoint in your applications":"アプリケーションでOpenAI互換の統一エンドポイントを使用","Use Passkey to sign in without entering your password.":"パスワードを入力せずにサインインするには、パスキーを使用してください。","Use presets or upstream discovery to populate the model list faster.":"プリセットまたは上流検出を使ってモデルリストをすばやく入力します。","Use secure connection when sending emails":"メール送信時に安全な接続を使用する","Use sidebar shortcut":"サイドバーのショートカットを使用","Use the full-width table to scan prices, then select a row to edit it here.":"表で価格を確認し、行を選択してここで編集します。","Use the pricing group table to manage the ratio and whether the group a
107ppears in the token creation dropdown.":"料金グループ表で倍率と、トークン作成ドロップダウンに表示するかどうかを管理します。","Use this token for API authentication":"API認証にはこのトークンを使用してください","Use your Passkey":"パスキーを使用","used":"使用済み","Used":"使用済み","Used / Remaining":"使用済み / 残り","Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.":"新しい商品の SuccessURL として使用されます。空のままにすると確認を求められます。","Used for load balancing. Higher weight = more requests":"ロードバランシングに使用されます。重みが高いほどリクエスト数が増えます","Used in URLs and API routes":"URLとAPIルートで使用されます","Used Quota":"使用済みクォータ","Used to authenticate with io.net deployment API":"io.net デプロイ API の認証に使用します","Used to authenticate with the worker. Leave blank to keep the existing secret.":"ワーカーの認証に使用されます。既存のシークレットを保持するには、空欄のままにしてください。","Used:":"使用済み:","User":"ユーザー","User {{id}}":"ユーザー {{id}}","User Agent":"ユーザーエージェント","User Agreement":"ユーザー利用規約","User Analytics":"ユーザー統計","User Consumption Ranking":"ユーザー消費ランキング","User Consumption Trend":"ユーザー消費トレンド","User created successfully":"ユーザーの作成に成功しました","User dashboard and quota controls.":"ユーザーダッシュボードとクォータ制御。","User Exclusive Ratio":"専用倍率","User group":"ユーザーグループ","User Group":"ユーザーグループ","User group name":"ユーザーグループ名","User Group: {{ratio}}x":"ユーザーグループ:{{ratio}}x","User groups that can access channels with this tag":"このタグを持つチャネルにアクセスできるユーザーグループ","User groups that can access this channel. ":"このチャネルにアクセスできるユーザグループ。","User ID":"ユーザー ID","User ID Field":"ユーザーIDフィールド","User ID:":"ユーザーID:","User Info Endpoint":"ユーザー情報エンドポイント","User Info Endpoint (Optional)":"ユーザー情報エンドポイント(オプション)","User Information":"ユーザー情報","User Menu":"ユーザーメニュー","User personal functions":"ユーザー個人機能","User selectable":"ユーザー選択可","User Subscription Management":"ユーザーサブスクリプション管理","User updated successfully":"ユーザーの更新に成功しました","User Verification":"ユーザー認証","User-Agent include (one per line)":"User-Agent include(1行に1つ)","Username":"ユーザー名","Username confirmation does not match":"ユーザー名の確認が一致しません","Username Field":"ユーザー名フィールド","Username or Email":"ユーザー名またはメールアドレス","Users":"ユーザー","Users call the model on the left. The platform forwards the request to the upstream model on the right.":"ユーザーは左側のモデルを呼び出します。プラットフォームはリクエストを右側のアップストリームモデルに転送します。","Users must wait for a successful drawing before upscales or variations.":"アップスケールやバリエーションを行う前に、ユーザーは成功した描画を待つ必要があります。","Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.":"ユーザーにはユーザー選択可のグループだけが表示されます。選択不可グループも管理者は割り当てできます。","uses":"使用回数","Validity":"有効期間","Validity Period":"有効期間","Value":"値","Value (supports JSON or plain text)":"値(JSONまたはプレーンテキスト対応)","Value is required":"値は必須です","Value must be at least 0":"値は 0 以上である必要があります","Value Regex":"Value 正規表現","variable":"変数","variable) *":"変数) *","Variables":"変数","Vary":"バリエーション","Vary (Strong)":"バリエーション(強)","Vary (Subtle)":"バリエーション(微)","Vast Range of AI Models":"膨大なAIモデル","Vendor":"ベンダー","Vendor deleted successfully":"ベンダーが正常に削除されました","Vendor Name *":"ベンダー名 *","Vendor:":"ベンダー:","Vendors ranked by aggregated token volume":"トークン総使用量で順位付けされたベンダー","Verification code":"確認コード","Verification Code":"認証コード","Verification code must be 6 digits":"認証コードは6桁である必要があります","Verification code sent! Please check your email.":"認証コードを送信しました!メールを確認してください。","Verification code updates every 30 seconds.":"認証コードは 30 秒ごとに更新されます。","Verification email sent":"認証メールをé€
107ä¿¡ã—ました","Verification failed":"認証に失敗しました","Verification is not configured properly":"認証が正しく設定されていません","Verification required to reveal the saved key.":"保存されたキーを表示するには、認証が必要です。","Verify":"認証","Verify and Sign In":"確認してサインイン","Verify routing with Playground or your client":"Playground またはクライアントでルーティングを確認","Verify Setup":"設定を確認","Verify your database connection":"データベース接続を確認","Verifying credentials and pulling stores from your Pancake account...":"認証情報を検証し、Pancake アカウントからストアを取得しています...","Version Overrides":"バージョンオーバーライド","Vertex AI":"Vertex AI","Vertex AI API Key mode does not support batch creation":"Vertex AI API Key モードは一括作成をサポートしていません","Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.":"Vertex AI は functionResponse.id フィールドをサポートしません。有効にすると自動的に削除します。","Vertex AI Key Format":"Vertex AIキー形式","Vertex AI service account key must be valid JSON":"Vertex AI サービスアカウントキーは有効な JSON である必要があります","Video":"動画","Video length in seconds":"動画の長さ(秒)","Video Remix":"動画 Remix","Vidu":"Vidu","View":"表示","View all currently available models":"現在利用可能なすべてのモデルを表示","View detailed information about this user including balance, usage statistics, and invitation details.":"残高、使用統計、招待の詳細など、このユーザーに関する詳細情報を表示します。","View details":"詳細を表示","View document":"ドキュメントを表示","View logs":"ログを表示","View mode":"表示モード","View model statistics and charts":"モデルの統計とグラフを表示","View Pricing":"価格を見る","View the complete details for this":"この","View the complete details for this log entry":"このログエントリの完全な詳細を表示","View the complete error message and details":"エラーメッセージと詳細を表示","View the complete prompt and its English translation":"プロンプト全文と英語訳を表示","View the generated image":"生成された画像を表示","View your topup transaction records and payment history":"チャージ取引記録と支払い履歴を表示","Viewed channel key {{name}} (ID: {{id}})":"チャネルキー {{name}} を表示しました(ID: {{id}})","Violation Code":"違反コード","Violation deduction amount":"違反控除金額","Violation Fee":"違反料金","Violation Marker":"違反マーカー","vip":"vip","VIP users with premium access":"プレミアムアクセス権を持つVIPユーザー","Vision":"ビジョン","Vision, image / video, document chat":"ビジョン・画像/動画・ドキュメントチャット","Visit Settings → General and adjust quota options...":"「設定」→「一般」にアクセスして、クォータオプションを調整してください...","Visitors must authenticate before accessing the pricing directory.":"訪問者は料金ディレクトリにアクセスする前に認証を行う必要があります。","Visitors must authenticate before accessing the rankings page.":"訪問者はランキングページにアクセスする前に認証を行う必要があります。","Visual":"ビジュアル","Visual edit":"ビジュアル編集","Visual editor":"ビジュアルエディター","Visual Editor":"ビジュアルエディタ","Visual indicator color for the API card":"APIカードの視覚的なインジケーターの色","Visual Mode":"ビジュアルモード","Visual Parameter Override":"パラメータ上書きのビジュアル編集","VolcEngine":"VolcEngine","vs. previous":"前期比","Waffo Aggregator Gateway":"Waffo アグリゲーターゲートウェイ","Waffo Pancake Dashboard":"Waffo Pancake Dashboard","Waffo Pancake MoR":"Waffo Pancake MoR","Waffo Pancake Payment Gateway":"Waffo Pancake 決済ゲートウェイ","Waffo Pancake product created":"Waffo Pancake 商品を作成しました","Waffo Pancake product creation failed":"Waffo Pancake 商品の作成に失敗しました","Waffo Pancake save failed":"Waffo Pancake の保存に失敗しました","Waffo Pancake settings saved":"Waffo Pancake 設定を保存しました","Waffo Payment":"Waffo決済","Waffo Payment Gateway":"Waffo決済ゲートウェイ","Waffo Public Key (Production)":"Waffo公開鍵(本番)","Waffo Public Key (Sandbox)":"Waffo公開鍵(サãƒ
107³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ï¼‰","Waiting":"待機中","Waiting for email...":"メールを待っています...","Wallet":"ウォレット","Wallet First":"ウォレット優先","Wallet Management":"ウォレット管理","Wallet management and personal preferences.":"ウォレット管理と個人設定。","Wallet Only":"ウォレットのみ","Warning":"警告","Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.":"警告: Base URL は /v1 で終わってはいけません。New API が自動的に処理します。これによりリクエストが失敗する可能性があります。","Warning: Disabling 2FA will make your account less secure.":"警告: 2FAを無効にすると、アカウントのセキュリティが低下します。","Warning: This action is permanent and irreversible!":"警告: この操作は永続的で元に戻せません!","We apologize for the inconvenience.":"ご不便をおかけして申し訳ありません。","We could not load the setup status.":"セットアップステータスを読み込めませんでした。","We will prompt your device to confirm using biometrics or your hardware key.":"生体認証またはハードウェアキーを使用して確認するよう、デバイスにプロンプトが表示されます。","We\'ll be back online shortly.":"まもなくオンラインに戻ります。","Web search":"ウェブ検索","Web Search":"Web 検索","Webhook Configuration:":"Webhook設定:","Webhook public key (production)":"Webhook 公開鍵(本番)","Webhook public key (production) is required":"本番用 Webhook 公開鍵は必須です","Webhook public key (sandbox)":"Webhook 公開鍵(サンドボックス)","Webhook public key (sandbox) is required":"サンドボックス用 Webhook 公開鍵は必須です","Webhook secret":"Webhookシークレット","Webhook Secret":"Webhookシークレット","Webhook signing secret (leave blank unless updating)":"Webhook署名シークレット (更新する場合を除き、空白のままにしてください)","Webhook URL":"Webhook URL","Webhook URL (Production):":"Webhook URL(本番):","Webhook URL (Test):":"Webhook URL(テスト):","Webhook URL:":"Webhook URL:","Website is under maintenance!":"ウェブサイトはメンテナンス中です!","WeChat":"WeChat Pay","WeChat login QR code":"WeChatログインQRコード","WeChat Pay":"WeChat Pay","WeChat QR code will be displayed here":"WeChat QRコードがここに表示されます","WeChat sign in":"WeChatでサインイン","Week":"週","Weekday":"曜日","Weekly":"毎週","Weekly token usage by model across the past few weeks":"過去数週間にわたるモデル別の週次トークン使用量","Weekly token usage by model across the past year":"過去1年のモデル別週次トークン使用量","Weekly token usage by model since launch":"ローンチ以降のモデル別週次トークン使用量","Weekly Window":"週間ウィンドウ","Weight":"ウェイト","Weighted by request count":"リクエスト数で加重","Welcome back!":"おかえりなさい!","Welcome to our New API...":"New API へようこそ...","Well-Known URL":"よく知られたURL","Well-Known URL must start with http:// or https://":"Well-Known URL は http:// または https:// で始まる必要があります","What would you like to know?":"何を知りたいですか?","When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.":"トークンが auto グループを使用すると、システムは上から順に利用可能なグループを探します。","When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.":"条件に一致したとき、最終価格に X を掛けます。複数一致は掛け合わさり、1 未満は割引として効きます。","When enabled, if channels in the current group fail, it will try channels in the next group in order.":"有効にすると、現在のグループのチャネルが失敗した場合、次のグループのチャネルを順番に試します。","When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel."
107:"有効にすると、アフィニティチャネルが無効化された、または現在のグループ/モデルで利用できなくなった場合でも、そのアフィニティエントリを保持します。無効のままにすると、エントリを削除して別のチャネルを選択します。","When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.":"有効にすると、大きなリクエストボディはメモリではなくディスクに一時保存され、メモリ使用量が大幅に削減されます。SSD環境での使用を推奨します。","When enabled, Midjourney callbacks are accepted (reveals server IP).":"有効にすると、Midjourney のコールバックを受け入れます (サーバーの IP を公開します)。","When enabled, newly created tokens start in the first auto group.":"有効にすると、新しく作成されたトークンは最初の自動グループで開始されます。","When enabled, prompts are scanned before reaching upstream models.":"有効にすると、プロンプトはアップストリームモデルに到達する前にスキャンされます。","When enabled, the store field will be blocked":"有効にすると、ストアフィールドはブロックされます","When enabled, users can pick this group when creating tokens.":"有効にすると、ユーザーはトークン作成時にこのグループを選択できます。","When enabled, violation requests will incur additional charges.":"有効にすると、違反リクエストに追加料金が発生します。","When enabled, zero-cost models also pre-consume quota before final settlement.":"有効にすると、ゼロコストモデルも最終決済前にクォータを事前消費します。","When no conditions are set, the operation always executes.":"条件が設定されていない場合、操作は常に実行されます。","When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.":"パフォーマンス監視を有効にすると、システムリソース使用率が閾値を超えた場合、新しいRelayリクエストが拒否されます。","When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.":"コンテナまたは一時的な環境で実行する場合、再起動時のデータ損失を防ぐために、SQLiteファイルが永続ストレージにマッピングされていることを確認してください。","Whitelist":"ホワイトリスト","Whitelist (Only allow listed domains)":"ホワイトリスト (リストされたドメインのみを許可)","Whitelist (Only allow listed IPs)":"ホワイトリスト (リストされたIPのみを許可)","whsec_xxx":"whsec_xxx","Why only one store + product?":"なぜストア + 商品は 1 つだけなのか?","Window:":"ウィンドウ:","Wire encoding for the embedding vectors":"ベクトルの転送エンコーディング","with conflicts":"競合あり","with the API key from your token settings.":"をトークン設定の API キーに置き換えてください。","Without additional conditions, only the type above is used for pruning.":"追加条件がない場合、上記のtypeのみが削除に使用されます。","Worker Access Key":"Workerアクセスキー","Worker Proxy":"Workerプロキシ","Worker URL":"ワーカーURL","Workspaces":"ワークスペース","Write value to the target field":"ターゲットフィールドに値を書き込む","x":"x","xAI":"xAI","Xinference":"Xinference","Xunfei":"Xunfei","Year":"å¹´","years":"å¹´","Yes":"はい","You are about to delete {{count}} API key(s).":"{{count}}個のAPIキーを削除しようとしています。","You are running the latest version ({{version}}).":"最新バージョン ({{version}}) を使用中です。","You can close this tab once the binding completes or a success message appears in the original window.":"バインディングが完了するか、元のウィンドウに成功メッセージが表示されたら、このタブを閉じることができます。","You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.":"\\"カスタムモデル名\\"で手動で追加し、\\"入力\\"をクリックしてから送信するか、以下の操作を使用して自動的に処理できます。","You can only check in once per day":"チェックインできるのは1日1回のみです","You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.":"適用される法令、規制要件、プラットフォーム規則、公共の利益、または第三者の正当な権利利益に違反する行為を、このシステムを用いて実施、支援、または間接的に実施しないことを約束します。","You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.":"上流 API、アカウント、キー、クォータ、サービス機能を、上流サービス提供者、モデルサービス提供者、または関連する権利者から取得した合法的な許可の範囲内でのみ使用し、無許可の再販売、転売、配布、その他の不適切ã
107ªå•†æ¥­åˆ©ç”¨ã‚’行わないことを約束します。","You don\'t have necessary permission":"必要な権限がありません","You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.":"接続されたモデル API、アカウント、キー、クォータについて合法的な許可を取得しています。","You have unsaved changes":"未保存の変更があります","You have unsaved changes. Are you sure you want to leave?":"未保存の変更があります。離れてもよろしいですか?","You Pay":"お支払い額","You save":"節約額","You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.":"デプロイ、運用、課金行為に起因する法的責任を理解し、独立して負います。","You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.":"このコンプライアンス注意事項はリスク通知にすぎず、法的助言、コンプライアンス審査の結論、または本システム利用の合法性の保証ではないことを理解しています。実際の事業状況に応じて、専門の法律またはコンプライアンス担当者に相談してください。","You will be redirected to Telegram to complete the binding process.":"バインドプロセスを完了するためにTelegramにリダイレクトされます。","You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.":"自動的にリダイレクトされます。数秒経っても何も起こらない場合は、前のページに戻ることができます。","your AI integration?":"AIインテグレーションを?","Your Azure OpenAI endpoint URL":"あなたのAzure OpenAIエンドポイント URL","Your Bot Name":"あなたのボット名","Your Cloudflare Account ID":"あなたのCloudflareアカウントID","Your Discord OAuth Client ID":"Discord OAuth クライアント ID","Your Discord OAuth Client Secret":"Discord OAuth クライアント シークレット","Your GitHub OAuth Client ID":"あなたのGitHub OAuthクライアントID","Your GitHub OAuth Client Secret":"あなたのGitHub OAuthクライアントシークレット","Your new backup codes are ready":"新しいバックアップコードの準備ができました","Your Referral Link":"あなたの紹介リンク","Your setup guide is collapsed so usage stays in focus.":"利用状況に集中できるよう、セットアップガイドを折りたたみました。","Your system access token for API authentication. Keep it secure and don\'t share it with others.":"API認証用のシステムアクセストークンです。安全に保管し、他者と共有しないでください。","Your Telegram Bot Token":"あなたのTelegramボットトークン","Your transaction history will appear here":"取引履歴はここに表示されます","Your Turnstile secret key":"あなたのTurnstileシークレットキー","Your Turnstile site key":"あなたのTurnstileサイトキー","Zero retention":"データ保持なし","Zhipu":"Zhipu","Zhipu V4":"Zhipu V 4","Zoom":"ズーム"}}'),D=JSON.parse('{"translation":{"360":"360","1000":"1000","10000":"10000","_copy":"_копировать",",":", ",", and":", и",",and ":", and ","、":", ","? This action cannot be undone.":"? Это действие невозможно отменить.",". Please fix the JSON before saving.":". Пожалуйста, исправьте JSON перед сохранением.",". This action cannot be undone.":". Это действие невозможно отменить.","...":"...","\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"":"\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"","({{total}} total, {{omit}} omitted)":"({{total}} всего, {{omit}} скрыто)","(Leave empty to dissolve tag)":"(Оставьте пустым, чтобы удалить тег)","(Optional: redirect model names)":"(Необязательно: перенаправить имена моделей)","(Override all channels\' groups)":"(Переопределить группы всех каналов)","(Override all channels\' models)":"(Переопределить модели всех каналов)","[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]":"[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]","{\\"original-model\\": \\"replacement-model\\"}":"{\\"original-model\\": \\"replacement-model\\"}","{{category}} Models":"Модели {{category}}","{{count}} channel(s) deleted":"Удалено {{count}} каналов","{{count}} channel(s) disabled":"Отключено {{count}} каналов","{{count}} channel(s) enabled":"Включено {{count}} каналов","{{count}}
107 channel(s) failed to disable":"Не удалось отключить {{count}} каналов","{{count}} channel(s) failed to enable":"Не удалось включить {{count}} каналов","{{count}} days ago":"{{count}} дней назад","{{count}} days remaining":"Осталось {{count}} дней","{{count}} disabled channel(s) deleted":"Удалено {{count}} отключённых каналов","{{count}} hours ago":"{{count}} часов назад","{{count}} incidents":"{{count}} инцидентов","{{count}} incidents in the last 24 hours":"{{count}} инцидентов за последние 24 часа","{{count}} incidents in the last 30 days":"{{count}} инцидентов за последние 30 дней","{{count}} IP(s)":"{{count}} IP","{{count}} log entries removed.":"Удалено {{count}} записей журнала.","{{count}} minutes ago":"{{count}} минут назад","{{count}} models":"моделей: {{count}}","{{count}} months ago":"{{count}} месяцев назад","{{count}} override":"{{count}} переопределений","{{count}} selected targets available for bulk copy.":"Для массового копирования выбрано целей: {{count}}.","{{count}} tiers":"{{count}} уровней","{{count}} vendors":"поставщиков: {{count}}","{{count}} weeks ago":"{{count}} недель назад","{{field}} updated to {{value}}":"{{field}} обновлено на {{value}}","{{field}} updated to {{value}} for tag: {{tag}}":"{{field}} обновлено на {{value}} для тега: {{tag}}","{{method}} {{route}}":"{{method}} {{route}}","{{modality}} not supported":"{{modality}} не поддерживается","{{modality}} supported":"{{modality}} поддерживается","{{n}} model(s) selected":"Выбрано моделей: {{n}}","{{value}}ms":"{{value}} мс","{{value}}s":"{{value}} с","@lobehub/icons key":"Ключ @lobehub/icons","@lobehub/icons key name":"Имя ключа @lobehub/icons","/status/":"/status/","/your/endpoint":"/your/endpoint","#1 App":"#1 Приложение","#1 by usage":"№1 по использованию","#1 Model":"#1 Модель","% off":"скидка","`, and `-nothinking` suffixes while routing to the correct Gemini variant.":"суффиксы `, и `-nothinking` при маршрутизации к правильному варианту Gemini.","© 2025 Your Company. All rights reserved.":"© 2025 Ваша Компания. Все права защищены.","+{{count}} more":"ещё {{count}}","| Based on":"| На основе","0 means data is kept permanently":"0 означает, что данные хранятся постоянно","0 means unlimited":"0 означает без ограничений","1 Day":"1 день","1 day ago":"1 день назад","1 hour":"1 час","1 Hour":"1 ч.","1 hour ago":"1 час назад","1 minute":"1 минута","1 minute ago":"1 минуту назад","1 Month":"1 мес.","1 month ago":"1 месяц назад","1 week ago":"1 неделю назад","1 year ago":"1 год назад","1. Create an application in your Gotify server":"1. Создайте приложение на вашем сервере Gotify","10 / page":"10 / страница","100 / page":"100 / страница","14 Days":"14 дней","192.168.1.1&#10;10.0.0.0/8":"192.168.1.1&#10;10.0.0.0/8","1M":"1М","1W":"1Н","2. Copy the application token":"2. Скопируйте токен приложения","20 / page":"20 / страница","24 Hours":"24 часа","24 hours ago":"24 часа назад","29 Days":"29 дней","3. Enter your Gotify server URL and token above":"3. Введите URL вашего сервера Gotify и токен выше","30 Days":"30 дней","30 days ago":"30 дней назад","30d change":"Изменение за 30 дней","5 minutes":"5 минут","5-Hour Window":"5-часовое окно","50 / page":"50 / страница","7 Days":"7 дней","7 days ago":"7 дней назад","80,443,8080":"80,443,8080","A billing multiplier. Lower ratios mean lower API call costs.":"Множитель тарификации. Чем ниже коэффициент, тем ниже стоимость вызовов API.","A focused home for keys, balance, routing, and service health.":"Единый экран для ключей, баÐ
107»Ð°Ð½ÑÐ°, маршрутов и состояния сервиса.","About":"О проекте","About {{days}} days left":"Примерно {{days}} дней","Accept Unpriced Models":"Принимать модели без цены","Accepts a JSON array of model identifiers that support the Imagine API.":"Принимает JSON-массив идентификаторов моделей, поддерживающих Imagine API.","Accepts comma-separated status codes and inclusive ranges.":"Принимает коды статуса, разделенные запятыми, и включающие диапазоны.","Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.":"Получите доступ к огромному выбору моделей через стандартный, единый протокол API. Развивайте приложения ИИ, управляйте цифровыми активами и соединяйте будущее.","Access Denied Message":"Сообщение об отказе в доступе","Access Forbidden":"Доступ запрещен","Access Policy (JSON)":"Политика доступа (JSON)","Access previous conversations and start new ones.":"Доступ к предыдущим разговорам и начало новых.","Access Token":"Токен доступа","AccessKey / SecretAccessKey":"AccessKey / SecretAccessKey","Account Binding Management":"Управление привязкой аккаунта","Account Bindings":"Привязки аккаунта","Account created! Please sign in":"Аккаунт создан! Пожалуйста, войдите в систему","Account deleted successfully":"Аккаунт успешно удалён","Account ID *":"ID аккаунта *","Account Info":"Информация об аккаунте","Account used when authenticating with the SMTP server":"Учетная запись, используемая при аутентификации с SMTP-сервером","acknowledge the related legal risks":"признаю связанные правовые риски","Across all groups":"По всем группам","Action":"Действие","Action confirmation":"Подтверждение действия","Actions":"Операции","active":"активный","Active":"Активна","Active apps":"Активные приложения","Active Cache Count":"Активных кэшей","Active Files":"Активных файлов","Active models":"Активные модели","active users":"активных пользователей","Actual Amount":"Фактическая сумма","Actual Model":"Фактическая модель","Actual Model:":"Фактическая модель:","Adapt `-thinking` suffix requests to Anthropic native thinking behavior while keeping billing predictable.":"Адаптировать запросы с суффиксом `-thinking` к собственному режиму размышления Anthropic, сохраняя предсказуемость биллинга.","Add":"Добавить","Add \\"{{value}}\\"":"Добавить \\"{{value}}\\"","Add {{title}}":"Добавить {{title}}","Add a group identifier to the auto assignment list.":"Добавить идентификатор группы в список автоматического назначения.","Add a new API key by providing necessary info.":"Добавьте новый API-ключ, предоставив необходимую информацию.","Add a new channel by providing the necessary information.":"Добавьте новый канал, предоставив необходимую информацию.","Add a new model to the system by providing the necessary information.":"Добавьте новую модель в систему, предоставив необходимую информацию.","Add a new user by providing necessary info.":"Добавьте нового пользователя, предоставив необходимую информацию.","Add a new vend
107or to the system":"Добавить нового поставщика в систему","Add an extra layer of security to your account":"Добавьте дополнительный уровень безопасности к вашей учетной записи","Add and submit":"Добавить и отправить","Add Announcement":"Добавить объявление","Add API":"Добавить API","Add API Shortcut":"Добавить ярлык API","Add auto group":"Добавить автогруппу","Add chat preset":"Добавить предустановку чата","Add condition":"Добавить условие","Add Condition":"Добавить условие","Add credits":"Добавить средства","Add custom model \\"{{value}}\\"":"Добавить пользовательскую модель «{{value}}»","Add discount tier":"Добавить уровень скидки","Add each model or tag you want to include.":"Добавьте каждую модель или тег, который хотите включить.","Add FAQ":"Добавить вопрос-ответ","Add from available models...":"Добавить из доступных моделей...","Add Funds":"Добавить средства","Add group":"Добавить группу","Add Group":"Добавить группу","Add group rate limit":"Добавить ограничение скорости группы","Add group rules":"Добавить правила группы","Add Mapping":"Добавить сопоставление","Add method":"Добавить метод","Add missing models":"Добавить отсутствующие модели","Add Mode":"Добавить режим","Add model":"Добавить модель","Add Model":"Добавить модель","Add model pricing":"Добавить тариф модели","Add Models":"Добавить модели","Add new amount":"Добавить новую сумму","Add new redemption code(s) by providing necessary info.":"Добавьте новый(-ые) код(-ы) активации, предоставив необходимую информацию.","Add OAuth Provider":"Добавить поставщика OAuth","Add param/header":"Добавить param / header","Add payment method":"Добавить способ оплаты","Add photos or files":"Добавить фото или файлы","Add product":"Добавить продукт","Add Provider":"Добавить поставщика","Add Quota":"Добавить квоту","Add ratio override":"Добавить переопределение коэффициента","Add Row":"Добавить строку","Add Rule":"Добавить правило","Add rule group":"Добавить группу правил","Add selectable group":"Добавить выбираемую группу","Add subscription":"Добавить подписку","Add tags...":"Добавить теги...","Add tier":"Добавить уровень","Add time condition":"Добавить условие по времени","Add time rule group":"Добавить группу правил по времени","Add Uptime Kuma Group":"Добавить группу Uptime Kuma","Add User":"Добавить пользователя","Add user group":"Добавить группу пользователей","Add your API keys, set up channels and configure access permissions":"Добавьте ваши API-ключи, настройте каналы и права доступа","Added {{count}} model(s)":"Добавлено {{count}} моделей","Added successfully":"Успешно добавлено","Additional Conditions":"Дополнительные условия","Additional information":"Дополнительная информация","Additional Information":"Дополнительная информация","Additional Limit":"Доп. лимит","Additional Limits":"Дополнительные лимиты","Additional metered capability":"Дополнительная зарезервированная ёмкость (metered)","Adjust filters, then search to refresh the logs.":"Настройте фильтры, затем выполните поиск, чтобы обновить журналы.","Adjust Quota":"Изменить квоту","Adjust response formatting, prompt behavior, proxy, and upstream automation.":"Настройте форматирование ответов, поведение промпта, прокси и автоматизацию upstream.","Adjust the appearance and layout to suit your preferences.":"Настройте внешний вид и макет в соответствии с вашими предпочтениями.","Admin":"Администратор","Admin access required":"Требуется доступ администратора","Admin area":"Область администратора","Admin notes (only visible to admins)":"Заметки администратора (видны только администраторам)","Admin Only":"Только для администраторов","Administer user accounts and roles.":"Управление учетными записями пользователей и ролями.","Administrator account":"Учетная запись администратора","Administrator username":"Имя пользователя администратора","Advanced":"Расширенные","Advanced Configuration":"Расширенная конфигурация","Advanced options":"Расширенные параметры","Advanced Options":"Расширенные параметры","Advanced platform configuration.":"Расширенная настройка платформы.","Advanced Settings":"Расширенные настройки","Advanced text editing":"Расширенное редактирование текста","Aesthetic style":"Стиль","After clicking the button, you\'ll be asked to authorize the bot":"После нажатия кнопки вам будет предложено авторизовать бота","After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?":"После отключения план не будет отображаться пользователям, но исторические заказы не затронуты. Продолжить?","After enabling, the plan will be shown to users. Continue?":"После включения план будет отображаться пользователям. Продолжить?","After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?":"После аннулирования подписка будет немедленно деактивирована. Исторические записи не затронуты. Продолжить?","After scanning, the binding will complete automatically":"После сканирования привязка завершится автоматически","Agent ID *":"Идентификатор агента *","Aggregate tokens delivered across the platform":"Совокупное количество токенов, доставленных платформой","Aggregate traffic across every category":"Совокупный трафик по всем категориям","Aggregated across enabled groups":"Агрегировано по включённым группам","Aggregated across the apps below":"Агрегировано по приложениям Ð
107½Ð¸Ð¶Ðµ","Aggregated traffic by upstream model provider":"Агрегированный трафик по поставщикам моделей","Aggregated usage metrics and trend charts.":"Агрегированные метрики использования и графики трендов.","aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.":"объединяет 50+ ИИ-провайдеров за единым API. Управляйте доступом, отслеживайте затраты и масштабируйтесь без усилий.","Aggregation bucket":"Интервал агрегации","AGPL v3.0 License":"Лицензия AGPL v3.0","AI Application Infrastructure Foundation":"Инфраструктурная основа для ИИ-приложений","AI model testing environment":"Среда тестирования ИИ моделей","AI models":"Модели ИИ","AI models supported":"Поддерживаемые модели ИИ","AI Proxy":"AI Proxy","AI Proxy Library":"Библиотека прокси AI","AIGC2D":"AIGC2D","AILS":"AILS","AK/SK mode: use AccessKey|SecretAccessKey|Region":"Режим AK/SK: используйте AccessKey|SecretAccessKey|Region","Ali":"Ali","Alipay":"Alipay","All":"Все","All categories":"Все категории","All conditions must match before this tier is used.":"Все условия должны совпасть, прежде чем будет использован этот уровень.","All edits are overwrite operations. Leave fields empty to keep current values unchanged.":"Все изменения являются операциями перезаписи. Оставьте поля пустыми, чтобы сохранить текущие значения без изменений.","All files exceed the maximum size.":"Все файлы превышают максимальный размер.","All Groups":"Все группы","All Models":"Все модели","All models in use are properly configured.":"Все используемые модели настроены правильно.","All Must Match (AND)":"Все должны совпасть (AND)","All requests must include":"Все запросы должны содержать","All Status":"Все статусы","All Sync Status":"Все статусы синхронизации","All systems operational":"Все системы работают штатно","All Tags":"Все теги","All Types":"Все типы","All upstream data is trusted":"Все вышестоящие данные являются доверенными","All Vendors":"Все поставщики","All-time":"За всё время","Allocated Memory":"Выделенная память","Allow accountFilter parameter":"Разрешить параметр accountFilter","Allow balance redemption":"Разрешить оплату балансом","Allow Claude beta query passthrough":"Разрешить проброс бета-запросов Claude","Allow clients to query configured ratios via `/api/ratio`.":"Разрешить клиентам запрашивать настроенные соотношения через `/api/ratio`.","Allow HTTP image requests":"Разрешить HTTP-запросы изображений","Allow include usage obfuscation passthrough":"Разрешить проброс обфускации использования","Allow inference geography passthrough":"Разрешить проброс географии инференса","Allow inference_geo passthrough":"Разрешить передачу inference_geo","Allow Insecure Origins":"Разрешить небезопасные источники","Allow new users to register":"Разрешить регистрацию новым пользователям","Allow Private IPs":"Разрешить частные IP-адреса","Allow registration with password":"Разрешить регистрацию по паролю","Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)":"Разрешить запросы к частным диапазонам IP-адресов (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)","Allow Retry":"Разрешить повтор","Allow safety_identifier passthrough":"Разрешить сквозную передачу Safety_Identifier","Allow service_tier passthrough":"Разрешить сквозную передачу service_tier","Allow speed passthrough":"Разрешить передачу speed","Allow upstream callbacks":"Разрешить обратные вызовы upstream","Allow users to check in daily for random quota rewards":"Разрешить пользователям регистрироваться ежедневно для получения случайных квотных наград","Allow users to enter promo codes":"Разрешить пользователям вводить промокоды","Allow users to log in with password":"Разрешить пользователям входить по паролю","Allow users to register and sign in with Passkey (WebAuthn)":"Разрешить пользователям регистрироваться и входить с помощью Passkey (WebAuthn)","Allow users to sign in with Discord":"Разрешить пользователям входить через Discord","Allow users to sign in with GitHub":"Разрешить пользователям входить через GitHub","Allow users to sign in with LinuxDO":"Разрешить пользователям входить через LinuxDO","Allow users to sign in with OpenID Connect":"Разрешить пользователям входить через OpenID Connect","Allow users to sign in with Telegram":"Разрешить пользователям входить через Telegram","Allow users to sign in with this provider":"Разрешить пользователям входить через этого поставщика","Allow users to sign in with WeChat":"Разрешить пользователям входить через WeChat","Allow using models without price configuration":"Разрешить использование моделей без настройки цен","Allowed":"Разрешено","Allowed Origins":"Разрешенные Origins","Allowed Ports":"Разрешенные порты","Already have an account?":"Уже есть аккаунт?","Always matches (default tier).":"Всегда совпадает (уровень по умолчанию).","Amount":"Сумма","Amount cannot be changed when editing.":"Количество нельзя изменить при редактировании.","Amount discount":"Скидка на сумму","Amount Due":"Сумма к оплате","Amount must be a whole number":"Сумма должна быть целым числом","Amount must be greater than 0":"Сумма должна быть больше 0","Amount of quota to credit to user account.":"Количество квоты для зачисления на счет пользователя.","Amount options must be a JSON array":"Варианты сумм должны быть JSON-массивом","Amount to pay:":"Сумма к оплате:","An unexpected error occurred":"Произошла непредвиденная ошибка","and":"и","Announcement added. Click \\"Save Settings\\" to apply.":"Объявление добавлено. Нажмите \\"Сохранить настройки\\", чтобы применить.","Announcement content":"Содержимое объявления","Announcement deleted. Click \\"Save Settings\\" to apply.":"Объявление удалено. Нажмите \\"Сохранить настройки\\", чтобы применить.","Announcement Details":"Детали объявления","Announcement displayed to users (supports Markdown & HTML)":"Объявление, отображаемое пользователям (поддерживает Markdown и HTML)","Announcement updated. Click \\"Save Settings\\" to apply.":"Объявление обновлено. Нажмите \\"Сохранить настройки\\", чтобы применить.","Announcements":"Объявления","Announcements saved successfully":"Объявления успешно сохранены","Answer":"Ответ","Answers for common access and billing questions":"Ответы на частые вопросы о доступе и оплате","Anthropic":"Anthropic","Any Match (OR)":"Любое совпадение (OR)","API":"API","API Access":"Доступ к API","API Addresses":"Адреса API","API Base URL (Important: Not Chat API) *":"Базовый URL API (Важно: Не Chat API) *","API Base URL *":"Базовый URL API *","API Endpoints":"Конечные точки API","API Info":"Информация об API","API info added. Click \\"Save Settings\\" to apply.":"Информация API добавлена. Нажмите «Сохранить настройки», чтобы применить.","API info deleted. Click \\"Save Settings\\" to apply.":"Информация API удалена. Нажмите «Сохранить настройки», чтобы применить.","API info saved successfully":"Информация API успешно сохранена","API info updated. Click \\"Save Settings\\" to apply.":"Информация API обновлена. Нажмите «Сохранить настройки», чтобы применить.","API key":"Ключ API","API Key":"Ключ API","API Key (one per line for batch mode)":"Ключ API (по одному на строку для пакетного режима)","API Key (Production)":"API-ключ (Продакшн)","API Key (Sandbox)":"API-ключ (Песочница)","API Key *":"Ключ API *","API Key created successfully":"API ключ успешно создан","API Key deleted successfully":"API ключ успешно удален","API Key disabled successfully":"API ключ успешно отключен","API Key enabled successfully":"API ключ успешно включен","API key from the provider":"Ключ API от провайдера","API key is required":"Требуется ключ API","API Key mode (does not support batch creation)":"Режим API-ключа (не поддерживает пакетное создание)","API Key mode: use APIKey|Region":"Режим API Key: use APIKey|Region","API Key updated successfully":"API ключ успешно обновлен","API Keys":"Ключи API","API Private Key":"Секретный ключ API","API Requests":"Запросы API","API secret":"Секрет API","API token management":"Управление API токенами","API URL":"URL API","API usage records":"Записи использования API","API2GPT":"API2GPT","App":"Приложение","App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.":"Показанный рейтинг приложений сгенерирован для предпросмотра и будет заменён реальными данными после интеграции бэкенда.","Append":"Добавить в конец","Append mode: New keys will be added to the end of the existing key list":"Режим добавления: Новые ключи будут добавлены в конец существующего списка ключей","Append Template":"Добавить шаблон","Append to channel":"Добавить в канал","Append to End":"Добавить в конец","Append to existing keys":"Добавить к существующим ключам","Append value to array / string / object end":"Добавить значение в конец массива / строки / объекта","appended":"добавлено","Application":"Приложение","Applied {{name}} pricing to {{count}} models":"Тариф {{name}} применён к {{count}} моделям","Applied upstream model changes to {{count}} channels":"Изменения вышестоящих моделей применены к {{count}} каналам","Applied upstream model changes to channel (ID: {{id}})":"Изменения вышестоящих моделей применены к каналу (ID: {{id}})","Applies to custom completion endpoints. JSON map of model → ratio.":"Применяется к пользовательским Ð
107ºÐ¾Ð½ÐµÑ‡Ð½Ñ‹Ð¼ точкам завершения. JSON-карта модель → коэффициент.","Apply All Upstream Updates":"Применить все обновления из upstream","Apply Filters":"Применить фильтры","Apply IP Filter to Resolved Domains":"Применить IP-фильтр к разрешенным доменам","Apply Overwrite":"Применить перезапись","Apply Sync":"Применить синхронизацию","Applying...":"Применение...","Approx.":"Примерно.","apps":"приложений","Apps":"Приложения","apps tracked":"приложений отслеживается","Apps using the most tokens through new-api":"Приложения, использующие больше всего токенов через new-api","are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.":"также перечислены здесь. Удалите их из Моделей, чтобы ответ `/v1/models` был удобным для пользователя и скрывал имена, специфичные для поставщиков.","Are you sure you want to delete":"Вы уверены, что хотите удалить","Are you sure you want to delete {{count}} model(s)? This action cannot be undone.":"Вы уверены, что хотите удалить {{count}} модел(ей)? Это действие нельзя отменить.","Are you sure you want to delete all auto-disabled keys? This action cannot be undone.":"Вы уверены, что хотите удалить все автоматически отключённые ключи? Это действие нельзя отменить.","Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.":"Вы уверены, что хотите удалить развертывание \\"{{name}}\\"? Это действие нельзя отменить.","Are you sure you want to delete this key? This action cannot be undone.":"Вы уверены, что хотите удалить этот ключ? Это действие нельзя отменить.","Are you sure you want to disable all enabled keys?":"Вы уверены, что хотите отключить все включённые ключи?","Are you sure you want to enable all keys?":"Вы уверены, что хотите включить все ключи?","Are you sure you want to manually complete this order? The user will be credited with the corresponding quota.":"Вы уверены, что хотите вручную завершить этот заказ? Пользователю будет начислена соответствующая квота.","Are you sure you want to sign out? You will need to sign in again to access your account.":"Вы уверены, что хотите выйти? Вам нужно будет войти снова, чтобы получить доступ к аккаунту.","Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.":"Вы уверены, что хотите отвязать {{provider}} для этого пользователя? Пользователь больше не сможет входить через этот метод.","Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.":"Вы уверены, что хотите отвязать {{provider}}? Вы больше не сможете входить через этот метод.","Are you sure?":"Вы уверены?","Area Chart":"Диаграмма с областями","Args (space separated)":"Аргументы (разделённые пробелами)","Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.":"Массив предустановок чат-клиентов. Каждый элемент представляет собой объект с одной парой ключ-значение: имя клиента и его URL.","Asc":"По возрастанию","Ask anything":"Спросите что угодно","Assigned by administrator only":"Назначается только администратором","Assigned by administrators and used to represent a user level, such as default or vip.":"НаÐ
107·Ð½Ð°Ñ‡Ð°ÐµÑ‚ся администраторами и обозначает уровень пользователя, например default или vip.","Async task refund":"Возврат асинхронной задачи","At least one model regex pattern is required":"Требуется хотя бы один шаблон регулярного выражения модели","At least one valid key source is required":"Требуется хотя бы один действительный источник ключа","Attach":"Прикрепить","Audio":"Аудио","Audio comp.":"Аудио-вывод","Audio completion ratio":"Коэффициент завершения аудио","Audio In":"Аудиовход","Audio input":"Аудиовход","Audio Input":"Аудио вход","Audio input price":"Цена аудиовхода","Audio Input Price":"Цена аудиовхода","Audio Out":"Аудиовыход","Audio output":"Аудиовыход","Audio Output":"Аудио выход","Audio output price":"Цена аудиовыхода","Audio output price requires an audio input price.":"Для цены аудиовыхода нужна цена аудиовхода.","Audio playback failed":"Ошибка воспроизведения аудио","Audio Preview":"Предпросмотр аудио","Audio ratio":"Коэффициент аудио","Audio Tokens":"Аудио токены","Auth configured":"Аутентификация настроена","Auth Style":"Стиль аутентификации","auth.resetPasswordConfirm.backToLogin":"Вернуться ко входу","auth.resetPasswordConfirm.confirm":"Подтвердить сброс пароля","auth.resetPasswordConfirm.description":"Подтвердите запрос на сброс, чтобы создать новый пароль.","auth.resetPasswordConfirm.retry":"Повторить ({{seconds}}с)","auth.resetPasswordConfirm.success":"Ваш пароль успешно сброшен","Authentication":"Аутентификация","Authentication Method":"Метод аутентификации","Authenticator code":"Код аутентификатора","Authorization Endpoint":"Конечная точка авторизации","Authorization Endpoint (Optional)":"Конечная точка авторизации (необязательно)","Authorize":"Авторизовать","Auto":"Авто","Auto (Circuit Breaker)":"Авто (Автовыключатель)","Auto assignment order":"Порядок автоматического назначения","Auto Ban":"Автоматическая блокировка","Auto detect (default)":"Автоматическое определение (по умолчанию)","Auto Disabled":"Автоматически отключено","Auto group behavior":"Поведение группы auto","Auto Group Chain":"Автоматическая цепочка групп","Auto refresh":"Автообновление","Auto Sync Upstream Models":"Автоматическая синхронизация моделей провайдера","Auto-disable status codes":"Коды автоотключения","Auto-discover":"Автообнаружение","Auto-discovers endpoints from the provider":"Автоматически обнаруживает конечные точки от провайдера","Auto-fill when one field exists and another is missing":"Автозаполнение, когда одно поле есть, а другое отсутствует","Auto-retry status codes":"Коды авто-повтора","Automatically disable channel on repeated failures":"Автоматически отключать канал при повторных неудачах","Automatically disable channels exceeding this response time":"Автоматически отключать каналы, превышающие это время ответа","Automatically disable channels when tests fail":"Автоматически отключать каналы при сбое тестов","Automatically probe all channels in the background":"Автоматически проверять все каналы в фоновом режиме","Automatically replaces upstream callback URLs with the server address.":"Автоматически заменяет URL обратных вызовов upstream на адрес сервера.","Automatically selects the best available group with circuit breaker mechanism":"Автоматически выбирает лучшую доступную группу с механизмом circuit breaker","Automatically sync model list when upstream changes are detected":"Автоматически синхронизировать список моделей при обнаружении изменений у провайдера","Availability (last 24h)":"Доступность (последние 24 ч)","Available":"Доступно","Available disk space":"Доступное дисковое пространство","Available Models":"Доступные модели","Available Rewards":"Доступные награды","Average latency":"Средняя задержка","Average latency, TTFT, and success rate by group":"Средняя задержка, TTFT и доля успешных запросов по группам","Average latency, TTFT, TPS, and success rate":"Средняя задержка, TTFT, TPS и доля успешных запросов","Average RPM":"Среднее число оборотов в минуту","Average time-to-first-token (TTFT) by group":"Среднее время до первого токена (TTFT) по группам","Average tokens per second sustained per group":"Средняя устойчивая пропускная способность (токенов/с) по группам","Average TPM":"Среднее число транзакций в минуту","Average TTFT":"Средний TTFT","AWS":"AWS","AWS Bedrock Claude Compat":"AWS Bedrock Claude совместимость","AWS Key Format":"Формат ключа AWS","Azure":"Azure","AZURE_OPENAI_ENDPOINT *":"AZURE_OPENAI_ENDPOINT *","Back":"Назад","Back to Dashboard":"Вернуться к панели управления","Back to Home":"Вернуться на главную","Back to login":"Вернуться к входу","Back to Models":"Вернуться к моделям","Backed up":"Резервная копия создана","Backgroun
107d job tracker for queued work.":"Отслеживатель фоновых заданий для задач в очереди.","Backup Code":"Резервный код","Backup code must be in format XXXX-XXXX":"Резервный код должен быть в формате XXXX-XXXX","Backup codes regenerated successfully":"Резервные коды успешно перегенерированы","Backup codes remaining: {{count}}":"Осталось резервных кодов: {{count}}","Bad Request":"Неверный запрос","Badge Color":"Цвет значка","Baidu":"Baidu","Baidu V2":"Baidu V2","Balance":"Баланс","Balance and top-up management":"Управление балансом и пополнением","Balance depleted":"Баланс исчерпан","Balance is shown in quota units":"Баланс показан в единицах квоты","Balance queried successfully":"Баланс успешно запрошен","Balance updated successfully":"Баланс успешно обновлён","Balance updated: {{balance}}":"Баланс обновлён: {{balance}}","Bar Chart":"Столбчатая диаграмма","Bark Push URL":"URL для push-уведомлений Bark","Base address provided by your Epay service":"Базовый адрес, предоставленный вашим сервисом Epay","Base amount. Actual deduction = base amount × system group rate.":"Базовая сумма. Фактический вычет = базовая сумма × коэффициент группы.","Base input and output token prices for this tier.":"Базовые цены входных и выходных токенов для этого уровня.","Base input price only":"Только базовая цена входа","Base Limits":"Базовые лимиты","Base multipliers applied when users select specific groups.":"Базовые множители, применяемые, когда пользователи выбирают определенные группы.","Base Price":"Базовая цена","Base rate limit windows for this account.":"Окна базовых лимитов для этого аккаунта.","Base URL":"Адрес API","Base URL is required for this channel type":"Для этого типа канала требуется Base URL","Base URL of your Uptime Kuma instance":"Базовый URL вашего экземпляра Uptime Kuma","Basic Authentication":"Базовая аутентификация","Basic Configuration":"Базовая конфигурация","Basic Info":"Основная информация","Basic Information":"Основная информация","Basic Templates":"Базовые шаблоны","Batch Add (one key per line)":"Пакетное добавление (один ключ на строку)","Batch delete failed":"Пакетное удаление не удалось","Batch deleted {{count}} channels":"Пакетно удалено каналов: {{count}}","Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed":"Пакетное обнаружение завершено: {{channels}} каналов, {{add}} для добавления, {{remove}} для удаления, {{fails}} ошибок","Batch detection failed":"Пакетное обнаружение не удалось","Batch disable failed":"Пакетное отключение не удалось","Batch Edit":"Пакетное редактирование","Batch edit all channels with this tag. Leave fields empty to keep current values.":"Пакетно редактировать все каналы с этим тегом. Оставьте поля пустыми, чтобы сохранить текущие значения.","Batch Edit by Tag":"Пакетное редактирование по тегу","Batch enable failed":"Пакетное включение не удалось","Batch processing failed":"Пакетная обработка не удалась","Batch set tag for {{count}} channels":"Тег пакетно задан для {{count}} каналов","Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed":"Пакетное обновление моделей: {{channels}} каналов, {{added}} добавлено, {{removed}} удалено, {{fails}} ошибок","Best for single-tenant deployments. Pricing and billing options stay hidden.":"Лучший вариант для однопользовательских развёртываний. Опции ценообразования и биллинга будут скрыты.","Best TTFT":"Лучший TTFT","Billable input tokens":"Оплачиваемые входные токены","Billable output tokens":"Оплачиваемые выходные токены","Billing":"Биллинг","Billing & Payment":"Биллинг и платежи","Billing currency":"Валюта оплаты","Billing Details":"Детали биллинга","Billing History":"История биллинга","Billing Mode":"Режим биллинга","Billing Process":"Процесс тарификации","Billing Source":"Источник биллинга","Bind":"Привязать","Bind a Pancake store + product":"Привязать магазин и продукт Pancake","Bind an email address to your account.":"Привяжите адрес электронной почты к вашему аккаунту.","Bind Email":"Привязать Email","Bind Telegram Account":"Привязать аккаунт Telegram","Bind WeChat Account":"Привязка аккаунта WeChat","Binding Information":"Информация о привязке","Binding successful!":"Привязка успешна!","Binding your {{provider}} account":"Привязка вашего аккаунта {{provider}}","Binding...":"Привязка...","Bindings":"Привязки","Blacklist":"Чёрный список","Blacklist (Block listed domains)":"Черный список (Блокировка доменов из списка)","Blacklist (Block listed IPs)":"Черный список (Блокировка IP из списка)","Blank Rule":"Пустое правило","Blend":"Смешивание","Block email aliases (e.g., [email protected])":"Блокировать псевдонимы email (например, [email protected])","Blocked keywords":"Заблокированные ключевые слова","Blocks messages when sensitive keywords are detected.":"Блокирует сообщения при обнаружении конфиденциальных ключевых слов.","Body param":"Параметр тела запроса","Border radius":"Радиус скругления","Bot Name":"Имя бота","Bot Protection":"Защита от ботов","Bot Token":"Токен бота","Bot:":"Бот:","Bound":"Привязано","Bound a subscription":"Подписка привязана","Bound Channels":"Привязанные каналы","Bound Only":"Только привязанные","Bound product:":"Привязанный продукт:","Bound store:":"Привязанный магазин:","Bring channels back online after successful checks":"Вернуть каналы в онлайн после успешных проверок","Browse and compare":"Просмотр и сравнение","Browse available models and pricing":"Просмотрите доступные модели и цены","Browse rankings by category":"Просмотр рейтингов по категориям","Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.":"Бюджетные токены = макс. токены × соотношение. Принимает десятичное число от 0.002 до 1. Рекомендуется поддерживать в соответствии с биллингом вышестоящего провайдера.","Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.":"Бюджетные токены = макс. токены × соотношение. Принимает десятичное число от 0.1 до 1.","Budget Tokens Ratio":"Соотношение бюджетных токенов","Budgets":"Бюджеты","Build on your API gateway in minutes":"Начните работу с API-шлюзом за несколько минут","Built for developers,":"Создано для разработчиков,","Built-in":"Встроенный","Built-in Device":"Встроенное устройство","Built-in: phone fingerprint/face, or Windows Hello;
107 External: USB security key":"Встроенное: отпечаток пальца/лицо телефона или Windows Hello; Внешнее: USB-ключ безопасности","by":"от","By category":"По категориям","By model author":"По автору модели","Cache":"Кэш","Cache create (1h) price":"Цена создания кэша (1 ч)","Cache create price":"Цена создания кэша","Cache Creation":"Создание кэша","Cache Creation (1h)":"Создание кэша (1h)","Cache Creation (5m)":"Создание кэша (5m)","Cache Directory":"Каталог кэша","Cache Directory Disk Space":"Дисковое пространство каталога кэша","Cache Directory Info":"Информация о каталоге кэша","Cache Entries":"Записи кэша","Cache mode":"Режим кэша","Cache pricing":"Цены кэша","Cache ratio":"Коэффициент кэша","Cache Read":"Чтение кэша","Cache read price":"Цена чтения кэша","Cache repeated prompt prefixes for cheaper, faster reuse":"Кэшировать повторяющиеся префиксы промптов для дешёвого и быстрого повторного использования","Cache write":"Запись кэша","Cache Write":"Запись в кэш","Cache Write (1h)":"Запись кэша (1h)","Cache Write (5m)":"Запись кэша (5m)","Cache write price":"Цена записи кэша","Cached":"Кэш","Cached input":"Кэшированный ввод","Calculated price: ${{price}} per 1M tokens":"Расчётная цена: ${{price}} за 1М токенов","Calculated ratio: {{ratio}}":"Расчётный коэффициент: {{ratio}}","Calculating...":"Вычисление...","Call Count Distribution":"Распределение количества вызовов","Call Count Ranking":"Рейтинг по количеству вызовов","Call Proportion":"Доля вызовов","Call Trend":"Тенденция вызовов","Callback address":"Адрес обратного вызова","Callback Caller IP":"IP вызывающей стороны callback","Callback notification URL":"URL обратного вызова","Callback Payment Method":"Способ оплаты (callback)","Cancel":"Отмена","Cancelled":"Отменено","Cancelled at":"Отменено","Capabilities":"Возможности","Capture a reusable bundle of models, tags, or endpoints.":"Создайте повторно используемый набор моделей, тегов или конечных точек.","Card view":"Карточки","Category":"Категория","Category Name":"Название категории","Category name is required":"Название категории обязательно","Category name must be less than 50 characters":"Название категории должно содержать менее 50 символов","Caution":"Внимание","CC Switch":"CC переключение","Centered":"По центру","Chain":"Цепочка","Change":"Изменить","Change language":"Изменить язык","Change Password":"Изменить пароль","Change To":"Изменить на","Changed Fields":"Изменённые поля","Changes are written to the settings draft on save.":"Изменения будут записаны в черновик настроек при сохранении.","Changing...":"Изменение...","Channel":"Канал","Channel Affinity":"Привязка к каналу","Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"Привязка к каналу повторно использует последний успешный канал на основе ключей, извлечённых из контекста запроса или тела JSON.","Channel Affinity: Upstream Cache Hit":"Привязка к каналу: попадание в кэш upstream","Channel copied successfully":"Канал успешно скопирован","Channel created successfully":"Канал успешно создан","Channel deleted successfully":"Канал успешно удалён","Channel disabled successfully":"Канал успешно отключён","Channel enabled successfully":"Канал успешно включён","Channel Extra Settings":"Дополнительные настройки канала","Channel ID":"ID канала","Channel key":"Ключ канала","Channel key unlocked":"Ключ канала разблокирован","Channel models":"Модели каналов","Channel name is required":"Имя канала обязательно","Channel test completed":"Тест канала завершён","Channel type is required":"Тип канала обязателен","Channel updated successfully":"Канал успешно обновлён","Channel-specific settings (JSON format)":"Настройки, специфичные для канала (формат JSON)","Channel:":"Канал:","channel(s)? This action cannot be undone.":"канал(ы)? Это действие нельзя отменить.","Channels":"Каналы","Channels deleted successfully":"Каналы успешно удалены","Character chat, storytelling, persona":"Диалог с персонажем, сторителлинг, персона","Chart Preferences":"Настройки графиков","Chart Settings":"Настройки диаграммы","Chat":"Чат","Chat area":"Область чата","Chat Area":"Область чата","Chat Client Name":"Имя чат-клиента","Chat client name is required":"Название чат-клиента обязательно","Chat configuration JSON":"JSON конфигурации чата","Chat preset not found":"Предустановка чата не найдена","Chat Presets":"Предустановки чата","Chat session management":"Управление сессиÑ
107Ð¼Ð¸ чата","ChatCompletions -> Responses Compatibility":"Совместимость ChatCompletions → Ответы","Check for updates":"Проверить обновления","Check in daily to receive random quota rewards":"Регистрируйтесь ежедневно, чтобы получать случайные вознаграждения по квоте","Check in now":"Войдите сейчас","Check line {{line}} for a missing comma.":"Проверьте строку {{line}} на пропущенную запятую.","Check out the Quick Start":"Ознакомьтесь с быстрым стартом","Check resolved IPs against IP filters even when accessing by domain":"Проверять разрешенные IP-адреса по IP-фильтрам даже при доступе по домену","Check-in failed":"Регистрация не удалась.","Check-in Rewards":"Награды за отметку","Check-in Settings":"Настройки прибытия","Check-in successful! Received":"Прибытие прошло успешно! Получено","Checked in":"Зарегистрирован","Checking connection":"Проверка подключения","Checking name...":"Проверяю имя...","Checking updates...":"Проверка обновлений...","checkout.session.completed":"checkout.session.completed","checkout.session.expired":"checkout.session.expired","ChatGPT Subscription (Codex)":"ChatGPT Subscription (Codex)","Chinese":"Китайский","Choose a username":"Выберите имя пользователя","Choose an amount and payment method":"Выберите сумму и способ оплаты","Choose between default expanded, compact icon-only, or full layout mode":"Выберите между развернутым по умолчанию, компактным (только иконки) или полным режимом макета","Choose between inset, floating, or standard sidebar layout":"Выберите между встроенным, плавающим или стандартным макетом боковой панели","Choose between left-to-right or right-to-left site direction":"Выберите между направлением сайта слева направо или справа налево","Choose between system preference, light mode, or dark mode":"Выберите между системными настройками, светлым режимом или темным режимом","Choose channels to sync upstream ratio configurations from":"Выберите каналы для синхронизации конфигураций соотношений из вышестоящих источников","Choose Group":"Выбрать группу","Choose how quota values are shown to users":"Выберите, как значения квоты отображаются пользователям","Choose how the platform will operate":"Выберите режим работы платформы","Choose how to filter domains":"Выберите, как фильтровать домены","Choose how to filter IP addresses":"Выберите, как фильтровать IP-адреса","Choose the bundle type and define the items inside it.":"Выберите тип пакета и определите элементы внутри него.","Choose the default charts, range, and time granularity for model analytics.":"Выберите графики, диапазон и временную детализацию по умолчанию для аналитики моделей.","Choose where to fetch upstream metadata.":"Выберите, откуда получать метаданные вышестоящего источника.","Choose which charts are selected by default when opening model analytics.":"Выберите графики, которые будут выбраны по умолчанию при открытии аналитики моделей.","Classic (Legacy Frontend)":"Классический (Старый интерфейс)","Claude":"Клод","Claude CLI Header Passthrough":"Проброс заголовков Claude CLI","Clean":"Без конфликта","Clean history logs":"Очистить журналы истории","Clean logs":"Очистить логи","Clean up inactive cache":"Очистить неактивный кэш","Clean Up Log Files":"Очистить файлы журналов","Cleaned up {{count}} log files, freed {{size}}":"Очищено {{count}} файлов журналов, освобождено {{size}}","Cleaning...":"Очистка...","Cleanup failed":"Ошибка очистки","Cleanup Mode":"Режим очистки","Clear":"Очистить","Clear all":"Очистить все","Clear All":"Очистить все","Clear All Cache":"Очистить весь кэш","Clear all filters":"Очистить все фильтры","Clear cache for this rule":"Очистить кэш этого правила","Clear filters":"Очистить фильтры","Clear Mapping":"Очистить сопоставление","Clear mode flags in prompts":"Очистить флаги режимов в промптах","Clear search":"Очистить поиск","Clear selection":"Снять выделение","Clear selection (Escape)":"Снять выделение (Escape)","Cleared":"Очищено","Cleared {{bindingType}} binding for user {{username}}":"Привязка {{bindingType}} пользователя {{username}} удалена","Cleared all models":"Все модели очищены","Cleared channel affinity cache":"Кэш привязки каналов очищен","Cleared disk cache":"Дисковый кэш очищен","Cleared historical logs":"Исторические журналы очищены","Cleared log files":"Файлы журналов очищены","Click \\"Create Plan\\" to create your first subscription plan":"Нажмите «Создать план», чтобы создать первый план подписки","Click \\"Generate\\" to create a token":"Нажмите \\"Сгенерировать\\", чтобы создать токен","Click any category to drill into 
107its models, apps, and trends":"Нажмите на категорию, чтобы изучить её модели, приложения и тренды","Click for details":"Нажмите для подробностей","Click save when you\'re done.":"Нажмите «Сохранить», когда закончите.","Click save when you&apos;re done.":"Нажмите сохранить, когда закончите.","Click the button below to bind your Telegram account":"Нажмите кнопку ниже, чтобы привязать ваш аккаунт Telegram","Click to open deployment":"Нажмите, чтобы открыть развертывание","Click to preview audio":"Нажмите для предпросмотра аудио","Click to preview video":"Нажмите, чтобы просмотреть видео","Click to update balance":"Нажмите, чтобы обновить баланс","Click to view Codex usage":"Нажмите, чтобы посмотреть использование Codex","Click to view full details":"Нажмите для просмотра подробностей","Click to view full error message":"Нажмите, чтобы увидеть полное сообщение об ошибке","Click to view full prompt":"Нажмите, чтобы увидеть полный промпт","Click to view image":"Нажмите, чтобы просмотреть изображение","Client header value":"Значение заголовка клиента","Client ID":"ID клиента","Client Secret":"Секрет клиента","Close":"Закрыть","Close dialog":"Закрыть диалог","Close menu":"Закрыть меню","Close Today":"Закрыть сегодня","Cloudflare":"Cloudflare","CNY":"Юань","CNY per USD":"CNY за USD","Code":"Код","Code generation, refactoring, autocomplete":"Генерация кода, рефакторинг, автодополнение","Code interpreter":"Интерпретатор кода","Code samples":"Примеры кода","Codes copied!":"Коды скопированы!","Codex":"Codex","Codex Account & Usage":"Аккаунт и использование Codex","Codex channels do not support batch creation":"Каналы Codex не поддерживают пакетное создание","Codex channels use an OAuth JSON credential as the key.":"Каналы Codex используют учётные данные OAuth в формате JSON в качестве ключа.","Codex CLI Header Passthrough":"Проброс заголовков Codex CLI","Codex credential must be a JSON object with access_token and account_id":"Учетные данные Codex должны быть JSON-объектом с access_token и account_id","Cohere":"Cohere","Collapse":"Свернуть","Collapse All":"Свернуть все","Collect relay latency and success-rate metrics for the model square.":"Собирает метрики задержки Relay и доли успешных запросов для витрины моделей.","Color":"Цвет","Color is required":"Цвет обязателен","Color preset":"Цветовая предустановка","Color:":"Цвет:","Comfortable":"Просторная","Coming Soon!":"Скоро!","Comma-separated exact model names. Prefix with regex: to ignore by regular expression.":"Точные имена моделей через запятую. Добавьте префикс regex:, чтобы игнорировать по регулярному выражению.","Comma-separated list of allowed ports (empty = all ports)":"Список разрешенных портов, разделенных запятыми (пусто = все порты)","Comma-separated model names (leave empty to keep current)":"Названия моделей, разделенные запятыми (оставьте пустым, чтобы сохранить текущие)","Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo":"Имена моделей, разделённые запятыми, например, gpt-4,gpt-3.5-turbo","Command":"Команда","Common":"Общие","Common Keys":"Часто используемые ключи","Common Logs":"Общие журналы","Common ports include 25, 465, and 587":"Распространенные порты включают 25, 465 и 587","Common User":"Обычный пользователь","Community driven, self
107-hosted, and extensible":"Развивается сообществом, поддерживает самостоятельное размещение и расширение","Compact":"Компактная","Compare each vendor\'s token share across the past few weeks":"Сравните долю токенов каждого поставщика за последние несколько недель","Compare each vendor\'s token share across the past year":"Сравните долю токенов каждого поставщика за последний год","Compare each vendor\'s token share over the past 24 hours":"Сравните долю токенов каждого поставщика за последние 24 часа","Compare each vendor\'s token share over the past month":"Сравните долю токенов каждого поставщика за последний месяц","Compare each vendor\'s token share since launch":"Сравните долю токенов каждого поставщика с момента запуска","Compare the most popular models on the platform":"Сравните самые популярные модели на платформе","compatible API routes":"совместимых API-маршрутов","Compatible API routes for common AI application workflows":"Совместимые API-маршруты для типовых сценариев ИИ-приложений","Complete API documentation with multi-language SDK support":"Полная документация API с поддержкой SDK на нескольких языках","Complete Order":"Вывод заказа","Complete these steps to finish the initial installation.":"Выполните эти шаги, чтобы завершить начальную установку.","Completed":"Завершено","Completed top-up order for the user":"Заказ на пополнение для пользователя выполнен","Completion":"Вывод","Completion price":"Цена завершения","Completion price ($/1M tokens)":"Цена завершения ($/1 млн токенов)","Completion ratio":"Коэффициент завершения","Compliance confirmation required":"Требуется подтверждение соответствия","Compliance confirmed":"Соответствие подтверждено","Compliance confirmed successfully":"Соответствие успешно подтверждено","Concatenate channel system prompt with user&apos;s prompt":"Объединить системный промпт канала с промптом пользователя","Condition Path":"Путь условия","Condition Settings":"Настройки условия","Condition Value":"Значение условия","Conditional multipliers":"Условные множители","Conditions":"Условия","Conditions (AND)":"Условия (AND)","Confidence":"Уверенность","Configuration":"Конфигурация","Configuration File":"Файл конфигурации","Configuration for Creem payment integration":"Конфигурация для интеграции платежей Creem","Configuration for Epay payment integration":"Конфигурация для интеграции платежей Epay","Configuration for Stripe payment integration":"Конфигурация для интеграции платежей Stripe","Configuration required":"Требуется настройка","Configure":"Настройка","Configure a Creem product for user recharge options.":"Настройте продукт Creem для опций пополнения пользователя.","Configure a custom ratio for when users use a specific token group.":"Настроить пользовательский коэффициент при использовании определённой группы токенов.","Configure a group that users can select when creating API keys.":"Настройте группу, которую пользователи могут выбрать при создании ключей API.","Configure a new custom OAuth provider for user authentication.":"Настройка нового пользовательского OAuth-провайдера для аутентификации пользователей.","Configure a payment method for user recharge options.":"Настройте способ оплаты для опций пополнения счета пользователя.","Configure a predefined chat link for end users.":"Ð
107Ð°ÑÑ‚ройте предопределенную ссылку для чата для конечных пользователей.","Configure and deploy a new container instance.":"Настройте и разверните новый экземпляр контейнера.","Configure API documentation links for the dashboard":"Настроить ссылки на документацию API для панели управления","Configure at:":"Настроить в:","Configure available payment methods. Provide a JSON array.":"Настроить доступные способы оплаты. Предоставьте JSON-массив.","Configure Creem products. Provide a JSON array.":"Настройте продукты Creem. Укажите массив JSON.","Configure discount rates based on recharge amounts":"Настроить скидки в зависимости от сумм пополнения","Configure experimental data export for the dashboard":"Настроить экспериментальный экспорт данных для панели управления","Configure in your Creem dashboard":"Настройте в панели управления Creem","Configure keyword filtering for prompts and responses.":"Настроить фильтрацию по ключевым словам для запросов и ответов.","Configure model, caching, and group ratios used for billing":"Настроить модель, кэширование и групповые коэффициенты, используемые для выставления счетов","Configure monitoring status page groups for the dashboard":"Настроить группы страниц состояния мониторинга для панели управления","Configure per-model ratio for image inputs or outputs.":"Настроить коэффициент для каждой модели для ввода или вывода изображений.","Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.":"Настройте стоимость единицы на инструмент ($/1K вызовов). Для моделей с оплатой за запрос доп. плата за инструменты не взимается.","Configure pricing ratios for a specific model.":"Настроить коэффициенты ценообразования для конкретной модели.","Configure rate limiting rules for a specific user group.":"Настроить правила ограничения скорости для конкретной группы пользователей.","Configure the ratio for this group.":"Настроить коэффициент для этой группы.","Configure upstream providers and routing.":"Настроить провайдеров верхнего уровня и маршрутизацию.","Configure Waffo Pancake hosted checkout integration for USD-priced top-ups":"Настроить хостовую интеграцию Waffo Pancake (hosted checkout) для пополнений в USD","Configure Waffo payment aggregation platform integration":"Настроить интеграцию платёжной платформы Waffo","Configure your account behavior preferences":"Настроить предпочтения поведения вашей учетной записи","Configure your account preferences and integrations":"Настроить параметры и интеграции вашей учетной записи","Configured routes and latency checks":"Настроенные маршруты и проверки задержки","Confirm":"Подтверждение","Confirm Action":"Подтвердить действие","Confirm and enable":"Подтвердить и включить","Confirm Batch Update":"Подтвердить пакетное обновление","Confirm Billing Conflicts":"Подтвердить конфликты выставления счетов","Confirm Changes":"Подтвердить изменения","Confirm Cleanup":"Подтвердить очистку","Confirm cleanup of inactive disk cache?":"Подтвердить очистку неактивного дискового кэша?","Confirm clearing all channel affinity cache":"Подтвердите очистку всего кэша привязки к каналу","Confirm clearing cache for this rule":"Подтвердите очистку кэша этого правила","Confirm compliance":"Подтвердить соответствие","Confirm compliance terms":"Подтвердить условия соответствия","Confirm Creem Purchase":"Подтвердить покупку Creem","Confirm delete":"Подтвердить удаление","Confirm disable":"Подтвердить отключение","Confirm enable":"Подтвердить включение","Confirm invalidate":"Подтвердить аннулирование","Confirm log cleanup":"Подтвердить очистку логов","Confirm log file cleanup?":"Подтвердить очистку файлов журналов?","Confirm New Password":"Подтвердить новый пароль","Confirm password":"Подтвердить пароль","Confirm Payment":"Подтвердить оплату","Confirm Selection":"Подтвердить выбор","Confirm settings and finish setup":"Подтвердите настройки и завершите установку","confirm that I bear legal responsibility arising from deployment":"подтверждаю, что несу юридическую ответственность, возникающую из развертывания","Confirm Unbind":"Подтвердить отвязку","Confirm your identity before removing this Passkey from your account.":"Подтвердите свою личность перед удалением этой Passkey из вашей учётной записи.","Confirm your identity with Two-factor Authentication before registering a Passkey.":"Подтвердите свою личность с помощью двухфакторной аутентификации перед регистрацией Passkey.","Confirmed at {{time}} by user #{{userId}}":"Подтверждено {{time}} пользователем #{{userId}}","Confirmed payment compliance":"Соответствие платежа подтверждено","Conflict":"Противоречие","Connect":"Подключение","Connect through OpenAI, Claude, Gemini, and other compatible API routes":"Подключайтесь через OpenAI, Claude, Gemini и другие совместимые API-маршруты","Connected to io.net service normally.":"Соединение с сервисом io.net установлено.","Connection error":"Ошибка соединения","Connection failed":"Не удалось подключиться","Connection successful":"Подключение успешно","Console":"Консоль","Console area":"Область консоли","Console Area":"Область консоли","Console Content":"Содержимое консоли","Consume":"Расход","Consumed 
107in the last 24 hours":"Потреблено за последние 24 часа","Container":"Контейнер","Container name":"Имя контейнера","Containers":"Контейнеры","Contains":"Содержит","Contains Match":"Совпадение по содержанию","Content":"Содержание","Content displayed on the home page (supports Markdown)":"Содержимое, отображаемое на главной странице (поддерживает Markdown)","Content not found.":"Контент не найден.","Content not modified!":"Контент не изменён!","Content width":"Ширина контента","Context":"Контекст","Continue":"Продолжить","Continue with {{name}}":"Продолжить с {{name}}","Continue with Discord":"Продолжить с Discord","Continue with GitHub":"Продолжить с GitHub","Continue with LinuxDO":"Продолжить с LinuxDO","Continue with OIDC":"Продолжить с OIDC","Continue with Telegram":"Продолжить с Telegram","Continue with WeChat":"Продолжить с WeChat","Contract review, compliance, summarisation":"Анализ контрактов, комплаенс, резюме","Control which models are exposed and which groups may use them.":"Управляйте тем, какие модели доступны и какие группы могут их использовать.","Controls how much the model thinks before answering":"Регулирует глубину размышлений модели перед ответом","Controls whether user verification (biometrics/PIN) is required during Passkey flows.":"Определяет, требуется ли проверка пользователя (биометрия/PIN) во время процессов Passkey.","Conversion rate from USD to your custom currency":"Курс конвертации из USD в вашу пользовательскую валюту","Convert reasoning_content to <think> tag in content":"Преобразовать reasoning_content в тег <think> в content","Convert string to lowercase":"Преобразовать строку в нижний регистр","Convert string to uppercase":"Преобразовать строку в верхний регистр","Copied":"Скопировано","Copied {{count}} key(s)":"Скопировано {{count}} ключ(ей)","Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})":"Канал скопирован (исходный ID: {{sourceId}}) в {{name}} (новый ID: {{id}})","Copied to clipboard":"Скопировано в буфер обмена","Copied: {{model}}":"Скопировано: {{model}}","Copied!":"Скопировано!","Copy":"Копировать","Copy {{name}} pricing":"Копировать тариф {{name}}","Copy a request header":"Копировать заголовок запроса","Copy All":"Скопировать все","Copy all backup codes":"Скопировать все резервные коды","Copy All Codes":"Скопировать все коды","Copy API key":"Скопировать ключ API","Copy Channel":"Скопировать канал","Copy code":"Копировать код","Copy Connection Info":"Копировать данные подключения","Copy failed":"Не удалось скопировать","Copy Field":"Копировать поле","Copy Header":"Копировать заголовок","Copy Key":"Копировать ключ","Copy Link":"Копировать ссылку","Copy model name":"Скопировать имя модели","Copy model names":"Скопировать имена моделей","Copy prompt":"Копировать промпт","Copy ready-to-run curl":"Скопировать готовый curl","Copy redemption code":"Скопировать код активации","Copy referral link":"Скопировать реферальную ссылку","Copy Request Header":"Копировать заголовок запроса","Copy secret key":"Скопировать секретный ключ","Copy selected codes":"Копировать выбранные коды","Copy selected keys":"Копировать выбранные ключи","Copy source field to target field":"Копировать исходное поле в целевое","Copy the key and paste it here":"Скопируйте ключ и вставьте его сюда","Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.":"Скопируйте этот промпт и отправьте его LLM (например, ChatGPT / Claude), чтобы помочь с разработкой выражения тарификации.","Copy to clipboard":"Копировать в буфер обмена","Copy token":"Копировать токен","Copy URL":"Скопировать URL","Copying...":"Копирование...","Copywriting, ad creative, SEO":"Копирайтинг, рекламн
107ые креативы, SEO","Core concepts":"Основные понятия","Core Configuration":"Основная конфигурация","Core Features":"Основные функции","Core pricing":"Основные цены","Cost":"Стоимость","Cost in USD per request, regardless of tokens used.":"Стоимость в долларах США за запрос, независимо от использованных токенов.","Cost Tracking":"Отслеживание затрат","Count must be between {{min}} and {{max}}":"Количество должно быть от {{min}} до {{max}}","Coze":"Coze","CPU Threshold (%)":"Порог CPU (%)","Create":"Создать","Create a copy of:":"Создать копию:","Create a key for your app or service":"Создайте ключ для приложения или сервиса","Create a new user group to configure ratio overrides for.":"Создайте новую группу пользователей для настройки переопределений соотношений.","Create account":"Создать аккаунт","Create an account":"Создать аккаунт","Create an API key to unlock the real request":"Создайте API-ключ, чтобы открыть реальный запрос","Create and review invite or credit codes.":"Создать и просмотреть коды приглашений или кредитов.","Create API Key":"Создать ключ API","Create cache":"Создать кеш","Create cache ratio":"Создать коэффициент кэширования","Create Channel":"Создать канал","Create Code":"Создать код","Create credentials for the root user":"Создайте учётные данные для администратора","Create deployment":"Создать развертывание","Create Model":"Создать модель","Create multiple API keys at once (random suffix will be added to names)":"Создать несколько API-ключей одновременно (случайный суффикс будет добавлен к именам)","Create multiple channels from multiple keys":"Создать несколько каналов из нескольких ключей","Create multiple redemption codes at once (1-100)":"Создать несколько кодов активации одновременно (1-100)","Create new subscription plan":"Создать новый план подписки","Create or update frequently asked questions for users":"Создать или обновить часто задаваемые вопросы для пользователей","Create or update system announcements for the dashboard":"Создать или обновить системные объявления для панели управления","Create Plan":"Создать план","Create Prefill Group":"Создать группу предзаполнения","Create Provider":"Создать провайдер","Create Redemption Code":"Создать код активации","Create request parameter override rules with a visual editor or raw JSON.":"Создавайте правила переопределения параметров запроса с помощью визуального редактора или необработанного JSON.","Create request parameter override rules without editing raw JSON.":"Создавайте правила переопределения параметров запроса без редактирования raw JSON.","Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.":"Создавайте многократно используемые пакеты моделей, тегов, конечных точек и групп пользователей для ускорения настройки в других частях консоли.","Create succeeded":"Успешно создано","Create Vendor":"Создать поставщика","Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.":"Создайте свою первую группу для повторного использования выбранных моделей, тегов или конечных точек в любом месте панели управления.","Create, revoke, and audit API tokens.":"Создать, отозвать и аудитировать токены API.","Created":"Создано","Created {{count}} redemption codes named {{name}} ({{quota}} each)":"Создано кодов погашения: {{count}} с именем {{name}} (по {{quota}} каждый)","Created a custom OAuth provider":"Создан пользовательский провайдер OAuth","Created a deployment":"Создано развёртывание","Created a model":"Создана модель","Created a prefill group":"Создана группа предзаполнения","Created a subscription plan":"Создан тарифный план подписки","Created a vendor":"Создан поставщик","Created At":"Дата создания","Created channel {{name}} (type {{type}}, count {{count}})":"Создан канал {{name}} (тип {{type}}, количество {{count}})","Created user {{username}} (role {{role}})":"Создан пользователь {{username}} (роль {{role}})","Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.":"Создает продукт Pancake в сохраненном магазине с названием и ценой этого плана. Сначала необходимо полностью настроить Waffo Pancake в настройках платежей.","Creating...":"Создание...","Creation failed":"Создание не удалось","Credential refreshed":"Учётные данные обновлены","Credentials":"Учетные данные","Credentials verification failed":"Не удалось проверить учетные данные","Credentials verification failed — double-check Merchant ID and API private key.":"Не удалось проверить учетные данные — проверьте Merchant ID и приватный ключ API.","Credit remaining":"Остаток средств","Creem API key (leave blank unless updating)":"Ключ API Creem (оставьте пустым, если не обновляете)","Creem Gateway":"Шлюз Creem","Creem Payment":"Платеж Creem","Creem product ID from your Creem dashboard.":"ID продукта Creem из вашего дашборда Creem.","Creem products must be a JSON array":"Продукты Creem должны быть JSON-массивом","Cross-group":"Межгрупповой","Cross-group retry":"Повтор между группами","Currency":"Валюта","Currency & Display":"Валюта и отображение","Current Balance":"Текущий баланс","Current Billing":"Текущие счета","Current Cache Size":"Текущий размер кэша","Current domain":"Текущий домен","Current email: {{email}}. Enter a new email to change.":"Текущий email: {{email}}. Введите новый email для изменения.","Current key":"Текущий ключ","Current legacy JSON is invali
107d, cannot append":"Текущий JSON старого формата невалиден, добавление невозможно","Current Level Only":"Только текущий уровень","Current models for the longest channel in this tag. May not include all models from all channels.":"Текущие модели для самого длинного канала в этом теге. Может не включать все модели из всех каналов.","Current Password":"Текущий пароль","Current Price":"Текущая цена","Current quota":"Текущая квота","Current Value":"Текущее значение","Current version":"Текущая версия","Current:":"Текущий:","Custom":"Пользовательский","Custom (seconds)":"Пользовательский (секунды)","Custom Amount":"Пользовательская сумма","Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.":"Пользовательский базовый URL API. Для официальных каналов New API имеет встроенные адреса. Заполняйте это поле только для сторонних прокси-сайтов или специальных конечных точек. Не добавляйте /v1 или завершающий слэш.","Custom API base URL. Leave empty to use provider default.":"Пользовательский базовый URL API. Оставьте пустым для использования значения по умолчанию провайдера.","Custom Currency":"Пользовательская валюта","Custom Currency Symbol":"Пользовательский символ валюты","Custom currency symbol is required":"Пользовательский символ валюты обязателен","Custom database driver detected.":"Обнаружен пользовательский драйвер базы данных.","Custom Error Response":"Пользовательский ответ с ошибкой","Custom Home Page":"Пользовательская домашняя страница","Custom message shown when access is denied":"Пользовательское сообщение, отображаемое при отказе в доступе","Custom model (comma-separated)":"Пользовательская модель (через запятую)","Custom module":"Пользовательский модуль","Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.":"Пользовательские множители, когда определенные группы пользователей используют определенные группы токенов. Пример: VIP-пользователи получают ставку 0.9x при использовании токенов группы \\"edit_this\\".","Custom OAuth":"Пользовательский OAuth","Custom OAuth Providers":"Пользовательские OAuth-провайдеры","Custom Seconds":"Пользовательские секунды","Custom sidebar section":"Пользовательский раздел боковой панели","Custom Time Range":"Пользовательский диапазон времени","Custom Zoom":"Пользовательский зум","Customize sidebar display content":"Настроить содержимое боковой панели","Daily":"Ежедневно","Daily Check-in":"Ежедневный вход","Daily token usage by model across the past few weeks":"Ежедневное использование токенов по моделям за последние несколько недель","Daily token usage by model across the past month":"Ежедневное использование токенов по моделям за последний месяц","Daily token usage by model over the past month":"Ежедневное использование токенов по моделям за последний месяц","Daily uptime over the last 30 days":"Ежедневная доступность за последние 30 дней","Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes":"Ежедневная доступность; {{incidents}} инцидентов общей длительностью {{minutes}} мин.","Dark":"Тёмная","Dashboard":"Панель управления","Dashboard Preferences":"Настройки панели управления","Dashboards, tokens, and usage analytics.":"Панели управления, токены и аналитика использования.","Data Dashboard":"Панель мониторинга данных","Data directory:":"Каталог данных:","Data is stored locally on this device. Use system backups to keep a safe copy.":"Данные хранятся локально на этом устройстве. Используйте системные резервные копии для сохранения безопасной копии.","Data management and log viewing":"Управление данными и просмотр логов","Data retention":"Хранение данных","Database":"База данных","Database check":"Проверка базы данных","Date and time when this announcement should be displayed":"Дата и время отображения этого объявления","Date Range":"Диапазон дат","Day":"День","Day of month":"День месяца","days":"дней","Days to Retain":"Дней хранения","Decreased user quota by {{quota}}":"Квота пользователя уменьшена на {{quota}}","Deducted by subscription":"Списано по подписке","DeepSeek":"DeepSeek","default":"по умолчанию","Default":"По умолчанию","Default (New Frontend)":"По умолчанию (Новый интерфейс)","Default / range":"По умолчанию / диапазон","Default API Version *":"Версия API по умолчанию *","Default API version for this channel":"Версия API по умолчанию для этого канала","Default Collapse Sidebar":"Сворачивать боковую панель по умолчанию","Default consumption chart":"График потребления по умолчанию","Default Max Tokens":"Максимальное количество токенов по умолчанию","Default model call chart":"График вызовов моделей по умолчанию","Default range":"Диапазон по умолчанию","Default Responses API version, if empty, will use the API version above":"Версия API ответов по умолчанию; если пусто, будет использоваться версия API, указанная выше","Default system prompt for this channel":"Системный промпт по умолчанию для этого канала","Default time granularity":"Гранулярность времени по умолчанию","Default to auto groups":"По умолчанию использовать автогруппы","Default TTL (seconds)":"TTL по умолчанию (секунды)","Defaults to the wallet page when empty":"Если пусто, по умолчанию открывается страница кошелька","Define API endpoints for this model (JSON format)":"Определить конечные точки API для этой модели (формат JSON)","Define endpoint mappings for each provider.":"Определите сопоставления конечных точек для каждого провайдера.","Define per-group rules to add, remove, or append selectable groups for specific user groups.":"Определите правила для групп, чтобы добавлять, удалять или дополнять доступные группы для конкретных групп пользователей.","Degraded performance recently":"Недавно наблюдалось снижение производительности","Delete":"Удалить","Delete (":"Удалить (","Delete {{count}} API key(s)?":"Удалить {{count}} API-ключ(а/ей)?","Delete a runtime request header":"Удалить заголовок запроса во время выполнения","Delete Account":"Удалить аккаунт","Delete All Disabled":"Удалить все отключенные","Delete All Disabled Channels?":"Удалить все отключенные каналы?","Delete Auto-Disabled":"Удалить автоматически отключенные","Delete Channel":"Удалить канал","Delete Channels?":"Удалить каналы?","Delete condition":"Удалить условие","Delete Condition":"Удалить условие","Delete failed":"Не удалось удалить","Delete Field":"Удалить поле","Delete group":"Удалить группу","Delete Header":"Удалить заголовок","Delete Invalid":"Удалить недействительные","Delete invalid codes":"Удалить недействительные коды","Delete invalid codes (used/disabled/expired)":"Удалить недействительные коды (использованные/отключенные/истекшие)","Delete invalid redemption codes":"Удалить недействительные коды активации","Delete Invalid Redemption Codes?":"Удалить недействительные коды активации?","Delete logs":"Удалить логи","Delete mapping":"Удалить сопоставление","Delete Model":"Удалить модель","Delete Models?":"Удалить модели?","Delete Provider":"Удалить провайдер","Delete Request Header":"Удалить заголовок запроса","Delete selected API keys":"Удалить выбранные ключи API","Delete selected channels":"Удалить выбранные каналы","Delete selected models":"Удалить выбранные модели","Deleted":"Удалён","Deleted a custom OAuth provider":"Удалён пользовательский провайдер OAuth","Deleted a deployment":"Удалено развёртывание","Deleted a model":"Удалена модель","Deleted a passkey":"Ключ доступа удалён","Deleted a prefill group":"Удалена группа предзаполнения","Deleted a redemption code":"Код погашения удалён","Deleted a vendor":"Удалён поставщик","Deleted all disabled channels ({{count}})":"Удалены все отключённые каналы ({{count}})","Deleted channel {{name}} (ID: {{id}})":"Удалён канал {{name}} (ID: {{id}}
107)","Deleted invalid redemption codes":"Недействительные коды погашения удалены","Deleted successfully":"Удалено успешно","Deleted user {{username}} (ID: {{id}})":"Удалён пользователь {{username}} (ID: {{id}})","Deleting will permanently remove this subscription record (including benefit details). Continue?":"Удаление безвозвратно удалит запись подписки (включая детали льгот). Продолжить?","Deleting...":"Удаление...","Demo site":"Демо-сайт","Demo site mode":"Режим демо-сайта","Demo Site Mode":"Режим демонстрационного сайта","Demote":"Понизить версию","Density":"Плотность","Deploy your own gateway and start routing requests through your configured upstream services.":"Разверните собственный шлюз и начните маршрутизировать запросы через настроенные вышестоящие сервисы.","Deployment created successfully":"Развертывание создано успешно","Deployment details":"Детали развертывания","Deployment ID":"ID развертывания","Deployment location":"Локация развертывания","Deployment logs":"Логи развертывания","Deployment Region *":"Регион развертывания *","Deployment requested":"Развертывание запрошено","Deployments":"Развертывания","Desc":"По убыванию","Describe":"Описание","Describe this model...":"Опишите эту модель...","Describe this vendor...":"Опишите этого поставщика...","Description":"Описание","Description is required":"Описание обязательно","Designed and Developed by":"Разработано и создано","designed for scale":"спроектировано для масштабирования","Destroyed":"Уничтожено","Detailed request logs for investigations.":"Подробные журналы запросов для расследований.","Details":"Детали","Detect All Upstream Updates":"Обнаружить все обновления из upstream","Detected database":"Обнаруженная база данных","Detected high-risk status code redirect rules":"Обнаружены следующие правила перенаправления кодов состояния высокого риска:","Detection complete: {{add}} to add, {{remove}} to remove":"Обнаружение завершено: {{add}} для добавления, {{remove}} для удаления","Detection failed":"Обнаружение не удалось","Determines how this group is applied elsewhere.":"Определяет, как эта группа применяется в других местах.","Deterministic sampling seed (best-effort)":"Сид детерминированного сэмплирования (по возможности)","Developer Friendly":"Удобно для разработчиков","Device Type Preference":"Предпочтения типа устройства","Dify":"Dify","Dify channels only support chatflow and agent, and agent does not support images":"Каналы Dify поддерживают только chatflow и agent, а agent не поддерживает изображения","Digest:":"Дайджест:","Direction":"Направление","Directory File Count":"Файлов в каталоге","Directory Total Size":"Общий размер каталога","Disable":"Отключить","Disable 2FA":"Отключить 2FA","Disable All":"Отключить все","Disable on failure":"Отключить при сбое","Disable selected channels":"Отключить выбранные каналы","Disable selected models":"Отключить выбранные модели","Disable store passthrough":"Отключить сквозной переход магазина","Disable this key?":"Отключить этот ключ?","Disable threshold (seconds)":"Порог отключения (секунды)","Disable Two-Factor Authentication":"Отключить двухфакторную аутентификацию","disabled":"отключено","Disabled":"Отключено","Disabled all channels with tag: {{tag}}":"Все каналы с тегом {{tag}} отключены","Disabled channels with tag {{tag}}":"Отключены каналы с тегом {{tag}}","Disabled lanes are omitted on save.":"Отключённые каналы цен не сохраняются.","Disabled Reason":"Причина отключения","Disabled Time":"Время отключения","Disabling...":"Отключение...","Discord":"Discord","Discount":"Скидка","Discount map by recharge amount (JSON object)":"Карта скидоÐ
107º по сумме пополнения (объект JSON)","Discount Rate":"Ставка скидки","Discount rate must be ≤ 1":"Ставка скидки должна быть ≤ 1","Discount rate must be greater than 0":"Ставка скидки должна быть больше 0","Discount Rate:":"Ставка скидки:","Discount ratio for cache hits.":"Коэффициент скидки для попаданий в кэш.","Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel.":"Предупреждение: только для личного использования. Не распространяйте и не передавайте учетные данные. Для этого канала требуются предварительные условия и начальная настройка; используйте его только если понимаете процедуру и риски, и соблюдайте условия и политики OpenAI. Учетные данные и конфигурация предназначены только для интеграции с Codex CLI и не предназначены для других клиентов, платформ или каналов.","Discouraged":"Не рекомендуется","Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.":"Откройте для себя подобранные AI-модели, сравнивайте цены и возможности и выбирайте подходящую модель для каждого сценария.","Discover the leading models in each domain":"Откройте для себя ведущие модели в каждой области","Discover the most-used models and rising vendors on the platform, updated from live usage data.":"Изучайте самые популярные модели и растущих поставщиков платформы на основе актуальных данных использования.","Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.":"Узнайте, какие модели, приложения и поставщики лидируют на платформе — данные обновляются по каждой категории.","Discovering...":"Обнаружение...","Disk cache cleared":"Дисковый кэш очищен","Disk Cache Settings":"Настройки дискового кэша","Disk Cache Threshold (MB)":"Порог дискового кэша (МБ)","Disk cache, system performance monitoring, and operation statistics":"Дисковый кэш, мониторинг производительности и статистика","Disk Hits":"Попаданий диска","Disk Threshold (%)":"Порог диска (%)","Display in Currency":"Отображать в валюте","Display Mode":"Режим отображения","Display name":"Отображаемое имя","Display Name":"Отображаемое имя","Display name and email used in outgoing messages":"Отображаемое имя и адрес электронной почты, используемые в исходящих сообщениях","Display Name Field":"Поле отображаемого имени","Display name for this chat client.":"Отображаемое имя для этого чат-клиента.","Display name for this monitoring group (max 50 characters)":"Отображаемое имя для этой группы мониторинга (макс. 50 символов)","Display name for this payment method.":"Отображаемое имя для этого метода оплаты.","Display name shown to users.":"Отображаемое название для пользователей.","Dis
107play Options":"Параметры отображения","Display Token Statistics":"Показать статистику токенов","Displayed in":"Отображается в","Displays the mobile sidebar.":"Отображает мобильную боковую панель.","Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.":"Не доверяйте этой функции слишком сильно. IP может быть подделан. Используйте с nginx, CDN и другими шлюзами.","Do not repeat check-in; only once per day":"Не повторяйте отметку; только один раз в день","Do regex replacement in the target field":"Выполнить замену по регулярному выражению в целевом поле","Do string replacement in the target field":"Выполнить замену строки в целевом поле","Docs":"Документы","Documentation Link":"Ссылка на документацию","Documentation or external knowledge base.":"Документация или внешняя база знаний.","does not exist or might have been removed.":"не существует или, возможно, был удален.","Domain":"Домен","Domain Filter Mode":"Режим фильтра домена","Don\'t have an account?":"У вас нет аккаунта?","Done":"Готово","Doubao custom API address editing unlocked":"Редактирование пользовательского адреса API Doubao разблокировано","DoubaoVideo":"DoubaoVideo","Double check the configuration below. Your system will be locked until initialization is complete.":"Дважды проверьте конфигурацию ниже. Ваша система будет заблокирована до завершения инициализации.","Download":"Скачать","Draw":"Рисование","Drawing":"Рисование","Drawing logs":"Журналы рисования","Drawing Logs":"Журнал рисования","Drawing task records":"Записи задач рисования","Duplicate":"Дублировать","Duplicate group names: {{names}}":"Повторяющиеся имена групп: {{names}}","Duplicate source model mappings are not allowed":"Повторяющиеся сопоставления исходных моделей не допускаются","Duplicate source model(s): {{models}}":"Повторяющиеся исходные модели: {{models}}","Duration":"Длительность","Duration (hours)":"Длительность (часы)","Duration Settings":"Настройки срока действия","Duration Unit":"Единица срока","Duration Value":"Значение срока","Dynamic Pricing":"Динамическое ценообразование","e.g. ¥ or HK$":"напр. ¥ или HK$","e.g. 401, 403, 429, 500-599":"напр. 401, 403, 429, 500-599","e.g. 8 means 1 USD = 8 units":"напр. 8 означает 1 USD = 8 единиц","e.g. Basic Plan":"напр. Базовый план","e.g. Clean tool parameters to avoid upstream validation errors":"напр. Очистить параметры инструментов во избежание ошибок валидации","e.g. example.com":"напр. example.com","e.g. llama3.1:8b":"например llama3.1:8b","e.g. My GitLab":"например, My GitLab","e.g. my-gitlab":"например, my-gitlab","e.g. New API Console":"напр. консоль New API","e.g. openid profile email":"например, openid profile email","e.g. Suitable for light usage":"напр. Подходит для лёгкого использования","e.g. This request does not meet access policy":"напр. Этот запрос не соответствует политике доступа","e.g., 0.95":"напр., 0.95","e.g., 100":"напр., 100","e.g., 123456":"напр., 123456","e.g., 2025-04-01-preview":"напр., 2025-04-01-preview","e.g., 50":"напр., 50","e.g., 500000":"напр., 500000","e.g., 7342866812345":"напр., 7342866812345","e.g., 8 means 8 local currency per USD":"например, 8 означает 8 местной валюты за доллар США","e.g., Alipay, WeChat":"например, Alipay, WeChat","e.g., Basic Package":"напр., Базовый пакет","e.g., CN2 GIA":"например, CN2 GIA","e.g., Core APIs, OpenAI, Claude"
107:"например, Core APIs, OpenAI, Claude","e.g., d6b5da8hk1awo8nap34ube6gh":"например, d6b5da8hk1awo8nap34ube6gh","e.g., default, vip, premium":"например, default, vip, premium","e.g., gpt-4, claude-3":"напр. gpt-4, claude-3","e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$":"например: gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$","e.g., https://api.example.com (path before /suno)":"например, https://api.example.com (путь до /suno)","e.g., https://api.openai.com/v1/chat/completions":"например, https://api.openai.com/v1/chat/completions","e.g., https://ark.cn-beijing.volces.com":"например, https://ark.cn-beijing.volces.com","e.g., https://docs-test-001.openai.azure.com":"например, https://docs-test-001.openai.azure.com","e.g., https://fastgpt.run/api/openapi":"например, https://fastgpt.run/api/openapi","e.g., OpenAI GPT-4 Production":"напр., OpenAI GPT-4 Production","e.g., preview":"например, preview","e.g., prod_xxx":"напр., prod_xxx","e.g., Recommended for China Mainland Users":"например, Рекомендуется для пользователей материкового Китая","e.g., us-central1 or JSON format for model-specific regions":"например, us-central1 или формат JSON для регионов, специфичных для модели","e.g., v2.1":"например, v2.1","Each backup code can only be used once.":"Каждый код восстановления можно использовать только один раз.","Each item must be an object with a single key-value pair.":"Каждый элемент должен быть объектом с одной парой ключ-значение.","Each item must have exactly one key-value pair.":"Каждый элемент должен иметь ровно одну пару ключ-значение.","Each line represents one keyword. Leave blank to disable the list but keep the switch states.":"Каждая строка представляет одно ключевое слово. Оставьте пустым, чтобы отключить список, но сохранить состояния переключателей.","Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.":"Каждый уровень поддерживает 0–2 условия (по len, p, c); последний уровень — резервный, без условий. Используйте len (полная длина ввода, включая попадания в кэш) для условий уровня, чтобы избежать ошибочной маршрутизации, когда попадания в кэш уменьшают p.","Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.":"Каждый уровень поддерживает до 2 условий; последний уровень является резервным и не содержит условий. Используйте полную длину входа для условий уровня, чтобы кэш-попадания не снижали оплачиваемые входные токены и не приводили к неверному маршруту.","Each tier supports up to 2 conditions. The last tier without conditions is the fallback.":"Каждый уровень поддерживает до 2 условий. Последний уровень без условий используется как резервный.","Earn rewards when your referrals add funds. Transfer accumulated rewards to your balance anytime.":"Получайте вознаграждения, когда ваши рефералы пополняют счет. Переводите накопленные вознаграждения на свой баланс в любое время.","Edit":"Редактировать","Edit {{title}}":"Редактировать {{title}}","Edit all channels with tag:":"Редактировать все каналы с тегом:","Edit Announcement":"Редактировать объявление","Edit API Shortcut":"Редактировать ярлык API","Edit billing ratios and user-selectable groups in one table.":"Редактируйте коэффициенты тарификации и доступные пользователю группы в одной таблице.","Edit Channel":"Редактировать канал","Edit chat preset":"Редактировать пресет чата","Edit discount tier":"Редактировать уровень скидки","Edit FAQ":"Редактировать FAQ","Edit group rate limit":"Редактировать лимит скорости группы","Edit JSON object directly. Suitable for simple parameter overrides.":"Редактируйте JSON-объект напрямую. Подходит для простых переопределений параметров.","Edit JSON text directly. Format will be validated on save.":"Редактируйте JSON-текст напрямую. Формат будет проверен при сохранении.","Edit model":"Редактировать модель","Edit Model":"Редактировать модель","Edit model pricing":"Изменить тариф модели","Edit OAuth Provider":"Редактировать поставщика OAuth","Edit payment method":"Редактировать способ оплаты","Edit Prefill Group":"Редактировать группу предзаполнения","Edit product":"Редактировать продукт","Edit ratio override":"Редактировать переопределение коэффициента","
107Edit Rule":"Редактировать правило","Edit selectable group":"Редактировать выбираемую группу","Edit Tag":"Редактировать тег","Edit Tag:":"Редактировать тег:","Edit Uptime Kuma Group":"Редактировать группу Uptime Kuma","Edit Vendor":"Редактировать поставщика","edit_this":"изменить_это","Edited channels with tag {{tag}}":"Изменены каналы с тегом {{tag}}","Editor mode":"Режим редактора","Education":"Образование","Email":"Электронная почта","Email (required for verification)":"Email (требуется для верификации)","Email Address":"Адрес электронной почты","Email Alias Restriction":"Ограничение по псевдониму Email","Email bound successfully!":"Email успешно привязан!","Email Domain Restriction":"Ограничение по домену Email","Email Domain Whitelist":"Белый список доменов Email","Email Field":"Поле email","Email Verification":"Верификация Email","Email, summarisation, knowledge work":"Электронная почта, резюме, knowledge work","Embeddings":"Встраивания","Empty":"Пусто","Empty value will be saved as {}.":"Пустое значение будет сохранено как {}.","Enable":"Включить","Enable 2FA":"Включить 2FA","Enable All":"Включить все","Enable check-in feature":"Включить функцию прибытия","Enable Data Dashboard":"Включить панель данных","Enable demo mode with limited functionality":"Включить демонстрационный режим с ограниченной функциональностью","Enable Discord OAuth":"Включить Discord OAuth","Enable Disk Cache":"Включить дисковый кэш","Enable drawing features":"Включить функции рисования","Enable filtering":"Включить фильтрацию","Enable FunctionCall thoughtSignature Fill":"Включить автозаполнение thoughtSignature для FunctionCall","Enable GitHub OAuth":"Включить GitHub OAuth","Enable Groups":"Включить группы","Enable if this is an OpenRouter enterprise account with special response format":"Включите, если это корпоративный аккаунт OpenRouter со специальным форматом ответа","Enable io.net deployments":"Включить развертывания io.net","Enable io.net model deployment service in console":"Включить сервис развертывания моделей io.net в консоли","Enable LinuxDO OAuth":"Включить LinuxDO OAuth","Enable model performance metrics":"Включить метрики производительности моделей","Enable OIDC":"Включить OIDC","Enable or disable this channel":"Включить или отключить этот канал","Enable or disable this model":"Включить или отключить эту модель","Enable Passkey":"Включить Passkey","Enable Performance Monitoring":"Включить мониторинг производительности","Enable rate limiting":"Включить ограничение скорости","Enable Request Passthrough":"Включить сквозную передачу запросов","Enable selected channels":"Включить выбранные каналы","Enable selected models":"Включить выбранные модели","Enable SSL/TLS":"Включить SSL/TLS","Enable SSRF Protection":"Включить защиту от SSRF","Enable streaming mode for the test request.":"Ð
107’ключить потоковый режим для тестового запроса.","Enable Telegram OAuth":"Включить Telegram OAuth","Enable test mode for Creem payments":"Включить тестовый режим для платежей Creem","Enable this key?":"Включить этот ключ?","Enable Turnstile":"Включить Turnstile","Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.":"Включите двухфакторную аутентификацию или Passkey в своем профиле, чтобы разблокировать конфиденциальные операции.","Enable unlimited quota for this API key":"Включить неограниченную квоту для этого ключа API","Enable violation deduction":"Включить вычет за нарушения","Enable Waffo":"Включить Waffo","Enable Waffo Pancake":"Включить Waffo Pancake","Enable WeChat Auth":"Включить аутентификацию WeChat","Enable when proxying workers that fetch images over HTTP.":"Включить при проксировании воркеров, которые получают изображения по HTTP.","Enabled":"Включено","Enabled all channels with tag: {{tag}}":"Все каналы с тегом {{tag}} включены","Enabled channels with tag {{tag}}":"Включены каналы с тегом {{tag}}","Enabled Status":"Статус включения","Enabling...":"Включается...","Encourages introducing new topics":"Поощряет введение новых тем","End":"End","End Error":"Ошибка завершения","End Reason":"Причина завершения","End Time":"Время окончания","End-user identifier for abuse monitoring":"Идентификатор конечного пользователя для мониторинга злоупотреблений","Endpoint":"Точка доступа","Endpoint config":"Конфигурация конечной точки","Endpoint Configuration":"Конфигурация конечной точки","Endpoint Type":"Тип конечной точки","Endpoint, provider-specific settings, and credentials.":"Эндпоинт, настройки провайдера и учетные данные.","Endpoint:":"Конечная точка:","Endpoints":"Конечные точки","English":"Английский","Ensure Prefix":"Обеспечить префикс","Ensure Suffix":"Обеспечить суффикс","Ensure the string has a specified prefix":"Убедиться, что строка имеет указанный префикс","Ensure the string has a specified suffix":"Убедиться, что строка имеет указанный суффикс","Enter 6-digit code":"Введите 6-значный код","Enter a name":"Введите имя","Enter a new name":"Введите новое имя","Enter a positive or negative amount to adjust the quota":"Введите положительную или отрицательную сумму для корректировки квоты","Enter a valid email or leave blank":"Введите действительный email или оставьте пустым","Enter a value and press Enter":"Введите значение и нажмите Enter","Enter amount in {{currency}}":"Введите сумму в {{currency}}","Enter amount in tokens":"Введите сумму в токенах","Enter announcement content (supports Markdown & HTML)":"Введите содержимое объявления (поддерживает Markdown и HTML)","Enter announcement content (supports Markdown/HTML)":"Введите содержимое объявления (поддерживает Markdown/HTML)","Enter API Key":"Введите API-ключ","Enter API key for this channel":"Введите ключ API для этого канала","Enter API Key, format: APIKey|Region":"Введите ключ API, формат: APIKey|Region","Enter API Key, one per line, format: APIKey|Region":"Введите ключ API, по одному на строку, формат: APIKey|Region","Enter application token":"Введите токен приложения","Enter authenticator code":"Введите код аутентификатора","Enter backup code (e.g., CAWD-OQDV)":"Введите резервный код (например, CAWD-OQDV)","Enter code":"Введите код","Enter code or backup code":"Введите код или резервный код","Enter Completion price to calculate ratio":"Введите цену Completion для расчёта коэффициента","
107Enter Creem API key":"Введите ключ API Creem","Enter custom API endpoint URL":"Введите URL пользовательской конечной точки API","Enter deployment region or JSON mapping:":"Введите регион развертывания или JSON-сопоставление:","Enter display name":"Введите отображаемое имя","Enter HTML code (e.g., <p>About us...</p>) or a URL (e.g., https://example.com) to embed as iframe":"Введите HTML-код (например, <p>О нас...</p>) или URL (например, https://example.com) для встраивания в виде iframe","Enter Input price to calculate ratio":"Введите цену Input для расчёта коэффициента","Enter JSON to override request headers":"Введите JSON для переопределения заголовков","Enter key, format: AccessKey|SecretAccessKey|Region":"Введите ключ, формат: AccessKey|SecretAccessKey|Region","Enter key, one per line, format: AccessKey|SecretAccessKey|Region":"Введите ключ, по одному на строку, формат: AccessKey|SecretAccessKey|Region","Enter model name":"Введите имя модели","Enter new key to update":"Введите новый ключ для обновления","Enter new key to update, or leave empty to keep current key":"Введите новый ключ для обновления или оставьте пустым, чтобы сохранить текущий ключ","Enter new tag name (leave empty to disband tag)":"Введите новое имя тега (оставьте пустым, чтобы удалить тег)","Enter new tag name or leave empty":"Введите новое имя тега или оставьте пустым","Enter new token to update":"Введите новый токен для обновления","Enter one API key per line for batch creation":"Введите по одному API-ключу на строку для пакетного создания","Enter one key per line for batch creation":"Введите по одному ключу на строку для пакетного создания","Enter one keyword per line":"Введите по одному ключевому слову на строку","Enter password":"Введите пароль","Enter password (8-20 characters)":"Введите пароль (8-20 символов)","Enter password (min 8 characters)":"Введите пароль (минимум 8 символов)","Enter quota in {{currency}}":"Введите квоту в {{currency}}","Enter quota in tokens":"Введите квоту в токенах","Enter secret key":"Введите секретный ключ","Enter system prompt (user prompt takes priority)":"Введите системный промпт (пользовательский промпт имеет приоритет)","Enter tag name (optional)":"Введите имя тега (необязательно)","Enter the 6-digit code from your authenticator app":"Введите 6-значный код из вашего приложения-аутентификатора","Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.":"Введите 6-значный одноразовый пароль на основе времени или 8-значный резервный код из вашего приложения-аутентификатора.","Enter the complete URL, supports":"Введите полный URL, поддерживает","Enter the Coze agent ID":"Введите ID агента Coze","Enter the full URL of your Gotify server":"Введите полный URL вашего сервера Gotify","Enter the knowledge base ID":"Введите ID базы знаний","Enter the path before /suno, usually just the domain":"Введите путь перед /suno, обычно это просто домен","Enter the quota amount in {{currency}}":"Введите сумму квоты в {{currency}}","Enter the quota amount in tokens":"Введите количество квоты в токенах","Enter the verification code":"Введите проверочный код","Enter threshold":"Введите порог","Enter token counts to preview the estimated cost (excluding group multipliers).":"Введите количество токенов для оценки стоимости (множители групп не учитываются).","Enter URL...":"Введите URL...","Enter username":"Введите имя пользователя","Enter verification code":"Введите проверочный код","Enter webhook secret":"Введите секрет webhook","Enter your authenticator code or a backup code":"Введите код аутентификатора или резервный код","Enter your email":"Введите ваш адрес электронной почты","Enter your redemption code":"Введите код активации","Enter your registered email and we will send you a link to reset your password.":"Введите ваш зарегистрированный адрес электронной почты, и мы вышлем вам ссылку для сброса пароля.","Enter your username":"Введите ваше имя пользователя","Enter your username or email":"Введите ваше имя пользователя или адрес электронной почты","Enterprise Account":"Корпоративная учетная запись","Enterprise-grade security with comprehensive permission management":"Безопасность корпоративного уровня с комплексным управлением разрешениями","Entrypoint (space separated)":"Точка входа (через пробелы)","Env (J
107SON object)":"Env (объект JSON)","Environment variables":"Переменные окружения","Environment variables (JSON)":"Переменные окружения (JSON)","Epay endpoint":"Конечная точка Epay","Epay Gateway":"Шлюз Epay","Epay merchant ID":"ID торговца EasyPay","Epay secret key":"Секретный ключ Epay","Equals":"Равно","Error":"Ошибка","Error Code (optional)":"Код ошибки (необязательно)","Error Message":"Сообщение об ошибке","Error Message (required)":"Сообщение об ошибке (обязательно)","Error Type (optional)":"Тип ошибки (необязательно)","Estimated cost":"Примерная стоимость","Estimated quota cost":"Ориентир стоимости квоты","Exact":"Точное","Exact Match":"Точное совпадение","Example":"Пример","Example (all channels):":"Пример (все каналы):","Example (specific channels):":"Пример (указанные каналы):","Example:":"Пример:","example.com&#10;blocked-site.com":"example.com&#10;blocked-site.com","example.com&#10;company.com":"example.com&#10;company.com","Excellent":"Отлично","Exchange rate is required":"Требуется курс обмена","Exchange rate must be greater than 0":"Курс обмена должен быть больше 0","Execute code in a sandbox during the response":"Выполнять код в песочнице во время ответа","Exhausted":"Исчерпано","Existing account will be reused":"Существующая учётная запись будет использована повторно","Existing Models ({{count}})":"Существующие модели ({{count}})","Exists":"Существует","Expand":"Развернуть","Expand All":"Развернуть все","Expected a JSON array of group identifiers":"Ожидается JSON-массив идентификаторов групп","Expected a JSON array.":"Ожидается JSON-массив.","Experiment with prompts and models in real time.":"Экспериментируйте с промптами и моделями в реальном времени.","Expiration Time":"Время истечения срока действия","expired":"истек","Expired":"Просрочено","Expired at":"Истекает","Expired time cannot be earlier than current time":"Время истечения срока действия не может быть раньше текущего времени","Expires":"Истекает","Expose ratio API":"Интерфейс экспонирования коэффициента","Exposes the pricing/models catalog in the top navigation.":"Отображает каталог цен/моделей в верхней навигации.","Expression":"Выражение","Expression based":"На основе выражения","Expression billing":"Тарификация по выражению","Expression editor":"Редактор выражения","Expression error":"Ошибка выражения","Expression pricing":"Тарификация выражением","Extend":"Продлить","Extend deployment":"Продлить развертывание","Extend failed":"Не удалось продлить","Extended successfully":"Продлено успешно","External Device":"Внешнее устройство","External link for users to purchase quota":"Внешняя ссылка для пользователей для покупки квоты","External operations":"Внешние операции","External operations mode":"Режим внешних операций","External Speed Test":"Внешний тест скорости","Extra":"Дополнительно","Extra Notes (Optional)":"Дополнительные примечания (необязательно)","extras":"доп. пункты","Fail Reason":"Причина сбоя","Fail Reason Details":"Детали причины сбоя","Failed":"Неудача","Failed to {{action}} user":"Не удалось выполнить {{action}} для пользователя","Failed to adjust quota":"Не удалось изменить квоту","Failed to apply overwrite.":"Не удалось применить перезапись.","Failed to bind email":"Не удалось привязать email","Failed to change password":"Не удалось изменить пароль","Failed to check for updates":"Не удалось проверить обновления","Failed to clean logs":"Не удалось очистить логи","Failed to complete order":"Не удалось завершить заказ","Failed to complete Passkey login":"Не удалось завершить вход с Passkey","Failed to confirm compliance":"Не удалось подтвердить соответствие","Failed to contact GitHub releases API":"Не удалось связаться с API GitHub Releases","Failed to copy":"Не удалось скопировать","Failed to copy channel":"Не удалось скопировать канал","Failed to copy keys":"Не удалось скопировать ключи","Failed to copy model names":"Не удалось скопировать названия моделей","Failed to copy to clipboard":"Не удалось скопировать в буфер обмена","Failed to create API key":"Не удалось создать API ключ","Failed to create channel":"Не удалось создать канал","Failed to create deployment":"Не удалось создать развертывание","Failed to create provider":"Не удалось создать поставщика","Failed to create redemption code":"Не удалось создать код активации","Failed to create user":"Не удалось создать пользователя","Failed to delete {{count}} model(s)":"Не удалось удалить {{count}} моделей","Failed to delete account":"Не удалось удалить аккаунт","Failed to delete API key":"Не удалось удалить API ключ","Failed to delete API keys":"Не удалось удалить API ключи","Failed to delete channel":"Не удалось удалить канал","Failed to delete disabled channels":"Не удалось удалить отключённые каналы","Failed to delete invalid redemption codes":"Не удалось удалить недействительные коды активации","Failed to delete model":"Не удалось удалить модель","Failed to delete provider":"Не удалось удалить поставщика","Failed to delete redemption code":"Не удалось удалить код активации","Failed to delete user":"Не удалось удалить пользователя","Failed to delete vendor":"Не удалось удалить поставщика","Failed to disable {{count}} model(s)":"Не удалось отключить {{count}} моделей","Failed to disable 2FA":"Не удалось отключить 2FA","Failed to disable channels":"Не удалось отключить каналы","Failed to disable model":"Не удалось отключить модель","Failed to disable tag channels":"Не удалось отключить каналы тегов","Failed to discover OIDC endpoints":"Не удалось обнаружить конечные точки OIDC","Failed to enable {{count}} model(s)":"Не удалось включить {{count}} моделей","Failed to enable 2FA":"Не удалось включить 2FA","Failed to enable channels":"Не удалось включить каналы","Failed to enable model":"Не удалось включить модель","Failed to enable tag channels":"Не удалось включить каналы тегов","Failed to fetch channel key":"Не удалось получить ключ канала","Failed to fetch checkin status":"Не удалось получить статус регистрации","Failed to fetch deployment details":"Не удалось получить сведения о развертывании","Failed to fetch models":"Не удалось получить модели","Failed to fetch OIDC configuration. Please check the URL and network status":"Не удалось получить конфигурацию OIDC. Проверьте URL и состояние сети","Failed to fetch upstream prices":"Не удалось получить цены провайдера","Failed to fetch upstream ratios":"Не удалось получить коэффициенты upstream","Failed to fetch usage":"Не удалось получить данные об использовании","Failed to fetch user information":"Не удалось получить данные пользователя","Failed to fix abilities":"Не удалось исправить способности","Failed to generate token":"Не удалось сгенерировать токен","Failed to initialize OAuth":"Не удалось инициализировать OAuth","Failed to initialize system":"Не удалось инициализировать систему","Failed to load":"Не удалось загрузить","Failed to load API keys":"Не удалось загрузить API ключи","Failed to load billing history":"Не удалось загрузить историю платежей","Failed to load home page content":"Не удалось загрузить содержимое главной страницы","Failed to load image":"Не удалось загрузить изображение","Failed to load key status":"Не удалось загрузить статус ключей","Failed to load logs":"Не удалось загрузить логи","Failed to load Passkey status":"Не удалось загрузить статус Passkey","Failed to load profile":"Не удалось загрузить профиль","Failed to load redemption codes":"Не удалось загрузить коды активации","Failed to load setup data":"Не удалось загрузить данные настройки","Failed to load setup status":"Не удалось загрузить статус настройки","Failed to load tag data":"Не удалось загрузить данные тегов","Failed to load users":"Не удалось загрузить пользователей","Failed to parse group items":"Не удалось разобрать элементы группы","Failed to parse JSON file: {{name}}":"Не удалось проанализировать файл JSON: {{name}}","Failed to query balance":"Не удалось запросить баланс","Failed to refresh cache stats":"Не удалось обновить статистику кэша","Failed to refresh credential":"Не удалось обновить учетные данные","Failed to regenerate backup codes":"Не удалось перегенерировать резервные коды","Failed to register Passkey":"Не удалось зарегистрировать Passkey","Failed to remove Passkey":"Не удалось удалить Passkey","Failed to reset 2FA":"Не удалось сбросить 2FA","Failed to reset model ratios":"Не удалось сбросить коэффициенты модели","Failed to reset Passkey":"Не удалось сбросить Passkey","Failed to save":"Не удалось сохранить","Failed to save announcements":"Не удалось сохранить объявления","Failed to save API info":"Не удалось сохранить информацию API","Failed to save FAQ":"Не удалось сохранить FAQ","Failed to save Uptime Kuma groups":"Не удалось сохранить группы Uptime Kuma","Failed to search API keys":"Не удалось найти API ключи","Failed to search redemption codes":"Не удалось найти коды активации","Failed to search users":"Не удалось найти пользователей","Failed to send verification code":"Не удалось отправить код подтверждения","Failed to set tag":"Ð
107Ðµ удалось установить тег","Failed to setup 2FA":"Не удалось настроить 2FA","Failed to start {{provider}} login":"Не удалось начать вход через {{provider}}","Failed to start Discord login":"Не удалось начать вход через Discord","Failed to start GitHub login":"Не удалось начать вход через GitHub","Failed to start LinuxDO login":"Не удалось начать вход через LinuxDO","Failed to start OIDC login":"Не удалось начать вход через OIDC","Failed to start Passkey login":"Не удалось начать вход с Passkey","Failed to start Passkey registration":"Не удалось начать регистрацию Passkey","Failed to start testing all channels":"Не удалось начать тестирование всех каналов","Failed to sync prices":"Не удалось синхронизировать цены","Failed to sync ratios":"Не удалось синхронизировать коэффициенты","Failed to test all channels":"Не удалось протестировать все каналы","Failed to test channel":"Не удалось протестировать канал","Failed to update all balances":"Не удалось обновить все балансы","Failed to update API key":"Не удалось обновить API ключ","Failed to update API key status":"Не удалось обновить статус API ключа","Failed to update balance":"Не удалось обновить баланс","Failed to update channel":"Не удалось обновить канал","Failed to update models":"Не удалось обновить модели","Failed to update profile":"Не удалось обновить профиль","Failed to update provider":"Не удалось обновить поставщика","Failed to update redemption code":"Не удалось обновить код активации","Failed to update redemption code status":"Не удалось обновить статус кода активации","Failed to update setting":"Не удалось обновить настройку","Failed to update settings":"Не удалось обновить настройки","Failed to update tag":"Не удалось обновить тег","Failed to update user":"Не удалось обновить пользователя","Failure keywords":"Ключевые слова сбоя","Fair":"Удовлетворительно","Fallback tier":"Резервный уровень","FAQ":"Часто задаваемые вопросы","FAQ added. Click \\"Save Settings\\" to apply.":"FAQ добавлен. Нажмите \\"Сохранить настройки\\" чтобы применить.","FAQ deleted. Click \\"Save Settings\\" to apply.":"FAQ удалён. Нажмите \\"Сохранить настройки\\" чтобы применить.","FAQ saved successfully":"FAQ сохранён успешно","FAQ updated. Click \\"Save Settings\\" to apply.":"FAQ обновлён. Нажмите \\"Сохранить настройки\\" чтобы применить.","FastGPT":"FastGPT","Feature in development":"Функция в разработке","Fee":"Сбор","Fee Amount":"Сумма сбора","Fetch available models for:":"Получить доступные модели для:","Fetch from Upstream":"Получить из Upstream","Fetch Models":"Получить модели","Fetched {{count}} model(s) from upstream":"Получено {{count}} моделей из upstream","Fetched {{count}} models":"Получено {{count}} моделей","Fetching prefill groups...":"Загрузка групп предварительного заполнения...","Fetching upstream prices...":"Получение цен провайдера...","Fetching upstream ratios...":"Загрузка коэффициентов upstream...","field":"поле","Field Mapping":"Сопоставление полей","Field passthrough controls":"Полевые сквозные элементы управления","Field Path":"Путь к полю","File":"Файл","File Search":"Поиск файлов","Files to Retain":"Файлов для хранения","Fill All Models":"Заполнить все модели","Fill Codex CLI / Claude CLI Templates":"Заполнить шаблоны Codex CLI / Claude CLI","Fill example (all channels)":"Подставить пример (все каналы)","Fill example (specific channels)":"Подставить пример (указанные каналы)","Fill in both Merchant ID and API Private Key before creating.":"Перед созданием заполните Merchant ID и приватный ключ API.","Fill in the credentials above to begin.":"Чтобы начать, заполните учетные данные выше.","Fill in the following info to create a new subscription plan":"Заполните следующую информацию для создания нового плана подписки","Fill Related Models":"Заполнить связанные модели","Fill Template":"Заполнить шаблон","Fill Templates":"Заполнить шаблоны","Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format":"Заполнять thoughtSignature только для каналов Gemini/Vertex, использующих формат OpenAI","Filled {{count}} model(s)":"Заполнено {{count}} моделей","Filled {{count}} related model(s)":"Заполнено {{count}} связанных моделей","Filter":"Фильтр","Filter by API key...":"Фильтр по API-ключу...","Filter by channel ID":"Фильтр по ID канала","Filter by group":"Фильтр по группе","Filter by Midjourney task ID":"Фильтр по ID задачи Midjourney","Filter by model name...":"Фильтр по имени модели...","Filter by model...":"Фильтровать по модели...","Filter by name or ID...":"Фильтр по имени или ID...","Filter by name, ID, or key...":"Фильтровать по имени, ID или ключу...","Filter by name...":"Фильтр по имени...","Filter by price field":"Фильтр по полю цены","Filter by ratio type":"Фильтровать по типу коэффициента","Filter by request ID":"Фильтр по ID запроса","Filter by task ID":"Фильтр по ID задачи","Filter by token name":"Фильтр по имени токена","Filter by username":"Фильтр по имени пользователя","Filter by username, name or email...":"Фильтр по имени пользователя, имени или email...","Filter Dashboard Models":"Фильтровать модели панели управления","Filter models by provider, group, type, endpoint, and tags.":"Фильтруйте модели по поставщику, группе, типу, endpoint и тегам.","Filter models by type, endpoint, vendor, group and tags":"Фильтровать модели по типу, точке доступа, поставщику, группе и тегам","Filter models...":"Фильтровать модели...","Filter the model analytics view by time range and user.":"Фильтруйте представление аналитики моделей по периоду и пользователю.","Filter...":"Фильтр...","Filters":"Фильтры","Filters active":"Фильтры активны","Final Consumed":"Итоговое потребление","Final cost = base × multiplier when conditions match":"Итоговая стоимость = база × множитель, если условия совпадают","Final price multiplier (0.95 = 5% discount":"Конечный множитель цены (0.95 = скидка 5%","Finance":"Финансы","Finish Time":"Время завершения","First API request":"Первый API-запрос","First/Last Frame to Video":"Первый/последний кадр в видео","Fix Abilities":"Исправить способности","Fixed abilities: {{success}} succeeded, {{fails}} failed":"Исправление способностей: {{success}} успешно, {{fails}} неудачно","Fixed price":"Фиксированная цена","Fixed price (USD)":"Фиксированная цена (USD)","Fixed request price":"Фиксированная цена запроса","Floating":"Плавающая","FluentRead extension not detected. Please ensure it is installed and active.":"Расширение FluentRead не обнаружено. Убедитесь, что оно установлено и активно.","Flush interval (minutes)":"Интервал записи (минуты)","Follow the guided steps to prepare your workspace before the first login.":"Следуйте пошаговым инструкциям, чтобы подготовить рабочее пространство перед первым входом.","Font":"Шрифт","Footer":"Подвал","Footer text displayed at the bottom of pages":"Текст нижнего колонтитуÐ
107»Ð°, отображаемый внизу страниц","footer.columns.about.links.aboutProject":"О проекте","footer.columns.about.links.contact":"Связаться с нами","footer.columns.about.links.features":"Возможности","footer.columns.about.title":"О нас","footer.columns.docs.links.apiDocs":"Документация API","footer.columns.docs.links.installation":"Руководство по установке","footer.columns.docs.links.quickStart":"Быстрый старт","footer.columns.docs.title":"Документация","footer.columns.related.links.midjourney":"Midjourney-Proxy","footer.columns.related.links.newApiKeyTool":"new-api-key-tool","footer.columns.related.links.oneApi":"Один API","footer.columns.related.title":"Связанные проекты","footer.defaultCopyright":"Все права защищены.","footer.newapi.projectAttributionSuffix":"Все права защищены. Разработано участниками проекта.","For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment":"Для каналов, добавленных после 10 мая 2025 г., не нужно удалять \\".\\" из имён моделей при развёртывании","For private deployments, format: https://fastgpt.run/api/openapi":"Для частных развертываний, формат: https://fastgpt.run/api/openapi","Force a syntactically valid JSON response":"Принудительно возвращать синтаксически корректный JSON","Force AUTH LOGIN":"Принудительный AUTH LOGIN","Force Format":"Принудительный формат","Force format response to OpenAI standard (OpenAI channel only)":"Принудительно форматировать ответ в соответствии со стандартом OpenAI (только для канала OpenAI)","Force JSON object or schema-conforming output":"Принудительно вернуть JSON или соответствующий схеме вывод","Force SMTP authentication using AUTH LOGIN method":"Принудительная аутентификация SMTP с использованием метода AUTH LOGIN","Force-disabled two-factor authentication for the user":"Двухфакторная аутентификация пользователя принудительно отключена","Forest Whisper":"Лесной шёпот","Forgot password":"Забыли пароль","Forgot password?":"Забыли пароль?","Form reset to saved values":"Форма сброшена к сохранённым значениям","Format":"Формат","Format JSON":"Форматировать JSON","Format:":"Формат:","Format: Access Key ID|Secret Access Key":"Формат: Идентификатор ключа доступа|Секретный ключ доступа","Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)":"Формат: AccessKey|SecretKey (или просто ApiKey, если upstream — New API)","Format: Ak|Sk|Region":"Формат: Ak|Sk|Регион","Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041":"Формат: APIKey-AppId, напр., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041","Format: APIKey|SecretKey":"Формат: APIKey|SecretKey","Format: APPID|APISecret|APIKey":"Формат: APPID|APISecret|APIKey","Format: AppId|SecretId|SecretKey":"Формат: AppId|SecretId|SecretKey","Forward requests directly to upstream providers without any post-processing.":"Перенаправлять запросы напрямую upstream-провайдерам без какой-либо постобработки.","Frames per second":"Кадров в секунду","Free: {{free}} / Total: {{total}}":"Свободно: {{free}} / Всего: {{total}}","Friendly name to identify this channel":"Дружественное имя для идентификации этого канала","From Address":"Отправитель","From IO.NET deployment":"Из развертывания IO.NET","From model redirect, not yet added to models list":"Из перенаправления модели, еще не добавлено в список моделей","Frontend Theme":"Тема интерфейса","Full API Key":"Полный ключ API","Full Base URL (supports":"Полный базовый URL (поддерживает","Full Code":"Полный код","Full input length":"Полная длина входа","Full layout":"Полная разметка","Full width":"Полная ширина","Function calling":"Вызов функций","Functions":"Функции","GC Count":"Кол-во GC","GC executed":"GC выполнен","GC execution failed":"Ошибка выполнения GC","Gemini":"Gemini","Gemini Image 4K":"Gemini Image 4K","Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.":"Gemini продолжит автоматически определять режим мышления, даже если адаптер отключен. Включайте это только тогда, когда вам нужен более тонкий контроль над ценообразованием и бюджетированием.","General":"Общие","General Settings":"Общие настройки","Generate and manage your API access token":"Генерировать и управлять вашим токеном доступа API","Generate Lyrics":"Создать текст песни","Generate Music":"Создать музыку","Generate new backup codes for account recovery":"Сгенерировать новые резервные коды для восстановления аккаунта","Generate New Codes":"Сгенерировать новые коды","Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.":"Создавайте токены на странице «Токены». Их можно ограничить моделями, группами, IP и лимитами частоты.","Generated image":"Сгенерированное изображение","Generating new codes will invalidate all existing backup codes.":"Генерация новых кодов аннулирует все существующие резервные коды.","Generating...":"Создание...","Generation quality preset":"Пресет качества генерации","Generic cache":"Общий кэш","Get notified when balance falls below this value":"Получать уведомления, когда баланс опускается ниже этого значения","Get one here":"Получить здесь","Get started":"Начало работы","Get Started":"Начать","GitHub":"GitHub","Give the group a recognizable name and optional description.":"Дайте группе узнаваемое имя и необязательное описание.","Give this group a recognizable name.":"Дайте этой группе узнаваемое имя.","Global configuration and administrative tools.":"ГлобаÐ
107»ÑŒÐ½Ð°Ñ конфигурация и административные инструменты.","Global Coverage":"Глобальное покрытие","Global Model Configuration":"Глобальная конфигурация модели","Global throughput":"Общая пропускная способность","Go Back":"Назад","Go back and edit":"Вернуться и изменить","Go to Dashboard":"Перейти в панель управления","Go to first page":"Перейти на первую страницу","Go to home":"На главную","Go to io.net API Keys":"Перейти к ключам API io.net","Go to last page":"Перейти на последнюю страницу","Go to next page":"Перейти на следующую страницу","Go to page {{page}}":"Перейти на страницу {{page}}","Go to previous page":"Перейти на предыдущую страницу","Go to settings":"Перейти к настройкам","Go to Settings":"Перейти к настройкам","Good":"Хорошо","Gotify Application Token":"Токен приложения Gotify","Gotify Documentation":"Документация Gotify","Gotify Server URL":"URL-адрес сервера Gotify","gpt-3.5-turbo":"gpt-3.5-turbo","gpt-3.5-turbo-0125":"gpt-3.5-turbo-0125","gpt-4":"gpt-4","gpt-4, claude-3-opus, etc.":"gpt-4, claude-3-opus и т. д.","GPU count":"Количество GPU","Greater than":"Больше","Greater Than":"Больше","Greater than or equal":"Больше или равно","Greater Than or Equal":"Больше или равно","Grok":"Grok","Grok Settings":"Настройки Grok","Group":"Группа","Group & Quota":"Группа и квота","Group added. Click \\"Save Settings\\" to apply.":"Группа добавлена. Нажмите \\"Сохранить настройки\\", чтобы применить.","Group channels by tag for batch operations":"Группировать каналы по тегу для пакетных операций","Group config overrides global limits, shares the same period":"Конфигурация группы переопределяет глобальные лимиты, использует тот же период","Group deleted. Click \\"Save Settings\\" to apply.":"Группа удалена. Нажмите \\"Сохранить настройки\\", чтобы применить.","Group description":"Описание группы","Group details":"Детали группы","Group identifier":"Идентификатор группы","Group is required":"Группа обязательна","Group name":"Имя группы","Group Name":"Имя группы","Group name cannot be changed when editing.":"Имя группы нельзя изменить при редактировании.","Group prices cannot be expanded because this expression is not a standard tiered pricing expression.":"Цены по группам нельзя развернуть, потому что это не стандартное выражение тарифов по уровням.","Group Pricing":"Тарификация групп","Group pricing usage guide":"Руководство по групповой тарификации","group ratio":"коэффициент группы","Group Ratio":"Групповой коэффициент","Group ratios":"Соотношения группы","Group updated. Click \\"Save Settings\\" to apply.":"Группа обновлена. Нажмите \\"Сохранить настройки\\", чтобы применить.","Group-based rate limits":"Лимиты скорости на основе групп","Group:":"Группа:","Group: {{ratio}}x":"Группа: {{ratio}}x","Grouped monitor status from Uptime Kuma":"Состояние групп мониторинга из Uptime Kuma","Groups":"Группы","Groups *":"Группы *","Groups that users can select when creating API keys.":"Группы, которые пользователи могут выбрать при создании ключей API.","Growth":"Рост","Guardrails":"Ограничители","Guest":"Гость","h":"h","Haiku Model":"Модель Haiku","Hang tight while we finish connecting your account.":"Подождите, пока мы завершим подключение вашего аккаунта.","Hang tight while we securely link this account to your profile.":"Подождите, пока мы безопасно привяжем этот аккаунт к вашему профилю.","Hardware":"Аппаратное обеспечение","Hardware type":"Тип оборудования","Has been disabled":"Успешно отключено","Has been enabled":"Успешно включено","Has been invalidated":"Аннулировано","Have a Code?":"Есть код?","Header":"Заголовок","header instead.":".","Header Name":"Имя заголовка","Header navigation":"Навигация по заголовку","Header Override":"Переопределение заголовка","Header Passthrough (X-Request-Id)":"Проброс заголовка (X-Request-Id)","Header Value (supports string or JSON mapping)":"Значение заголовка (строка или JSON-маппинг)","header. Anthropic-formatted endpoints accept the":". Эндпоинты формата Anthropic вместо этого принимают","Health":"Здоровье","Healthy":"В норме","Hidden — verify to reveal":"Скрыто — подтвердите, чтобы показать","Hide":"Скрыть","Hide API key":"Скрыть API ключ","Hide setup guide":"Скрыть руководство по настройке","High Performance":"Высокая производительность","High-risk operation confirmation":"Подтверждение высокорисковой операции","High-risk status code retry confirmation text":"Я ПОДТВЕРЖДАЮ","High-risk status code retry input mismatch":"Введённый текст не совпадает, попробуйте ещё раз.","High-risk status code retry input placeholder":"Пожалуйста, введите текст подтверждения выше","High-risk status code retry risk check 1":"Я понимаю, что повторные попытки при этих кодах состояния могут привести к обычным начислениям от провайдера, и эти расходы не могут быть возмещены.","High-risk status code retry risk check 2":"Я понимаю, что эти коды состояния обычно означают, что запрос уже был успешно обработан, и повторная попытка может привести к двойной оплате.","High-risk status code retry risk check 3":"Я признаю, что эти конфигурации могут привести к значительным финансовым потерям, и принимаю все связанные риски.","High-risk status code retry risk check 4":"Я тщательно проверил правила перенаправления кодов состояния выше и подтверждаю их правильность.","High-risk status code retry risk disclaimer":"Следующие правила перенаправления кодов состояния содержат высокорисковые конфигурации. Повторные попытки при этих кодах могут привести к нормальным начислениям от провайдера, которые невозможно вернуть.","Higher priority channels are selected first":"Каналы с более высоким приоритетом выбираются первыми","Historical Usage":"История использования","History of Midjourney-style image tasks.":"История задач генерации изображений в стиле Midjourney.","Hit criteria: If cached tokens exist in usage, it counts as a hit.":"Критерий попадания: если в usage есть кэшированные токены, это считается попаданием.","Hit Rate":"Частота попаданий","Hit tier":"Совпавший уровень","Home":"Главная","Home Page Content":"Содержимое главной страницы","Hostname or IP of your SMTP provider":"Имя хоста или IP-адрес вашего SMTP-провайдера","Hour":"Час","Hour of day":"Час суток","Hourly token usage by model across the last 24 hours":"Почасовое использование токенов по моделям за последние 24 часа","Hourly token usage by model over the past 24 hours":"Почасовое использование токенов по моделям за последние 24 часа","hours":"часов","How client credentials are sent to the token endpoint":"Как учетные данные клиента отправляются на конечную точку токена","How frequently the system tests all channels":"Как часто система тестирует все каналы","How It Works":"Как это работает","How model mapping works":"Как работает сопоставление моделей","How much to charge for each US dollar of balance (Epay)":"Сколько взимать за каждый доллар США баланса (Epay)","How this model name should match requests":"Как это имя модели должно соответствовать запросам","How to deliver the resulting image":"Способ доставки изображения","How to get an io.net API Key":"Как получить ключ API io.net","How to reset my quota?":"Как сбросить мою квоту?","How to select keys: random or sequential polling":"Как выбирать ключи: случайно или последовательный опрос","How 
107will you use the platform?":"Как вы будете использовать платформу?","https://api.day.app/yourkey/{{title}}/{{content}}":"https://api.day.app/yourkey/{{title}}/{{content}}","https://api.example.com":"https://api.example.com","https://ark.ap-southeast.bytepluses.com":"https://ark.ap-southeast.bytepluses.com","https://ark.cn-beijing.volces.com":"https://ark.cn-beijing.volces.com","https://cloud.siliconflow.cn/i/hij0YNTZ":"https://cloud.siliconflow.cn/i/hij0YNTZ","https://docs.example.com":"https://docs.example.com","https://example.com":"https://example.com","https://example.com/logo.png":"https://example.com/logo.png","https://example.com/qr-code.png":"https://example.com/qr-code.png","https://example.com/topup":"https://example.com/topup","https://example.com/webhook":"https://example.com/webhook","https://gateway.example.com":"https://gateway.example.com","https://github.com/QuantumNous/new-api":"https://github.com/QuantumNous/new-api","https://gotify.example.com":"https://gotify.example.com","https://pay.example.com":"https://pay.example.com","https://provider.com/.well-known/openid-configuration":"https://provider.com/.well-known/openid-configuration","https://status.example.com":"https://status.example.com","https://wechat-server.example.com":"https://wechat-server.example.com","https://worker.example.workers.dev":"https://worker.example.workers.dev","https://your-server.example.com":"https://your-server.example.com","Human-readable name shown to users during Passkey prompts.":"Понятное для человека имя, отображаемое пользователям во время запросов Passkey.","I confirm enabling high-risk retry":"Я подтверждаю включение высокорискового повтора","I have read and agree to the":"Я прочитал и согласен с","I have read and understood the above compliance reminder":"Я прочитал и понял приведенное выше напоминание о соответствии","I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.":"Я прочитал и понял приведенное выше напоминание о соответствии, признаю связанные правовые риски и подтверждаю, что несу юридическую ответственность за развертывание, эксплуатацию и взимание платы.","I understand that disabling 2FA will remove all protection and backup codes":"Я понимаю, что отключение 2FA удалит всю защиту и резервные коды","Icon":"Значок","Icon file must be 100 KB or smaller":"Файл иконки должен быть не более 100 КБ","Icon identifier (e.g. github, gitlab)":"Идентификатор иконки (например, github, gitlab)","ID":"ID","If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.":"Если ошибка вышестоящего уровня содержит любое из этих ключевых слов (без учета регистра), канал будет автоматически отключен.","If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.":"При успешной авторизации сгенерированный JSON будет вставлен в поле ключа. Сохраните канал, чтобы применить изменения.","If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know what you are doing":"При подключении к upstream One API или проектам-ретрансляторам New API используйте тип OpenAI, если только вы точно знаете, что делаете","If default auto group is enabled, newly created tokens start with auto instead of an empty group.":"Если группа auto включена по умолчанию, новые токены создаются с auto вместо пустой группы.","If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel."
107:"Если привязанный канал не работает и повторная попытка удалась через другой канал, привязка обновляется на успешный канал.","If this keeps happening, please report it on GitHub Issues.":"Если проблема повторяется, сообщите о ней в GitHub Issues.","If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.":"Если вы предоставляете услуги генеративного ИИ населению материкового Китая, вы будете выполнять юридические обязанности, включая регистрацию, оценку безопасности, безопасность контента, обработку жалоб, маркировку сгенерированного контента, хранение журналов и защиту персональных данных.","Ignored upstream models":"Игнорируемые upstream-модели","Image":"Изображение","Image Generation":"Генерация изображений","Image In":"Вход изображения","Image input":"Ввод изображения","Image input price":"Цена входного изображения","Image Out":"Выход изображения","Image output price":"Цена выходного изображения","Image Preview":"Предпросмотр изображения","Image ratio":"Коэффициент изображения","Image to Video":"Изображение в видео","Image Tokens":"Токены изображений","Import to CC Switch":"Импорт в CC Switch","In Progress":"Выполняется","In:":"Вх:","incident":"инцидент","incidents":"инцидентов","Incidents":"Инциденты","Include Group":"Включить группу","Include Model":"Включить модель","Include Rule Name":"Включить имя правила","Includes request rules":"Включает правила запросов","Including failed requests, 0 = unlimited":"Включая неудачные запросы, 0 = без ограничений","Increased user quota by {{quota}}":"Квота пользователя увеличена на {{quota}}","Index":"Индекс","Initial quota given to new users":"Начальная квота, предоставляемая новым пользователям","Initialization failed, please try again.":"Инициализация не удалась, попробуйте ещё раз.","Initialize":"Инициализировать","Initialize system":"Инициализация системы","Initializing…":"Инициализация…","Inpaint":"Инпейнтинг","Input":"Ввод","Input mode":"Режим ввода","Input price":"Цена входа","Input price is required before saving dependent prices.":"Перед сохранением зависимых цен укажите входную цену.","Input tokens":"Входные токены","Input Tokens":"Входные токены","Inset":"Встроенная","Inspect requests, errors, and billing details":"Проверяйте запросы, ошибки и детали оплаты","Inspect user prompts":"Просмотр запросов пользователя","Instance":"Экземпляр","Insufficient balance":"Недостаточно средств","Integrations":"Интеграции","Inter-group overrides":"Переопределения между группами","Inter-group ratio overrides":"Переопределения соотношений между группами","Interface Language":"Язык интерфейса","Internal Notes":"Внутренние заметки","Internal notes (not shown to users)":"Внутренние заметки (не показываются пользователям)","Internal Server Error!":"Внутренняя ошибка сервера!","Invalid chat link. Please contact the administrator.":"Неверная ссылка на чат. Пожалуйста, обратитесь к администратору.","Invalid chat link. Please contact your administrator.":"Недействительная ссылка чата. Обратитесь к администратору.","Invalid code":"Неверный код","Invalid JSON":"Некорректный JSON","Invalid JSON format":"Неверный формат JSON","Invalid JSON format or values out of allowed range":"Неверный формат JSON или значения вне допустимого диапазона","Invalid JSON in parameter override template":"Ð
107ÐµÐ´Ð¾Ð¿ÑƒÑÑ‚имый JSON в шаблоне переопределения параметров","Invalid JSON string.":"Недопустимая строка JSON.","Invalid model mapping format":"Неверный формат сопоставления моделей","Invalid Passkey registration response":"Неверный ответ на регистрацию Passkey","Invalid Passkey response":"Недопустимый ответ Passkey","Invalid payment redirect URL":"Недопустимый URL перенаправления для оплаты","Invalid reset link, please request a new password reset":"Недействительная ссылка для сброса пароля, пожалуйста, запросите сброс пароля заново","Invalid reset link, please request a new password reset.":"Недействительная ссылка для сброса, пожалуйста, запросите новый сброс пароля.","Invalid rules JSON format":"Неверный формат JSON правил","Invalid status code mapping entries: {{entries}}":"Недопустимые записи маппинга кодов состояния: {{entries}}","Invalidate":"Аннулировать","Invalidated":"Аннулирована","Invert match":"Инвертировать совпадение","Invitation Code":"Код приглашения","Invitation Quota":"Квота приглашений","Invite Info":"Информация о приглашении","Invited":"Приглашен","Invited by user ID":"Приглашен пользователем с ID","Invited Users":"Приглашенные пользователи","Invitee Reward":"Награда приглашенному","Inviter":"Пригласивший","Inviter Reward":"Награда приглашающему","Invites":"Приглашения","Invoke developer-defined functions with structured arguments":"Вызывать заданные разработчиком функции со структурированными аргументами","io.net API Key":"Ключ API io.net","io.net Deployments":"Развертывания io.net","IP":"IP","IP Address":"IP-адрес","IP Filter Mode":"Режим фильтрации IP","IP Restriction":"Ограничение IP","IP Whitelist (supports CIDR)":"Белый список IP (поддерживает CIDR)","is less than the configured maximum cache size":"меньше настроенного максимального размера кэша","is the default price; ":"— цена по умолчанию; ","It seems like the page you\'re looking for":"Похоже, страница, которую вы ищете","Items":"Элементы","Japanese":"Японский","Jimeng":"Jimeng","Jina":"Jina","JSON":"JSON","JSON array of group identifiers. When enabled below, new tokens rotate through this list.":"Массив JSON идентификаторов групп. Если включено ниже, новые токены будут циклически перебираться по этому списку.","JSON Editor":"Редактирование JSON","JSON format error":"Ошибка формата JSON","JSON format supports service account JSON files":"Формат JSON поддерживает JSON-файлы сервисного аккаунта","JSON is invali
107d at line {{line}}, column {{column}}.":"JSON недействителен в строке {{line}}, столбце {{column}}.","JSON is invalid at position {{position}}.":"JSON недействителен в позиции {{position}}.","JSON is invalid. Please check the syntax.":"JSON недействителен. Проверьте синтаксис.","JSON map of group → description exposed when users create API keys.":"JSON-карта группы → описание, отображаемое при создании пользователями ключей API.","JSON map of group → ratio applied when the user selects the group explicitly.":"JSON-карта группы → соотношение, применяемое, когда пользователь явно выбирает группу.","JSON map of model → multiplier applied to quota billing.":"JSON-карта модели → множитель, применяемый к тарификации по квоте.","JSON map of model → USD cost per request. Takes precedence over ratio based billing.":"JSON-карта модели → стоимость в долларах США за запрос. Имеет приоритет над тарификацией на основе соотношения.","JSON mode":"Режим JSON","JSON Mode":"Режим JSON","JSON must be an object":"JSON должен быть объектом","JSON object:":"Объект JSON:","JSON structure is invalid":"Структура JSON недействительна","JSON Text":"JSON текст","JSON-based access control rules. Leave empty to allow all users.":"Правила контроля доступа на основе JSON. Оставьте пустым, чтобы разрешить всем пользователям.","Just now":"Только что","JustSong":"JustSong","K":"K","Keep affinity when channel is disabled":"Сохранять привязку при отключении канала","Keep enabled if you need to proxy requests for different upstream accounts.":"Оставьте включённым, если нужно проксировать запросы для разных upstream-аккаунтов.","Keep enough balance before production traffic":"Поддерживайте достаточный баланс перед рабочим трафиком","Keep original value":"Сохранить исходное значение","Keep original value (skip if target exists)":"Сохранить исходное значение (пропустить если цель существует)","Keep the platform ready":"Поддерживайте платформу в готовности","Keep this above 1 minute to avoid heavy database load":"Держите это значение выше 1 минуты, чтобы избежать высокой нагрузки на базу данных","Keep-alive Ping":"Пинг Keep-alive","Key":"Ключ","Key Fingerprint":"Отпечаток ключа","Key Sources":"Источники ключей","Key Summary":"Сводка ключа","Key Update Mode":"Режим обновления ключа","Keys, OAuth credentials, and multi-key update behavior.":"Ключи, учетные данные OAuth и поведение обновления нескольких ключей.","Kling":"Kling","Knowledge Base ID *":"ID базы знаний *","Knowledge cutoff":"Дата актуальности данных","Lake View":"Вид на озеро","Landing page with system overview.":"Главная страница с обзором системы.","Language preference saved":"Языковая настройка сохранена","Language Preferences":"Языковые настройки","Language preferences sync across your signed-in devices and affect API error messages.":"Языковые настройки синхронизируются на всех ваших устройствах после входа и влияют на язык сообщений об ошибках API.","Last 24h usage":"Расход за 24ч","Last 30 days uptime":"Доступность за 30 дней","Last check time":"Время последней проверки","Last detected addable models":"Последние обнаруженные модели для добавления","Last Login":"Последний вход","Last Seen":"Последний раз","Last Tested":"Последняя проверка","Last updated:":"Последнее обновление:","Last Used":"Последнее использование","Last used:":"Последнее использование:","Latency":"Задержка","Latency check":"Проверка задержки","Latency short":"Зад.","Latency trend (last 24h)":"Тренд задержки (за 24 часа)","Latest platform updates and notices":"Последние обновления и уведомления платформы","Lavender Dream":"Лавандовая мечта","Layout":"Макет","lead":"лидер","Leaderboards":"Рейтинги","Learn more":"Узнать больше","Learn more:":"Узнать больше:","Leave":"Выйти","Leave blank to keep the existing credential":"Оставьте пустым, чтобы сохранить существующие учетные данные","Leave blank to keep the existing key":"Оставьте пустым, чтобы сохранить существующий ключ","Leave blank unless rotating the secret":"Оставьте пустым, если не меняете секрет","Leave empty for never expires":"Оставьте пустым для бессрочного действия","Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Оставьте пустым, чтобы отключить требование соглашения. Поддерживает Markdown, HTML или полный URL для перенаправления пользователей.","Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Оставьте пустым, чтобы отключить требование политики конфиденциальности. Поддерживает Markdown, HTML или полный URL для перенаправления пользователей.","Leave empty to disband the tag":"Оставьте пустым, чтобы удалить тег","Leave empty to keep existing key":"Оставьте пустым, чтобы сохранить существующий ключ","Leave empty to keep unchanged":"Оставьте пустым, чтобы сохранить без изменений","Leave empty to use account email":"Оставьте пустым, чтобы использовать электронную почту учетной записи","Leave empty to use default":"Оставьте пустым для использования по умолчанию","Leave empty to use system temp directory":"Оставьте пустым для системного временного каталога","Leave empty to use username":"Оставьте пустым, чтобы использовать имя пользователя","Left to Right":"Слева направо","Legacy Format (JSON Object)":"Старый формат (JSON-объект)","Legacy format must be a JSON object":"Старый формат должен быть JSON-объектом","Legacy Format Template":"Шаблон старого формата","Legal":"Юриспруденция","Less":"Меньше","Less than":"Меньше","Less Than":"Меньше","Less than 1 day left":"Менее 1 дня","Less than or equal":"Меньше или равно","Less Than or Equal":"Меньше или равно","License":"Лицензия","Light":"Светлая","Lightning Fast":"Молниеносно быстро","Limit period":"Период ограничения","Limit Reached":"Достигнут лимит","Limit which models can be used with this key":"Ограничить модели, которые могут быть использованы с этим ключом","Limited":"Ограничено","LingYiWanWu":"LingYiWanWu","Link to your documentation site":"Ссылка на ваш сайт док
107ументации","LinuxDO":"LinuxDO","LinuxDO Client ID":"ID клиента LinuxDO","LinuxDO Client Secret":"Секрет клиента LinuxDO","List of models supported by this channel. Use comma to separate multiple models.":"Список моделей, поддерживаемых этим каналом. Используйте запятую для разделения нескольких моделей.","List of origins (one per line) allowed for Passkey registration and authentication.":"Список источников (один на строку), разрешенных для регистрации и аутентификации Passkey.","List view":"Вид списка","LLM Leaderboard":"Рейтинг LLM","LLM prompt helper":"Помощник с промптом для LLM","Load Balancing":"Балансировка нагрузки","Load template...":"Загрузить шаблон...","Loader":"Загрузчик","Loading":"Загрузка","Loading channel details":"Загрузка сведений о канале","Loading configuration":"Загрузка конфигурации","Loading content settings...":"Загрузка настроек контента...","Loading current models...":"Загрузка текущих моделей...","Loading failed":"Ошибка загрузки","Loading maintenance settings...":"Загрузка настроек обслуживания...","Loading settings...":"Загрузка настроек...","Loading setup status…":"Загрузка статуса установки...","Loading...":"Загрузка...","Local":"Локальный","Local Billing":"Локальная тарификация","Local models":"Локальные модели","Locations":"Местоположения","Locked":"Заблокировано","log":"записи","Log Details":"Детали журнала","Log Directory":"Каталог журналов","Log File Count":"Кол-во файлов журналов","Log files older than {{value}} days will be deleted.":"Файлы журналов старше {{value}} дней будут удалены.","Log IP address for usage and error logs":"Записывать IP-адрес для журналов использования и ошибок","Log Maintenance":"Журнал обслуживания","Log Type":"Тип журнала","Logged in successfully via {{method}}":"Успешный вход через {{method}}","Logic":"Логика","Login":"Вход","Login failed":"Ошибка входа","Login Info":"Информация о входе","Login Method":"Способ входа","Logo":"Логотип","Logo URL":"URL логотипа","Logs":"Журналы","Low balance":"Низкий баланс","Lowest median first-token latency":"Минимальная медианная задержка первого токена","m":"m","Maintenance":"Обслуживание","Make it easier for teammates to pick the right group.":"Упростите выбор правильной группы для товарищей по команде.","Manage":"Управление","Manage account bindings for this user":"Управление привязками аккаунта пользователя","Manage Bindings":"Управление привязками","Manage catalog visibility and pricing.":"Управление видимостью каталога и ценообразованием.","Manage custom OAuth providers for user authentication":"Управление пользовательскими поставщиками OAuth для аутентификации пользователей","Manage Keys":"Управление ключами","Manage local models for:":"Управление локальными моделями для:","Manage multi-key status and configuration for this channel":"Управление статусом и конфигурацией нескольких ключей для этого канала","Manage Ollama Models":"Управление моделями Ollama","Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.":"Управление файлами журналов сервера. Файлы журналов накапливаются со временем; рекомендуется регулярная очистка.","Manage subscription plans and pricing.":"Управление планами подписок и ценообразованием.","Manage Subscriptions":"Управление подписками","Manage Vendors":"Управление поставщиками","Manage your security settings and account access":"Управление настройками безопасности и доступом к аккаунту","Manual Disabled":"Ручное отключение","Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).":"Сопоставление полей из ответа информации о пользователе с локальными атрибутами пользователя. Поддерживает вложенные пути (например, ocs.data.id).","Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.":"Сопоставьте идентификаторы моделей с версиями Gemini API. Запись `default` применяется, если не найдено конкретного совпадения.","Map request model names to actual provider model names (JSON format)":"Сопоставление имён моделей запроса реальным именам моделей провайдера (формат JSON)","Map response status codes (JSON format)":"Сопоставить коды статусов ответа (JSON-формат)","Map upstream status codes to different c
107odes":"Сопоставить коды статуса вышестоящего сервера с различными кодами","Market Share":"Доля рынка","Marketing":"Маркетинг","Match All (AND)":"Все совпадения (AND)","Match Any (OR)":"Любое совпадение (OR)","Match Mode":"Режим сопоставления","Match model name exactly":"Точное совпадение имени модели","Match models containing this name":"Совпадение моделей, содержащих это имя","Match models ending with this name":"Совпадение моделей, заканчивающихся на это имя","Match models starting with this name":"Совпадение моделей, начинающихся с этого имени","Match Text":"Текст совпадения","Match Type":"Тип соответствия","Match Value":"Значение сопоставления","Match Value (optional)":"Значение сопоставления (необязательно)","Matched":"Совпадение","Matched Tier":"Подходящий уровень","Matching Rules":"Правила сопоставления","Max Disk Cache Size (MB)":"Макс. размер дискового кэша (МБ)","Max Entries":"Макс. записей","Max output":"Макс. вывод","Max Requests (incl. failures)":"Макс. запросов (вкл. сбои)","Max Requests (including failures)":"Макс. запросов (включая сбои)","Max requests per period":"Макс. запросов за период","Max Success":"Макс. успешных","Max successful requests":"Макс. успешных запросов","Max Successful Requests":"Макс. успешных запросов","Maximum 1000 characters. Supports Markdown and HTML.":"Максимум 1000 символов. Поддерживает Markdown и HTML.","Maximum 200 characters":"Максимум 200 символов","Maximum 500 characters. Supports Markdown and HTML.":"Максимум 500 символов. Поддерживает Markdown и HTML.","Maximum check-in quota":"Максимальная квота регистрации","Maximum input window":"Максимальное окно ввода","Maximum number of tokens in the response":"Максимальное число токенов в ответе","Maximum quota amount awarded for check-in":"Максимальная сумма квоты, присуждаемая за регистрацию","Maximum tokens including hidden reasoning tokens":"Максимум токенов с учётом скрытых reasoning-токенов","Maximum tokens per response":"Максимум токенов на ответ","maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647":"maxRequests ≥ 0, maxSuccess ≥ 1, оба ≤ 2,147,483,647","May be used for training by upstream provider":"Может использоваться поставщиком для обучения","Media pricing":"Цены для медиа","Median time-to-first-token (TTFT) sampled hourly per group":"Медианная задержка первого токена (TTFT), измеряемая ежечасно по группам","Medical Q&A, mental health support":"Медицинские Q&A, поддержка ментального здоровья","Memory Hits":"Попаданий памяти","Memory Threshold (%)":"Порог памяти (%)","Merchant ID":"ID мерчанта","Merchant ID is required":"Требуется ID мерчанта","Message Priority":"Приоритет сообщения","Metadata":"Метаданные","Midjourney":"Midjourney","MidjourneyPlus":"MidjourneyPlus","min downtime":"мин простоя","Min Top-up":"Мин. пополнение","Min Top-up:":"Мин. пополнение:","MiniMax":"MiniMax","Minimum check-in quota":"Минимальная квота регистрации","Minimum LinuxDO trust level required":"Требуемый минимальный уровень доверия LinuxDO","Minimum quota amount awarded for check-in":"Минимальная сумма квоты, присуждаемая за регистрацию","Minimum recharge amount in USD":"Минимальная сумма пополнения в USD","Minimum recharge amount to qualify for this discount.":"Минимальная сумма пополнения для получения этой скидки.","Minimum top-up (optional)":"Минимальное пополнение (необязательно)","Minimum top-up (USD)":"Минимальное пополнение (USD)","Minimum top-up amount must be at least 1":"Минимальная сумма пополнения — не менее 1","Minimum top-up quantity":"Минимальное количество пополнения","Minimum topup amount: {{amount}}":"Минимальная сумма пополнения: {{amount}}","Minimum Trust Level":"Минимальный уровень доверия","Minimum:":"Минимум:","Minor blips in the last 30 days":"Небольшие сбои за последние 30 дней","Mint a fresh pair below — or pick an existing one further down. Click Save when ready.":"Создайте новую пару ниже или выберите существующую дальше. Когда будете готовы, нажмите Сохранить.","Minute":"Минута","minutes":"минут","Missing code":"Код отсутствует","Missing Models":"Отсутствующие модели","Missing user data from Passkey login response":"В ответе Passkey для входа отсутствуют данные пользователя","Mistral":"Mistral","Modalities":"Модальности","Modality":"Модальность","Mode":"Режим","model":"модель","Model":"Модель","Model Access":"Доступ к моделям","Model Analytics":"Аналитика моделей","Model Analytics Defaults":"Настройки аналитики моделей по умолчанию","Model Analytics Filters":"Фильтры аналитики моделей","model billing support":"поддержка биллинга моделей","Model Call Analytics":"Аналитика вызовов моделей","Model context usage":"Использование контекста модели","Model deleted":"Модель удалена","Model deleted successfully":"Модель успешно удалена","Model Deployment":"Развертывание моделей","Model deployment service is disabled":"Сервис развертывания моделей отключен","Model Description":"Описание модели","Model details":"Сведения о модели","Model disabled successfully":"Модель успешно отключена","Model enabled successfully":"Модель успешно включена","Model fixed pricing":"Фиксированная цена модели","Model Group":"Группа моделей","Model Limits":"Лимиты модели","Model Mapping":"Сопоставление моделей","Model Mapping (JSON)":"Сопоставление моделей (JSON)","Model Mapping must be a JSON object like":"Сопоставление моделей должно быть JSON-объектом, например","Model mapping must be a JSON object with string values":"Сопоставление моделей должно быть JSON-объектом со строковыми значениями","Model mapping must be valid JSON":"Сопоставление моделей должно быть допустимым JSON","Model mapping values must be strings":"Значения сопоставления моделей должны быть строками","Model name":"Имя модели","Model Name":"НаÐ
107·Ð²Ð°Ð½Ð¸Ðµ модели","Model Name *":"Имя модели *","Model name is required":"Название модели обязательно","Model names copied to clipboard":"Названия моделей скопированы в буфер обмена","Model not found":"Модель не найдена","Model performance metrics":"Метрики производительности моделей","Model Price":"Цена модели","Model price is not configured. Please complete model pricing in settings.":"Цена модели не настроена. Заполните тарификацию модели в настройках.","Model Price Not Configured":"Цена модели не настроена","Model prices":"Цены моделей","Model prices reset successfully":"Цены моделей успешно сброшены","Model Pricing":"Тарификация моделей","Model pull failed: {{msg}}":"Ошибка тяги модели: {{msg}}","Model ratio":"Коэффициент модели","Model ratios":"Коэффициенты модели","Model ratios reset successfully":"Соотношения моделей успешно сброшены","Model Regex":"Регулярное выражение модели","Model Regex (one per line)":"Регулярное выражение модели (по одному на строку)","Model selected":"Модель выбрана","Model Square":"Витрина моделей","Model Tags":"Теги моделей","Model to use for testing":"Модель для использования при тестировании","Model to use when testing channel connectivity":"Модель для использования при тестировании подключения канала","Model Version *":"Версия модели *","model(s) selected out of":"модель(и) выбрано из","model(s)? This action cannot be undone.":"модель(и)? Это действие нельзя отменить.","models":"моделей","Models":"Модели","Models *":"Модели *","Models & Groups":"Модели и группы","Models & Routing":"Модели и маршрутизация","Models appended successfully":"Модели успешно добавлены","Models are required":"Требуются модели","Models climbing the leaderboard":"Модели, поднимающиеся в рейтинге","Models climbing the leaderboard fastest":"Модели, быстрее всех растущие в рейтинге","Models directory":"Каталог моделей","Models Directory":"Каталог моделей","Models fetched successfully":"Модели успешно получены","Models filled to form":"Модели заполнены в форму","Models listed here will not automatically append or remove -thinking / -nothinking suffixes.":"Модели из этого списка не будут автоматически добавлять или удалять суффиксы -thinking / -nothinking.","Models losing positions":"Модели, теряющие позиции","Models losing the most positions":"Модели, потерявшие больше всего позиций","Models not in list, may fail to invoke":"Модели не в списке, вызов может не сработать","Models that are being used but not configured in the system":"Модели, которые используются, но не настроены в системе","Models that skip thinking suffix processing":"Модели, пропускающие обработку суффиксов thinking","Models updated successfully":"Модели успешно обновлены","Modify existing subscription plan configuration":"Изменить конфигурацию существующего плана","Module availability":"Доступность модуля","MokaAI":"MokaAI","Monitor":"Мониторинг","Monitor balance, usage, and request volume":"Отслеживайте баланс, расход и объем запросов","Monitored relay requests":"Отслеживаемые ретрансляционные запросы","Monitoring & Alerts":"Мониторинг и оповещения","Month":"Месяц","Month number":"Номер месяца","Monthly":"Ежемесячно","Monthly tokens":"Токенов в месяц","months":"месяцев","Moonshot":"Moonshot","More":"Ещё","More Apps":"Еще","more mapping":"больше сопоставлений","More templates...":"Другие шаблоны…","More than 999 days left":"Более 999 дней","More...":"Подробнее...","Most-used models in the selected period and category":"Самые используемые модели в выбранном периоде и категории","Move":"Переместить","Move a request header":"Переместить заголовок запроса","Move affiliate rewards to your main balance":"Перевести партнерские вознаграждения на основной баланс","Move Field":"Переместить поле","Move Header":"Переместить заголовок","Move Request Header":"Переместить заголовок запроса","Move source field to target field":"Переместить исходное поле в целевое","ms":"мс","Multi-key channel: Keys will be":"Многоключевой канал: Ключи будут","Multi-Key Management":"Управление несколькими ключами","Multi-key management {{action}} on channel (ID: {{id}})":"Управление мультиключами {{action}} для канала (ID: {{id}})","Multi-Key Mode (multiple keys, one channel)":"Режим нескольких ключей (несколько ключей, один канал)","Multi-Key Strategy":"Стратегия нескольких ключей","Multi-key: Polling rotation":"Мульти-ключ: Циклическая ротация","Multi-key: Random rotation":"Мульти-ключ: Случайная ротация","Multi-protocol Compatible":"Совместимо с несколькими протоколами","Multi-region deployment for stable global access":"Мультирегиональное развертывание для стабильного глобаÐ
107»ÑŒÐ½Ð¾Ð³Ð¾ доступа","Multi-step thinking before final answer":"Многошаговые рассуждения перед итоговым ответом","Multi-user management with flexible permission allocation":"Многопользовательское управление с гибким распределением разрешений","Multilingual translation and localisation":"Многоязычный перевод и локализация","Multimodal":"Мультимодальное","Multiplier":"Множитель","Multiplier applied when":"Множитель применяется, когда","Multiplier applied when {{userGroup}} uses {{targetGroup}}":"Множитель при использовании {{targetGroup}} группой {{userGroup}}","Multiplier for audio inputs.":"Множитель для аудиовходов.","Multiplier for audio outputs.":"Множитель для аудиовыходов.","Multiplier for completion tokens.":"Множитель для токенов завершения.","Multiplier for image processing.":"Множитель для обработки изображений.","Multiplier for prompt tokens.":"Множитель для токенов промпта.","Multipliers for recharge pricing based on user groups.":"Множители для ценообразования пополнения на основе групп пользователей.","Must be a valid URL":"Должен быть действительный URL","Must be at least 8 characters":"Должно быть не менее 8 символов","My Subscriptions":"Мои подписки","my-status":"мой-статус","MySQL detected":"Обнаружен MySQL","MySQL is a production-ready relational database. Keep your credentials secure.":"MySQL — реляционная база данных, готовая к продакшену. Храните учётные данные в безопасности.","MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.":"MySQL готов к работе. Убедитесь, что настроены автоматические резервные копии и выделенный пользователь с минимально необходимыми привилегиями.","N/A":"Н/Д","Name":"Название","Name *":"Имя *","Name for this redemption code (1-20 characters)":"Имя для этого кода активации (1-20 символов)","Name is available":"Имя доступно","Name is not available":"Имя недоступно","Name must be between {{min}} and {{max}} characters":"Имя должно быть длиной от {{min}} до {{max}} символов","Name Rule":"Правило именования","Name Suffix":"Суффикс имени","Name the channel and choose the upstream provider.":"Задайте имя канала и выберите upstream-провайдера.","Name the channel, choose the provider, configure API access, and set credentials.":"Задайте имя канала, выберите провайдера, настройте доступ к API и учетные данные.","Name, provider type, and availability.":"НаÐ
107·Ð²Ð°Ð½Ð¸Ðµ, тип провайдера и доступность.","[email protected]":"[email protected]","Native format":"Собственный формат","Need a redemption code?":"Нужен код активации?","Needs API key":"Нужен API-ключ","Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.":"Вложенный JSON, определяющий правила для каждой группы для добавления (+:), удаления (-:) или добавления используемых групп.","Nested JSON: source group →":"Вложенный JSON: исходная группа →","Network proxy for this channel (supports socks5 protocol)":"Сетевой прокси для этого канала (поддерживает протокол socks5)","Never":"Никогда","Never expires":"Никогда не истекает","Never used an API Gateway?":"Никогда не пользовались API-шлюзом?","NEW":"НОВОЕ","New API":"Новый API","New API &lt;[email protected]&gt;":"Новый API &lt;[email protected]&gt;","New API Project Repository:":"Репозиторий проекта New API:","New Format Template":"Шаблон нового формата","New Group":"Новая группа","New model":"Новая модель","New Models ({{count}})":"Новые модели ({{count}})","New name will be:":"Новое имя будет:","New password":"Новый пароль","New Password":"Новый пароль","New password must be different from current password":"Новый пароль должен отличаться от текущего пароля","New User Quota":"Новая квота пользователя","New version available: {{version}}":"Доступна новая версия: {{version}}","NewAPI":"NewAPI","Newly released":"Новые релизы","Next":"Следующий шаг","Next branch":"Следующая ветка","Next page":"Следующая страница","Next reset":"Следующий сброс","No":"Нет","No About Content Set":"Содержимое раздела \\"О нас\\" не установлено","No Active":"Нет активных","No additional type-specific settings for this channel type.":"Нет дополнительных настроек, специфичных для этого типа канала.","No amount options configured. Add amounts below to get started.":"Не настроены параметры суммы. Добавьте суммы ниже, чтобы начать.","No announcements at this time":"Нет объявлений на данный момент","No announcements yet. Click \\"Add Announcement\\" to create one.":"Пока нет объявлений. Нажмите \\"Добавить объявление\\", чтобы создать одно.","No API Domains yet. Click \\"Add API\\" to create one.":"Пока нет доменов API. Нажмите \\"Добавить API\\", чтобы создать один.","No API key yet":"API-ключ пока не создан","No API keys available. Create your first API key to get started.":"Нет доступных ключей API. Создайте свой первый ключ API, чтобы начать.","No API Keys Found":"Ключи API не найдены","No API routes configured":"Нет настроенных маршрутов API","No app usage data available for this model.":"Данные об использовании приложений для этой модели пока недоступны.","No apps match the selected filters":"Нет приложений, соответствующих фильтрам","No available models":"Нет доступных моделей","No available Web chat links":"Нет доступных веб-ссылок для чата","No backup":"Нет резервной копии","No base input price":"Нет базовой цены входа","No billing records found":"Записи о выставлении счетов не найдены","No capabilities reported for this model.":"Для этой модели не указаны возможности.","No Change":"Без изменений","No changes":"Нет изменений","No changes made":"Изменения не внесены","No changes to save":"Нет изменений для сохранения","No channel selected":"Канал не выбран","No channel type found.":"Тип канала не найден.","No channels available. Create your first channel to get started.":"Нет доступных каналов. Создайте свой первый канал, чтобы начать.","No channels found":"Каналы не найдены","No Channels Found":"Каналы не найдены","No channels selected":"Каналы не выбраны","No chat presets configured. Click \\"Add chat preset\\" to get started.":"Пресеты чата не настроены. Нажмите \\"Добавить пресет чата\\", чтобы начать.","No chat presets match your search":"Нет пресетов чата, соответствующих вашему поиску","No conflict entries available.":"Нет доступных записей конфликтов.","No conflicts match your search.":"Конфликты, соответствующие вашему поиску, не найдены.","No console output":"Нет вывода консоли","No containers":"Нет контейнеров","No custom OAuth providers configured yet.":"Пользовательские поставщики OAuth еще не настроены.","No data":"Нет данных","No Data":"Нет данных","No data available":"Нет доступных данных","No deployments available. Create one to get started.":"Нет доступных развертываний. Создайте одно, чтобы начать.","No Deployments Found":"Развертывания не найдены","No description available.":"Описание отсутствует.","No discount tiers configured. Click \\"Add discount tier\\" to get started.":"Не настроены уровни скидоÐ
107º. Нажмите \\"Добавить уровень скидки\\", чтобы начать.","No duplicate keys found":"Дубликаты ключей не найдены","No enabled tokens available":"Нет доступных активных токенов","No endpoints configured. Switch to JSON mode or add rows to define endpoints.":"Конечные точки не настроены. Переключитесь в режим JSON или добавьте строки для определения конечных точек.","No FAQ entries available":"Нет доступных записей FAQ","No FAQ entries yet. Click \\"Add FAQ\\" to create one.":"Пока нет записей FAQ. Нажмите \\"Добавить FAQ\\", чтобы создать одну.","No files match the accepted types.":"Нет файлов, соответствующих допустимым типам.","No group found.":"Группа не найдена.","No group-based rate limits configured. Click \\"Add group\\" to get started.":"Групповые лимиты скорости не настроены. Нажмите \\"Добавить группу\\", чтобы начать.","No groups match your search":"Нет групп, соответствующих вашему поиску","No groups yet. Add a group to get started.":"Групп пока нет. Добавьте группу, чтобы начать.","No header overrides configured.":"Нет настроенных переопределений заголовков.","No history data available":"Исторические данные недоступны","No incidents in the last 24 hours":"За последние 24 часа инцидентов не было","No incidents in the last 30 days":"За последние 30 дней инцидентов не было","No Inviter":"Нет пригласившего","No keys found":"Ключи не найдены","No latency data available":"Данные о задержке недоступны","No log entries matched the selected time.":"Нет записей журнала, соответствующих выбранному времени.","No logs":"Нет логов","No Logs Found":"Логи не найдены","No mappings configured. Click \\"Add Row\\" to get started.":"Нет настроенных сопоставлений. Нажмите \\"Добавить строку\\", чтобы начать.","No matches found":"Совпадений не найдено","No matching items":"Нет подходящих элементов","No matching results":"Нет совпадений","No matching rules":"Нет совпадающих правил","No messages yet":"Сообщений пока нет","No missing models found.":"Недостающие модели не найдены.","No model found.":"Модель не найдена.","No model mappings configured. Click \\"Add Mapping\\" to get started.":"Не настроены сопоставления моделей. Нажмите \\"Добавить сопоставление\\", чтобы начать.","No models available":"Модели недоступны","No models available in this category":"В этой категории нет моделей","No models available. Create your first model to get started.":"Нет доступных моделей. Создайте свою первую модель, чтобы начать.","No models configured. Use Add model to get started.":"Модели не настроены. Используйте добавление модели, чтобы начать.","No models fetched from upstream":"Модели не получены от upstream","No models fetched yet.":"Модели еще не получены.","No models found":"Модели не найдены","No Models Found":"Модели не найдены","No models found.":"Модели автомобиля не найдены.","No models match the selected filters":"Нет моделей, соответствующих фильтрам","No models match your current filters.":"Модели, соответствующие вашим текущим фильтрам, не найдены.","No models match your search":"Модели не найдены","No models selected":"Модели не выбраны","No models to add":"Нет моделей для добавления","No models to copy":"Нет моделей для копирования","No models to remove":"Нет моделей для удаления","No new models to add":"Нет новых моделей для добавления","No new models yet":"Новых моделей пока нет","No notable climbers right now":"Сейчас нет значимых поднявшихся моделей","No notable drops right now":"Сейчас нет значимых упавших моделей","No parameter overrides configured.":"Нет настроенных переопределений параметров.","No payment methods available. Please contact administrator.":"Нет доступных способов оплаты. Пожалуйста, свяжитесь с администратором.","No payment methods configured":"Способы оплаты не настроены","No payment methods configured. Click \\"Add method\\" or use templates to get started.":"Способы оплаты не настроены. Нажмите \\"Добавить способ\\" или используйте шаблоны, чтобы начать.","No payment methods match your search":"Нет способов оплаты, соответствующих вашему поиску","No performance data available":"Нет доступных данных о производительности","No plans available":"Нет доступных планов","No preference":"Без предпочтений","No prefill groups yet":"Пока нет групп предзаполнения","No price differences found":"Различий в ценах не найдено","No processable upstream model updates for this channel":"Нет обрабатываемых обновлений моделей для этого канала","No products configured. Click \\"Add product\\" to get started.":"Продукты не настроены. Нажмите \\"Добавить продукт\\", чтобы начать.","No products match your search":"Нет продуктов, соответствующих вашему поиску","No providers available":"Нет доступных провайдеров","No Quota":"Нет квоты","No ratio differences found":"Различия в коэффициентах не найдены","No recent usage":"Нет недавнего использования","No records foun
107d. Try adjusting your filters.":"Записи не найдены. Попробуйте изменить фильтры.","No redemption codes available. Create your first redemption code to get started.":"Нет доступных кодов активации. Создайте свой первый код активации, чтобы начать.","No Redemption Codes Found":"Коды активации не найдены","No related models available for this channel type":"Для этого типа канала нет доступных связанных моделей","No release notes provided.":"Примечания к выпуску не предоставлены.","No Reset":"Без сброса","No restriction":"Без ограничений","No results for \\"{{query}}\\". Try adjusting your search or filters.":"Нет результатов для \\"{{query}}\\". Попробуйте изменить поиск или фильтры.","No results found":"Поиск не дал результатов","No results found.":"Результаты не найдены.","No Retry":"Без повтора","No rules yet":"Правила отсутствуют","No rules yet. Add a group below to get started.":"Правил пока нет. Добавьте группу ниже, чтобы начать.","No separate media pricing configured.":"Отдельные цены для медиа не настроены.","No status code mappings configured.":"Сопоставления кодов состояния не настроены.","No stores on this merchant yet. Set a return URL and click Create to mint your first pair.":"У этого продавца пока нет магазинов. Укажите URL возврата и нажмите Создать, чтобы создать первую пару.","No subscription plans yet":"Планов подписки пока нет","No subscription records":"Нет записей подписок","No Sync":"Без синхронизации","No system announcements":"Нет системных объявлений","No token found.":"Токен не найден.","No tools configured":"Нет настроенных инструментов","No 
107Upgrade":"Без повышения","No upstream price differences found":"Различий в ценах провайдера не найдено","No upstream ratio differences found":"Различия в коэффициентах вышестоящего потока не найдены","No uptime data available":"Данные о доступности недоступны","No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.":"Пока нет групп Uptime Kuma. Нажмите \\"Добавить группу\\", чтобы создать одну.","No uptime monitoring configured":"Мониторинг доступности не настроен","No usage logs available. Logs will appear here once API calls are made.":"Нет логов использования. Они появятся после вызовов API.","No user information available":"Нет данных пользователя","No user selected":"Пользователь не выбран","No users available. Try adjusting your search or filters.":"Нет доступных пользователей. Попробуйте изменить параметры поиска или фильтры.","No Users Found":"Пользователи не найдены","No vendor data available":"Данных по поставщикам нет","No X Found":"X не найдено","Node Name":"Имя узла","Non-stream":"Не потоковый","Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.":"Ненулевые награды за приглашения требуют подтверждения соответствия в настройках платежного шлюза.","None":"Нет","[email protected]":"[email protected]","Normalized:":"Нормализовано:","Not available":"Недоступно","Not backed up":"Не сохранено","Not bound":"Не привязан","Not Equals":"Не равно","Not Set":"Не установлено","Not set yet":"Ещё не задано","Not Started":"Не начато","Not Submitted":"Не отправлено","Not tested":"Не протестировано","Not used for upstream training by default":"По умолчанию не используется для обучения у поставщика","Not used yet":"Ещё не использовано","Notice":"Уведомления","Notification Email":"Электронная почта для уведомлений","Notification Method":"Метод уведомления","Notifications":"Уведомления","Nucleus sampling probability mass":"Накопленная вероятность для nucleus-сэмплинга","Number of codes to create":"Количество кодов для создания","Number of completions to generate":"Число генерируемых вариантов","Number of images to generate":"Количество изображений","Number of keys to create":"Количество ключей для создания","Number of times to retry failed requests (0-10)":"Количество повторных попыток для неудачных запросов (0-10)","Number of tokens per unit quota":"Количество токенов на единицу квоты","Number of top log probabilities returned per token":"Количество top-вероятностей на токен","Number of users invited":"Количество приглашенных пользователей","OAuth Client ID":"Идентификатор клиента OAuth","OAuth Client Secret":"OAuth Client Secret","OAuth failed":"OAuth не удался","OAuth Integrations":"Интеграции OAuth","Object Prune Rules":"Правила очистки объектов","Observability":"Наблюдаемость","Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.":"Получите API-ключ, ID мерчанта и пару RSA-ключей в панели управления Waffo и настройте URL обратного вызова.","Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: <ServerAddress>/api/waffo-pancake/webhook":"Получите в панели Waffo ID мерчанта, магазина, товара и ключи подписи. Webhook: <ServerAddress>/api/waffo-pancake/webhook","Ocean Breeze":"Океанский бриз","of":"записей, всего","of 3:":"из 3:","off":"выкл.","Official":"Официальный","Official documentation":"Официальная документация","Official Repository":"Официальный репозиторий","Official Sync":"Официальная синхронизация","OhMyGPT":"OhMyGPT","OIDC":"OIDC","OIDC Client ID":"ID клиента OIDC","OIDC Client Secret":"Секрет клиента OIDC","OIDC configuration fetched successfully":"Конфигурация OIDC успешно получена","OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.":"URL обнаружения OIDC. Нажмите \\"Автообнаружение\\" для автоматического получения конечных точек.","OIDC endpoints discovered successfully":"Конечные точки OIDC успешно обнаружены","Old Format Template":"Шаблон старого формата","Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.":"Старый формат: прямое переопределение. Новый формат: поддерживает условные суждения и пользовательские операции JSON.","Ollama":"Ollama","Ollama Models":"Ollama Модели","One API":"Один API","One domain per line":"Один домен на строку","One domain per line (only used when domain restriction is enabled)":"Один домен на строку (используется только при включении ограничения домена)","One IP or CIDR range per line":"Один IP или диапазон CIDR на строку","One IP per line (empty for no restriction)":"Один IP на строку (пусто для отсутствия ограничений)","one keyword per line":"одно ключевое слово на строку","Online":"Онлайн","Online payment is not enabled. Please contact the administrator.":"Онлайн-оплата не включена. Пожалуйста, свяжитесь с администратором.","Online topup is not enabled. Please use redemption code or contact administrator.":"Онлайн-пополнение не включено. Пожалуйста, используйте код активации или свяжитесь с администратором.","Only allow specific email domains":"Разрешить только определенные домены электронной почты","Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.":"Доступно только для администраторов. При включении вы будете получать сводное уведомление выбранным способом, когда запланированная проверка моделей обнаружит изменения в вышестоящих моделях или сбои проверки.","Only configured combinations are overridden. All other calls keep the token group base ratio.":"Переопределяются только настроенные комбинации. Остальные вызовы используют базовый коэффициент группы токена.","Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear."
107:"Будут перезаписаны только выбранные поля. Вы можете повторно запустить мастер синхронизации, если появятся новые конфликты.","Only successful requests":"Только успешные запросы","Only successful requests count toward this limit.":"Только успешные запросы учитываются в этом лимите.","Only the last {{value}} log files will be retained; the rest will be deleted.":"Будут сохранены только последние {{value}} файлов журналов; остальные будут удалены.","Oops! Page Not Found!":"Ой! Страница не найдена!","Oops! Something went wrong":"Ой! Что-то пошло не так","Open":"Открыть","Open a source model first":"Сначала откройте исходную модель","Open CC Switch":"Открыть CC Switch","Open in chat":"Открыть в чате","Open in new tab":"Открыть в новой вкладке","Open in New Tab":"Открыть в новой вкладке","Open menu":"Открыть меню","Open release":"Открыть выпуск","Open source":"Открытый исходный код","Open Source":"Открытый исходный код","Open the io.net console API Keys page":"Открыть страницу ключей API консоли io.net","Open theme settings":"Открыть настройки темы","Open weights":"Открытые веса","OpenAI":"OpenAI","OpenAI Compatible":"Совместимо с OpenAI","OpenAI Organization":"Организация OpenAI","OpenAI Organization ID (optional)":"Идентификатор организации OpenAI (необязательно)","OpenAI, Anthropic, etc.":"OpenAI, Anthropic и т.д.","OpenAI, Anthropic, Google, etc.":"OpenAI, Anthropic, Google и т.д.","OpenAIMax":"OpenAIMax","OpenRouter":"OpenRouter","opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.":"открывается во внешнем клиенте. Запустите его из боковой панели или действий с ключом API, чтобы запустить настроенное приложение.","Operation":"Операция","operation and charging behavior":"эксплуатацию и взимание платы","Operation Audit Info":"Информация об аудите операций","Operation failed":"Операция не удалась","Operation successful":"Операция выполнена успешно","Operation Type":"Тип операции","Operations":"Операции","Operator Admin":"Оператор-администратор","Optimize system for self-hosted single-user usage":"Оптимизировать систему для самостоятельного использования одним пользователем","Optimized network architecture ensures millisecond response times":"Оптимизированная сетевая архитектура обеспечивает время отклика в миллисекунды","Optional callback override. Leave blank to use server address":"Необязательное переопределение обратного вызова. Оставьте пустым, чтобы использовать адрес сервера","Optional icon identifier for the login button":"Необязательный идентификатор иконки для кнопки входа","Optional JSON policy to restrict access based on user info fields":"Необязательная политика JSON для ограничения доступа на основе полей информации о пользователе","Optional minimum recharge amount for this method.":"Необязательная минимальная сумма пополнения для этого метода.","Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as":"Необязательный множитель для группы пользователей, используемый при расчете цен на пополнение. Предоставьте JSON-объект, например","Optional notes about this channel":"Необязательные заметки об этом канале","Optional notes about when to use this group":"Необязательные примечания о том, когда использовать эту группу","Optional ratio used when upstream cache hits occur.":"Необязательное соотношение, используемое при попаданиях в вышестоящий кэш.","Optional rule description":"Необязательное описание правила","Optional settings for advanced container configuration.":"Дополнительные настройки для расширенной конфигурации контейнера.","Optional supplementary information (max 100 characters)":"Необязательная дополнительная информация (макс. 100 символов)","Optional tag for grouping channels":"Необязательный тег для группировки каналов","Opus Model":"Модель Opu
107s","Or continue with":"Или продолжить с","Or enter this key manually:":"Или введите этот ключ вручную:","or pick existing":"или выбрать существующую","Order completed successfully":"Заказ успешно завершен","Order History":"История заказов","Order Payment Method":"Способ оплаты (заказа)","org-...":"орг-...","Original Model":"Оригинальная модель","Other":"Другое","Outage":"Простой","Output":"Вывод","Output aspect ratio":"Соотношение сторон","Output image size":"Размер выходного изображения","Output price":"Цена выхода","Output token price for generated tokens.":"Цена выходных токенов для сгенерированного текста.","Output tokens":"Выходные токены","Output Tokens":"Выходные токены","overall":"всего","Overnight range":"Диапазон через полночь","override":"переопределить","Override":"Перезаписать","Override auto-discovered endpoint":"Переопределить автоматически обнаруженную конечную точку","Override request headers":"Переопределить заголовки запроса","Override request headers (JSON format)":"Переопределение заголовков запроса (формат JSON)","Override request parameters":"Переопределить параметры запроса","Override request parameters (JSON format)":"Переопределить параметры запроса (формат JSON)","Override request parameters. Cannot override":"Переопределить параметры запроса. Невозможно переопределить","Override request parameters. Cannot override stream parameter.":"Переопределяет параметры запроса. Параметр stream переопределить нельзя.","Override Rules":"Правила переопределения","Override the endpoint used for testing. Leave empty to auto detect.":"Переопределить конечную точку, используемую для тестирования. Оставьте пустым для автоматического определения.","overrides for matching model prefix.":"переопределяет цену по совпавшему префиксу модели.","Overrode user quota from {{from}} to {{to}}":"Квота пользователя изменена с {{from}} на {{to}}","Overview":"Обзор","Overwritten":"Перезаписано","Page":"Страница","Page {{current}} of {{total}}":"Страница {{current}} из {{total}}","PaLM":"PaLM","Pan":"Панорама","Pancake":"Pancake","Param Override":"Переопределение параметров","Parameter":"Параметр","Parameter configuration error":"Ошибка конфигурации параметров","Parameter Override":"Переопределение параметра","Parameter override must be a valid JSON object":"Переопределение параметров должно быть валидным JSON-объектом","Parameter override must be valid JSON format":"Переопределение параметров должно быть в валидном формате JSON","Parameter Override Template (JSON)":"Шаблон переопределения параметров (JSON)","Parameter override template must be a JSON object":"Шаблон переопределения параметров должен быть объектом JSON","parameter.":"параметр.","Parameters":"Параметры","Parsed {{count}} service account file(s)":"Проанализировано файлов сервисного аккаунта {{count}}","Partial Submission":"Частичная отправка","Pass Headers":"Пропустить заголовки","Pass request body directly to upstream":"Передать тело запроса напрямую вышестоящему серверу","Pass specified request headers to upstream":"Передать указанные заголовки запроса вышестоящему серверу","Pass Through Body":"Передача тела запроса","Pass Through Headers":"Передать заголовки","Pass through the anthropic-beta header for beta features":"Проброс заголовка anthropic-beta для бета-функций","Pass through the include field for usage obfuscation":"Проброс поля include для обфускации использования","Pass through the inference_geo field for Claude data residency region control":"Проброс поля inference_geo для управления регионом размещения данных Claude","Pass through the inference_geo field for geographic routing":"Проброс поля inference_geo для географической маршрутизации","Pass through the safety_identifier field":"Пройдите через поле safety_identifier","Pass through the service_tier field":"Пройдите через поле service_tier","Pass through the speed field for Claude inference speed mode control":"Проброс поля speed для управления режимом скорости инференса Claude","Pass when key is missing":"Пропускать при отсутствии ключа","Pass-Through":"Сквозной доступ","Pass-through Headers (comma-separated or JSON array)":"Пробрасываемые заголовки (через запятую или JSON-массив)","Passkey":"Passkey","Passkey Authentication":"Аутентификация Passkey","Passkey is not available in this browser":"Passkey недоступен в этом браузере","Passkey is not supported in this environment":"Passkey не поддерживается в этой среде","Passkey is not supported on this device":"Passkey не поддерживается на этом устройстве","Passkey is not supported on this device.":"Passkey не поддерживается на этом устройстве.","Passkey Login":"Вход через Passkey","Passkey login failed":"Ошибка входа с Passkey","Passkey login was cancelled":"Вход с Passkey был отменён","Passkey login was cancelled or timed out":"Вход с Passkey был отменён или истёк тайм-аут","Passkey not supported on this device":"Passkey не поддерживается на этом устройстве","Passkey registered successfully":"Passkey успешно зарегистрирован","Passkey registration was cancelled":"Регистрация Passkey была отменена","Passkey removed successfully":"Passkey успешно удалён","Passkey reset successfully":"Passkey успешно сброшен","Passthrough Template":"Шаблон сквозной передачи","Password":"Пароль","Password / A
107ccess Token":"Пароль / Токен доступа","Password changed successfully":"Пароль успешно изменён","Password copied to clipboard: {{password}}":"Пароль скопирован в буфер обмена: {{password}}","Password has been copied to clipboard":"Пароль скопирован в буфер обмена","Password Login":"Вход по паролю","Password must be at least 8 characters":"Пароль должен содержать не менее 8 символов","Password must be at least 8 characters long":"Пароль должен содержать не менее 8 символов","Password Registration":"Регистрация пароля","Password reset and copied to clipboard: {{password}}":"Пароль сброшен и скопирован в буфер обмена: {{password}}","Password reset: {{password}}":"Пароль сброшен: {{password}}","Passwords do not match":"Пароли не совпадают","Path":"Путь","Path not set":"Путь не задан","Path Regex (one per line)":"Регулярное выражение пути (по одному на строку)","Path:":"Путь:","Pay":"Pay","Pay with Balance":"Оплатить балансом","Pay-as-you-go with real-time usage monitoring":"Оплата по мере использования с мониторингом в реальном времени","Payment":"Платеж","Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.":"Режим платежного агрегатора — подключение через вашу зарегистрированную компанию (офшорное юрлицо). Создано для Enterprise.","Payment Channel":"Платёжный канал","Payment Gateway":"Платежный шлюз","Payment initiated":"Платёж инициирован","Payment Method":"Способ оплаты","Payment method name":"Название способа оплаты","Payment method name is required":"Название способа оплаты обязательно","Payment method type":"Тип способа оплаты","Payment method type is required":"Тип способа оплаты обязателен","Payment methods":"Способы оплаты","Payment Methods":"Способы оплаты","Payment page opened":"Страница оплаты открыта","Payment request failed":"Запрос на оплату не удался","Payment return URL":"URL возврата после оплаты","Payment return URL is empty. Create the product without a SuccessURL redirect?":"URL возврата платежа пуст. Создать продукт без перенаправления SuccessURL?","Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.":"Платежи, коды пополнения, планы подписки и награды за приглашения заблокированы, пока root-администратор не подтвердит условия соответствия.","Peak":"Пик","Peak throughput":"Пиковая пропускная способность","Penalises repetition of frequent tokens":"Штрафует повторение частых токенов","Pending":"Ожидает","per":"за","Per 1K tokens":"За 1K токенов","Per 1M tokens":"За 1M токенов","per request":"за запрос","Per request":"За запрос","Per Request":"За запрос","Per-call":"По вызову","Per-feature metered windows split by model or capability.":"Окна с поминутной тарификацией по фиче, в разбивке по модели или возможностям.","Per-group performance":"Производительность по группам","Per-request":"За запрос","Per-request (fixed price)":"За запрос (фиксированная цена)","Per-token":"За токен","Per-token (ratio based)":"За токен (на основе соотношения)","Per-token logit bias map":"Карта смещений логитов по токенам","Percentage:":"Процент:","Performance":"Производительность","Performance data is not yet available for this model.":"Данные о производительности этой модели пока недоступны.","Performance health":"Состояние производительности","Performance metrics for the last 24 hours":"Метрики производительности за последние 24 часа","Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.":"Показанные метрики производительности сгенерированы для предпросмотра и будут заменены реальными данными наблюдаемости после интеграции бэкенда.","Performance Monitor":"Монитор производительности","Performance Settings":"Настройки производительности","Performed {{action}} on user {{username}} (ID: {{id}})":"Выполнено действие {{action}} над пользователем {{username}} (ID: {{id}})","Period":"Период","Periodically check for upstream model changes":"Периодически проверять изменения моделей провайдера","Periodically send ping frames to keep streaming connections active.":"Периодически отправлять пинг-кадры для поддержания активности потоковых соединений.","Permanently delete your account and all data":"Безвозвратно удалить ваш аккаунт и все данные","Permit Passkey registration on non-HTTPS origins (only recommended for development)":"Разрешить регистрацию Passkey на не-HTTPS источниках (рекомендуется только для разработки)","Perplexity":"Perplexity","Persist your data file":"Сохранить ваш файл данных","Personal":"Личное","Personal area":"Личный кабинет","Personal Center Area":"Область личного кабинета","Personal info settings":"Настройки личной информации","Personal Settings":"Личные настройки","Personal settings and profile management."
107:"Персональные настройки и управление профилем.","Personal use":"Личное использование","Personal use mode":"Режим личного использования","Pick a date":"Выберите дату","Pick or create both a store and a product before saving.":"Перед сохранением выберите или создайте и магазин, и продукт.","Ping Interval (seconds)":"Интервал Ping (секунды)","Plan":"План","Plan Name":"Название плана","Plan price must be greater than zero":"Цена плана должна быть больше нуля","Plan Subtitle":"Подзаголовок плана","Plan Title":"Название плана","Plan title is required":"Название плана обязательно","Planned maintenance on Friday at 22:00 UTC...":"Запланированное обслуживание в пятницу в 22:00 UTC...","Platform":"Платформа","Playground":"Песочница","Playground and chat functions":"Функции песочницы и чата","Playground experiments and live conversations.":"Эксперименты в песочнице и живые беседы.","Please agree to the legal terms first":"Сначала согласитесь с юридическими условиями","Please complete the security check to continue.":"Пожалуйста, завершите проверку безопасности, чтобы продолжить.","Please confirm that you understand the consequences":"Пожалуйста, подтвердите, что понимаете последствия","Please enable io.net model deployment service and configure an API key in System Settings.":"Пожалуйста, включите сервис развертывания моделей io.net и настройте API-ключ в системных настройках.","Please enable Two-factor Authentication or Passkey before proceeding":"Пожалуйста, включите двухфакторную аутентификацию или Passkey перед продолжением","Please enter a name":"Пожалуйста, введите имя","Please enter a new password":"Пожалуйста, введите новый пароль","Please enter a redemption code":"Пожалуйста, введите код активации","Please enter a valid duration":"Пожалуйста, введите действительную длительность","Please enter a valid email address":"Пожалуйста, введите действительный адрес электронной почты","Please enter a valid number":"Пожалуйста, введите допустимое число","Please enter a Well-Known URL first":"Пожалуйста, сначала введите Well-Known URL","Please enter amount":"Пожалуйста, введите сумму","Please enter an administrator username":"Пожалуйста, введите имя пользователя администратора","Please enter API key first":"Сначала введите ключ API","Please enter chat client name":"Пожалуйста, введите имя чат-клиента","Please enter email and verification code":"Пожалуйста, введите email и код подтверждения","Please enter keys first":"Сначала введите ключи","Please enter model name":"Введите название модели","Please enter plan title":"Пожалуйста, введите название плана","Please enter the authentication code.":"Пожалуйста, введите код аутентификации.","Please enter the URL":"Пожалуйста, введите URL","Please enter the verification code":"Введите код подтверждения","Please enter your current password":"Пожалуйста, введите текущий пароль","Please enter your email":"Введите адрес электронной почты","Please enter your email first":"Пожалуйста, сначала введите ваш email","Please enter your verification code":"Пожалуйста, введите код подтверждения","Please enter your verification code or backup code":"Пожалуйста, введите код подтверждения или резервный код","Please fix JSON errors before saving":"Исправьте ошибки JSON перед сохранением","Please fix the highlighted fields before saving":"Исправьте выделенные поля перед сохранением","Please log in with the appropriate credentials":"Пожалуйста, войдите с соответствующими учетными данными","Please select a container":"Пожалуйста, выберите контейнер","Please select a payment method":"Пожалуйста, выберите способ оплаты","Please select a primary model":"Пожалуйста, выберите основную модель","Please select a subscription plan":"Пожалуйста, выберите план подписки","Please select at least one channel":"Пожалуйста, выберите хотя бы один канал","Please select at least one model":"Пожалуйста, выберите хотя бы одну модель","Please select items to delete":"Пожалуйста, выберите элементы для удаления","Please Select user groups that can access this channel."
107:"Пожалуйста, выберите группы пользователей, которые могут получить доступ к этому каналу.","Please set Ollama API Base URL first":"Сначала установите базовый URL-адрес API Ollama","Please sign in to view {{module}}.":"Войдите, чтобы просмотреть {{module}}.","Please try again later.":"Пожалуйста, попробуйте еще раз позже.","Please type the following text to confirm:":"Введите следующий текст для подтверждения:","Please upload key file(s)":"Загрузите ключевой файл(ы)","Please wait a moment before trying again.":"Пожалуйста, подождите немного и попробуйте снова.","Please wait a moment, human check is initializing...":"Пожалуйста, подождите немного, инициализация проверки человеком...","Please wait before editing to avoid overwriting saved values.":"Дождитесь загрузки перед редактированием, чтобы не перезаписать сохраненные значения.","Policy JSON":"JSON политики","Polling":"Опрос","Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded":"Режим опроса требует Redis и кэш памяти, в противном случае производительность будет значительно снижена","Poor":"Плохо","Port":"Порт","Port must be a positive integer":"Порт должен быть положительным целым числом","Post Delta":"Дельта после расчёта","PostgreSQL detected":"PostgreSQL обнаружен","PostgreSQL offers advanced reliability and data integrity for production workloads.":"PostgreSQL обеспечивает высокую надёжность и целостность данных для продакшен-нагрузок.","PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.":"PostgreSQL предлагает надежные гарантии. Дважды проверьте окно обслуживания и политики хранения данных перед запуском.","Power AI applications, manage digital assets, connect the Future":"Обеспечивайте AI-приложения, управляйте цифровыми активами, соединяйте Будущее","Powerful API Management Platform":"Мощная платформа управления API","Pre-Consume for Free Models":"Предварительное потребление для бесплатных моделей","Pre-consumed":"Предоплата","Pre-Consumed Quota":"Предварительно потребленная квота","Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.":"Настройка сохранена как {{pref}}, но нет активной подписки. Кошелёк будет использоваться автоматически.","Preferences":"Настройки","Prefill Group Management":"Управление группами автозаполнения","Prefill Groups":"Группы автозаполнения","Prefill groups help you keep complex configurations in sync.":"Группы автозаполнения помогают синхронизировать сложные конфигурации.","Prefix":"Префикс","Prefix Match":"Совпадение по префиксу","Prefix used when displaying prices":"Префикс, используемый при отображении цен","Prefix/Suffix Text":"Текст префикса/суффикса","Premium chat models":"Премиум-модели чата","Premium plan, half price":"Премиум-план, половина цены","Preparing chat keys…":"Подготовка ключей чата…","Preparing your chat link, please try again in a moment.":"Подготовка вашей ссылки на чат, попробуйте снова через мгновение.","Preparing your chat link…":"Подготовка вашей ссылки для чата…","Prepend":"Добавить в начало","Prepend to Start":"Добавить в начало","Prepend value to array / string / object start":"Добавить значение в начало массива / строки / объекта","Preserve the original field when applying this rule":"Сохранять исходное поле при применении этого правила","Preset groups":"Предустановленные группы","Preset recharge amounts (JSON array)":"Предустановленные суммы пополнения (массив JSON)","Preset recharge amounts displayed to users":"Предустановленные суммы пополнения, отображаемые пользователям","Preset Template":"Предустановленный шаблон","Preset templates":"Предустановленные шаблоны","preset.anthropic":"Anthropic","preset.default":"По умолчанию","preset.forest-whisper":"Лесной шёпот","preset.lake-view":"Озёрный вид","preset.lavender-dream":"Лавандовый сон","preset.ocean-breeze":"Морской бриз","preset.rose-garden":"Розовый сад","preset.simple-large":"Простая крупная","preset.sunset-glow":"Закатное сияние","preset.underground":"Подполье","Press Enter or comma to add tags":"Нажмите Enter или запятую, чтобы добавить теги","Press Enter to use \\"{{value}}\\"":"Нажмите Enter, чтобы использовать «{{value}}»","Prevent server-side request forgery attacks":"Предотвращение атак подделки запросов на стороне сервера","Preview":"Предварительный просмотр","Previous":"Предыдущий шаг","Previous branch":"Предыдущая ветка","Previous page":"Предыдущая страница","Price":"Цена","Price ($/1K calls)":"Цена ($/1K вызовов)","Price (local currency / USD)":"Цена (местная валюта / USD)","Price display":"Отображение цены","Price display mode":"Режим отображения цены","Price estimation":"Оценка стоимости","Price estimation description":"После настройки типа оборудования, места размещения, количества реплик и т.д. стоимость будет рассчитана автоматически.","Price ID":"ID цены","Price mode (USD per 1M tokens)":"Режим ценообразования (USD за 1 млн токенов)","Price summary":"Сводка цен","price_xxx":"price_xxx","Price:":"Цена:","Price: High to Low":"Цена: от высокой к низкой","Price: Low to High":"Цена: от низкой к высокой","Prices shown per":"Цены указаны за","Prices synced successfully":"Цены успешно синхронизированы","Prices vary by usage tier and request conditions":"Цена зависит от уровня использования и условий запроса","Pricing":"Ценообразование","Pricing & Display":"Цены и отображение","Pricing by Group":"Ценообразование по группам","Pricing Configuration":"Конфигурация ценообразования","Pricing group example":"Пример группы тарификации","Pricing groups":"Группы тарификации","Pricing mode":"Режим ценообразования","Pricing Ratios":"Коэффициенты ценообразования","Pricing Type":"Тип ценообразования","Primary Model":"Основная модель","Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)":"Приоритет повторного использования последнего успешного канала на основе ключей из контекста запроса (липкая маршрутизация)","Priority":"Приоритет","Priority (Default)":"Приоритет (По умолчанию)","Priority level from 0 (lowest) to 10 (highest), default is 5":"Уровень приоритета от 0 (самый низкий) до 10 (самый высокий), по умолчанию 5","Priority order for automatic group assignment. New tokens rotate through this list.":"Порядок приоритета для автоматического наÐ
107·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ групп. Новые токены ротируются по этому списку.","Privacy Policy":"Политика конфиденциальности","Private Deployment URL":"URL частного развертывания","Processing OAuth response...":"Обработка ответа OAuth...","Processing...":"Обработка...","Product":"Продукт","Product ID":"ID продукта","Product ID is required":"Требуется ID товара","Product Name":"Название продукта","Productivity":"Продуктивность","Products":"Продукты","Professional team providing 24/7 technical support":"Профессиональная команда, обеспечивающая круглосуточную техническую поддержку","Profile":"Профиль","Profile updated successfully":"Профиль успешно обновлён","Programming":"Программирование","Progress":"Прогресс","Project":"Проект","Promote":"Повысить","Promotion codes":"Промокоды","Prompt":"Промпт","Prompt (EN)":"Промпт (EN)","Prompt cache ratio":"Коэффициент кэша промптов","Prompt caching":"Кэширование промптов","Prompt Caching":"Кэширование промптов","Prompt Details":"Детали промпта","Prompt price ($/1M tokens)":"Цена промпта ($/1 млн токенов)","Proprietary":"Проприетарная","Provide a JSON object where each key maps to an endpoint definition.":"Предоставьте JSON-объект, в котором каждый ключ соответствует определению конечной точки.","Provide a valid URL starting with http:// or https://":"Укажите действительный URL, начинающийся с http:// или https://","Provide Markdown, HTML, or an external URL for the privacy policy":"Укажите Markdown, HTML или внешний URL для политики конфиденциальности","Provide Markdown, HTML, or an external URL for the user agreement":"Укажите Markdown, HTML или внешний URL для пользовательского соглашения","Provide per-category safety overrides as JSON. Use `default` for fallback values.":"Предоставьте переопределения безопасности по категориям в формате JSON. Используйте `default` для резервных значений.","Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.":"Предоставьте переопределения заголовков для каждой модели в формате JSON. Полезно для включения бета-функций, таких как расширенные окна контекста.","Provider":"Провайдер","Provider & data privacy":"Поставщик и конфиденциальность","Provider created successfully":"Поставщик успешно создан","Provider deleted successfully":"Поставщик успешно удален","Provider Name":"Имя поставщика","Provider type (OpenAI, Anthropic, etc.)":"Тип провайдера (OpenAI, Anthropic и т.д.)","Provider updated successfully":"Поставщик успешно обновлен","Provider-specific endpoint, account, and compatibility settings.":"Настройки endpoint, аккаунта и совместимости для конкретного провайдера.","Proxy Address":"Адрес прокси","Prune Object Items":"Очистить элементы объекта","Prune object items by conditions":"Удалить элементы объекта по условиям","Prune Rule (string or JSON object)":"Правило очистки (строка или JSON-объект)","Public model catalog and pricing page.":"Публичная страница каталога моделей и цен.","Public rankings page based on live usage data.":"Публичная страница рейтингов на основе реальных данных использования.","Publish Date":"Дата публикации","Published":"Опубликовано","Published models, groups, and model remapping rules.":"Опубликованные модели, группы и правила переназначения моделей.","Published:":"Опубликовано:","Pull":"Загрузить","Pull model":"Загрузить модель","Pulling...":"Загрузка...","Purchase Limit":"Лимит покупок","Purchase limit reached":"Достигнут лимит покупок","Purchase Subscription":"Приобрести подписку","QR Code Image URL":"URL изображения QR-кода","QR code is not configured. Please contact support.":"QR-код не настроен. Пожалуйста, свяжитесь со службой поддержки.","Quantity":"Количество","QuantumNous":"QuantumNous","Query Balance":"Баланс запросов","Query Param":"Параметр запроса","Querying...":"В
107ыполняется запрос...","Question":"Вопрос","Queued":"В очереди","Quick actions":"Быстрые действия","Quick insert common payment methods":"Быстрая вставка распространенных способов оплаты","Quick Range":"Быстрый диапазон","Quick Setup from Preset":"Быстрая настройка из предустановки","Quota":"Квота","Quota ({{currency}})":"Квота ({{currency}})","Quota adjusted successfully":"Квота успешно изменена","Quota consumed before charging users":"Квота, потребляемая до взимания платы с пользователей","Quota Distribution":"Распределение квоты","Quota given to invited users":"Квота, предоставляемая приглашенным пользователям","Quota given to users who invite others":"Квота, предоставляемая пользователям, которые приглашают других","Quota must be a positive number":"Квота должна быть положительным числом","Quota must be zero or greater":"Квота не может быть отрицательной","Quota Per Unit":"Квота на единицу","Quota reminder (tokens)":"Напоминание о квоте (токены)","Quota Reset":"Сброс квоты","Quota Settings":"Настройки квоты","Quota Types":"Типы квот","Quota Warning Threshold":"Порог предупреждения о квоте","Quota:":"Квота:","Radius":"Радиус","Random":"Случайный","Randomly select a key from the pool for each request":"Случайно выбирать ключ из пула для каждого запроса","Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.":"Сейчас данные рейтинга смоделированы для превью; после внедрения бэкенда они будут заменены реальной аналитикой.","Rankings":"Рейтинги","Rate Limit Windows":"Окна ограничения скорости","Rate Limited":"Ограничение частоты","Rate Limiting":"Ограничение скорости","Rate limits":"Ограничения частоты","Ratio":"Коэффициент","Ratio applied to audio completions for streaming models.":"Коэффициент, применяемый к аудио-завершениям для потоковых моделей.","Ratio applied to audio inputs where supported by the upstream model.":"Коэффициент, применяемый к аудио-входам, где это поддерживается вышестоящей моделью.","Ratio applied when creating cache entries for supported models.":"Коэффициент, применяемый при создании записей кэша для поддерживаемых моделей.","Ratio mode":"Режим соотношения","Ratio Type":"Тип соотношения","Ratio: {{value}}":"Коэффициент: {{value}}","Ratios synced successfully":"Соотношения успешно синхронизированы","Raw expression":"Исходное выражение","Raw JSON":"Сырой JSON","Raw Quota":"Исходная квота","Re-enable on success":"Повторно включить при успехе","Re-login":"Повторный вход","Ready":"Готово","Ready to initialize":"Готов к инициализации","Ready to simplify":"Готовы упростить","Real exchange rate between USD and your payment gateway currency":"Реальный обменный курс между USD и валютой вашего платежного шлюза","Reason":"Причина","Reason:":"Причина:","Reasoning":"Обоснование","Reasoning Effort":"Интенсивность рассуждения","Receive Upstream Model Update Notifications":"Получать уведомления об обновлениях вышестоящих моделей","Received":"Получено","Recently launched models":"Недавно запущенные модели","Recently launched models gaining traction":"Недавно вышедшие модели, набирающие популярность","Recharge":"Пополнение","Recharge Amount":"Сумма пополнения","Recharge Amount (USD)":"Сумма пополнения (USD)","Recommended":"Рекомендуется","Recommended actions":"Рекомендуемые действия","Recommended to keep this high to avoid upstream throttling.":"Рекомендуется поддерживать это значение высоким, чтобы избежать регулирования со стороны вышестоящего поставщика.","Record IP Address":"Записывать IP-адрес","Record quota usage":"Записывать использование квоты","Recursion Strategy":"Стратегия рекурсии","Recursive":"Рекурсивно","Redeem":"Обменять квоту","Redeem codes":"Активировать коды","Redeemed By":"Активировано","Redeemed:":"Активировано:","Received amount":"Полученная сумма","redemption code":"код активации","Redemption Code":"Код активации","Redemption code deleted successfully":"Код активации успешно удален","Redemption code disabled successfully":"Код активации успешно отключен","Redemption code enabled successfully":"Код активации успешно включен","Redemption code updated successfully":"Код активации успешно обновлен","Redemption code(s) created successfully":"Код(ы) активации успешно создан(ы)","Redemption Codes":"Коды активации","Redemption codes are disabled until the administrator confirms compliance terms.":"Коды пополнения отключены, пока администратор не подтвердит условия соответствия.","redemption codes.":"коды активации.","Redemption failed":"Погашение не удалось","Redemption successful! Added: {{quota}}":"Погашение успешно! Добавлено: {{quota}}","Redirecting to chat page...":"Перенаправление на страницу чата...","Redirecting to Creem checkout...":"Перенаправление на кассу Creem...","Redirecting to GitHub...":"Перенаправление на GitHub...","Redirecting to payment page...":"Перенаправление на страницу оплаты...","Redirecting to sign in in {{seconds}} seconds.":"Переход на страницу входа через {{seconds}}
107 сек.","Reference Video":"Эталонное видео","Referral link:":"Реферальная ссылка:","Referral Program":"Реферальная программа","Referral reward transfer is disabled until the administrator confirms compliance terms.":"Перевод реферальных наград отключен, пока администратор не подтвердит условия соответствия.","Refine models by provider, group, type, and tags.":"Уточняйте список моделей по поставщику, группе, типу и тегам.","Refresh":"Обновить","Refresh Cache":"Обновить кэш","Refresh credential":"Обновить учётные данные","Refresh failed":"Ошибка обновления","Refresh interval (minutes)":"Интервал обновления (минуты)","Refresh Stats":"Обновить статистику","Refreshing...":"Обновление...","Refund":"Возврат","Refund Details":"Детали возврата","Regenerate":"Перегенерировать","Regenerate Backup Codes":"Сгенерировать резервные коды","Regex":"Регулярное выражение","Regex Pattern":"Регулярное выражение","Regex Replace":"Замена по regex","Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.":"Зарегистрируйте каждый URL в соответствующем слоте вебхука Test Mode / Production Mode в панели Pancake. Раздельные конечные точки предотвращают случайное зачисление тестового трафика на производственные аккаунты.","Register Passkey":"Регистрация Passkey","Registered a passkey":"Ключ доступа зарегистрирован","Registration Enabled":"Регистрация включена","Registry (optional)":"Реестр (необязательно)","Registry secret":"Секрет реестра","Registry username":"Имя пользователя реестра","Reject Reason":"Причина отклонения","Release details":"Детали релиза","Released":"Выпущено","Relying Party Display Name":"Отображаемое имя проверяющей стороны","Relying Party ID":"Идентификатор проверяющей стороны","Remaining":"Остаток","Remaining quota":"Остаток квоты","Remaining Quota ({{currency}})":"Остаток квоты ({{currency}})","Remaining quota units":"Остаток единиц квоты","Remaining:":"Осталось:","Remark":"Примечания","Remove":"Удалить","Remove {{value}}":"Удалить {{value}}","Remove ${{amount}}":"Удалить ${{amount}}","Remove all log entries created before the selected timestamp.":"Удалить все записи журнала, созданные до выбранной отметки времени.","Remove attachment":"Удалить вложение","Remove condition":"Удалить условие","Remove Duplicates":"Удалить дубликаты","Remove filter":"Удалить фильтр","Remove functionResponse.id field":"Удалить поле functionResponse.id","Remove mapped targets":"Удалить сопоставленные цели","Remove Models":"Удалить модели","Remove Passkey":"Отвязать Passkey","Remove Passkey?":"Удалить ключ доступа?","Remove rule group":"Удалить группу правил","Remove string prefix":"Удалить префикс строки","Remove string suffix":"Удалить суффикс строки","Remove the target field":"Удалить целевое поле","Remove tier":"Удалить уровень","Removed":"Удалено","Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}":"Удалено {{removed}} дублирующихся ключей. До: {{before}}, После: {{after}}","Removed an OAuth binding for the user":"Привязка OAuth пользователя удалена","Removed Models ({{count}})":"Удалённые модели ({{count}})","Removes Midjourney flags such as --fast, --relax, and --turbo from user prompts.":"Удаляет флаги Midjourney, такие как 
107--fast, --relax и --turbo, из промптов пользователя.","Removing Passkey will require you to sign in with your password next time. You can re-register anytime.":"Удаление ключа доступа потребует от вас входа с паролем в следующий раз. Вы можете перерегистрироваться в любое время.","Rename":"Переименовать","Rename deployment":"Переименовать развертывание","Rename failed":"Ошибка переименования","Renamed successfully":"Успешно переименовано","Repeat the administrator password":"Повторите пароль администратора","Replace":"Заменить","Replace all existing keys":"Заменить все существующие ключи","Replace channel models":"Замена моделей каналов","Replace mode: Will completely replace all existing keys":"Режим замены: полностью заменит все существующие ключи","Replace With":"Заменить на","replaced":"заменено","Replacement Model":"Модель замены","Replica count":"Количество реплик","Replicate":"Replicate","Report an issue":"Сообщить о проблеме","request":"запрос","Request":"Запрос","Request Body Disk Cache":"Дисковый кэш тела запроса","Request Body Field":"Поле тела запроса","Request Body Memory Cache":"Кэш памяти тела запроса","Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.":"Проброс тела запроса включён. Тело запроса будет отправлено напрямую без конвертации.","Request conversion":"Преобразование запроса","Request Conversion":"Конвертация запроса","Request Count":"Количество запросов","Request failed":"Запрос не выполнен","Request flow":"Поток запросов","Request Header Field":"Поле заголовка запроса","Request Header Override":"Переопределение заголовков запроса","Request Header Overrides":"Переопределения заголовков запроса","Request ID":"ID запроса","Request Limits":"Лимиты запросов","Request Model":"Запрошенная модель","Request Model:":"Модель запроса:","Request overrides, routing behavior, and upstream model automation":"Переопределения запросов, маршрутизация и автоматизация upstream-моделей","Request rule pricing":"Правила ценообразования по запросу","Request success rate sampled over the last 24 hours":"Доля успешных запросов по выборкам за последние 24 часа","Request success rate; {{incidents}} incident buckets in the last 24 hours":"Доля успешных запросов; {{incidents}} интервалов с инцидентами за последние 24 часа","Request timed out, please refresh and restart GitHub login":"Время ожидания истекло, обновите страницу и снова запустите вход через GitHub","Request-based":"Зависит от запроса","Requests (24h)":"Запросы (24 ч)","Requests / 24h":"Запросы / 24 ч","Requests per minute":"Запросов в минуту","requests served":"обслуженных запросов","Requests will be forwarded to this worker. Trailing slashes are removed automatically.":"Запросы будут перенаправлены этому воркеру. Конечные слеши удаляются автоматически.","Requests:":"Запросы:","Require email verification for new accounts":"Требовать подтверждение электронной почты для новых учетных записей","Require job success before follow-up actions":"Требовать успеха задания перед последующими действиями","Require login to view models":"Требовать вход для просмотра моделей","Require login to view rankings":"Требовать вход для просмотра рейтингов","required":"обязателен","Required":"Обязательно","Required events:":"Обязательные события:","Required provider, authentication, model, and group settings":"Обязательные настройки провайдера, аутентификации, моделей и групп","Required to expose Midjourney-style image generation to end users.":"Ð
107ÐµÐ¾Ð±Ñ…одимо для предоставления генерации изображений в стиле Midjourney конечным пользователям.","Rerank":"Переранжировать","Reroll":"Повторить","Research, analysis, scientific reasoning":"Исследования, анализ, научные рассуждения","Resend ({{seconds}}s)":"Отправить повторно ({{seconds}}с)","Reset":"Сброс","Reset 2FA":"Сбросить 2FA","Reset all model prices?":"Сбросить все цены моделей?","Reset all model ratios?":"Сбросить все соотношения моделей?","Reset all settings to default values":"Сбросить все настройки до значений по умолчанию","Reset at:":"Сброс в:","Reset balance and used quota":"Сбросить баланс и использованную квоту","Reset Cycle":"Цикл сброса","Reset email sent, please check your inbox":"Письмо для сброса отправлено, проверьте входящие","Reset failed":"Ошибка сброса","Reset model ratios":"Коэффициенты моделей сброшены","Reset Passkey":"Сброс Passkey","Reset password":"Сбросить пароль","Reset Period":"Период сброса","Reset prices":"Сбросить цены","Reset ratios":"Сбросить соотношения","Reset Stats":"Сбросить статистику","Reset the user passkey":"Ключ доступа пользователя сброшен","Reset to default":"Сбросить до значений по умолчанию","Reset to Default":"Сбросить по умолчанию","Reset to default configuration":"Сброшено к конфигурации по умолчанию","Reset Two-Factor Authentication":"Сброс 2FA","Resets in:":"Сброс через:","Resolve Conflicts":"Разрешить конфликты","Resource Configuration":"Конфигурация ресурсов","Response":"Ответ","Response Time":"Время ответа","Responses API Version":"Версия API ответов","Restore defaults":"Сбросить к значениям по умолчанию","Restrict user model request frequency (may impact high concurrency performance)":"Ограничить частоту запросов пользовательских моделей (может повлиять на производительность при высокой конкуренции)","Result":"Результат","Retain last N days":"Хранить последние N дней","Retain last N files":"Хранить последние N файлов","Retention days":"Дней хранения","Retry":"Повторить попытку","Retry Chain":"Цепочка повторов","Retry Suggestion":"Рекомендация по повтору","Retry Times":"Количество повторных попыток","Return a custom error immediately":"Немедленно вернуть пользовательскую ошибку","Return Custom Error":"Вернуть пользовательскую ошибку","Return data conforming to a JSON schema":"Возвращать данные, соответствующие JSON-схеме","Return Error":"Вернуть ошибку","Return per-token log probabilities":"Возвращать логарифмические вероятности по токенам","Return to dashboard":"Вернуться на панель управления","Return vector embeddings for inputs":"Возвращать векторные эмбеддинги для входных данных","Reveal API key":"Показать API ключ","Reveal key":"Показать ключ","Revenue":"Доход","Review & initialize":"Проверить и инициализировать","Review model rates before scaling traffic":"Проверьте тарифы моделей перед масштабированием трафика","Review your payment details":"Проверьте свои платежные данные","Review your purchase details before proceeding.":"Просмотрите детали покупки перед продолжением.","Rewards will be added directly to your balance":"Награды будут добавлены напрямую в ваш баланс","Rewrite callback URLs to the local server":"Перезаписывать URL обратных вызовов на локальный сервер","Right to Left":"Справа налево","Role":"Роль","Roleplay":"Ролевые игры","Root":"Корень","Rose Garden":"Розовый сад","Route":"Маршрут","Route active":"Маршрут активен","Route Description":"Описание маршрута","Route is required":"Маршрут обязателен","Route, auth, and balance check in one place":"Маршрут, аутентификация и баланс в одном месте","Routing & Overrides":"Маршрутизация и переопределения","Routing Strategy":"Стратегия маршрутизации","Rows per page":"Строк на страницу","RPM":"RPM","RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.":"RPM = запросов в минуту, TPM = токенов в минуту, RPD = запросов в день. Ограничения применяются к каждой группе токенов.","RSA Private Key (Production)":"RSA-приватный ключ (Продакшн)","RSA Private Key (Sandbox)":"RSA-приватный ключ (Песочница)","Rule":"Правило","Rule {{line}} is missing source field":"В правиле {{line}} отсутствует исходное поле","Rule {{line}} is missing target field":"В правиле {{line}} отсутствует целевое поле","Rule {{line}} is missing target path":"В правиле {{line}} отсутствует целевой путь","Rule {{line}} is missing value":"В правиле {{line}} отсутствует значение","Rule {{line}}
107 pass_headers format is invalid":"Формат pass_headers в правиле {{line}} невалиден","Rule {{line}} pass_headers is missing header names":"В правиле {{line}} pass_headers отсутствуют имена заголовков","Rule {{line}} prune_objects is missing conditions":"В правиле {{line}} prune_objects отсутствуют условия","Rule {{line}} return_error requires a message field":"В правиле {{line}} return_error требуется поле message","Rule Description (optional)":"Описание правила (необязательно)","Rule group":"Группа правил","rules":"правила","Rules":"Правила","Rules JSON":"Правила JSON","Rules JSON must be an array":"JSON правил должен быть массивом","Run GC":"Запустить GC","Run tests for the selected models":"Запустить тесты для выбранных моделей","Running":"Выполняется","Runway":"Запас","s":"s","Safety Settings":"Настройки безопасности","Same as Local":"То же, что и локальный","Sampling temperature; lower is more deterministic":"Температура сэмплирования; чем ниже, тем детерминированнее","Sandbox mode":"Режим песочницы","Save":"Сохранить","Save all settings":"Сохранить все настройки","Save Backup Codes":"Сохранить резервные коды","Save changes":"Сохранить изменения","Save Changes":"Сохранить изменения","Save chat settings":"Сохранить настройки чата","Save check-in settings":"Сохранить настройки прибытия","S
107ave Creem settings":"Сохранить настройки Creem","Save drawing settings":"Сохранить настройки рисования","Save Epay settings":"Сохранить настройки Epay","Save failed":"Не удалось сохранить","Save failed, please retry":"Не удалось сохранить, попробуйте снова","Save general settings":"Сохранить общие настройки","Save group ratios":"Сохранить коэффициенты групп","Save io.net settings":"Сохранить настройки io.net","Save log settings":"Сохранить настройки журнала","Save model prices":"Сохранить цены моделей","Save model ratios":"Сохранить коэффициенты моделей","Save Models":"Сохранить модели","Save monitoring rules":"Сохранить правила мониторинга","Save navigation":"Сохранить навигацию","Save notice":"Сохранить уведомление","Save Preferences":"Сохранить настройки","Save preview":"Предпросмотр сохранения","Save rate limits":"Сохранить лимиты скорости","Save sensitive words":"Сохранить чувствительные слова","Save Settings":"Сохранить настройки","Save sidebar modules":"Сохранить модули боковой панели","Save SMTP settings":"Сохранить настройки SMTP","Save SSRF settings":"Сохранить настройки SSRF","Save Stripe settings":"Сохранить настройки Stripe","Save these backup codes in a safe place. Each code can only be used once.":"Сохраните эти резервные коды в безопасном месте. Каждый код может быть использован только один раз.","Save these codes in a safe place. Each code can only be used once.":"Сохраните эти коды в безопасном месте. Каждый код может быть использован только один раз.","Save tool prices":"Сохранить цены инструментов","Save Waffo Pancake settings":"Сохранить настройки Waffo Pancake","Save Worker settings":"Сохранить настройки Worker","Saved successfully":"Сохранено успешно","Saving...":"Сохранение...","Scan QR Code":"Сканировать QR-код","Scan the QR code to follow the official account and reply with “验证码” to receive your verification code.":"Отсканируйте QR-код, откройте официальный аккаунт и ответьте «验证码», чтобы получить код подтверждения.","Scan the QR code with WeChat to bind your account":"Отсканируйте QR-код с помощью WeChat, чтобы привязать свою учетную запись","Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)":"Отсканируйте этот QR-код с помощью вашего приложения-аутентификатора (Google Authenticator, Microsoft Authenticator и т.д.)","Scenario Templates":"Шаблоны сценариев","Scheduled channel tests":"Запланированные тесты канала","scheduling controls":"механизмов управления маршрутизацией","Science":"Наука","Scope":"Область","Scopes":"Области доступа","Search":"Поиск","Search by name or URL...":"Поиск по имени или URL...","Search by order number...":"Поиск по номеру заказа...","Search channel type...":"Поиск типа канала...","Search chat presets...":"Поиск предустановок чата...","Search colors...":"Поиск цветов...","Search conflicting models or fields":"Поиск конфликтующих моделей или полей","Search deployments...":"Поиск развертываний...","Search feature in development":"Функция поиска в разработке","Search group names...":"Поиск названий групп...","Search groups...":"Поиск групп...","Search missing models":"Поиск отсутствующих моделей","Search model name, provider, endpoint, or tag...":"Поиск по Ð
107½Ð°Ð·Ð²Ð°Ð½Ð¸ÑŽ модели, поставщику, endpoint или тегу...","Search model name...":"Поиск имени модели...","Search models":"Поиск моделей","Search models or fields...":"Поиск моделей или полей...","Search models...":"Поиск моделей...","Search payment methods...":"Поиск способов оплаты...","Search payment types...":"Поиск типов оплаты...","Search products...":"Поиск продуктов...","Search rules...":"Поиск правил…","Search tags...":"Поиск тегов...","Search the public web at inference time":"Искать в общедоступной сети во время инференса","Search vendors...":"Поиск поставщиков...","Search...":"Поиск...","seconds":"секунды","Secret env (JSON object)":"Секретные переменные окружения (объект JSON)","Secret environment variables (JSON)":"Секретные переменные окружения (JSON)","Secret Key":"Секретный ключ","Secure & Reliable":"Безопасно и надежно","Secured":"Защищено","Security":"Безопасность","Security & Limits":"Безопасность и лимиты","Security Check":"Проверка безопасности","Security verification":"Подтверждение безопасности","Select":"Выбрать","Select a color":"Выбрать цвет","Select a group":"Выбрать группу","Select a group type":"Выбрать тип группы","Select a model to edit pricing":"Выберите модель для редактирования тарифа","Select a preset...":"Выберите предустановку...","Select a product":"Выберите продукт","Select a role":"Выбрать роль","Select a rule to edit.":"Выберите правило для редактирования.","Select a store":"Выберите магазин","Select a timestamp before clearing logs.":"Выберите временную метку перед очисткой журналов.","Select a usage mode to continue":"Выберите режим использования для продолжения","Select a verification method first":"Сначала выберите метод верификации","Select all":"Выбрать все","Select all (filtered)":"& Выбрать все отфильтрованные","Select all models":"Выбрать все модели","Select All Visible":"Выбрать все видимые","Select an operation mode and enter the amount":"Выберите режим операции и введите сумму","Select announcement type":"Выбрать тип объявления","Select at least one field to overwrite.":"Выберите хотя бы одно поле для перезаписи.","Select at least one target model":"Выберите хотя бы одну целевую модель","Select body font":"Выберите шрифт текста","Select border radius":"Выберите радиус скругления","Select channel type":"Выбрать тип канала","Select color preset":"Выберите цветовую предустановку","Select content width":"Выберите ширину контента","Select corner radius":"Выберите радиус скругления","Select currency":"Выберите валюту","Select date":"Выберите дату","Select default chart":"В
107ыберите график по умолчанию","Select default range":"Выберите диапазон по умолчанию","Select display mode":"Выбрать режим отображения","Select end time":"Выбрать время окончания","Select from presets or type custom identifier.":"Выберите из предустановок или введите пользовательский идентификатор.","Select granularity":"Выбрать детализацию","Select groups (leave empty to keep current)":"Выбрать группы (оставьте пустым, чтобы сохранить текущие)","Select interface density":"Выберите плотность интерфейса","Select items...":"Выберите элементы...","Select key format":"Выберите формат ключа","Select language":"Выберите язык","Select Language":"Выбрать язык","Select layout style":"Выбрать стиль макета","Select locations":"Выбрать локации","Select Model":"Выбрать модель","Select model {{model}}":"Выбрать модель {{model}}","Select models (empty for allow all)":"Выбрать модели (пусто для разрешения всех)","Select models and apply to channel models list.":"Выберите модели и примените к списку моделей каналов.","Select models or add custom ones":"Выбрать модели или добавить пользовательские","Select models to process. Unselected \\"add\\" models will be ignored.":"Выберите модели для обработки. Невыбранные модели «добавить» будут проигнорированы.","Select models to run batch tests.":"Выберите модели для запуска пакетных тестов.","Select or enter color value":"Выбрать или ввести значение цвета","Select or enter model name":"Выберите или введите имя модели","Select or enter payment type":"Выбрать или ввести тип оплаты","Select payment method":"Выберите способ оплаты","Select preset or enter custom CSS color value.":"Выберите предустановку или введите пользовательское значение цвета CSS.","Select publish date":"Выберите дату публикации","Select requirement":"Выбрать требование","Select row":"Выбрать строку","Select sidebar style":"Выбрать стиль боковой панели","Select site direction":"Выбрать направление сайта","Select start time":"Выбрать время начала","Select subscription plan":"Выбрать план подписки","Select Sync Channels":"Выбрать каналы синхронизации","Select sync channels to compare prices":"Выберите каналы синхронизации для сравнения цен","Select sync channels to compare ratios":"Выбрать каналы синхронизации для сравнения соотношений","Select Sync Source":"Выбрать источник синхронизации","Select the API endpoint region":"Выбрать регион конечной точки API","Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.":"Выберите поля, которые вы хотите перезаписать данными из вышестоящего источника. Невыбранные поля сохранят свои локальные значения.","Select theme preference":"Выбрать предпочтение темы","Select theme preset":"Выберите пресет темы","Select time granularity":"Выбрать детализацию времени","Select vendor":"Выбрать поставщика","Selectable groups":"Выбираемые группы","selected":"выбрано","Selected {{count}}":"Выбрано: {{count}}","selected channel(s). Leave empty to remove tag.":"выбранный канал(ы). Оставьте пустым, чтобы удалить тег.","Selected conflicts were overwritten successfully.":"Выбранные конфликты успешно перезаписаны.","Selected when creating a token and used as the default billing group for API calls.":"Выбирается при создании токена и используется как группа тарификации по умолчанию для вызовов API.","Self-Use Mode":"Режим самоиспользования","Send":"Отправить","Send a request":"Отправить запрос","Send code":"Отправить код","Send email alerts when a user falls below this quota":"Отправлять оповещения по электронной почте, когда пользователь опускается ниже этой квоты","Sending...":"Отправка...","Sensitive Words":"Чувствительные слова","Sent the API key to FluentRead.":"API-ключ отправлен в FluentRead.","Separate image/audio prices are enabled.":"Отдельные цены для изображений и аудио включены.","Serve multiple users or teams with billing and quota control.":"Обслуживание нескольких пользователей или команд с управлением биллингом и квотами.","Server Address":"Адрес сервера","Server IP":"IP сервера","Server Log Management":"Управление журналами сервера","Server logging is not enabled (log directory not configured)":"Журналирование сервера не включено (каталог журналов не настроен)","Server Token":"Токен сервера","Service account JSON file(s)":"JSON-файл сервисного аккаунта","Session expired!":"СессиÑ
107 истекла!","Session expired?":"Сессия истекла?","Set":"Установить","Set a discount rate for a specific recharge amount threshold.":"Установите ставку скидки для определенного порога суммы пополнения.","Set a secure password (min. 8 characters)":"Установите надежный пароль (минимум 8 символов)","Set a tag for":"Установить тег для","Set API key access restrictions":"Настройте ограничения доступа API-ключа","Set API key basic information":"Настройте основные сведения API-ключа","Set default ranges and charts for model analytics.":"Настройте диапазоны и графики по умолчанию для аналитики моделей.","Set Field":"Установить поле","Set filters to customize your dashboard statistics and charts.":"Установите фильтры, чтобы настроить статистику и диаграммы вашей панели управления.","Set filters to narrow down your log search results.":"Установите фильтры, чтобы сузить результаты поиска по журналам.","Set Header":"Установить заголовок","Set Project to io.cloud when creating/selecting key":"Установите Проект в io.cloud при создании/выборе ключа","Set quota amount and limits":"Настройте квоту и лимиты","Set Request Header":"Установить заголовок запроса","Set runtime request header: override entire value, or manipulate comma-separated tokens":"Установить заголовок запроса: переопределить значение или управлять токенами через запятую","Set separate prices for cache reads and writes.":"Задайте отдельные цены для чтения и записи кэша.","Set Tag":"Установить тег","Set tag for selected channels":"Установить тег для выбранных каналов","Set the language used across the interface":"Настроить язык интерфейса","Set the user\'s role (cannot be Root)":"Установить роль пользователя (не может быть Root)","Setting Key":"Ключ настройки","Setting saved":"Настройка сохранена","Setting up 2FA...":"Настройка 2FA...","Setting updated successfully":"Настройка успешно обновлена","Settings":"Настройки","Settings & Preferences":"Настройки и предпочтения","Settings updated successfully":"Настройки успешно обновлены","Session":"Сессия","Setup guide":"Руководство по настройке","Setup guide complete":"Руководство по настройке завершено","Setup guide is collapsed. Expand it anytime.":"Руководство по настройке свернуто. Его можно открыть в любой момент.","Setup Instructions":"Инструкции по настройке","Setup progress: {{completed}}/{{total}}":"Прогресс настройки: {{completed}}/{{total}}","Setup Two-Factor Authentication":"Настроить двухфакторную аутентификацию","Share":"Доля","Share your link and earn rewards":"Поделитесь своей ссылкой и получайте вознаграждения","Shared configuration for all payment gateways":"Общая конфигурация для всех платежных шлюзов","Shorten":"Сократить","Show":"Показать","Show All":"Показать все","Show all providers including unbound":"Показать всех провайдеров (включая непривязанные)","Show only bound providers":"Показать только привязанных провайдеров","Show prices in currency instead of quota.":"Показывать цены в валюте вместо квоты.","Show setup guide":"Показать руководство по настройке","Show token usage statistics in the UI":"Показывать статистику использования токенов в пользовательском интерфейсе","Showcase core capabilities with demo credentials and limited access.":"Демонстрация основных возможностей с демо-учётными данными и ограниченным доступом.","Showing":"Отображать","showing •":"отображается •","Sidebar":"Боковая панель","Sidebar collapsed by default for new users":"Боковая панель свернута по умолчанию для новых пользователей","Sidebar modules":"Модули боковой панели","Sidebar Personal Settings":"Личные настройки боковой панели","Sign in":"Войти","Sign In":"Войти","Sign in now":"Войти сейчас","Sign in required":"Требуется вход","Sign in with Passkey":"Войти с Passkey","Sign out":"Выйти","Sign up":"Регистрация","Signed in":"Вход выполнен","Signed in successfully!":"Успешный вход!","Signed in via WeChat":"Вошли через WeChat","Signed in with Passkey":"Вошли с помощью Passkey","Signed out":"Выход выполнен","Significant outages detected":"Обнаружены серьёзные сбои","Signing you in with {{provider}}":"Входим через {{provider}}","SiliconFlow":"SiliconFlow","Simple":"Простой","Simple mode only returns message; status code and error type use system defaults.":"Простой режим возвращает только сообщение; код статуса и тип ошибки используют системные значения по умолчанию.","Simple mode: prune objects by type, e.g. redacted_thinking.":"Простой режим: очистка объектов по типу, например redacted_thinking.","Single Key":"Одиночный ключ","Site & Branding":"Сайт и брендинг","Site Key":"Ключ сайта","Size:":"Размер:","sk_xxx or rk_xxx":"sk_xxx или rk_xxx","Skip retry on failure":"Не повторять при ошибке","Skip to Main":"Перейти Ð
107º основному содержимому","Slug":"Идентификатор","Slug can only contain letters, numbers, hyphens, and underscores":"Slug может содержать только буквы, цифры, дефисы и подчёркивания","Slug is required":"Slug обязателен","Slug must be less than 100 characters":"Slug должен содержать менее 100 символов","Smallest USD amount users can recharge (Epay)":"Минимальная сумма в USD, которую пользователи могут пополнить (Epay)","SMTP Email":"Электронная почта SMTP","SMTP Host":"Хост SMTP","smtp.example.com":"smtp.example.com","socks5://user:pass@host:port":"socks5://user:pass@host:port","Soft Errors":"Мягкие ошибки","Some channels failed: {{errorMsg}}":"Некоторые каналы не удались: {{errorMsg}}","Something went wrong!":"Что-то пошло не так!","Sonnet Model":"Модель Sonnet","Sora":"Sora","Sort":"Сортировать","Sort by ID":"Сортировать по ID","Sort Order":"Порядок сортировки","Source":"Источник","Source Endpoint":"Исходная точка","Source Field":"Исходное поле","Source Header":"Исходный заголовок","sources":"источники","Space-separated OAuth scopes":"Области доступа OAuth, разделенные пробелами","Spark model version, e.g., v2.1 (version number in API URL)":"Версия модели Spark, например, v2.1 (номер версии в URL API)","Special billing expression":"Специальное выражение тарификации","Special group":"Специальная группа","Special ratio rules":"Специальные правила коэффициентов","Special ratios override the token group ratio for specific user group and token group combinations.":"Специальные коэффициенты переопределяют коэффициент группы токена для конкретных сочетаний группы пользователя и группы токена.","Special usable group rules":"Специальные правила для групп с доступом","Special usable group rules can add, remove, or append selectable token groups for a specific user group.":"Правила специальных доступных групп могут добавлять, удалять или дополнять выбираемые группы токенов для конкретной группы пользователей.","SQLite stores all data in a single file. Make sure that file is persisted 
107when running in containers.":"SQLite хранит все данные в одном файле. Убедитесь, что файл сохраняется при работе в контейнерах.","SSRF Protection":"Защита от SSRF","Standard":"Стандартный","Standard price":"Стандартная цена","Start":"Начало","Start a conversation to see messages here":"Начните разговор, чтобы увидеть сообщения здесь","Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.":"Начните принимать платежи по всему миру без регистрации компании. Подходит для независимых разработчиков, индивидуальных предпринимателей OPC и стартапов. Waffo Pancake выступает как Merchant of Record и берет на себя комплаенс глобального приема платежей: потребительские налоги, выставление счетов, управление подписками, возвраты и чарджбеки. Одиночные разработчики могут быстро запуститься и сосредоточиться на продукте, а не на комплаенсе. Подключение за минуты — от одного запроса до полной интеграции.","Start for free with generous limits. No credit card required.":"Начните бесплатно с щедрыми лимитами. Кредитная карта не требуется.","Start Time":"Время начала","Static page describing the platform.":"Статическая страница, описывающая платформу.","Statistical count":"Статистический подсчет","Statistical quota":"Статистическая квота","Statistical tokens":"Статистические токены","Statistics reset":"Статистика сброшена","Status":"Статус","Status & Sync":"Статус и синхронизация","Status Code":"Код статуса","Status Code Mapping":"Сопоставление кодов состояния","Status code mapping must use valid HTTP status codes":"Сопоставление кодов состояния должно использовать допустимые HTTP-коды","Status Page Slug":"Slug страницы статуса","Status short":"Стат.","Status:":"Статус:","Stay":"Остаться","Stay tuned though!":"Оставайтесь на связи!","Steer behaviour with a system instruction":"Управлять поведением с помощью системной инструкции","Step":"Шаг","Stop":"Остановить","Stop Retry":"Остановить повтор","Store":"Store","Store + product created":"МагаÐ
107·Ð¸Ð½ и продукт созданы","Store ID":"ID магазина","Store ID is required":"Требуется ID магазина","Stored value is not echoed back for security":"В целях безопасности сохранённое значение не отображается","stream":"Поток","Stream":"Поток","Stream Mode":"Потоковый режим","Stream Status":"Статус потока","Stream tokens incrementally as they are generated":"Передавать токены по мере их генерации","Stream tokens via Server-Sent Events":"Стримить токены через Server-Sent Events","Streaming":"Стриминг","String Replace":"Замена строки","Stripe":"Stripe","Stripe API key (leave blank unless updating)":"Ключ API Stripe (оставьте пустым, если не обновляете)","Stripe Dashboard":"Панель управления Stripe","Stripe Gateway":"Шлюз Stripe","Stripe product price ID":"ID цены продукта Stripe","Stripe/Creem requires creating products on the third-party platform and entering the ID":"Stripe/Creem требует создания продуктов на сторонней платформе и ввода ID","Structured output":"Структурированный вывод","Submit":"Отправить","Submit directly":"Отправить напрямую","Submit Result":"Отправить результат","Submit Time":"Время отправки","Submitted":"Отправлено","Submitting":"Отправка","Submitting...":"Отправка...","Submodel":"Submodel","Subscribe Now":"Подписаться сейчас","Subscribe to a plan for model access":"Подпишитесь на план для доступа к моделям","Subscription":"Подписка","Subscription Billing":"Биллинг подписки","Subscription First":"Подписка в приоритете","Subscription Management":"Управление подписками","Subscription Only":"Только подписка","Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.":"Создание и изменение планов подписки заблокированы, пока администратор не подтвердит условия соответствия в настройках платежного шлюза.","Subscription Plans":"Планы подписки","Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).":"Планы подписки НЕ используют привязанный продукт — у каждого плана есть собственный продукт Pancake, задаваемый в администрировании подписок (или автоматически создаваемый кнопкой «+ Создать»).","Subscription purchased successfully":"Подписка успешно приобретена","Subtract":"Вычесть","Success":"Успешно","Success rate":"Доля успешных запросов","Successfully created {{count}} API Key(s)":"Успешно создано {{count}} API-ключ(а/ей)","Successfully created {{count}} redemption codes":"Успешно создано {{count}} кодов активации","Successfully deleted {{count}} API key(s)":"Успешно удалено {{count}} API-ключ(а/ей)","Successfully deleted {{count}} invalid redemption codes":"Успешно удалено {{count}} недействительных кодов активации","Successfully deleted {{count}} model(s)":"Успешно удалено {{count}} моделей","Successfully disabled {{count}} model(s)":"Успешно отключено {{count}} моделей","Successfully enabled {{count}} model(s)":"Успешно включено {{count}} моделей","Suffix":"Суффикс","Suffix Match":"Совпадение по суффиксу","SunoAPI":"SunoAPI","Sunset Glow":"Закатное сияние","Super Admin":"Суперадмин","Super Large":"Очень крупная","Support for high concurrency with automatic load balancing":"Поддержка высокой конкурентности с автоматической балансировкой нагрузки","Supported Applications":"Поддерживаемые приложения","Supported Imagine Models":"Поддерживаемые модели Imagine","Supported modalities":"Поддерживаемые модальности","Supported parameters":"Поддерживаемые параметры","Supported variables":"Поддерживаемые переменные","Supports `-thinking`, `-thinking-":"Поддерживает `-thinking`, `-thinking-","Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.":"Поддерживает HTML-разметку или встраивание iframe. Введите HTML-код напрямую или укажите полный URL для автоматического встраивания в виде iframe.","Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.":"Поддерживает настройку в один клик и идеально адаптируется к мÐ
107½Ð¾Ð³Ð¾Ð¿Ñ€Ð¾Ñ‚окольной конфигурации NewAPI.","Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.":"Поддерживаются PNG, JPG, SVG или WebP. Рекомендуемый размер: 128×128 или меньше.","Sustained tokens per second":"Устойчивая скорость токенов в секунду","Swap Face":"Замена лица","Switch affinity on success":"Переключить привязку при успехе","Switch between the new frontend and the classic frontend. Changes take effect after page reload.":"Переключение между новым и классическим интерфейсом. Изменения вступают в силу после перезагрузки страницы.","Switch to JSON":"Переключиться на JSON","Switch to Visual":"Переключиться на визуальный режим","Sync Endpoint":"Конечная точка синхронизации","Sync Endpoints":"Точки синхронизации","Sync Fields":"Синхронизировать поля","Sync from the public upstream metadata repository.":"Синхронизировать из публичного репозитория метаданных верхнего уровня.","Sync Now":"Синхронизировать сейчас","Sync this model with official upstream":"Синхронизировать эту модель с официальным upstream","Sync Upstream":"Синхронизировать Upstream","Sync Upstream Models":"Синхронизировать модели Upstream","Synced upstream models":"Вышестоящие модели синхронизированы","Synchronize models and vendors from an upstream source":"Синхронизировать модели и поставщиков из upstream источника","Syncing prices, please wait...":"Синхронизация цен, подождите...","Syncing...":"Синхронизация...","System":"Система","System Administration":"Администрирование системы","System Announcements":"Системные объявления","System Behavior":"Поведение системы","System data statistics":"Статистика системных данных","System default":"По умолчанию","System Information":"Системная информация","System initialized successfully! Redirecting…":"Система успешно инициализирована! Перенаправление…","System logo":"Логотип системы","System maintenance":"Обслуживание системы","System Memory":"Системная память","System Memory Stats":"Статистика системной памяти","System Name":"Название системы","System name is required":"Название системы обязательно","System Notice":"Системные объявления","System Performance Monitoring":"Мониторинг производительности системы","System prompt":"Системный промпт","System Prompt":"Системное приглашение","System Prompt Concatenation":"Конкатенация системных промптов","System Prompt Override":"Переопределение системного промпта","System settings":"Системные настройки","System Settings":"Настройки системы","System setup wizard":"Мастер настройки системы","System task records":"Записи системных задач","System Version":"Версия системы","Table view":"Вид таблицы","Tag":"Тег","Tag Aggregate":"Агрегация тегов","Tag Mode":"Режим тегов","Tag Name":"Название метки","Tag set successfully":"Тег успешно установлен","Tag updated successfully":"Тег успешно обновлён","Tag:":"Тег:","Tags":"Теги","Take photo":"Сделать фото","Take screenshot":"Сделать скриншот","Target Endpoint":"Целевая точка","Target Field":"Целевое поле","Target Field Path":"Путь целевого поля","Target group":"Целевая группа","Target Header":"Целевой заголовок","Target Path (optional)":"Целевой путь (необязательно)","Target User":"Целевой пользователь","Task":"Задача","Task ID":"ID задачи","Task ID:":"ID задачи:","Task logs":"Журналы задач","Task Logs":"Журнал задач","Team Collaboration":"Совместная работа в команде","Technical Support":"Техническая поддержка","Telegram":"Telegram","Telegram login requires widget integration; coming soon":"Вход через Telegram требует интеграции виджета; скоро","Telegram Login Widget":"Виджет входа Telegram","Template":"Шаблон","Template variables:":"Переменные шаблона:","Templates":"Шаблоны","Templates appended":"Шаблоны добавлены","Tencent":"Tencent","Termination requested":"Запрошено завершение","Test":"Проверить","Test {{count}} selected":"Проверить {{count}} выбранных","Test All Channels":"Проверить все каналы","Test Channel Connection":"Проверить подключение канала","Test Connection":"Проверить подключение","Test connectivity for:":"Проверить подключение для:","Test failed":"Тест не выполнен","Test interval (minutes)":"Интервал проверки (минуты)","Test Latency":"Проверить задержку","Test Mode":"Тестовый режим","Test Model":"Проверить модель","Test models and prompts from the browser":"Тестируйте модели и промпты в браузере","Test selected models":"Проверить выбранные модели","Testing all enabled channels started. Please refresh to see results.":"Тестирование всех включенных каналов начато. Пожалуйста, обновите страницу, чтобы увидеть результаты.","Testing...":"Тестирование...","Text":"Текст","Text description of the desired image":"Текстовое описание желаемого изображения","Text description of the desired video":"Текстовое описание желаемого видео","Text Input":"Текстовый вход","Text or array of texts to embed":"Текст или массив текстов для векторизации","Text Output":"Текстовый выход","Text to Video":"Текст в видео","The administrator account is already initialized. You can keep your existing credentials and continue to the next step.":"Учетная запись администратора уже инициализирована. Вы можете сохранить существующие учетные данные и перейти Ð
107º следующему шагу.","The administrator configured an external link for this document.":"Администратор настроил внешнюю ссылку для этого документа.","The administrator has not configured a privacy policy yet.":"Администратор ещё не настроил политику конфиденциальности.","The administrator has not configured a user agreement yet.":"Администратор ещё не настроил пользовательское соглашение.","The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.":"Администратор еще не настроил содержимое раздела «О программе». Вы можете установить его на странице настроек, поддерживается HTML или URL.","The binding will complete automatically after authorization":"Привязка завершится автоматически после авторизации","The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.":"Привязанный продукт используется для пополнения кошелька: когда пользователь вводит любую сумму, new-api запускает оплату через этот единственный продукт Pancake и переопределяет цену для каждой сессии — не нужно заранее создавать SKU на $1 / $5 / $10.","The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.":"Привязанный магазин является родительским контейнером для всех продуктов Pancake, которые new-api создает из этой админки: как продукта пополнения кошелька, так и продуктов планов подписки. Одного магазина достаточно; выбирайте другой только если действительно ведете отдельные каталоги Pancake.","The effective domain for Passkey registration. Must match the current domain or be its parent domain.":"Действующий домен для регистрации Passkey. Должен совпадать с текущим доменом или быть его родительским доменом.","The entered text does not match the required text.":"Введенный текст не совпадает с требуемым.","The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.":"Окружение (тестовое или рабочее) определяется ключом, который вы вставляете здесь: используйте тестовый ключ при интеграции, затем замените его на рабочий при запуске.","The exact model identifier as used in API requests.":"Точный идентификатор модели, используемый в запросах API.","The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.":"Следующие модели имеют конфликты типов тарификации (фиксированная цена против тарификации по соотношению). Подтвердите, чтобы продолжить изменения.","The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:":"Следующие модели в перенаправлении модели не были добавлены в список \\"Модели\\" и могут не работать при вызове из-за отсутствия доступных моделей:","The mapped upstream model(s)":"Сопоставленные upstream модель(и)","The model you\'re looking for doesn\'t exist.":"Модель, которую вы ищете, не существует.","The name displayed across the application":"Имя, отображаемое в приложении","The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations":"Публичный URL вашего сервера, используемый для OAuth-перенаправлений, вебхуков и других внешних интеграций","The requested chat preset does not exist or has been removed.":"Запрошенный предустановленный чат не существует или был удален.","The setup wizard will use this database during initialization.":"Мастер настройки будет использовать эту базу данных при инициализации.","The site is not available at the moment.":"Сайт в данный момент недоступен.","The slug is appended to the URL:":"Слаг добавляется к URL:","The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.":"Синхронизация получит отсутствующие модели и поставщиков из выбранного источника. Существующие записи обновляются только после подтверждения конфликтов.","The token group that will have a custom ratio":"Группа токенов, которая будет иметь пользовательское соотношение","The unique identifier for this model":"Уникальный идентификатор для этой модели","The unique name for this vendor":"Уникальное имя для этого поставщика","The URL for this chat client.":"URL для этого чат-клиента.","Theme":"Тема","Theme preset":"Пресет темы","Theme Settings":"Настройки темы","There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?":"Есть модели для добавления и удаления, но вы выбрали только один тип. Подтвердить отправку только выбранных элементов?","These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.":"Эти имена всё ещё отмечены в выборе, но не возвращены в списке upstream; ключи только как источники model_mapping исключены. Скорректируйте выбор перед сохранением.","These toggles affect whether certain request fields are passed through to the upstream provider.":"Эти переключатели влияют на то, передаются ли определенные поля запроса вышестоящему поставщику.","Thinking Suffix Adapter":"Адаптер суффикса thinking","Thinking to Content":"Мышление в контент","Third-party account bindings (read-only, managed by user in profile settings)":"Привязки сторонних учетных записей (только для чтения, управляется пользователем в настройках профиля)","Third-party Payment Config":"Настройка стороннего платежа","This action cannot be undone.":"Это действие невозможно отменить.","This action cannot be undone. This will permanently delete your account and remove all your data from our servers.":"Это действие невозможно отменить. Это безвозвратно удалит вашу учетную запись и все ваши данные с наших серверов.","This action will permanently remove 2FA protection from your account.":"Это действие безвозвратно удалит защиту 2FA из вашей учетной записи.","This channel is not an Ollama channel."
107:"Этот канал не является каналом Ollama.","This channel type does not support fetching models":"Этот тип канала не поддерживает получение моделей","This channel type requires additional configuration":"Для этого типа канала требуется дополнительная конфигурация","This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.":"Это подтверждение разблокирует функции платежей, кодов пополнения, планов подписки и наград за приглашения. Внимательно прочитайте заявления.","This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.":"Этот параметр управляет ограничением частоты запросов к моделям. Ограничение маршрутов Web/API настраивается переменными окружения и всё ещё может возвращать 429.","This data may be unreliable, use with caution":"Эти данные могут быть ненадежными, используйте с осторожностью","This device does not support Passkey":"Это устройство не поддерживает Passkey","This device does not support Passkey verification.":"Это устройство не поддерживает проверку с помощью Passkey.","This expression is too complex for the visual editor. Please switch to expression mode to edit.":"Для визуального редактора это выражение слишком сложно. Переключитесь в режим выражения для правки.","This feature is experimental. Configuration format and behavior may change.":"Эта функция является экспериментальной. Формат конфигурации и поведение могут измениться.","This feature requires server-side WeChat configuration":"Эта функция требует серверной конфигурации WeChat","This may cause cache failures.":"Это может привести к сбоям кэша.","This may take a few moments while we validate the request and update your session.":"Это может занять несколько мгновений, пока мы проверяем запрос и обновляем вашу сессию.","This model has both fixed price and ratio billing conflicts":"Эта модель имеет конфликты как фиксированной цены, так и пропорциональной тарификации","This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.":"У этой модели одновременно заданы фиксированная цена и коэффициенты. Сохранение текущего режима перезапишет конфликтующие поля.","This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.":"У этой модели одновременно заданы фиксированная цена и цены за токены. Сохранение текущего режима перезапишет конфликтующие поля.","This model is not available in any group, or no group pricing information is configured.":"Эта модель недоступна ни в одной группе, или информация о ценах для групп не настроена.","This month":"В этом месяце","This page has not been created yet.":"Эта страница еще не создана.","This plan does not allow balance redemption":"Этот план не разрешает оплату баÐ
107»Ð°Ð½ÑÐ¾Ð¼","This project must be used in compliance with the":"Этот проект должен использоваться в соответствии с","This record was written by a pre-upgrade instance and lacks audit info. Upgrade the instance to record server IP, callback IP, payment method and system version.":"Запись создана экземпляром до обновления и не содержит сведений аудита. Обновите экземпляр, чтобы фиксировать IP сервера, IP callback, способ оплаты и версию ОС.","This site currently has {{count}} models enabled":"На этом сайте сейчас включено моделей: {{count}}","This tier catches any request that did not match earlier tiers.":"Этот уровень обрабатывает все запросы, которые не совпали с предыдущими уровнями.","this token group":"эта группа токенов","this user group":"эта группа пользователей","This user has no bindings":"У этого пользователя нет привязок","This week":"На этой неделе","This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.":"Это добавит 2 шаблонных правила (Codex CLI и Claude CLI) к существующему списку правил.","This will clear custom pricing ratios and revert to upstream defaults.":"Это очистит пользовательские ценовые коэффициенты и вернет к стандартным значениям поставщика.","This will delete all":"Это удалит все","This will delete all channel affinity cache entries still in memory.":"Это удалит все записи кэша привязки каналов из памяти.","This will delete temporary cache files that have not been used for more than 10 minutes":"Будут удалены временные файлы кэша, не использовавшиеся более 10 минут","This will extend the deployment by the specified hours.":"Это продлит развертывание на указанное количество часов.","This will permanently delete API key":"Это безвозвратно удалит ключ API","This will permanently delete redemption code":"Это безвозвратно удалит код активации","This will permanently delete user":"Это безвозвратно удалит пользователя","This will permanently remove all log entries created before {{date}}.":"Это безвозвратно удалит все записи журнала, созданные до {{date}}.","This will permanently remove log entries before the selected timestamp.":"Это безвозвратно удалит записи журнала до выбранной временной метки.","This year":"Этот год","Three steps to get started":"Три шага для начала работы","Throughput":"Пропускная способность","Throughput by group":"Пропускная способность по группам","Throughput short":"TPS","Throughput trend":"Тренд пропускной способности","Tier":"Уровень","Tier conditions":"Условия уровня","Tier name":"Название уровня","Tiered":"Ступенчато","Tiered (billing expression)":"Ступенчато (платёжное выражение)","Tiered price table":"Тариф по уровням","Tiered pricing":"Многоуровневая тарификация","tiers":"уровни","Time":"Время","Time Granularity":"Гранулярность времени","Time remaining":"Осталось времени","Time window for rate limiting":"Временное окно для ограничения скорости запросов","Time-based":"Зависит от времени","Time-sliced cache (Claude)":"Сегментированный кэш (Claude)","Time:":"Время:","Timeline":"Хронология","times":"раз","Timing":"Время","to access this resource.":"для доступа к этому ресурсу.","to confirm":"для подтверждения","To Lower":"В нижний регистр","To Lowercase":"В нижний регистр","to override billing when a user in one group uses a token of another group.":"для переопределения выставления счетов, когда пользователь одной группы использует токен другой группы.","to the Models list so users can use them before the mapping sends traffic upstream.":"в список моделей, чтобы пользователи могли использовать их до того, как сопоставление отправит трафик выше по течению.","To Upper":"В верхний регистр","To Uppercase":"В верхний регистр","to view this resource.":"для просмотра этого ресурса.","Today":"Сегодня","Toggle columns":"Переключить столбцы","Toggle navigation menu":"Переключить меню навигации","Toggle plan":"Переключить план","Toggle theme":"Переключить тему","Token":"Токен","Token Breakdown":"Детализация токенов","Token Endpoint":"Конечная точка токена","Token Endpoint (Optional)":"Конечная точка токена (необязательно)","Token estimator":"Оценка токенов","Token group":"Группа токена","Token management":"Управление токенами","Token Management":"Управление токенами","Token Mgmt":"Управление токенами","Token Name":"Имя токена","Token obtained from your Gotify application":"Токен, полученный из вашего приложения Gotify","Token price for audio input.":"Цена токенов для аудиовхода.","Token price for audio output.":"Цена токенов для аудиовыхода.","Token price for cache reads.":"Цена токенов для чтения кэша.","Token price for creating cache entries.":"Цена токенов для создания записей кэша.","Token price for image input.":"Цена токенов для входного изображения.","Token prices":"Цены токенов","Token regenerated and copied to clipboard":"Токен перегенерирован и скопирован в буфер обмена","Token share by model author across the last 24 hours":"Доля токенов по автору модели за последние 24 часа","Token share by model author across the past few weeks":"Доля токенов по автору модели за последние недели","Token share by model author across the past month":"Доля токенов по автору модели за последний месяц","Token share by model author across the past year":"Доля токенов по автору модели за последний год","Token share by model author since launch":"Доля токенов по автору модели с момента запуска","Token unit":"Единица токенов","Token usage by model since launch":"Использование токенов по моделям с момента запуска","Token-based":"На основе токенов","Tokenizer":"Токенизатор","tokens":"токены","Tokens":"Токены","tokens / mo":"токенов / мес.","Tokens by category":"Токены по категориям","Tokens Only":"Только токены","Tokens per minute":"Токенов в минуту","Tokens since launch":"Токенов с запуска","Tokens-only mode will show raw quota values regardless of this toggle.":"Режим «только токены» будет показывать необработанные значения квот независимо от этого переключателя.","Too many files. Some were not added.":"Слишком много файлов. Некоторые не были добавлены.","Too many requests":"Слишком много запросов","Tool / function declarations the model may call":"Объявления инструментов и функций, которые модель может вызывать","Tool identifier":"Идентификатор инструмента","Tool price settings":"Настройки цен на инструменты","Tool prices":"Цены инструментов","Tool-choice policy or specific tool name":"Политика выбора инструмента или конкретное имя","Tools":"Инструменты","Top {{count}}":"Топ {{count}}","Top app":"Лидирующее приложение","Top apps":"Топ приложений","Top Apps":"Топ приложений","Top integrations using this model":"Основные интеграции, использующие эту модель","Top model":"Лидирующая модель","Top models":"Топ моделей","Top Models":"Лучшие модели","Top models by traffic":"Популярные модели по трафику","Top up balance and view billing history.":"Пополнить баланс и просмотреть историю платежей.","Top Users":"Лучшие пользователи","Top vend
107ors":"Топ поставщиков","Top-up":"Пополнение","Top-up amount options":"Варианты суммы пополнения","Top-up Audit Info":"Аудит пополнений","Top-up group ratios":"Коэффициенты групп пополнения","Top-Up Link":"Ссылка для пополнения","top-up ratio":"коэффициент пополнения","Topup Amount":"Сумма пополнения","Total":"Всего","Total Allocated":"Всего выделено","Total check-ins":"Общая проверка","Total consumed":"Всего использовано","Total consumed quota":"Всего использованной квоты","Total cost":"Общая стоимость","Total Cost":"Общая стоимость","Total Count":"Общее количество","Total earned":"Итого заработано","Total Earned":"Всего заработано","Total GPUs":"Всего GPU","Total invitation revenue":"Общий доход от приглашений","Total Log Size":"Общий размер журналов","Total Quota":"Общая квота","Total requests allowed per period. 0 = unlimited.":"Общее количество запросов, разрешенных за период. 0 = без ограничений.","Total requests made":"Всего сделанных запросов","Total tokens":"Всего токенов","Total Tokens":"Всего токенов","Total Usage":"Общее использование","Total:":"Всего:","TPM":"TPM","Track per-request consumption to power usage analytics. Keeping this on increases database writes.":"Отслеживать потребление для каждого запроса для аналитики использования. Сохранение этой опции увеличивает количество записей в базу данных.","Track usage, costs and performance with real-time analytics":"Отслеживайте использование, затраты и производительность с помощью аналитики в реальном времени","Tracked apps":"Отслеживаемые приложения","Tracks current account base limits and additional metered usage on Codex upstream.":"Отслеживает базовые лимиты и дополнительное потребление (metered) аккаунта на стороне Codex.","Trading insights, accounting, advisory":"Торговые инсайты, учёт, консалтинг","Transfer":"Перевод","Transfer Amount":"Сумма перевода","Transfer failed":"Перевод не удался","Transfer Rewards":"Перевести награды","Transfer successful":"Перевод успешен","Transfer to Balance":"Перевести на баланс","Translation":"Перевод","Transparent Billing":"Прозрачная тарификация","Trend":"Тренд","Trending down":"Падают","Trending up":"Растут","Triggered garbage collection":"Запущена сборка мусора","Trim leading/trailing whitespace":"Удалить пробелы в начале/конце","Trim Prefix":"Обрезать префикс","Trim Space":"Обрезать пробелы","Trim Suffix":"Обрезать суффикс","Truncate embeddings to this many dimensions":"Усечь эмбеддинги до указанного числа измерений","Trusted":"Доверенный","Try adjusting your search":"Попробуйте изменить условия поиска","Try adjusting your search to locate a missing model.":"Попробуйте изменить параметры поиска, чтобы найти отсутствующую модель.","TTFT P50":"TTFT P50","TTFT P95":"TTFT P95","TTFT P99":"TTFT P99","TTFT percentiles, throughput, and 30-day uptime by group":"Перцентили TTFT, пропускная способность и доступность за 30 дней по группам","TTL":"TTL","TTL (seconds, 0 = default)":"TTL (секунды, 0 = по умолчанию)","TTL (seconds)":"TTL (секунды)","Tune selection priority, testing, status handling, and request overrides.":"Ð
107Ð°ÑÑ‚ройте приоритет выбора, тестирование, обработку статусов и переопределения запросов.","Turnstile is enabled but site key is empty.":"Turnstile включён, но ключ сайта пуст.","Tutoring, learning aids, assessment":"Репетиторство, учебные материалы, оценка","Two-factor Authentication":"Двухфакторная аутентификация","Two-Factor Authentication":"Двухфакторная аутентификация","Two-factor authentication disabled":"Двухфакторная аутентификация отключена","Two-factor authentication enabled successfully!":"Двухфакторная аутентификация успешно включена!","Two-factor authentication reset":"Двухфакторная аутентификация сброшена","Two-Step Verification":"Двухэтапная проверка","Type":"Тип","Type (common)":"Тип (общий)","Type *":"Тип *","Type a command or search...":"Введите команду или поиск...","Type the confirmation text here":"Введите текст подтверждения здесь","Type-Specific Settings":"Настройки для конкретного типа","Type:":"Тип:","UI granularity only &mdash; data is still aggregated hourly":"Только детализация пользовательского интерфейса &mdash; данные по-прежнему агрегируются ежечасно","Unable to estimate price for this deployment.":"Не удается оценить цену для этого развертывания.","Unable to generate chat link. Please contact your administrator.":"Не удалось сгенерировать ссылку для чата. Пожалуйста, свяжитесь с вашим администратором.","Unable to load groups":"Не удалось загрузить группы","Unable to load rankings":"Не удалось загрузить рейтинги","Unable to load rankings data":"Не удалось загрузить данные рейтингов","Unable to open chat":"Не удалось открыть чат","Unable to parse structured pricing":"Не удалось разобрать структурированные цены","Unable to prepare chat link. Please ensure you have an enabled API key.":"Не удается подготовить ссылку для чата. Убедитесь, что у вас есть активированный API-ключ.","Unauthorized":"Не авторизован","Unauthorized Access":"Несанкционированный доступ","Unbind":"Отвязать","Unbind failed":"Не удалось отвязать","Unbound {{provider}}":"{{provider}} отвязан","Underground":"Подземелье","Understand how user groups, token groups, ratios, and special rules work together.":"Поймите, как вместе работают группы пользователей, группы токенов, коэффициенты и специальные правила.","Understand image inputs alongside text":"Понимать изображения наряду с текстом","Unexpected release payload":"Неожиданный формат данных релиза","Unified API Gateway for":"Единый API-шлюз для","Unique identifier for this group.":"Уникальный идентификатор для этой группы.","Unit price (local currency / USD)":"Цена за единицу (местная валюта / USD)","Unit price (USD)":"Цена за единицу (USD)","Unit price must be greater than 0":"Цена за единицу должна быть больше 0","Units per USD":"Единиц за USD","Unknown":"Неизвестно","Unknown version":"Неизвестная версия","Unlimited":"Без ограничений","Unlimited Quota":"Неограниченная квота","Unsaved changes":"Несохранённые изменения","Unset price":"Цена не задана","Until":"До","Untitled":"Без названия","Untrusted upstream data:":"Недоверенные вышестоящие данные:","Unused":"Неиспользованные","Up to 4 strings that stop generation":"До 4 строк, останавливающих генерацию","Update":"Обновить","Update All Balances":"Обновить все балансы","Update API Key":"Обновить API-ключ","Update Balance":"Обновить баланс","Update balance for:":"Обновить баланс для:","Update Channel":"Обновить канал","Update channel configuration and click save when you\'re done.":"Обновите конфигурацию канала и нажмите сохранить, когда закончите.","Update configuration":"Обновить конфигурацию","Update failed":"Обновление не удалось","Update Model":"Обновить модель","Update model configuration and click save when you\'re done.":"Обновите конфигурацию модели и нажмите сохранить, когда закончите.","Update plan info":"Обновить информацию о плане","Update Provider":"Обновить поставщика","Update Redemption Code":"Обновить код активации","Update succeeded":"Успешно обновлено","Update the API key by providing necessary info.":"Обновите API-ключ, указав необходимую информацию.","Update the configuration for this custom OAuth provider.":"Обновить конфигурацию этого пользовательского поставщика OAuth.","Update the redemption code by providing necessary info.":"Обновите промокод, предоставив необходимую информацию.","Update the reusable bundle below.":"Обновите переиспользуемый бандл ниже.","Update the user by providing necessary info.":"Обновите пользователя, предоставив необходимую информацию.","Update vendor information for {{name}}":"Обновить информацию о поставщике для {{name}}","Update your password for account:":"Обновите свой пароль для учетной записи:","Update your password to keep your account secure":"Обновите пароль, чтобы обеспечить безопасность вашей учётной записи","Updated":"Обновлено","Updated a custom OAuth provider":"Обновлён пользовательский провайдер OAuth","Updated a deployment":"Обновлено развёртывание","Updated a model":"Обновлена модель","Updated a prefill group":"Обновлена группа предзаполнения","Updated a redemption code":"Код погашения обновлён","Updated a subscription plan":"Обновлён тарифный план подписки","Updated a vendor":"Обновлён поставщик","Updated channel {{name}} (ID: {{id}})":"Обновлён канал {{name}} (ID: {{id}})","Updated daily":"Обновляется ежедневно","Updated successfully":"Обновлено успешно","Updated system setting {{key}}":"Обновлён системный параметр {{key}}","Updated user {{username}} (ID: {{id}})":"Обновлён пользователь {{username}} (ID: {{id}})","Updating all channel balances. This may take a while. Please refresh to see results.":"Обновление балансов всех каналов. Это может занять некоторое время. Пожалуйста, обновите страницу, чтобы увидеть результаты.","Upgrade Group":"Повысить группу","Upload":"Загрузка","Upload a single service account JSON file":"Загрузите JSON-файл одного сервисного аккаунта","Upload file":"Загрузить файл","Upload files":"Загрузить файлы","Upload multiple JSON files in batch modes":"Загрузка нескольких файлов JSON в пакетных режимах","Upload or reference a local configuration file.":"Загрузить или сослаться на локальный файл конфигурации.","Upload photo":"Загрузить фото","Upscale":"Увеличение","Upstream":"Источник","Upstream Model Detection Settings":"Настройки обнаружения моделей провайдера","Upstream Model Update Check":"Проверка обновлений моделей провайдера","Upstream Model Updates":"Обновления моделей источника","Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models":"Обновления моделей применены: {{added}} добавлено, {{removed}} удалено, {{ignored}} проигнорировано, всего {{totalIgnored}} проигнорированных моделей","Upstream price sync":"Синхронизация цен upstream","Upstream prices fetched successfully":"Цены провайдера успешно получены","Upstream ratios fetched successfully":"Коэффициенты upstream успешно получены","Upstream Request ID":"ID вышестоящего запроса","Upstream Response":"Ответ Upstream","upstream services integrated":"интеграций с вышестоящими сервисами","Upstream Updates":"Обновления вышестоящих моделей","uptime":"время бесперебойной работы","Uptime":"Время работы","Uptime (30d)":"Доступность (30 дн.)","Uptime (last 30 days)":"Доступность (за 30 дней)","Uptime Kuma":"Время безотказной работы Kuma","Uptime Kuma groups saved successfully":"Группы Uptime Kuma успешно сохранены","Uptime Kuma URL":"URL Uptime Kuma","Uptime since":"Время работы с","URL":"URL","URL is required":"URL обязателен","URL to your logo image (
107optional)":"URL изображения вашего логотипа (необязательно)","Usage":"Использование","Usage at a glance":"Краткий обзор использования","Usage guide":"Руководство","Usage logs":"Журналы использования","Usage Logs":"Журнал использования","Usage mode":"Режим использования","Usage-based":"На основе использования","USD":"USD","USD Exchange Rate":"Обменный курс USD","USD price per 1M input tokens.":"Цена в USD за 1 млн входных токенов.","USD price per 1M tokens.":"Цена в USD за 1 млн токенов.","Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.":"Используйте +: для добавления группы, -: для удаления выбираемой по умолчанию группы, без префикса — для добавления в конец.","Use a compatible browser or device with biometric authentication or a security key to register a Passkey.":"Используйте совместимый браузер или устройство с биометрической аутентификацией или ключ безопасности для регистрации ключа доступа.","Use authenticator code":"Использовать код аутентификатора","Use backup code":"Использовать резервный код","Use disk cache when request body exceeds this size":"Использовать дисковый кэш, когда тело запроса превышает этот размер","Use external tools to extend capabilities":"Использовать внешние инструменты для расширения возможностей","Use our unified OpenAI-compatible endpoint in your applications":"Используйте наш единый OpenAI-совместимый эндпоинт в ваших приложениях","Use Passkey to sign in without entering your password.":"Используйте ключ доступа для входа без ввода пароля.","Use presets or upstream discovery to populate the model list faster.":"Используйте пресеты или обнаружение upstream, чтобы быстрее заполнить список моделей.","Use secure connection when sending emails":"Использовать безопасное соединение при отправке электронных писем","Use sidebar shortcut":"Использовать ярлык боковой панели","Use the full-width table to scan prices, then select a row to edit it here.":"Просмотрите цены в таблице, затем выберите строку для редактирования здесь.","Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.":"Используйте таблицу групп тарификации, чтобы управлять коэффициентом и отображением группы в списке создания токена.","Use this token for API authentication":"Используйте этот токен для аутентификации API","Use your Passkey":"Используйте свой ключ доступа","used":"использовано","Used":"Использовано","Used / Remaining":"Использовано / Осталось","Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.":"Используется как SuccessURL для нового продукта. Если оставить пустым, потребуется подтверждение.","Used for load balancing. Higher weight = more requests":"Используется для балансировки нагрузки. Больший вес = больше запросов","Used in URLs and API routes":"Используется в URL и маршрутах API","Used Quota":"Лимит потребления","Used to authenticate with io.net deployment API":"Используется для аутентификации в API развертывания io.net","Used to authenticate with the worker. Leave blank to keep the existing secret.":"Используется для аутентификации с воркером. Оставьте пустым, чтобы сохранить существующий секрет.","Used:":"Использовано:","User":"Пользователь","User {{id}}":"Пользователь {{id}}","User Agent":"Пользовательский агент","User Agreement":"Пользовательское соглашение","User Analytics":"Аналитика пользователей","User Consumption Ranking":"Рейтинг потребления","User Consumption Trend":"Тренд потребления","User created successfully":"Пользователь успешно создан","User dashboard and quota controls.":"Панель пользователя и управление квотами.","User Exclusive Ratio":"Эксклюзивный коэффициент","User group":"Группа пользователя","User Group":"Группа пользователей","User group name":"НаÐ
107·Ð²Ð°Ð½Ð¸Ðµ группы пользователей","User Group: {{ratio}}x":"Группа пользователя: {{ratio}}x","User groups that can access channels with this tag":"Группы пользователей, которые могут получить доступ к каналам с этим тегом","User groups that can access this channel. ":"Группы пользователей, которые могут получить доступ к этому каналу. ","User ID":"ID пользователя","User ID Field":"Поле ID пользователя","User ID:":"ID пользователя:","User Info Endpoint":"Конечная точка информации о пользователе","User Info Endpoint (Optional)":"Конечная точка информации о пользователе (необязательно)","User Information":"Информация о пользователе","User Menu":"Меню пользователя","User personal functions":"Личные функции пользователя","User selectable":"Доступно пользователю","User Subscription Management":"Управление подписками пользователя","User updated successfully":"Пользователь успешно обновлен","User Verification":"Проверка пользователя","User-Agent include (one per line)":"User-Agent include (по одному на строку)","Username":"Имя пользователя","Username confirmation does not match":"Подтверждение имени пользователя не совпадает","Username Field":"Поле имени пользователя","Username or Email":"Имя пользователя или Email","Users":"Пользователи","Users call the model on the left. The platform forwards the request to the upstream model on the right.":"Пользователи вызывают модель слева. Платформа перенаправляет запрос вышестоящей модели справа.","Users must wait for a successful drawing before upscales or variations.":"Пользователи должны дождаться успешного рисунка перед апскейлом или вариациями.","Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.":"Пользователи видят только группы, отмеченные как доступные для выбора. Недоступные для выбора группы всё равно могут назначаться администраторами.","uses":"использует","Validity":"Срок действия","Validity Period":"Срок действия","Value":"Значение","Value (supports JSON or plain text)":"Значение (JSON или текст)","Value is required":"Значение обязательно","Value must be at least 0":"Значение должно быть не менее 0","Value Regex":"Регулярное выражение значения","variable":"переменная","variable) *":"переменная) *","Variables":"Переменные","Vary":"Вариация","Vary (Strong)":"Вариация (сильная)","Vary (Subtle)":"Вариация (лёгкая)","Vast Range of AI Models":"Огромный выбор моделей ИИ","Vendor":"Поставщик","Vendor deleted successfully":"Поставщик успешно удалён","Vendor Name *":"Название поставщика *","Vendor:":"Поставщик:","Vendors ranked by aggregated token volume":"Поставщики, ранжированные по совокупному объёму токенов","Verification code":"Код подтверждения","Verification Code":"Код подтверждения","Verification code must be 6 digits":"Код подтверждения должен содержать 6 цифр","Verification code sent! Please check your email.":"Код подтверждения отправлен! Пожалуйста, проверьте вашу электронную почту.","Verification code updates every 30 seconds.":"Код подтверждения обновляется каждые 30 секунд.","Verification email sent":"Письмо для подтверждения отправлено","Verification failed":"Подтверждение не удалось","Verification is not configured properly":"Подтверждение настроено неправильно","Verification required to reveal the saved key.":"Требуется подтверждение для отображения сохраненного ключа.","Verify":"Проверить","Verify and Sign In":"Подтвердить и войти","Verify routing with Playground or your client":"Проверьте маршрутизацию через Playground или ваш клиент","Verify Setup":"Проверить настройку","Verify your database connection":"Проверьте подключение к базе данных","Verifying credentials and pulling stores from your Pancake account...":"Проверяем учетные данные и загружаем магазины из вашего аккаунта Pancake...","Version Overrides":"Переопределения версий","Vertex AI":"Vertex AI","Vertex AI API Key mode does not support batch creation":"Режим API Key Vertex AI не поддерживает пакетное создание","Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.":"Vertex AI не поддерживает functionResponse.id. Включите, чтобы автоматически удалить это поле.","Vertex AI Key Format":"Формат ключа Vertex AI","Vertex AI service account key must be valid JSON":"Ключ сервисного аккаунта Vertex AI должен быть допустимым JSON","Video":"Видео","Video length in seconds":"Длительность видео в секундах","Video Remix":"Ремикс видео","Vidu":"Vidu","View":"Просмотр","View all currently available models":"Просмотреть все доступные модели","View detailed information about this user including balance, usage statistics, and invitation details.":"Просмотр подробной информации об этом пользователе, включая баланс, статистику использования и данные приглашения.","View details":"Просмотреть детали","View document":"Просмотреть док
107умент","View logs":"Просмотреть логи","View mode":"Режим отображения","View model statistics and charts":"Просмотр статистики и графиков моделей","View Pricing":"Посмотреть цены","View the complete details for this":"Просмотр полных деталей этой","View the complete details for this log entry":"Просмотр полной информации об этой записи журнала","View the complete error message and details":"Просмотр полного сообщения об ошибке и деталей","View the complete prompt and its English translation":"Просмотр полного промпта и его перевода на английский","View the generated image":"Просмотр сгенерированного изображения","View your topup transaction records and payment history":"Просмотреть записи о пополнении счета и историю платежей","Viewed channel key {{name}} (ID: {{id}})":"Просмотрен ключ канала {{name}} (ID: {{id}})","Violation Code":"Код нарушения","Violation deduction amount":"Сумма вычета за нарушение","Violation Fee":"Штраф за нарушение","Violation Marker":"Маркер нарушения","vip":"vip","VIP users with premium access":"VIP-пользователи с премиум-доступом","Vision":"Зрение","Vision, image / video, document chat":"Зрение, изображения / видео, чат по документам","Visit Settings → General and adjust quota options...":"Перейдите в Настройки → Общие и настройте параметры квоты...","Visitors must authenticate before accessing the pricing directory.":"Посетители должны пройти аутентификацию перед доступом к каталогу цен.","Visitors must authenticate before accessing the rankings page.":"Посетители должны пройти аутентификацию перед доступом к странице рейтингов.","Visual":"Визуально","Visual edit":"Визуальное редактирование","Visual editor":"Визуальный редактор","Visual Editor":"Визуальный редактор","Visual indicator color for the API card":"Цвет визуального индикатора для карточки API","Visual Mode":"Визуальный режим","Visual Parameter Override":"Визуальное переопределение параметров","VolcEngine":"VolcEngine","vs. previous":"к предыдущему","Waffo Aggregator Gateway":"Шлюз-агрегатор Waffo","Waffo Pancake Dashboard":"Waffo Pancake Dashboard","Waffo Pancake MoR":"Waffo Pancake MoR","Waffo Pancake Payment Gateway":"Платёжный шлюз Waffo Pancake","Waffo Pancake product created":"Продукт Waffo Pancake создан","Waffo Pancake product creation failed":"Не удалось создать продукт Waffo Pancake","Waffo Pancake save failed":"Не удалось сохранить Waffo Pancake","Waffo Pancake settings saved":"Настройки Waffo Pancake сохранены","Waffo Payment":"Оплата Waffo","Waffo Payment Gateway":"Платёжный шлюз Waffo","Waffo Public Key (Production)":"Публичный ключ Waffo (Продакшн)","Waffo Public Key (Sandbox)":"Публичный ключ Waffo (Песочница)","Waiting":"Ожидание","Waiting for email...":"Ожидание письма...","Wallet":"Кошелек","Wallet First":"Кошелёк в приоритете","Wallet Management":"Управление кошельком","Wallet management and personal preferences.":"Управление кошельком и личные предпочтения.","Wallet Only":"Только кошелёк","Warning":"Предупреждение","Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.":"Предупреждение: базовый URL не должен заканчиваться на /v1. Новый API обработает это автоматически. Это может привести к сбоям запросов.","Warning: Disabling 2FA will make your account less secure.":"Внимание: Отключение 2FA сделает вашу учетную запись менее безопасной.","Warning: This action is permanent and irreversible!":"Внимание: Это действие является постоянным и необратимым!","We apologize for the inconvenience.":"Приносим извинения за неудобства.","We could not load the setup status.":"Не удалось загрузить статус настройки.","We will prompt your device to confirm using biometrics or your hardware key.":"Мы предложим вашему устройству подтвердить действие с помощью биометрии или аппаратного ключа.","We\'ll be back online shortly.":"Мы скоро вернемся в сеть.","Web search":"Веб-поиск","Web Search":"Веб-поиск","Webhook Configuration:":"Конфигурация веб-хука:","Webhook public key (production)":"Публичный ключ webhook (production)","Webhook public key (production) is required":"Требуется публичный ключ webhook (production)","Webhook public key (sandbox)":"Публичный ключ webhook (sandbox)","Webhook public key (sandbox) is required":"Требуется публичный ключ webhook (sandbox)","Webhook secret":"Секрет веб-хука","Webhook Secret":"Секрет веб-хука","Webhook signing secret (leave blank unless updating)":"Секрет подписи веб-хука (оставьте пустым, если не обновляете)","Webhook URL":"Адрес Webhook","Webhook URL (Production):":"URL вебхука (Production):","Webhook URL (Test):":"URL вебхука (Test):","Webhook URL:":"URL веб-хука:","Website is under maintenance!":"Сайт находится на техническом обслуживании!","WeChat":"WeChat","WeChat login QR code":"QR-код для входа в WeChat","WeChat Pay":"WeChat Pay","WeChat QR code will be displayed here":"QR-код WeChat будет отображен здесь","WeChat sign in":"Вход через WeChat","Week":"Неделя","Weekday":"День недели","Weekly":"Еженедельно","Weekly token usage by model across the past few weeks":"Еженедельное использование токенов по моделям за последние недели","Weekly token usage by model across the past year":"Еженедельное использование токенов по моделям за последний год","Weekly token usage by model since launch":"Еженедельное использование токенов по моделям с момента запуска","Weekly Window":"Недельное окно","Weight":"Вес","Weighted by request count":"Взвешено по количеству запросов","Welcome back!":"Добро пожаловать обратно!","Welcome to our New API...":"Добро пожаловать в наш New API...","Well-Known URL":"Известный эксперт","Well-Known URL must start with http:// or https://":"Well-Known URL должен начинаться с http:// или https://","What would you like to know?":"Что вы хотели бы узнать?","When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.":"Когда токен использует группу auto, система перебирает группы сверху вниз, пока не найдёт доступную.","When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.":"При совпадении условий итоговая цена умножается на X. Несколько совпадений умножаются вместе; значения < 1 действуют как скидки.","When enabled, if channels in the current group fail, it will try channels in the next group in order.":"Если включено, при сбое каналов в текущей группе система попробует каналы следующей группы по порядку.","When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel."
107:"Если включено, запись привязки сохраняется, даже когда привязанный канал отключён или больше не подходит для текущей группы/модели. Оставьте выключенным, чтобы удалять запись и выбирать другой канал.","When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.":"При включении большие тела запросов временно сохраняются на диске, что значительно снижает использование памяти. Рекомендуется SSD.","When enabled, Midjourney callbacks are accepted (reveals server IP).":"При включении принимаются обратные вызовы Midjourney (раскрывает IP сервера).","When enabled, newly created tokens start in the first auto group.":"При включении вновь созданные токены начинаются в первой автогруппе.","When enabled, prompts are scanned before reaching upstream models.":"При включении запросы сканируются перед достижением вышестоящих моделей.","When enabled, the store field will be blocked":"Если включено, поле магазина будет заблокировано","When enabled, users can pick this group when creating tokens.":"Если включено, пользователи могут выбрать эту группу при создании токенов.","When enabled, violation requests will incur additional charges.":"При включении за нарушения будут начисляться дополнительные расходы.","When enabled, zero-cost models also pre-consume quota before final settlement.":"При включении бесплатные модели также предварительно потребляют квоту до окончательного расчета.","When no conditions are set, the operation always executes.":"Без условий операция выполняется всегда.","When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.":"Когда мониторинг включён и использование ресурсов превышает порог, новые Relay-запросы будут отклонены.","When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.":"При работе в контейнерах или эфемерных средах убедитесь, что файл SQLite сопоставлен с постоянным хранилищем, чтобы избежать потери данных при перезапуске.","Whitelist":"Белый список","Whitelist (Only allow listed domains)":"Белый список (Разрешить только указанные домены)","Whitelist (Only allow listed IPs)":"Белый список (Разрешить только указанные IP-адреса)","whsec_xxx":"whsec_xxx","Why only one store + product?":"Почему только один магазин и продукт?","Window:":"Окно:","Wire encoding for the embedding vectors":"Кодирование векторов в передаче","with conflicts":"с конфликтами","with the API key from your token settings.":"на API-ключ из настроек токенов.","Without additional conditions, only the type above is used for pruning.":"Без дополнительных условий для очистки используется только тип выше.","Worker Access Key":"Ключ доступа воркера","Worker Proxy":"Прокси воркера","Worker URL":"URL воркера","Workspaces":"Рабочие пространства","Write value to the target field":"Записать значение в целевое поле","x":"x","xAI":"xAI","Xinference":"Xinference","Xunfei":"Xunfei","Year":"Год","years":"лет","Yes":"Да","You are about to delete {{count}} API key(s).":"Вы собираетесь удалить {{count}} API-ключ(а/ей).","You are running the latest version ({{version}}).":"Вы используете последнюю версию ({{version}}).","You can close this tab once the binding completes or a success message appears in the original window.":"Вы можете закрыть эту вкладку, как только привязка завершится или в исходном окне появится сообщение об успехе.","You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.":"Вы можете вручную добавить их в \\"Пользовательские имена моделей\\", нажать \\"Заполнить\\", а затем отправить, или использовать операции ниже для автоматической обработки.","You can only check in once per day":"Вы можете заселяться только один раз в день","You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.":"Вы обязуетесь не использовать эту систему для совершения, содействия или косвенного совершения действий, нарушающих применимые законы и нормы, регуляторные требования, правила платформ, общественные интересы либо законные права и интересы третьих лиц.","You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.":"Вы обязуетесь использовать вышестоящие API, аккаунты, ключи, квоты и сервисные возможности только в пределах законного разрешения, полученного от вышестоящих поставщиков услуг, поставщиков моделей или соответствующих правообладателей, и не осуществлять несанкционированную перепродажу, оборот, распространение или иную несоответствующую коммерциализацию.","You don\'t have necessary permission":"У вас нет необходимых разрешений","You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.":"Вы законно получили разрешение на подключенные API моделей, аккаунты, ключи и квоты.","You have unsaved changes":"У вас есть несохранённые изменения","You have unsaved changes. Are you sure you want to leave?":"У вас есть несохранённые изменения. Вы уверены, что хотите уйти?","You Pay":"Вы платите","You save":"Вы экономите","You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.":"Вы понимаете и самостоятельно несете юридическую ответственность, возникающую из развертывания, эксплуатации и взимания платы.","You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.":"Вы понимаете, что это напоминание о соответствии является только уведомлением о рисках и не явÐ
107»ÑÐµÑ‚ся юридической консультацией, заключением проверки соответствия или гарантией законности использования этой системы; вам следует обратиться к профессиональным юридическим или комплаенс-консультантам с учетом вашей реальной бизнес-ситуации.","You will be redirected to Telegram to complete the binding process.":"Вы будете перенаправлены в Telegram для завершения процесса привязки.","You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.":"Вы будете автоматически перенаправлены. Если через несколько секунд ничего не происходит, вы можете вернуться на предыдущую страницу.","your AI integration?":"вашу интеграцию с ИИ?","Your Azure OpenAI endpoint URL":"Ваш URL конечной точки Azure OpenAI","Your Bot Name":"Имя бота","Your Cloudflare Account ID":"Ваш ID аккаунта Cloudflare","Your Discord OAuth Client ID":"Ваш Discord OAuth Client ID","Your Discord OAuth Client Secret":"Ваш Discord OAuth Client Secret","Your GitHub OAuth Client ID":"Ваш ID клиента GitHub OAuth","Your GitHub OAuth Client Secret":"Ваш секрет клиента GitHub OAuth","Your new backup codes are ready":"Ваши новые резервные коды готовы","Your Referral Link":"Ваша реферальная ссылка","Your setup guide is collapsed so usage stays in focus.":"Руководство свернуто, чтобы основные показатели оставались в фокусе.","Your system access token for API authentication. Keep it secure and don\'t share it with others.":"Ваш системный токен доступа для аутентификации API. Храните его в безопасности и не делитесь им с другими.","Your Telegram Bot Token":"Ваш токен Telegram-бота","Your transaction history will appear here":"Ваша история транзакций появится здесь","Your Turnstile secret key":"Секретный ключ Turnstile","Your Turnstile site key":"Ключ сайта Turnstile","Zero retention":"Без хранения данных","Zhipu":"Zhipu","Zhipu V4":"Zhipu V4","Zoom":"Zoom"}}'),O=JSON.parse('{"translation":{"360":"360","1000":"1000","10000":"10000","_copy":"_bản sao",",":", ",", and":", và",",and ":", and ","、":", ","? This action cannot be undone.":"? Hành động này không thể hoàn tác.",". Please fix the JSON before saving.":". Vui lòng sá»­a JSON trước khi lưu.",". This action cannot be undone.":". Hành động này không thể hoàn tác.","...":"...","\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"":"\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"","({{total}} total, {{omit}} omitted)":"({{total}} tổng cộng, đã lược bỏ {{omit}})","(Leave empty to dissolve tag)":"Để trống để xóa thẻ.","(Optional: redirect model names)":"(Tùy chọn: chuyển hướng tên mô hình)","(Override all channels\' groups)":"(Ghi đè các nhóm cá»§a tất cả các kênh)","(Override all channels\' models)":"(Ghi đè các mô hình cá»§a tất cả các kênh)","[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]":"[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]","{\\"original-model\\": \\"replacement-model\\"}":"{\\"original-model\\": \\"replacement-model\\"}","{{category}} Models":"Mô hình {{category}}","{{count}} channel(s) deleted":"Đã xóa {{count}} kênh","{{count}} channel(s) disabled":"Đã tắt {{count}} kênh","{{count}} channel(s) enabled":"Đã bật {{count}} kênh","{{count}} channel(s) failed to disable":"{{count}} kênh không thể tắt","{{count}} channel(s) failed to enable":"{{count}} kênh không thể bật","{{count}} days ago":"{{count}} ngày trước","{{count}} days remaining":"{{count}} days remaining","{{count}} disabled channel(s) deleted":"Đã xóa {{count}} kênh đã tắt","{{count}} hours ago":"{{count}} giờ trước","{{count}} incidents":"{{count}} sá»± cố","{{count}} incidents in the last 24 hours":"{{count}} sá»± cố trong 24 giờ qua","{{count}} incidents in the last 30 days":"{{count}} sá»± cố trong 30 ngày qua","{{count}} IP(s)":"{{count}} IP","{{count}} log entries removed.":"Đã xóa {{count}}
107 mục nhật ký.","{{count}} minutes ago":"{{count}} phút trước","{{count}} models":"{{count}} mô hình","{{count}} months ago":"{{count}} tháng trước","{{count}} override":"{{count}} ghi đè","{{count}} selected targets available for bulk copy.":"Có {{count}} mục tiêu đã chọn để sao chép hàng loạt.","{{count}} tiers":"{{count}} bậc","{{count}} vendors":"{{count}} nhà cung cấp","{{count}} weeks ago":"{{count}} tuần trước","{{field}} updated to {{value}}":"{{field}} đã cập nhật thành {{value}}","{{field}} updated to {{value}} for tag: {{tag}}":"{{field}} đã cập nhật thành {{value}} cho nhãn: {{tag}}","{{method}} {{route}}":"{{method}} {{route}}","{{modality}} not supported":"Không hỗ trợ {{modality}}","{{modality}} supported":"Hỗ trợ {{modality}}","{{n}} model(s) selected":"Đã chọn {{n}} model","{{value}}ms":"{{value}} ms","{{value}}s":"{{value}} s","@lobehub/icons key":"@lobehub/icons khóa","@lobehub/icons key name":"@lobehub/icons tên khóa","/status/":"/status/","/your/endpoint":"/điểm cuối cá»§a bạn","#1 App":"#1 Ứng dụng","#1 by usage":"Hạng 1 theo mức sá»­ dụng","#1 Model":"#1 Mô hình","% off":"% giảm giá","`, and `-nothinking` suffixes while routing to the correct Gemini variant.":", và","© 2025 Your Company. All rights reserved.":"© 2025 Công ty cá»§a bạn. Mọi quyền được bảo lưu.","+{{count}} more":"thêm {{count}} mục","| Based on":"| Dá»±a trên","0 means data is kept permanently":"0 nghÄ©a là dữ liệu được giữ vÄ©nh viễn","0 means unlimited":"0 có nghÄ©a là không giới hạn","1 Day":"1 ngày","1 day ago":"1 ngày trước","1 hour":"1 giờ","1 Hour":"1 giờ","1 hour ago":"1 giờ trước","1 minute":"1 phút","1 minute ago":"1 phút trước","1 Month":"1 tháng","1 month ago":"1 tháng trước","1 week ago":"1 tuần trước","1 year ago":"1 năm trước","1. Create an application in your Gotify server":"1. Tạo một ứng dụng trong máy chá»§ Gotify cá»§a bạn","10 / page":"10 / trang","100 / page":"100 / trang","14 Days":"14 ngày","192.168.1.1&#10;10.0.0.0/8":"192.168.1.1&#10;10.0.0.0/8","1M":"1M","1W":"1W","2. Copy the application token":"2. Sao chép token ứng dụng","20 / page":"20 / trang","24 Hours":"24 giờ","24 hours ago":"24 giờ trước","29 Days":"29 ngày","3. Enter your Gotify server URL and token above":"3. Nhập URL máy chá»
107§ Gotify và mã thông báo cá»§a bạn ở trên","30 Days":"30 ngày","30 days ago":"30 ngày trước","30d change":"Thay đổi 30 ngày","5 minutes":"5 phút","5-Hour Window":"Cá»­a sổ 5 giờ","50 / page":"50 / trang","7 Days":"7 ngày","7 days ago":"7 ngày trước","80,443,8080":"80,443,8080","A billing multiplier. Lower ratios mean lower API call costs.":"Hệ số tính phí. Tá»· lệ càng thấp thì chi phí gọi API càng thấp.","A focused home for keys, balance, routing, and service health.":"Trang tổng quan tập trung cho khóa, số dư, định tuyến và trạng thái dịch vụ.","About":"Giới thiệu","About {{days}} days left":"Còn khoảng {{days}} ngày","Accept Unpriced Models":"Chấp nhận các Mô hình chưa định giá","Accepts a JSON array of model identifiers that support the Imagine API.":"Chấp nhận một mảng JSON gồm các mã định danh mô hình hỗ trợ API Imagine.","Accepts comma-separated status codes and inclusive ranges.":"Chấp nhận mã trạng thái phân cách bằng dấu phẩy và phạm vi bao gồm.","Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.":"Truy cập số lượng lớn các mô hình thông qua giao thức API chuẩn hóa và thống nhất. Thúc đẩy các ứng dụng AI, quản lý tài sản kỹ thuật số và kết nối tương lai.","Access Denied Message":"Thông báo từ chối truy cập","Access Forbidden":"Truy cập bị cấm","Access Policy (JSON)":"Chính sách truy cập (JSON)","Access previous conversations and start new ones.":"Truy cập các cuộc trò chuyện trước đó và bắt đầu các cuộc trò chuyện mới.","Access Token":"Token truy cập","AccessKey / SecretAccessKey":"AccessKey / SecretAccessKey","Account Binding Management":"Quản lý liên kết tài khoản","Account Bindings":"Liên kết tài khoản","Account created! Please sign in":"Tài khoản đã được tạo! Vui lòng đăng nhập","Account deleted successfully":"Tài khoản đã được xóa thành công","Account ID *":"ID tài khoản *","Account Info":"Thông tin tài khoản","Account used when authenticating with the SMTP server":"Tài khoản được sá»­ dụng khi xác thá»±c với máy chá»§ SMTP","acknowledge the related legal risks":"thừa nhận các rá»§i ro pháp lý liên quan","Across all groups":"Trên mọi nhóm","Action":"Hành động","Action confirmation":"Xác nhận hành động","Actions":"Hành động","active":"hoạt động","Active":"Hoạt động","Active apps":"Ứng dụng đang hoạt động","Active Cache Count":"Số bộ nhớ đệm hoạt động","Active Files":"Tệp đang hoạt động","Active models":"Mô hình đang hoạt động","active users":"Người dùng tích cá»±c","Actual Amount":"Số tiền thá»±c tế","Actual Model":"Mô hình thá»±c tế","Actual Model:":"Mô hình thá»±c tế:","Adapt `-thinking` suffix requests to Anthropic native thinking behavior while keeping billing predictable.":"Điều chỉnh các yêu cầu có hậu tố `-thinking` sang hành vi suy luận gốc cá»§a Anthropic trong khi vẫn giữ tính phí dễ dá»± đoán.","Add":"Add","Add \\"{{value}}\\"":"Thêm \\"{{value}}\\"","Add {{title}}":"Thêm {{title}}","Add a group identifier to the auto assignment list.":"Thêm một mã định danh nhóm vào danh sách phân công tá»± động.","Add a new API key by providing necessary info.":"Thêm khóa API mới bằng cách cung cấp thông tin cần thiết.","Add a new channel by providing the necessary information.":"Thêm kênh mới bằng cách cung cấp thông tin cần thiết.","Add a new model to the system by providing the necessary information.":"Thêm một mô hình mới vào hệ thống bằng cách cung cấp thông tin cần thiết.","Add a new user by providing necessary info.":"Thêm người dùng mới bằng cách cung cấp thông tin cần thiết.","Add a new vendor to the system":"Thêm một nhà cung cấp mới vào hệ thống","Add an extra layer of security to your account":"Thêm một lớp bảo mật bổ sung cho tài khoản cá»§a bạn","Add and submit":"Thêm và gá»­i","Add Announcement":"Thêm Thông báo","Add API":"Thêm API","Add API Shortcut":"Thêm lối tắt API","Add auto group":"Thêm nhóm tá»± động","Add chat preset":"Thêm mẫu trò chuyện","Add condition":"Thêm điều kiện","Add Condition":"Thêm điều kiện","Add credits":"Thêm tín dụng","Add custom model \\"{{value}}\\"":"Thêm mô hình tùy chỉnh \\"{{value}}\\"","Add discount tier":"Thêm bậc giảm giá","Add each model or tag you want to include.":"Thêm mỗi mô hình hoặc thẻ bạn muốn đưa vào.","Add FAQ":"Thêm FAQ","Add from available models...":"Thêm từ các mô hình có sẵn...","Add Funds":"Thêm Tiền","Add group":"Thêm nhóm","Add Group":"Thêm Nhóm","Add group rate limit":"Thêm giới hạn tốc độ nhóm","Add group rules":"Thêm quy tắc nhóm","Add Mapping":"Thêm ánh xạ","Add method":"Thêm phương thức","Add missing models":"Thêm mô hình còn thiếu","Add Mode":"Thêm Chế độ","Add model":"Thêm mô hình","Add Model":"Thêm Mô hình","Add model pricing":"Thêm giá mô hình","Add Models":"Thêm mô hình","Add new amount":"Thêm số tiền mới","Add new redemption code(s) by providing necessary info.":"Thêm mã đổi thưởng mới bằng cách cung cấp thông tin cần thiết.","Add OAuth Provider":"Thêm nhà cung cấp OAuth","Add param/header":"Thêm tham số/header","Add payment method":"Thêm phương thức thanh toán","Add photos or files":"Thêm ảnh hoặc tệp","Add product":"Thêm sản phẩm","Add Provider":"Thêm nhà cung cấp","Add Quota":"Thêm Hạn mức","Add ratio override":"Thêm ghi đè tá»· lệ","Add Row":"Thêm Hàng","Add Rule":"Thêm quy tắc","Add rule group":"Thêm nhóm quy tắc","Add selectable group":"Thêm nhóm có thể chọn","Add subscription":"Thêm đăng ký","Add tags...":"Thêm thẻ...","Add tier":"Thêm bậc","Add time condition":"Thêm điều kiện thời gian","Add time rule group":"Thêm nhóm quy tắc theo thời gian","Add Uptime Kuma Group":"Thêm Nhóm Uptime Kuma","Add User":"Thêm người dùng","Add user group":"Thêm nhóm người dùng","Add your API keys, set up channels and configure access permissions":"Thêm khóa API, thiết lập kênh và cấu hình quyền truy cập","Added {{count}} model(s)":"Đã thêm {{count}} mô hình","Added successfully":"Thêm thành công","Additional Conditions":"Điều kiện bổ sung","Additional information":"Thông tin bổ sung","Additional Information":"Thông tin bổ sung","Additional Limit":"Hạn mức bổ sung","Additional Limits":"Các hạn mức bổ sung","Additional metered capability":"Tính năng tính phí theo mức dùng bổ sung","Adjust filters, then search to refresh the logs.":"Điều chỉnh bộ lọc, sau đó tìm kiếm để làm mới nhật ký.","Adjust Quota":"Điều chỉnh hạn mức","Adjust response formatting, prompt behavior, proxy, and upstream automation.":"Điều chỉnh định dạng phản hồi, hành vi prompt, proxy và tá»± động hóa upstream.","Adjust the appearance and layout to suit your preferences.":"Điều chỉnh giao diện và bố cục để phù hợp với sở thích cá»§a bạn.","Admin":"Quản trị viên","Admin access required":"YÃ
107ªu cầu quyền truy cập Admin","Admin area":"Khu vá»±c quản trị","Admin notes (only visible to admins)":"Ghi chú cá»§a quản trị viên (chỉ hiển thị với quản trị viên)","Admin Only":"Chỉ dành cho quản trị viên","Administer user accounts and roles.":"Quản lý tài khoản người dùng và vai trò.","Administrator account":"Tài khoản quản trị viên","Administrator username":"Tên người dùng quản trị viên","Advanced":"Nâng cao","Advanced Configuration":"Cấu hình nâng cao","Advanced options":"Tùy chọn nâng cao","Advanced Options":"Tùy chọn nâng cao","Advanced platform configuration.":"Cấu hình nền tảng nâng cao.","Advanced Settings":"Cài đặt nâng cao","Advanced text editing":"Chỉnh sá»­a văn bản nâng cao","Aesthetic style":"Phong cách","After clicking the button, you\'ll be asked to authorize the bot":"Sau khi nhấp vào nút, bạn sẽ được yêu cầu á»§y quyền cho bot","After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?":"Sau khi vô hiệu hóa, sẽ không hiển thị cho người dùng nữa, nhưng đơn hàng lịch sá»­ không bị ảnh hưởng. Tiếp tục?","After enabling, the plan will be shown to users. Continue?":"Sau khi kích hoạt, gói sẽ được hiển thị cho người dùng. Tiếp tục?","After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?":"Sau khi vô hiệu hóa, đăng ký này sẽ bị há»§y kích hoạt ngay lập tức. Hồ sÆ¡ lịch sá»­ không bị ảnh hưởng. Tiếp tục?","After scanning, the binding will complete automatically":"Sau khi quét, việc liên kết sẽ hoàn tất tá»± động.","Agent ID *":"Mã đại lý *","Aggregate tokens delivered across the platform":"Tổng số token được phục vụ trên toàn hệ thống","Aggregate traffic across every category":"Tổng hợp lưu lượng tất cả danh mục","Aggregated across enabled groups":"Tổng hợp các nhóm đang bật","Aggregated across the apps below":"Tổng hợp các ứng dụng bên dưới","Aggregated traffic by upstream model provider":"Lưu lượng tổng hợp theo nhà cung cấp mô hình","Aggregated usage metrics and trend charts.":"Chỉ số sá»­ dụng tổng hợp và biểu đồ xu hướng.","aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.":"tổng hợp hÆ¡n 50 nhà cung cấp AI sau một API thống nhất. Quản lý truy cập, theo dõi chi phí và mở rộng dễ dàng.","Aggregation bucket":"Khoảng tổng hợp","AGPL v3.0 License":"Giấy phép AGPL v3.0","AI Application Infrastructure Foundation":"Nền tảng hạ tầng ứng dụng AI","AI model testing environment":"Môi trường thá»­ nghiệm mô hình AI","AI models":"mô hình AI","AI models supported":"Các mô hình AI được hỗ trợ","AI Proxy":"AI Proxy","AI Proxy Library":"Thư viện AI Proxy","AIGC2D":"AIGC2D","AILS":"AILS","AK/SK mode: use AccessKey|SecretAccessKey|Region":"Chế độ AK/SK: sá»­ dụng AccessKey|SecretAccessKey|Region","Ali":"Ali","Alipay":"Alipay","All":"All","All categories":"Tất cả danh mục","All conditions must match before this tier is used.":"Tất cả điều kiện phải khớp trước khi tầng này được sá»­ dụng.","All edits are overwrite operations. Leave fields empty to keep current values unchanged.":"Tất cả các chỉnh sá»­a đều là thao tác ghi đè. Để trống các trường để giữ nguyên giá trị hiện tại.","All files exceed the maximum size.":"Tất cả các tệp vượt quá kích thước tối đa.","All Groups":"Tất cả các nhóm","All Models":"Tất cả các mẫu","All models in use are properly configured.":"Tất cả các mô hình đang được sá»­ dụng đều được cấu hình đúng cách.","All Must Match (AND)":"Tất cả phải khớp (AND)","All requests must include":"Mọi yêu cầu phải có header","All Status":"Tất cả trạng thái","All Sync Status":"Tất cả Trạng thái Đồng bộ","All systems operational":"Tất cả hệ thống hoạt động bình thường","All Tags":"Tất cả Thẻ","All Types":"All types","All upstream data is trusted":"Tất cả dữ liệu thượng nguồn đều được tin cậy","All Vendors":"Tất cả Nhà cung cấp","All-time":"Mọi thời điểm","Allocated Memory":"Bộ nhớ đã cấp phát","Allow accountFilter parameter":"Cho phép tham số accountFilter","Allow balance redemption":"Cho phép thanh toán bằng số dư","Allow Claude beta query passthrough":"Cho phép chuyển tiếp truy vấn beta Claude","Allow clients to query configured ratios via `/api/ratio`.":"Cho phép khách hàng truy vấn các tá»· lệ đã cấu hình thông qua `/api/ratio`.","Allow HTTP image requests":"Cho phép yêu cầu hình ảnh HTTP","Allow include usage obfuscation passthrough":"Cho phép chuyển tiếp che giấu sá»­ dụng","Allow inference geography passthrough":"Cho phép chuyển tiếp vị trí địa lý suy luận","Allow inference_geo passthrough":"Cho phép truyền inference_geo","Allow Insecure Origins":"Cho phép Nguồn gốc Không an toàn","Allow new users to register":"Cho phép người dùng mới đăng ký","Allow Private IPs":"Cho phép IP riêng","Allow registration with password":"Cho phép đăng ký bằng mật khẩu","Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)":"Cho phép các yêu cầu đến các dải IP riêng (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)","Allow Retry":"Cho phép thá»­ lại","Allow safety_identifier passthrough":"Cho phép chuyển tiếp safety_identifier","Allow service_tier passthrough":"Cho phép chuyển tiếp service_tier","Allow speed passthrough":"Cho phép truyền speed","Allow upstream callbacks":"Cho phép callback upstream","Allow users to check in daily for random quota rewards":"Cho phép người dùng điểm danh hàng ngày để nhận phần thưởng hạn ngạch ngẫu nhiên","Allow users to enter promo codes":"Cho phép người dùng nhập mã khuyến mãi","Allow users to log in with password":"Cho phép người dùng đăng nhập bằng mật khẩu","Allow users to register and sign in with Passkey (WebAuthn)":"Cho phép người dùng đăng ký và đăng nhập bằng Passkey (WebAuthn)","Allow users to sign in with Discord":"Cho phép người dùng đăng nhập bằng Discord","Allow users to sign in with GitHub":"Cho phép người dùng đăng nhập bằng GitHub","Allow users to sign in with LinuxDO":"Cho phép người dùng đăng nhập bằng LinuxDO","Allow users to sign in with OpenID Connect":"Cho phép người dùng đăng nhập bằng OpenID Connect","Allow users to sign in with Telegram":"Cho phép người dùng đăng nhập bằng Telegram","Allow users to sign in with this provider":"Cho phép người dùng đăng nhập bằng nhà cung cấp này","Allow users to sign in with WeChat":"Cho phép người dùng đăng nhập bằng WeChat","Allow using models without price configuration":"Cho phép sá»­ dụng mô hình không có cấu hình giá","Allowed":"Cho phép","Allowed Origins":"Nguồn gốc được phép","Allowed Ports":"Cổng được phép","Already have an account?":"Đã có tài khoản?","Always matches (default tier).":"Luôn khớp (bậc mặc định).","Amount":"Số lượng","Amount cannot be changed when editing.":"Số tiền không thể thay đổi khi chỉnh sá»­a.","Amount discount":"Số tiền giảm giá","Amount Due":"Số tiền cần thanh toán","Amount must be a whole number":"Số tiền phải là số nguyên","Amount must be greater than 0":"Số tiền phải lớn hÆ¡n 0","Amount of quota to credit to user account.":"Số lượng quota để ghi có vào tài khoản người dùng.","Amount options must be a JSON array":"Tùy chọn số tiền phải là mảng JSON","Amount to pay:":"Amount due:","An unexpected error occurred":"Đã xảy ra lỗi không mong muốn","and":"and","Announcement added. Click \\"Save Settings\\" to apply.":"Đã thêm thông báo. Nhấp \\"Save Settings\\" để áp dụng.","Announcement content":"Nội dung thông báo","Announcement deleted. Click \\"Save Settings\\" to apply.":"Đã xóa thông báo. Nhấp \\"Save Settings\\" để áp dụng.","Announcement Details":"Chi tiết thông báo","Announcement displayed to users (supports Markdown & HTML)":"Thông báo hiển thị cho người dùng (hỗ trợ Markdown & HTML)","Announcement updated. Click \\"Save Settings\\" to apply.":"Đã cập nhật thông báo. Nhấp \\"Save Settings\\" để áp dụng.","Announcements":"Thông báo","Announcements saved successfully":"Đã lưu thông báo thành công","Answer":"Trả lời","Answers for common access and billing questions":"Câu trả lời cho các câu hỏi thường gặp về truy cập và thanh toán","Anthropic":"Anthropic","Any Match (OR)":"Bất kỳ khớp (OR)","API":"API","API Access":"Truy cập API","API Addresses":"Địa chỉ API","API Base URL (Important: Not Chat API) *":"URL cÆ¡ sở API (Quan trọng: Không phải API Chat) *","API Base URL *":"URL cÆ¡ sở API *","API Endpoints":"Điểm cuối API","API Info":"Thông tin API","API info added. Click \\"Save Settings\\" to apply.":"Thông tin API đã được thêm. Nhấp vào \\"Lưu Cài đặt\\" để áp dụng.","API info deleted. Click \\"Save Settings\\" to apply.":"Thông tin API đã được xóa. Nhấp vào \\"Lưu Cài đặt\\" để áp dụng.","API info saved successfully":"Đã lưu thông tin API thành công","API info updated. Click \\"Save Settings\\" to apply.":"Thông tin API đã được cập nhật. Nhấp vào \\"Lưu Cài đặt\\" để áp dụng.","API key":"Khóa API","API Key":"Khóa API","API Key (one per line for batch mode)":"Khóa API (mỗi khóa một dòng cho chế độ hàng loạt)","API Key (Production)":"API Key (Sản xuất)","API Key (Sandbox)":"Khóa API (Sandbox)","API Key *":"Khóa API *","API Key created successfully":"Tạo khóa API thành công","API Key deleted successfully":"Xóa khóa API thành công","API Key disabled successfully":"Vô hiệu hóa khóa API thành công","API Key enabled successfully":"Kích hoạt khóa API thành công","API key from the provider":"khóa API từ nhà cung cấp","API key is required":"Khóa API là bắt buộc","API Key mode (does not support batch creation)":"Chế độ Khóa API (không hỗ trợ tạo hàng loạt)","API Key mode: use APIKey|Region":"Chế độ khóa API: sá»­ dụng APIKey|Region","API Key updated successfully":"API Key đã được cập nhật thành công","API Keys":"Khóa API","API Private Key":"Khóa riêng API","API Requests":"Yêu cầu API","API secret":"Bí mật API","API token management":"Quản lý token API","API URL":"API URL","API usage records":"Lịch sá»­ sá»­ dụng API","API2GPT":"API2GPT","App":"Ứng dụng","App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.":"Bảng xếp hạng ứng dụng hiển thị tại đây là dữ liệu mô phỏng để xem trước và sẽ được thay thế bằng dữ liệu thá»±c sau khi tích hợp backend.","Append":"Thêm vào cuối","Append mode: New keys will be added to the end of the existing key list":"Chế độ nối: Các khóa mới sẽ được thêm vào cuối danh sách khóa hiện có","Append Template":"Thêm mẫu","Append to channel":"Nối vào kênh","Append to End":"Thêm vào cuối","Append to existing keys":"Add to existing keys","Append value to array / string / object end":"Thêm giá trị vào cuối mảng / chuỗi / đối tượng","appended":"đã thêm vào cuối, được phụ lục","Application":"Ứng dụng","Applied {{name}} pricing to {{count}} models":"Đã áp dụng giá cá»§a {{name}} cho {{count}} mô hình","Applied upstream model changes to {{count}} channels":"Đã áp dụng thay đổi mô hình thượng nguồn cho {{count}} kênh","Applied upstream model changes to channel (ID: {{id}})":"Đã áp dụng thay đổi mô hình thượng nguồn cho kênh (ID: {{id}})","Applies to custom completion endpoints. JSON map of model → ratio.":"Áp dụng cho các điểm cuối hoàn thành tùy chỉnh. Bản đồ JSON cá»§a mô hình → tá»· lệ.","Apply All Upstream Updates":"Áp dụng Tất cả Cập nhật Upstream","Apply Filters":"Áp dụng bộ lọc","Apply IP Filter to Resolved Domains":"Áp dụng Bộ lọc IP cho Tên miền đã phân giải","Apply Overwrite":"Áp dụng Ghi đè","Apply Sync":"Áp dụng đồng bộ","Applying...":"Đang áp dụng...","Approx.":"Xấp xỉ.","apps":"ứng dụng","Apps":"Ứng dụng","apps tracked":"ứng dụng được theo dõi","Apps using the most tokens through new-api":"Ứng dụng dùng nhiều token nhất qua new-api","are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.":"cÅ©ng được liệt 
107kê ở đây. Xóa chúng khỏi Models để giữ cho phản hồi `/v1/models` thân thiện với người dùng và ẩn các tên dành riêng cho nhà cung cấp.","Are you sure you want to delete":"Bạn có chắc chắn muốn xóa ","Are you sure you want to delete {{count}} model(s)? This action cannot be undone.":"Bạn có chắc muốn xóa {{count}} mô hình không? Hành động này không thể hoàn tác.","Are you sure you want to delete all auto-disabled keys? This action cannot be undone.":"Bạn có chắc chắn muốn xóa tất cả các khóa bị tắt tự động? Hành động này không thể hoàn tác.","Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.":"Bạn có chắc muốn xóa triển khai \\"{{name}}\\" không? Hành động này không thể hoàn tác.","Are you sure you want to delete this key? This action cannot be undone.":"Bạn có chắc chắn muốn xóa khóa này? Hành động này không thể hoàn tác.","Are you sure you want to disable all enabled keys?":"Bạn có chắc chắn muốn vô hiệu hóa tất cả các khóa đang bật không?","Are you sure you want to enable all keys?":"Bạn có chắc chắn muốn bật tất cả các khóa không?","Are you sure you want to manually complete this order? The user will be credited with the corresponding quota.":"Bạn có chắc muốn hoàn thành thủ công đơn hàng này không? Người dùng sẽ được cộng hạn mức tương ứng.","Are you sure you want to sign out? You will need to sign in again to access your account.":"Bạn có chắc chắn muốn đăng xuất? Bạn sẽ cần đăng nhập lại để truy cập tài khoản của mình.","Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.":"Bạn có chắc chắn muốn hủy liên kết {{provider}} cho người dùng này? Người dùng sẽ không thể đăng nhập bằng phương thức này nữa.","Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.":"Bạn có chắc chắn muốn hủy liên kết {{provider}}? Bạn sẽ không thể đăng nhập bằng phương thức này nữa.","Are you sure?":"Bạn có chắc không?","Area Chart":"Biểu đồ vùng","Args (space separated)":"Đối số (cách nhau bằng khoảng trắng)","Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.":"Mảng các thiết lập sẵn của ứng dụng trò chuyện. Mỗi mục là một đối tượng với","Asc":"Asc","Ask anything":"Hỏi gì cũng được","Assigned by administrator only":"Chỉ quản trị viên gán","Assigned by administrators and used to represent a user level, such as default or vip.":"Do quản trị viên gán và dùng để biểu thị cấp người dùng, ví dụ default hoặc vip.","Async task refund":"Hoàn tiền tác vụ bất đồng bộ","At least one model regex pattern is required":"Cần ít nhất một mẫu regex mô hình","At least one valid key source is required":"Cần ít nhất một nguồn khóa hợp lệ","Attach":"Đính kèm","Audio":"Âm thanh","Audio comp.":"Nén âm thanh","Audio completion ratio":"Tỷ lệ hoàn thành âm thanh","Audio In":"Đầu vào âm thanh","Audio input":"Đầu vào âm thanh","Audio Input":"Đầu vào âm thanh","Audio input price":"Giá đầu vào âm thanh","Audio Input Price":"Giá đầu vào âm thanh","Audio Out":"Đầu ra âm thanh","Audio output":"Đầu ra âm thanh","Audio Output":"Đầu ra âm thanh","Audio output price":"Giá đầu ra âm thanh","Audio output price requires an audio input price.":"Giá đầu ra âm thanh cần có giá đầu vào âm thanh.","Audio playback failed":"Phát âm thanh thất bại","Audio Preview":"Xem trước âm thanh","Audio ratio":"Tỷ lệ âm thanh","Audio Tokens":"Token âm thanh","Auth configured":"Đã cấu hình xác thực","Auth Style":"Kiểu xác thực","auth.resetPasswordConfirm.backToLogin":"Quay lại đăng nhập","auth.resetPasswordConfirm.confirm":"Xác nhận đặt lại mật khẩu","auth.resetPasswordConfirm.description":"Xác nhận yêu cầu đặt lại để tạo mật khẩu mới.","auth.resetPasswordConfirm.retry":"Thử lại ({{seconds}} giây)","auth.resetPasswordConfirm.success":"Mật khẩu của bạn đã được đặt lại thành công","Authentication":"Xác thực","Authentication Method":"Phương thức xác thực","Authenticator code":"Mã xác thực","Authorization Endpoint":"Điểm cuối ủy quyền","Authorization Endpoint (Optional)":"Điểm cuối ủy quyền (Tùy chọn)","Authorize":"Ủy quyền","Auto":"Tự động","Auto (Circuit Breaker)":"Tự động (Bộ ngắt mạch)","Auto assignment order":"Thứ tự gán tự động","Auto Ban":"Cấm tự động","Auto detect (default)":"Tự động phát hiện (mặc định)","Auto Disabled":"Vô hiệu hóa tự động","Auto group behavior":"Cách hoạt động của nhóm auto","Auto Group Chain":"Chuỗi nhóm tự động","Auto refresh":"Tự động làm mới","Auto Sync Upstream Models":"Tự động đồ
107ng bộ mô hình nguồn","Auto-disable status codes":"Mã trạng thái tự tắt","Auto-discover":"Tự động khám phá","Auto-discovers endpoints from the provider":"Tự động khám phá các điểm cuối từ nhà cung cấp","Auto-fill when one field exists and another is missing":"Tự động điền khi một trường có giá trị và trường khác thiếu","Auto-retry status codes":"Mã trạng thái tự thử lại","Automatically disable channel on repeated failures":"Tự động vô hiệu hóa kênh khi xảy ra lỗi lặp lại","Automatically disable channels exceeding this response time":"Tự động vô hiệu hóa các kênh vượt quá thời gian phản hồi này","Automatically disable channels when tests fail":"Tự động vô hiệu hóa các kênh khi kiểm thử thất bại","Automatically probe all channels in the background":"Tự động dò tất cả các kênh trong nền","Automatically replaces upstream callback URLs with the server address.":"Tự động thay thế URL callback upstream bằng địa chỉ máy chủ.","Automatically selects the best available group with circuit breaker mechanism":"Tự động chọn nhóm tốt nhất hiện có với cơ chế ngắt mạch","Automatically sync model list when upstream changes are detected":"Tự động đồ
107ng bộ danh sách mô hình khi phát hiện thay đổi từ nguồn","Availability (last 24h)":"Khả dụng (24 giờ qua)","Available":"Khả dụng","Available disk space":"Dung lượng đĩa khả dụng","Available Models":"Mô hình khả dụng","Available Rewards":"Phần thưởng hiện có","Average latency":"Độ trễ trung bình","Average latency, TTFT, and success rate by group":"Độ trễ trung bình, TTFT và tỷ lệ thành công theo nhóm","Average latency, TTFT, TPS, and success rate":"Độ trễ trung bình, TTFT, TPS và tỷ lệ thành công","Average RPM":"RPM trung bình","Average time-to-first-token (TTFT) by group":"Thời gian trung bình tới token đầu tiên (TTFT) theo nhóm","Average tokens per second sustained per group":"Số token mỗi giây trung bình duy trì cho từng nhóm","Average TPM":"TPM trung bình","Average TTFT":"TTFT trung bình","AWS":"AWS","AWS Bedrock Claude Compat":"AWS Bedrock Claude tương thích","AWS Key Format":"Định dạng khóa AWS","Azure":"Azure","AZURE_OPENAI_ENDPOINT *":"AZURE_OPENAI_ENDPOINT *","Back":"Quay lại","Back to Dashboard":"Quay lại Bảng điều khiển","Back to Home":"Trở về Trang chủ","Back to login":"Quay lại đăng nhập","Back to Models":"Quay lại Mô hình","Backed up":"Đã sao lưu","Background job tracker for queued work.":"Theo dõi công việc nền cho công việc chờ xử lý.","Backup Code":"Mã dự phòng","Backup code must be in format XXXX-XXXX":"Mã dự phòng phải có định dạng XXXX-XXXX","Backup codes regenerated successfully":"Mã dự phòng đã được tạo lại thành công","Backup codes remaining: {{count}}":"Mã dự phòng còn lại: {{count}}","Bad Request":"Yêu cầu không hợp lệ","Badge Color":"Màu huy hiệu","Baidu":"Baidu","Baidu V2":"Baidu V2","Balance":"Cân bằng","Balance and top-up management":"Quản lý số dư và nạp tiền","Balance depleted":"Đã hết số dư","Balance is shown in quota units":"Số dư được hiển thị theo đơn vị hạn mức","Balance queried successfully":"Truy vấn số dư thành công","Balance updated successfully":"Đã cập nhật số dư thành công","Balance updated: {{balance}}":"Số dư đã cập nhật: {{balance}}","Bar Chart":"Biểu đồ cột","Bark Push URL":"URL đẩy Bark","Base address provided by your Epay service":"Địa chỉ cơ sở được cung cấp bởi dịch vụ Epay của bạn","Base amount. Actual deduction = base amount × system group rate.":"Số tiền cơ sở. Số tiền trừ thực tế = số tiền cơ sở × tỷ lệ nhóm hệ thống.","Base input and output token prices for this tier.":"Giá token đầu vào và đầu ra cơ bản cho tầng này.","Base input price only":"Chỉ có giá đầu vào cơ bản","Base Limits":"Giới hạn cơ bản","Base multipliers applied when users select specific groups.":"Hệ số nhân cơ bản được áp dụng khi người dùng chọn các nhóm cụ thể.","Base Price":"Giá cơ bản","Base rate limit windows for this account.":"Cửa sổ giới hạn tốc độ cơ bản cho tài khoản này.","Base URL":"URL cơ sở","Base URL is required for this channel type":"Loại kênh này yêu cầu Base URL","Base URL of your Uptime Kuma instance":"URL cơ sở của phiên bản Uptime Kuma của bạn","Basic Authentication":"Xác thực cơ bản","Basic Configuration":"Cấu hình cơ bản","Basic Info":"Thông tin cơ bản","Basic Information":"Thông tin cơ bản","Basic Templates":"Mẫu cơ bản","Batch Add (one key per line)":"Thêm hàng loạt (mỗi khóa một dòng)","Batch delete failed":"Xóa hàng loạt thất bại","Batch deleted {{count}} channels":"Đã xóa hàng loạt {{count}} kênh","Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed":"Phát hiện hàng loạt hoàn tất: {{channels}} kênh, {{add}} để thêm, {{remove}} để xóa, {{fails}} thất bại","Batch detection failed":"Phát hiện hàng loạt thất bại","Batch disable failed":"Vô hiệu hóa hàng loạt thất bại","Batch Edit":"Chỉnh sửa hàng loạt","Batch edit all channels with this tag. Leave fields empty to keep current values.":"Chỉnh sửa hàng loạt tất cả các kênh có gắn thẻ này. Để trống các trường để giữ nguyên giá trị hiện tại.","Batch Edit by Tag":"Chỉnh sửa hàng loạt theo Thẻ","Batch enable failed":"Kích hoạt hàng loạt thất bại","Batch processing failed":"
107Xá»­ lý hàng loạt thất bại","Batch set tag for {{count}} channels":"Đã đặt thẻ hàng loạt cho {{count}} kênh","Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed":"Đã áp dụng cập nhật hàng loạt mô hình upstream: {{channels}} kênh, {{added}} đã thêm, {{removed}} đã xóa, {{fails}} thất bại","Best for single-tenant deployments. Pricing and billing options stay hidden.":"Phù hợp nhất cho triển khai đơn người dùng. Các tùy chọn giá và thanh toán sẽ được ẩn.","Best TTFT":"TTFT tốt nhất","Billable input tokens":"Token đầu vào tính phí","Billable output tokens":"Token đầu ra tính phí","Billing":"Thanh toán","Billing & Payment":"Thanh toán & chi phí","Billing currency":"Loại tiền thanh toán","Billing Details":"Chi tiết thanh toán","Billing History":"Lịch sá»­ thanh toán","Billing Mode":"Chế độ thanh toán","Billing Process":"Quá trình tính phí","Billing Source":"Nguồn thanh toán","Bind":"Buộc","Bind a Pancake store + product":"Liên kết cá»­a hàng + sản phẩm Pancake","Bind an email address to your account.":"Liên kết địa chỉ email với tài khoản cá»§a bạn.","Bind Email":"Liên kết Email","Bind Telegram Account":"Liên kết tài khoản Telegram","Bind WeChat Account":"Liên kết tài khoản WeChat","Binding Information":"Thông tin Ràng buộc","Binding successful!":"Liên kết thành công!","Binding your {{provider}} account":"Đang liên kết tài khoản {{provider}} cá»§a bạn","Binding...":"Đang liên kết...","Bindings":"Ràng buộc","Blacklist":"Danh sách đen","Blacklist (Block listed domains)":"Danh sách đen (Các tên miền bị chặn)","Blacklist (Block listed IPs)":"Danh sách đen (Các IP bị chặn)","Blank Rule":"Quy tắc trống","Blend":"Trộn","Block email aliases (e.g., [email protected])":"Chặn bí danh email (ví dụ: [email protected])","Blocked keywords":"Blocked keyword","Blocks messages when sensitive keywords are detected.":"Chặn tin nhắn khi phát hiện từ khóa nhạy cảm.","Body param":"Tham số body","Border radius":"Độ bo góc","Bot Name":"Tên Bot","Bot Protection":"Bảo vệ Bot","Bot Token":"Mã thông báo Bot","Bot:":"Bot:","Bound":"Ràng buộc","Bound a subscription":"Đã liên kết một gói đăng ký","Bound Channels":"Các kênh ràng buộc","Bound Only":"Chỉ đã liên kết","Bound product:":"Sản phẩm đã liên kết:","Bound store:":"Cá»­a hàng đã liên kết:","Bring channels back online after successful checks":"Khôi phục các kênh trá»±c tuyến sau khi kiểm tra thành công","Browse and compare":"Duyệt và so sánh","Browse available models and pricing":"Duyệt mô hình khả dụng và giá","Browse rankings by category":"Duyệt bảng xếp hạng theo danh mục","Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.":"Số token ngân sách = số token tối đa × tá»· lệ. Chấp nhận một số thập phân từ 0.002 đến 1. Khuyến nghị nên giữ cho phù hợp với cách tính phí cá»§a nhà cung cấp.","Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.":"Số token ngân sách = số token tối đa × tá»· lệ. Chấp nhận một số thập phân từ 0.1 đến 1.","Budget Tokens Ratio":"Tá»· lệ Mã thông báo Ngân sách","Budgets":"Ngân sách","Build on your API gateway in minutes":"Xây dá»±ng trên cổng API cá»§a bạn trong vài phút","Built for developers,":"Được xây dá»±ng cho nhà phát triển,","Built-in":"Tích hợp sẵn","Built-in Device":"Thiết bị tích hợp","Built-in: phone fingerprint/face, or Windows Hello; External: USB security key":"Tích hợp sẵn: vân tay/khuôn mặt điện thoại, hoặc Windows Hello; Bên ngoài: khóa bảo mật USB","by":"by","By category":"Theo danh mục","By model author":"Theo nhà phát triển mô hình","Cache":"Bộ nhớ đệm","Cache 
107create (1h) price":"Giá tạo cache (1 giờ)","Cache create price":"Giá tạo cache","Cache Creation":"Tạo cache","Cache Creation (1h)":"Tạo cache (1h)","Cache Creation (5m)":"Tạo cache (5m)","Cache Directory":"Thư mục bộ nhớ đệm","Cache Directory Disk Space":"Dung lượng đĩa thư mục bộ nhớ đệm","Cache Directory Info":"Thông tin thư mục bộ nhớ đệm","Cache Entries":"Mục bộ nhớ đệm","Cache mode":"Chế độ bộ đệm","Cache pricing":"Giá bộ nhớ đệm","Cache ratio":"Tỷ lệ bộ nhớ đệm","Cache Read":"Đọc bộ nhớ đệm","Cache read price":"Giá đọc cache","Cache repeated prompt prefixes for cheaper, faster reuse":"Lưu cache phần đầu lời nhắc lặp lại để tái sử dụng nhanh và rẻ hơn","Cache write":"Ghi cache","Cache Write":"Ghi bộ nhớ đệm","Cache Write (1h)":"Ghi cache (1h)","Cache Write (5m)":"Ghi cache (5m)","Cache write price":"Giá ghi cache","Cached":"Đã cache","Cached input":"Đầu vào đã cache","Calculated price: ${{price}} per 1M tokens":"Giá tính toán: ${{price}} mỗi 1M token","Calculated ratio: {{ratio}}":"Tỷ lệ tính toán: {{ratio}}","Calculating...":"Đang tính...","Call Count Distribution":"Phân bổ số lượt gọi","Call Count Ranking":"Xếp hạng số lượt gọi","Call Proportion":"Tỷ lệ cuộc gọi","Call Trend":"Xu hướng cuộc gọi","Callback address":"Địa chỉ callback","Callback Caller IP":"IP người gọi callback","Callback notification URL":"URL thông báo callback","Callback Payment Method":"Phương thức thanh toán callback","Cancel":"Hủy bỏ","Cancelled":"Đã hủy","Cancelled at":"Đã hủy lúc","Capabilities":"Khả năng","Capture a reusable bundle of models, tags, or endpoints.":"Đóng gói một bộ có thể tái sử dụng gồm các mô hình, thẻ hoặc điểm cuối.","Card view":"Dạng thẻ","Category":"Danh mục","Category Name":"Tên danh mục","Category name is required":"Tên danh mục là bắt buộc","Category name must be less than 50 characters":"Tên danh mục phải ít hơn 50 ký tự","Caution":"Thận trọng","CC Switch":"Chuyển đổi CC","Centered":"Căn g
107iữa","Chain":"Chuỗi","Change":"Thay đổi","Change language":"Đổi ngôn ngữ","Change Password":"Đổi mật khẩu","Change To":"Thay đổi thành","Changed Fields":"Trường đã thay đổi","Changes are written to the settings draft on save.":"Các thay đổi sẽ được ghi vào bản nháp cài đặt khi lưu.","Changing...":"Đang thay đổi...","Channel":"Kênh","Channel Affinity":"Ưu tiên kênh","Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"Ưu tiên kênh sẽ sử dụng lại kênh thành công gần nhất dựa trên các khóa được trích xuất từ ngữ cảnh yêu cầu hoặc JSON body.","Channel Affinity: Upstream Cache Hit":"Ưu tiên kênh: Cache hit từ upstream","Channel copied successfully":"Sao chép kênh thành công","Channel created successfully":"Tạo kênh thành công","Channel deleted successfully":"Xóa kênh thành công","Channel disabled successfully":"Kênh đã bị vô hiệu hóa thành công","Channel enabled successfully":"Kênh đã được bật thành công","Channel Extra Settings":"Cài đặt thêm kênh","Channel ID":"Mã kênh","Channel key":"Khóa kênh","Channel key unlocked":"Khóa kênh đã được mở khóa","Channel models":"Mô hình kênh","Channel name is required":"Tên kênh là bắt buộc","Channel test completed":"Kiểm tra kênh hoàn tất","Channel type is required":"Loại kênh là bắt buộc","Channel updated successfully":"Kênh đã được cập nhật thành công","Channel-specific settings (JSON format)":"Cài đặt dành riêng cho kênh (định dạng JSON)","Channel:":"Kênh:","channel(s)? This action cannot be undone.":"kênh(s)? Hành động này không thể hoàn tác.","Channels":"Kênh","Channels deleted successfully":"Xóa kênh thành công","Character chat, storytelling, persona":"Trò chuyện nhân vật, kể chuyện, nhân cách hoá","Chart Preferences":"Tùy chọn biểu đồ","Chart Settings":"Cài đặt Biểu đồ","Chat":"Trò chuyện","Chat area":"Khu vực trò chuyện","Chat Area":"Khu vực trò chuyện","Chat Client Name":"Tên ứng dụng khách trò chuyện","Chat client name is required":"Tên ứng dụng chat là bắt buộc","Chat configuration JSON":"Cấu hình trò chuyện JSON","Chat preset not found":"Thiết lập sẵn trò chuyện không tìm thấy","Chat Presets":"Cài đặt sẵn trò chuyện","Chat session management":"Quản lý phiên trò chuyện","ChatCompletions -> Responses Compatibility":"Tương thích ChatCompletions -> Phản hồi","Check for updates":"Kiểm tra cập nhật","Check in daily to receive random quota rewards":"Nhận phòng hàng ngày để nhận phần thưởng theo hạn ngạch ngẫu nhiên","Check in now":"Điểm danh ngay","Check line {{line}} for a missing comma.":"Kiểm tra dòng {{line}} xem có thiếu dấu phẩy không.","Check out the Quick Start":"Xem hướng dẫn bắt đầu nhanh","Check resolved IPs against IP filters even when accessing by domain":"Kiểm tra các IP đã phân giải đối chiếu với các bộ lọc IP ngay cả khi truy cập bằng tên miền","Check-in failed":"Điểm danh thất bại","Check-in Rewards":"Phần thưởng điểm danh","Check-in Settings":"Cài đặt điểm danh","Check-in successful! Received":"Điểm danh thành công! Đã nhận","Checked in":"Đã check-in","Checking connection":"Đang kiểm tra kết nối","Checking name...":"Đang kiểm tra tên...","Checking updates...":"Đang kiểm tra cập nhật...","checkout.session.completed":"thanh toán.phiên.hoàn thành","checkout.session.expired":"Phiên thanh toán đã hết hạn.","ChatGPT Subscription (Codex)":"ChatGPT Subscription (Codex)","Chinese":"Tiếng Trung","Choose a username":"Chọn tên người dùng","Choose an amount and payment method":"Chọn số tiền và phương thức thanh toán","Choose between default expanded, compact icon-only, or full layout mode":"Chọn giữa chế độ mở rộng mặc định, chế độ chỉ biểu tượng thu gọn, hoặc chế độ bố cục đầy đủ","Choose between inset, floating, or standard sidebar layout":"Chọn giữa bố cục thanh bên chìm, nổi hoặc tiêu chuẩn","Choose between left-to-right or right-to-left site direction":"Chọn giữa hướng trang từ trái sang p
107hải hoặc từ phải sang trái","Choose between system preference, light mode, or dark mode":"Lựa chọn giữa tùy chọn hệ thống, chế độ sáng hoặc chế độ tối","Choose channels to sync upstream ratio configurations from":"Chọn các kênh để đồng bộ cấu hình tỷ lệ đường lên từ","Choose Group":"Chọn Nhóm","Choose how quota values are shown to users":"Chọn cách hiển thị giá trị hạn ngạch cho người dùng","Choose how the platform will operate":"Chọn cách nền tảng sẽ hoạt động","Choose how to filter domains":"Chọn cách lọc tên miền","Choose how to filter IP addresses":"Chọn cách lọc địa chỉ IP","Choose the bundle type and define the items inside it.":"Chọn loại gói và định nghĩa các mục bên trong nó.","Choose the default charts, range, and time granularity for model analytics.":"Chọn biểu đồ, khoảng thời gian và độ chi tiết thời gian mặc định cho phân tích mô hình.","Choose where to fetch upstream metadata.":"Chọn nơi để tìm nạp siêu dữ liệu thượng nguồn.","Choose which charts are selected by default when opening model analytics.":"Chọn biểu đồ được chọn mặc định khi mở phân tích mô hình.","Classic (Legacy Frontend)":"Cổ điển (Frontend cũ)","Claude":"Claude","Claude CLI Header Passthrough":"Chuyển tiếp header Claude CLI","Clean":"Không xung đột","Clean history logs":"Xóa nhật ký lịch sử","Clean logs":"Dọn dẹp nhật ký","Clean up inactive cache":"Dọn dẹp bộ nhớ đệm không hoạt động","Clean Up Log Files":"Dọn dẹp tệp nhật ký","Cleaned up {{count}} log files, freed {{size}}":"Đã dọn dẹp {{count}} tệp nhật ký, giải phóng {{size}}","Cleaning...":"Đang dọn dẹp...","Cleanup failed":"Dọn dẹp thất bại","Cleanup Mode":"Chế độ dọn dẹp","Clear":"Xóa","Clear all":"Xóa tất cả","Clear All":"Xóa tất cả","Clear All Cache":"Xóa toàn bộ bộ nhớ đệm","Clear all filters":"Xóa tất cả bộ lọc","Clear cache for this rule":"Xóa bộ nhớ đệm của quy tắc này","Clear filters":"Clear filter","Clear Mapping":"Xóa Ánh xạ","Clear mode flags in prompts":"Xóa các cờ chế độ trong lời nhắc","Clear search":"Xóa tìm kiếm","Clear selection":"Bỏ chọn","Clear selection (Escape)":"Bỏ chọn (Escape)","Cleared":"Đã xóa","Cleared {{bindingType}} binding for user {{username}}":"Đã xóa liên kết {{bindingType}} của người dùng {{username}}","Cleared all models":"Đã xóa tất cả các mô hình","Cleared channel affinity cache":"Đã xóa bộ nhớ đệm liên kết kênh","Cleared disk cache":"Đã xóa bộ nhớ đệm trên đĩa","Cleared historical logs":"Đã xóa nhật ký lịch sử","Cleared log files":"Đã xóa tệp nhật ký","Click \\"Create Plan\\" to create your first subscription plan":"Nhấp \\"Tạo gói\\" để tạo gói đăng ký đầu tiên","Click \\"Generate\\" to create a token":"Nhấp \\"Tạo\\" để tạo một token","Click any category to drill into its models, apps, and trends":"Bấm vào danh mục để xem chi tiết mô hình, ứng dụng và xu hướng","Click for details":"Nhấp để xem chi tiết","Click save when you\'re done.":"Nhấn lưu khi bạn hoàn tất.","Click save when you&apos;re done.":"Nhấn lưu khi bạn hoàn tất.","Click the button below to bind your Telegram account":"Nhấp vào nút bên dưới để liên kết tài khoản Telegram của bạn","Click to open deployment":"Nhấp để mở triển khai","Click to preview audio":"Nhấp để xem trước âm thanh","Click to preview video":"Nhấp để xem trước video","Click to update balance":"Nhấp để cập nhật số dư","Click to view Codex usage":"Nhấp để xem mức sử dụng Codex","Click to view full details":"Nhấn để xem chi tiết đầy đủ","Click to view full error message":"Nhấp để xem toàn bộ thông báo lỗi","Click to view full prompt":"Nhấp để xem toàn bộ lời 
107nhắc","Click to view image":"Nhấp để xem hình ảnh","Client header value":"Giá trị header client","Client ID":"Mã khách hàng","Client Secret":"Bí mật máy khách","Close":"Đóng","Close dialog":"Đóng hộp thoại","Close menu":"Đóng menu","Close Today":"Đóng cửa hôm nay","Cloudflare":"Cloudflare","CNY":"CNY","CNY per USD":"CNY trên USD","Code":"Mã","Code generation, refactoring, autocomplete":"Sinh code, refactor, gợi ý hoàn thành","Code interpreter":"Trình thông dịch mã","Code samples":"Mẫu mã","Codes copied!":"Đã sao chép mã!","Codex":"Codex","Codex Account & Usage":"Tài khoản và sử dụng Codex","Codex channels do not support batch creation":"Kênh Codex không hỗ trợ tạo hàng loạt","Codex channels use an OAuth JSON credential as the key.":"Kênh Codex dùng thông tin xác thực OAuth JSON làm khóa.","Codex CLI Header Passthrough":"Chuyển tiếp header Codex CLI","Codex credential must be a JSON object with access_token and account_id":"Thông tin xác thực Codex phải là đối tượng JSON có access_token và account_id","Cohere":"Cohere","Collapse":"Thu gọn","Collapse All":"Thu gọn tất cả","Collect relay latency and success-rate metrics for the model square.":"Thu thập độ trễ Relay và tỷ lệ thành công cho quảng trường mô hình.","Color":"Màu","Color is required":"Màu sắc là bắt buộc","Color preset":"Cài đặt màu sẵn","Color:":"Màu sắc:","Comfortable":"Thoải mái","Coming Soon!":"Sắp ra mắt!","Comma-separated exact model names. Prefix with regex: to ignore by regular expression.":"Tên mô hình chính xác, phân tách bằng dấu phẩy. Thêm tiền tố regex: để bỏ qua bằng biểu thức chính quy.","Comma-separated list of allowed ports (empty = all ports)":"Danh sách các cổng được phép, phân cách bằng dấu phẩy (để trống = tất cả các cổng)","Comma-separated model names (leave empty to keep current)":"Tên mô hình phân tách bằng dấu phẩy (để trống để giữ nguyên hiện tại)","Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo":"Tên mô hình được phân tách bằng dấu phẩy, ví dụ: gpt-4,gpt-3.5-turbo","Command":"Lệnh","Common":"Chung","Common Keys":"Khóa thường dùng","Common Logs":"Logarit thập phân","Common ports include 25, 465, and 587":"Các cổng phổ biến bao gồm 25, 465 và 587","Common User":"Người dùng thông thường","Community driven, self-hosted, and extensible":"Do cộng đồng phát triển, tự lưu trữ và có thể mở rộng","Compact":"Gọn","Compare each vendor\'s token share across the past few weeks":"So sánh thị phần token của từng nhà cung cấp trong vài tuần qua","Compare each vendor\'s token share across the past year":"So sánh thị phần token của từng nhà cung cấp trong năm qua","Compare each vendor\'s token share over the past 24 hours":"So sánh thị phần token của từng nhà cung cấp trong 24 giờ qua","Compare each vendor\'s token share over the past month":"So sánh thị phần token của từng nhà cung cấp trong tháng qua","Compare each vendor\'s token share since launch":"So sánh thị phần token của từng nhà cung cấp kể từ khi ra mắt","Compare the most popular models on the platform":"So sánh các mô hình phổ biến nhất trên nền tảng","compatible API routes":"tuyến API tương thích","Compatible API routes for common AI application workflows":"Các tuyến API tương thích cho quy trình ứng dụng AI phổ biến","Complete API documentation with multi-language SDK support":"Tài liệu API đầy đủ với hỗ trợ SDK đa ngôn ngữ","Complete Order":"Hoàn thành đơn hàng","Complete these steps to finish the initial installation.":"Hoàn thành các bước này để hoàn tất quá trình cài đặt ban đầu.","Completed":"Hoàn thành","Completed top-up order for the user":"Đã hoàn tất đơn nạp tiền cho người dùng","Completion":"Hoàn thành","Completion price":"Giá hoàn thành","Completion price ($/1M tokens)":"Giá hoàn thành ($/1M tokens)","Completion ratio":"Tỷ lệ hoàn thành","Compliance confirmation required":"Cần xác nhận tuân thủ","Compliance confirmed":"Đã xác nhận tuân thủ","Compliance confirmed successfully":"Xác nhận tuân thủ thành công","Concatenate channel system prompt with user&apos;
107s prompt":"Nối lời nhắc hệ thống kênh với lời nhắc của người dùng","Condition Path":"Đường dẫn điều kiện","Condition Settings":"Cài đặt điều kiện","Condition Value":"Giá trị điều kiện","Conditional multipliers":"Hệ số nhân có điều kiện","Conditions":"Điều kiện","Conditions (AND)":"Điều kiện (AND)","Confidence":"Tự tin","Configuration":"Cấu hình","Configuration File":"Tệp Cấu hình","Configuration for Creem payment integration":"Cấu hình tích hợp thanh toán Creem","Configuration for Epay payment integration":"Cấu hình cho tích hợp thanh toán Epay","Configuration for Stripe payment integration":"Cấu hình cho tích hợp thanh toán Stripe","Configuration required":"Cần cấu hình","Configure":"Cấu hình","Configure a Creem product for user recharge options.":"Cấu hình một sản phẩm Creem cho các tùy chọn nạp tiền người dùng.","Configure a custom ratio for when users use a specific token group.":"Cấu hình tỷ lệ tùy chỉnh khi người dùng sử dụng nhóm token cụ thể.","Configure a group that users can select when creating API keys.":"Cấu hình một nhóm mà người dùng có thể chọn khi tạo khóa API.","Configure a new custom OAuth provider for user authentication.":"Cấu hình nhà cung cấp OAuth tùy chỉnh mới để xác thực người dùng.","Configure a payment method for user recharge options.":"Cấu hình phương thức thanh toán cho các tùy chọn nạp tiền của người dùng.","Configure a predefined chat link for end users.":"Cấu hình một liên kết trò chuyện được xác định trước cho người dùng cuối.","Configure and deploy a new container instance.":"Cấu hình và triển khai một phiên bản container mới.","Configure API documentation links for the dashboard":"Cấu hình các liên kết tài liệu API cho bảng điều khiển","Configure at:":"Cấu hình tại:","Configure available payment methods. Provide a JSON array.":"Cấu hình các phương thức thanh toán khả dụng. Cung cấp một mảng JSON.","Configure Creem products. Provide a JSON array.":"Cấu hình sản phẩm Creem. Cung cấp một mảng JSON.","Configure discount rates based on recharge amounts":"Cấu hình tỷ lệ chiết khấu dựa trên số tiền nạp","Configure experimental data export for the dashboard":"Cấu hình xuất dữ liệu thử nghiệm cho bảng điều khiển","Configure in your Creem dashboard":"Cấu hình trong bảng điều khiển Creem của bạn","Configure keyword filtering for prompts and responses.":"Định cấu hình lọc từ khóa để xem lời nhắc và câu trả lời.","Configure model, caching, and group ratios used for billing":"Cấu hình mô hình, bộ nhớ đệm và tỷ lệ nhóm được sử dụng để tính phí.","Configure monitoring status page groups for the dashboard":"Cấu hình các nhóm trang trạng thái giám sát cho bảng điều khiển","Configure per-model ratio for image inputs or outputs.":"Cấu hình tỷ lệ theo mô hình cho đầu vào hoặc đầu ra hình ảnh.","Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.":"Cấu hình giá theo từng công cụ ($/1K lần gọi). Mô hình tính phí theo request không phát sinh thêm phí công cụ.","Configure pricing ratios for a specific model.":"Cấu hình tỷ lệ định giá cho một mô hình cụ thể.","Configure rate limiting rules for a specific user group.":"Cấu hình quy tắc giới hạn tốc độ cho một nhóm người dùng cụ thể.","Configure the ratio for this group.":"Cấu hình tỷ lệ cho nhóm này.","Configure upstream providers and routing.":"Cấu hình nhà cung cấp upstream và định tuyến.","Configure Waffo Pancake hosted checkout integration for USD-priced top-ups":"Cấu hình tích hợp thanh toán Waffo Pancake (hosted checkout) cho nạp tiền theo USD","Configure Waffo payment aggregation platform integration":"Cấu hình tích hợp nền tảng tổng hợp thanh toán Waffo","Configure your account behavior preferences":"Cấu hình tùy chọn hành vi tài khoản của bạn","Configure your account preferences and integrations":"Cấu hình các tùy chọn và tích hợp tài khoản của bạn","Configured routes and latency checks":"Tuyến đã cấu hình và kiểm tra độ trễ","Confirm":"Xác nhận","Confirm Action":"Xác nhận hành động","Confirm and enable":"Xác nhận và bật","Confirm Batch Update":"Xác nhận Cập nhật Hàng loạt","Confirm Billing Conflicts":"Xác nhận xung đột thanh toán","Confirm Changes":"Xác nhận thay đổi","Confirm Cleanup":"Xác nhận dọn dẹp","Confirm cleanup of inactive disk cache?":"Xác nhận dọn dẹp bộ nhớ đệm đĩa không hoạt động?","Confirm clearing all channel affinity cache":"Xác nhận xóa toàn bộ bộ nhớ đệm ưu tiên kênh","Confirm clearing cache for this rule":"Xác nhận xóa bộ nhớ đệm của quy tắc này","Confirm compliance":"Xác nhận tuân thủ","Confirm compliance terms":"Xác nhận điều khoản tuân thủ","Confirm Creem Purchase":"Xác nhận mua Creem","Confirm delete":"Xác nhận xóa","Confirm disable":"Xác nhận vô hiệu hóa","Confirm enable":"Xác nhận kích hoạt","Confirm invalidate":"Xác nhận vô hiệu hóa","Confirm log cleanup":"Xác nhận dọn dẹp nhật ký","Confirm log file cleanup?":"Xác nhận dọn dẹp tệp nhật ký?","Confirm New Password":"Xác nhận mật khẩu mới","Confirm password":"Xác nhận mật khẩu","Confirm Payment":"Xác nhận Thanh toán","Confirm Selection":"Xác nhận lựa chọn","Confirm settings and finish setup":"Xác nhận cài đặt và hoàn tất thiết lập","confirm that I bear legal responsibility arising from deployment":"xác nhận rằng tô
107i chịu trách nhiệm pháp lý phát sinh từ việc triển khai","Confirm Unbind":"Xác nhận hủy liên kết","Confirm your identity before removing this Passkey from your account.":"Hãy xác minh danh tính trước khi gỡ Passkey khỏi tài khoản.","Confirm your identity with Two-factor Authentication before registering a Passkey.":"Hãy xác minh danh tính bằng Xác thực hai yếu tố trước khi đăng ký Passkey.","Confirmed at {{time}} by user #{{userId}}":"Được xác nhận lúc {{time}} bởi người dùng #{{userId}}","Confirmed payment compliance":"Đã xác nhận tuân thủ thanh toán","Conflict":"Xung đột","Connect":"Kết nối","Connect through OpenAI, Claude, Gemini, and other compatible API routes":"Kết nối qua OpenAI, Claude, Gemini và các tuyến API tương thích khác","Connected to io.net service normally.":"Đã kết nối bình thường tới dịch vụ io.net.","Connection error":"Lỗi kết nối","Connection failed":"Kết nối thất bại","Connection successful":"Kết nối thành công","Console":"Bảng điều khiển","Console area":"Khu vực bảng điều khiển","Console Area":"Khu vực bảng điều khiển","Console Content":"Nội dung bảng điều khiển","Consume":"Tiêu thụ","Consumed in the last 24 hours":"Đã tiêu thụ trong 24 giờ qua","Container":"Thùng chứa","Container name":"Tên container","Containers":"Các thùng chứa","Contains":"Chứa","Contains Match":"Khớp Chứa","Content":"Nội dung","Content displayed on the home page (supports Markdown)":"Nội dung hiển thị trên trang chủ (hỗ trợ Markdown)","Content not found.":"Không tìm thấy nội dung.","Content not modified!":"Nội dung không được thay đổi!","Content width":"Chiều rộng nội dung","Context":"Ngữ cảnh","Continue":"Tiếp tục","Continue with {{name}}":"Tiếp tục với {{name}}","Continue with Discord":"Tiếp tục với Discord","Continue with GitHub":"Tiếp tục với GitHub","Continue with LinuxDO":"Tiếp tục với LinuxDO","Continue with OIDC":"Tiếp tục với OIDC","Continue with Telegram":"Tiếp tục với Telegram","Continue with WeChat":"Tiếp tục với WeChat","Contract review, compliance, summarisation":"Rà soát hợp đồng, tuân thủ, tóm tắt","Control which models are exposed and which groups may use them.":"Kiểm soát mô hình được hiển thị và nhóm nào có thể sử dụng chúng.","Controls how much the model thinks before answering":"Điều chỉnh mức suy luận trước khi trả lời","Controls whether user verification (biometrics/PIN) is required during Passkey flows.":"Kiểm soát xem liệu có yêu cầu xác minh người dùng (sinh trắc học/mã PIN) trong các luồng Passkey hay không.","Conversion rate from USD to your custom currency":"Tỷ giá chuyển đổi từ USD sang đơn vị tiền tệ tùy chỉnh của bạn","Convert reasoning_content to <think> tag in content":"Chuyển đổi reasoning_content thành thẻ <think> trong nội dung","Convert string to lowercase":"Chuyển chuỗi sang chữ thường","Convert string to uppercase":"Chuyển chuỗi sang chữ hoa","Copied":"Đã sao chép","Copied {{count}} key(s)":"Đã sao chép {{count}} khóa","Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})":"Đã sao chép kênh (ID nguồn: {{sourceId}}) thành {{name}} (ID mới: {{id}})","Copied to clipboard":"Đã sao chép vào bộ nhớ tạm","Copied: {{model}}":"Đã sao chép: {{model}}","Copied!":"Đã sao chép!","Copy":"Sao chép","Copy {{name}} pricing":"Sao chép giá của {{name}}","Copy a request header":"Sao chép header yêu cầu","Copy All":"Sao chép tất cả","Copy all backup codes":"Sao chép tất cả mã dự phòng","Copy All Codes":"Sao chép Tất cả Mã","Copy API key":"Sao chép khóa API","Copy Channel":"Sao chép kênh","Copy code":"Sao chép mã","Copy Connection Info":"Sao chép thông tin kết nối","Copy failed":"Sao chép thất bại","Copy Field":"Sao chép trường","Copy Header":"Sao chép tiêu đề","Copy Key":"Sao chép khóa","Copy Link":"Sao chép liên kết","Copy model name":"Sao chép tên mô hình","Copy model names":"Sao chép tên mô hình","Copy prompt":"Sao chép prompt","Copy ready-to-run curl":"Sao chép curl có thể chạy ngay","Copy redemption code":"Sao chép mã đổi thưởng","Copy referral link":"Sao chép liên kết giới thiệu","Copy Request Header":"Sao chép header yêu cầu","Copy secret key":"Sao chép khóa bí mật","Copy selected codes":"Sao chép các mã đã chọn","Copy selected keys":"Sao chép các khóa đã chọn","Copy source field to target field":"Sao chép trường nguồn sang trường đích","Copy the key and paste it here":"Sao chép khóa và dán vào đây","Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.":"Sao chép prompt này và gửi cho LLM (ví dụ: ChatGPT / Claude) để được hỗ trợ thiết kế biểu thức tính phí.","Copy to clipboard":"Sao chép vào bảng tạm","Copy token":"Sao chép mã thông báo","Copy URL":"Sao chép URL","Copying...":"Đang sao chép...","Copywriting, ad creative, SEO":"Viết copy, sáng tạo quảng cáo, SEO","Core concepts":"Khái niệm chính","Core Configuration":"Cấu hình chính","Core Features":"Tính năng cốt l
107õi","Core pricing":"Giá cốt lõi","Cost":"Chi phí","Cost in USD per request, regardless of tokens used.":"Chi phí bằng USD cho mỗi yêu cầu, bất kể số lượng token được sá»­ dụng.","Cost Tracking":"Theo dõi chi phí","Count must be between {{min}} and {{max}}":"Số lượng phải nằm trong khoảng từ {{min}} đến {{max}}.","Coze":"Coze","CPU Threshold (%)":"Ngưỡng CPU (%)","Create":"Tạo","Create a copy of:":"Tạo bản sao cá»§a:","Create a key for your app or service":"Tạo khóa cho ứng dụng hoặc dịch vụ cá»§a bạn","Create a new user group to configure ratio overrides for.":"Tạo một nhóm người dùng mới để cấu hình ghi đè tá»· lệ.","Create account":"Tạo tài khoản","Create an account":"Tạo tài khoản","Create an API key to unlock the real request":"Tạo khóa API để mở yêu cầu thật","Create and review invite or credit codes.":"Tạo và xem xét mã mời hoặc mã tín dụng.","Create API Key":"Tạo Khóa API","Create cache":"Tạo bộ nhớ đệm","Create cache ratio":"Tạo tá»· lệ bộ nhớ đệm","Create Channel":"Tạo Kênh","Create Code":"Tạo Mã","Create credentials for the root user":"Tạo thông tin đăng nhập cho tài khoản quản trị","Create deployment":"Tạo triển khai","Create Model":"Tạo Mô hình","Create multiple API keys at once (random suffix will be added to names)":"Tạo nhiều khóa API cùng lúc (hậu tố ngẫu nhiên sẽ được thêm vào tên)","Create multiple channels from multiple keys":"Tạo nhiều kênh từ nhiều khóa","Create multiple redemption codes at once (1-100)":"Tạo nhiều mã đổi thưởng cùng lúc (1-100)","Create new subscription plan":"Tạo gói đăng ký mới","Create or update frequently asked questions for users":"Tạo hoặc cập nhật các câu hỏi thường gặp cho người dùng","Create or update system announcements for the dashboard":"Tạo hoặc cập nhật thông báo hệ thống cho bảng điều khiển","Create Plan":"Tạo gói","Create Prefill Group":"Tạo Nhóm Điền Sẵn","Create Provider":"Tạo nhà cung cấp","Create Redemption Code":"Tạo mã đổi thưởng","Create request parameter override rules with a visual editor or raw JSON.":"Tạo quy tắc ghi đè tham số yêu cầu bằng trình soạn trá»±c quan hoặc JSON thô.","Create request parameter override rules without editing raw JSON.":"Tạo quy tắc ghi đè tham số yêu cầu mà không cần sá»­a JSON thô.","Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.":"Tạo các gói có thể tái sá»­ dụng gồm các mô hình, thẻ, điểm cuối và nhóm người dùng để tăng tốc cấu hình ở những nÆ¡i khác trong bảng điều khiển.","Create succeeded":"Tạo thành công","Create Vendor":"Tạo Nhà cung cấp","Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.":"Tạo nhóm đầu tiên cá»§a bạn để dùng lại các lá»±a chọn mô hình, thẻ hoặc điểm cuối ở bất cứ đâu trên bảng điều khiển.","Create, revoke, and audit API tokens.":"Tạo, thu hồi và kiểm toán token API.","Created":"Đã tạo","Created {{count}} redemption codes named {{name}} ({{quota}} each)":"Đã tạo {{count}} mã đổi thưởng tên {{name}} (mỗi mã {{quota}})","Created a custom OAuth provider":"Đã tạo nhà cung cấp OAuth tùy chỉnh","Created a deployment":"Đã tạo một triển khai","Created a model":"Đã tạo một mô hình","Created a prefill group":"Đã tạo một nhóm điền sẵn","Created a subscription plan":"Đã tạo một gói đăng ký","Created a vendor":"Đã tạo một nhà cung cấp","Created At":"Ngày tạo","Created channel {{name}} (type {{type}}, count {{count}})":"Đã tạo kênh {{name}} (loại {{type}}, số lượng {{count}})","Created user {{username}} (role {{role}})":"Đã tạo người dùng {{username}} (vai trò {{role}})","Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.":"Tạo má
107»™t sản phẩm Pancake trong cá»­a hàng đã lưu bằng tiêu đề và giá cá»§a gói này. Trước tiên cần cấu hình đầy đủ Waffo Pancake trong cài đặt Thanh toán.","Creating...":"Đang tạo...","Creation failed":"Tạo thất bại","Credential refreshed":"Đã làm mới thông tin xác thá»±c","Credentials":"Thông tin xác thá»±c","Credentials verification failed":"Xác minh thông tin xác thá»±c thất bại","Credentials verification failed — double-check Merchant ID and API private key.":"Xác minh thông tin xác thá»±c thất bại — hãy kiểm tra lại Merchant ID và khóa riêng API.","Credit remaining":"Tín dụng còn lại","Creem API key (leave blank unless updating)":"Khóa API Creem (để trống trừ khi cập nhật)","Creem Gateway":"Cổng Creem","Creem Payment":"Thanh toán Creem","Creem product ID from your Creem dashboard.":"ID sản phẩm Creem từ bảng điều khiển Creem cá»§a bạn.","Creem products must be a JSON array":"Sản phẩm Creem phải là mảng JSON","Cross-group":"Liên nhóm","Cross-group retry":"Thá»­ lại liên nhóm","Currency":"Tiền tệ","Currency & Display":"Tiền tệ & hiển thị","Current Balance":"Số Dư Hiện Tại","Current Billing":"Thanh toán hiện tại","Current Cache Size":"Kích thước bộ nhớ đệm hiện tại","Current domain":"Tên miền hiện tại","Current email: {{email}}. Enter a new email to change.":"Email hiện tại: {{email}}. Nhập email mới để thay đổi.","Current key":"Khóa hiện tại","Current legacy JSON is invali
107d, cannot append":"JSON định dạng cÅ© hiện tại không hợp lệ, không thể thêm","Current Level Only":"Chỉ cấp hiện tại","Current models for the longest channel in this tag. May not include all models from all channels.":"Các mô hình hiện tại cho kênh dài nhất trong thẻ này. Có thể không bao gồm tất cả các mô hình từ tất cả các kênh.","Current Password":"Mật khẩu hiện tại","Current Price":"Giá hiện tại","Current quota":"Hạn mức hiện tại","Current Value":"Present value","Current version":"Phiên bản hiện tại","Current:":"Hiện tại:","Custom":"Tùy chỉnh","Custom (seconds)":"Tùy chỉnh (giây)","Custom Amount":"Số tiền tùy chỉnh","Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.":"URL cÆ¡ sở API tùy chỉnh. Đối với các kênh chính thức, New API có địa chỉ tích hợp sẵn. Chỉ điền thông tin này cho các trang proxy cá»§a bên thứ ba hoặc các điểm cuối đặc biệt. Không thêm /v1 hoặc dấu gạch chéo cuối cùng.","Custom API base URL. Leave empty to use provider default.":"URL cÆ¡ sở API tùy chỉnh. Để trống để sá»­ dụng mặc định cá»§a nhà cung cấp.","Custom Currency":"Tiền tệ tùy chỉnh","Custom Currency Symbol":"Ký hiệu tiền tệ tùy chỉnh","Custom currency symbol is required":"Ký hiệu tiền tệ tùy chỉnh là bắt buộc","Custom database driver detected.":"Đã phát hiện trình điều khiển cÆ¡ sở dữ liệu tùy chỉnh.","Custom Error Response":"Phản hồi lỗi tùy chỉnh","Custom Home Page":"Trang chá»§ tùy chỉnh","Custom message shown when access is denied":"Thông báo tùy chỉnh hiển thị khi truy cập bị từ chối","Custom model (comma-separated)":"Mô hình tùy chỉnh (phân tách bằng dấu phẩy)","Custom module":"Module tùy chỉnh","Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.":"Các hệ số nhân tùy chỉnh khi các nhóm người dùng cụ thể sá»­ dụng các nhóm token cụ thể. Ví dụ: Người dùng VIP được hưởng tá»· lệ 0.9x khi sá»­ dụng các token thuộc nhóm \\"edit_this\\".","Custom OAuth":"OAuth tùy chỉnh","Custom OAuth Providers":"Nhà cung cấp OAuth tùy chỉnh","Custom Seconds":"Giây tùy chỉnh","Custom sidebar section":"Phần thanh bên tùy chỉnh","Custom Time Range":"Khoảng thời gian tùy chỉnh","Custom Zoom":"Thu phóng tùy chỉnh","Customize sidebar display content":"Tùy chỉnh nội dung hiển thị thanh bên","Daily":"Hàng ngày","Daily Check-in":"Điểm danh hàng ngày","Daily token usage by model across the past few weeks":"Sá»­ dụng token theo mô hình hàng ngày trong vài tuần qua","Daily token usage by model across the past month":"Sá»­ dụng token hàng ngày cá»§a từng mô hình trong tháng qua","Daily token usage by model over the past month":"Sá»­ dụng token theo mô hình hàng ngày trong tháng qua","Daily uptime over the last 30 days":"Thời gian hoạt động hàng ngày trong 30 ngày qua","Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes":"Thời gian hoạt động hàng ngày; {{incidents}} sá»± cố tổng cộng {{minutes}} phút","Dark":"Tối","Dashboard":"Bảng điều khiển","Dashboard Preferences":"Tùy chọn bảng điều khiển","Dashboards, tokens, and usage analytics.":"Bảng điều khiển, token và phân tích sá»­ dụng.","Data Dashboard":"Bảng dữ liệu","Data directory:":"Thư mục dữ liệu:","Data is stored locally on this device. Use system backups to keep a safe copy.":"Dữ liệu được lưu trữ cục bộ trên thiết bị này. Sá»­ dụng tính năng sao lưu hệ thống để giữ một bản","Data management and log viewing":"Quản lý dữ liệu và xem nhật ký","Data retention":"Lưu giữ dữ liệu","Database":"CÆ¡ sở dữ liệu","Database check":"Kiểm tra cÆ¡ sở dữ liệu","Date and time when this announcement should be displayed":"The date and time this notification should be displayed","Date Range":"Khoảng thời gian","Day":"Ngày","Day of month":"Ngày trong tháng","days":"ngày","Days to Retain":"Số ngày giữ lại","Decreased user quota by {{quota}}":"Đã giảm hạn mức người dùng {{quota}}","Deducted by subscription":"Khấu trừ bởi gói đăng ký","DeepSeek":"DeepSeek","default":"mặc định","Default":"Mặc định","Default (New Frontend)":"Mặc định (Frontend má
107»›i)","Default / range":"Mặc định / khoảng","Default API Version *":"Phiên bản API mặc định *","Default API version for this channel":"Phiên bản API mặc định cho kênh này","Default Collapse Sidebar":"Mặc định Thu gọn Thanh bên","Default consumption chart":"Biểu đồ tiêu thụ mặc định","Default Max Tokens":"Tokens Tối đa Mặc định","Default model call chart":"Biểu đồ lượt gọi mô hình mặc định","Default range":"Khoảng mặc định","Default Responses API version, if empty, will use the API version above":"Phiên bản API phản hồi mặc định, nếu để trống, sẽ sá»­ dụng phiên bản API ở trên","Default system prompt for this channel":"Lời nhắc hệ thống mặc định cho kênh này","Default time granularity":"Độ chi tiết thời gian mặc định","Default to auto groups":"Mặc định là nhóm tá»± động","Default TTL (seconds)":"TTL mặc định (giây)","Defaults to the wallet page when empty":"Để trống sẽ dùng trang ví mặc định","Define API endpoints for this model (JSON format)":"Định nghÄ©a các điểm cuối API cho mô hình này (định dạng JSON)","Define endpoint mappings for each provider.":"Định nghÄ©a ánh xạ điểm cuối cho mỗi nhà cung cấp.","Define per-group rules to add, remove, or append selectable groups for specific user groups.":"Định nghÄ©a quy tắc theo nhóm để thêm, xóa hoặc nối các nhóm có thể chọn cho các nhóm người dùng cụ thể.","Degraded performance recently":"Hiệu năng gần đây bị giảm","Delete":"Xóa","Delete (":"Xóa (","Delete {{count}} API key(s)?":"Xóa {{count}} khóa API?","Delete a runtime request header":"Xóa header yêu cầu runtime","Delete Account":"Xóa tài khoản","Delete All Disabled":"Xóa Tất Cả Đã Tắt","Delete All Disabled Channels?":"Xóa tất cả kênh đã vô hiệu hóa?","Delete Auto-Disabled":"Xóa Tá»± động vô hiệu hóa","Delete Channel":"Xóa Kênh","Delete Channels?":"Xóa các kênh?","Delete condition":"Xóa điều kiện","Delete Condition":"Xóa điều kiện","Delete failed":"Xóa thất bại","Delete Field":"Xóa trường","Delete group":"Xóa nhóm","Delete Header":"Xóa tiêu đề","Delete Invalid":"Xóa không hợp lệ","Delete invalid codes":"Xóa mã không hợp lệ","Delete invalid codes (used/disabled/expired)":"Xóa mã không hợp lệ (đã sá»­ dụng/đã vô hiệu hóa/đ","Delete invalid redemption codes":"Xóa mã đổi thưởng không hợp lệ","Delete Invalid Redemption Codes?":"Xóa Mã đổi thưởng không hợp lệ?","Delete logs":"Xóa nhật ký","Delete mapping":"Xóa ánh xạ","Delete Model":"Xóa Mô hình","Delete Models?":"Xóa mô hình?","Delete Provider":"Xóa nhà cung cấp","Delete Request Header":"Xóa header yêu cầu","Delete selected API keys":"Xóa các khóa API đã chọn","Delete selected channels":"Xóa các kênh đã chọn","Delete selected models":"Xóa các mô hình đã chọn","Deleted":"Đã xóa","Deleted a custom OAuth provider":"Đã xóa nhà cung cấp OAuth tùy chỉnh","Deleted a deployment":"Đã xóa một triển khai","Deleted a model":"Đã xóa một mô hình","Deleted a passkey":"Đã xóa một passkey","Deleted a prefill group":"Đã xóa một nhóm điền sẵn","Deleted a redemption code":"Đã xóa một mã đổi thưởng","Deleted a vendor":"Đã xóa một nhà cung cấp","Deleted all disabled channels ({{count}})":"Đã xóa tất cả kênh bị vô hiệu hóa ({{count}})","Deleted channel {{name}} (ID: {{id}})":"Đã xóa kênh {{name}} (ID: {{id}})","Deleted invalid redemption codes":"Đã xóa các mã đổi thưởng không hợp lệ","Deleted successfully":"Xóa thành công","Deleted user {{username}} (ID: {{id}})":"Đã xóa người dùng {{username}} (ID: {{id}})","Deleting will permanently remove this subscription record (including benefit details). Continue?":"Xóa sẽ xóa vÄ©nh viễn bản ghi đăng ký này (bao gồm chi tiết quyền lợi). Tiếp tục?","Deleting...":"Đang xóa...","Demo site":"Trang demo","Demo site mode":"Chế độ trang demo","Demo Site Mode":"Chế độ trang Demo","Demote":"Giáng chức","Density":"Mật độ","Deploy your own gateway and start routing requests through your configured upstream services.":"Triển khai cổng riêng cá»§a bạn và bắt đầu định tuyến yêu cầu qua các dịch vụ thượng nguồn đã cấu hình.","Deployment created successfully":"Tạo triển khai thành công","Deployment details":"Chi tiết triển khai","Deployment ID":"ID triển khai","Deployment location":"Vị trí triển khai","Deployment logs":"Nhật ký triển khai","Deployment Region *":"Khu vá»±c triển khai *","Deployment requested":"YÃ
107ªu cầu triển khai","Deployments":"Triển khai","Desc":"Giảm dần","Describe":"Mô tả","Describe this model...":"Mô tả mô hình này...","Describe this vendor...":"Mô tả nhà cung cấp này...","Description":"Mô tả","Description is required":"Mô tả là bắt buộc","Designed and Developed by":"Thiết kế và Phát triển bởi","designed for scale":"thiết kế cho quy mô lớn","Destroyed":"Đã há»§y","Detailed request logs for investigations.":"Nhật ký yêu cầu chi tiết cho các cuộc điều tra.","Details":"Chi tiết","Detect All Upstream Updates":"Phát hiện Tất cả Cập nhật Upstream","Detected database":"Đã phát hiện cÆ¡ sở dữ liệu","Detected high-risk status code redirect rules":"Phát hiện các quy tắc chuyển hướng mã trạng thái rá»§i ro cao sau:","Detection complete: {{add}} to add, {{remove}} to remove":"Phát hiện hoàn tất: {{add}} để thêm, {{remove}} để xóa","Detection failed":"Phát hiện thất bại","Determines how this group is applied elsewhere.":"Xác định cách nhóm này được áp dụng ở nÆ¡i khác.","Deterministic sampling seed (best-effort)":"Hạt giống lấy mẫu xác định (cố gắng tốt nhất)","Developer Friendly":"Thân thiện với nhà phát triển","Device Type Preference":"Ưu tiên loại thiết bị","Dify":"Dify","Dify channels only support chatflow and agent, and agent does not support images":"Kênh Dify chỉ hỗ trợ chatflow và agent, và agent không hỗ trợ hình ảnh","Digest:":"Tóm tắt:","Direction":"Hướng","Directory File Count":"Số tệp trong thư mục","Directory Total Size":"Tổng dung lượng thư mục","Disable":"Vô hiệu hóa","Disable 2FA":"Tắt 2FA","Disable All":"Vô hiệu hóa tất cả","Disable on failure":"Vô hiệu hóa khi lỗi","Disable selected channels":"Vô hiệu hóa các kênh đã chọn","Disable selected models":"Vô hiệu hóa các mô hình đã chọn","Disable store passthrough":"Vô hiệu hóa chuyển tiếp store","Disable this key?":"Vô hiệu hóa khóa này?","Disable threshold (seconds)":"Vô hiệu hóa ngưỡng (giây)","Disable Two-Factor Authentication":"Vô hiệu hóa Xác thá»±c hai yếu tố","disabled":"vô hiệu hóa","Disabled":"Đã tắt","Disabled all channels with tag: {{tag}}":"Đã tắt tất cả kênh với nhãn: {{tag}}","Disabled channels with tag {{tag}}":"Đã vô hiệu hóa các kênh có thẻ {{tag}}","Disabled lanes are omitted on save.":"Các kênh bị tắt sẽ được bỏ qua khi lưu.","Disabled Reason":"Lý do vô hiệu hóa","Disabled Time":"Thời gian vô hiệu hóa","Disabling...":"Đang vô hiệu hóa...","Discord":"Discord","Discount":"Giảm giá","Discount map by recharge amount (JSON object)":"Ánh xạ giảm giá theo số tiền nạp (đối tượng JSON)","Discount Rate":"Tá»· lệ chiết khấu","Discount rate must be ≤ 1":"Tá»· lệ giảm giá phải ≤ 1","Discount rate must be greater than 0":"Tá»· lệ giảm giá phải lớn hÆ¡n 0","Discount Rate:":"Tá»· lệ chiết khấu:","Discount ratio for cache hits.":"Tá»· lệ chiết khấu cho lượt truy cập bộ nhớ đệm thành công.","Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel.":"Tuyên bố miễn trừ: Chỉ dùng cho mục đích cá nhân. Không phân phối hoặc chia sẻ bất kỳ thông tin xác thá»±c nào. Kênh này có điều kiện tiên quyết và yêu cầu thiết lập trước; chỉ sá»­ dụng khi bạn hiểu rõ quy trình và rá»§i ro, và tuân thá»§ điều khoản và chính sách cá»§a OpenAI. Thông tin xác thá»±c và cấu hình chỉ dành cho tích hợp Codex CLI, không áp dụng cho các client, nền tảng hoặc kênh khác.","Discouraged":"Tuyệt vọng","Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.":"Khám phá các mô hình AI được tuyển chọn, so sánh giá và khả năng, rồi chọn mô hình phù hợp cho từng kịch bản.","Discover the leading models in each domain":"Khám phá các mô hình hàng đá
107º§u trong từng lÄ©nh vá»±c","Discover the most-used models and rising vendors on the platform, updated from live usage data.":"Khám phá các mô hình được dùng nhiều nhất và nhà cung cấp đang tăng trưởng trên nền tảng, được cập nhật từ dữ liệu sá»­ dụng trá»±c tiếp.","Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.":"Khám phá các mô hình, ứng dụng và nhà cung cấp nổi bật trên hệ thống — cập nhật liên tục cho từng danh mục.","Discovering...":"Đang khám phá...","Disk cache cleared":"Đã xóa bộ nhớ đệm đĩa","Disk Cache Settings":"Cài đặt bộ nhớ đệm đĩa","Disk Cache Threshold (MB)":"Ngưỡng bộ nhớ đệm đĩa (MB)","Disk cache, system performance monitoring, and operation statistics":"Bộ nhớ đệm đĩa, giám sát hiệu suất hệ thống và thống kê vận hành","Disk Hits":"Lượt truy cập đĩa","Disk Threshold (%)":"Ngưỡng đĩa (%)","Display in Currency":"Hiển thị tiền tệ","Display Mode":"Chế độ hiển thị","Display name":"Tên hiển thị","Display Name":"Tên hiển thị","Display name and email used in outgoing messages":"Tên hiển thị và email được sá»­ dụng trong tin nhắn gá»­i đi","Display Name Field":"Trường Tên Hiển Thị","Display name for this chat client.":"Tên hiển thị cho ứng dụng chat này.","Display name for this monitoring group (max 50 characters)":"Tên hiển thị cho nhóm giám sát này (tối đa 50 ký tá»±)","Display name for this payment method.":"Tên hiển thị cho phương thức thanh toán này.","Display name shown to users.":"Tên hiển thị cho người dùng.","Display Options":"Tùy chọn hiển thị","Display Token Statistics":"Hiển thị Thống kê Token","Displayed in":"Hiển thị theo","Displays the mobile sidebar.":"Hiển thị thanh bên di động.","Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.":"Đừng tin tưởng quá mức vào tính năng này. IP có thể bị giả mạo. Hãy sá»­ dụng cùng với nginx, CDN và các gateway khác.","Do not repeat check-in; only once per day":"Không lặp lại check-in; chỉ một lần mỗi ngày","Do regex replacement in the target field":"Thá»±c hiện thay thế regex trong trường đích","Do string replacement in the target field":"Thá»±c hiện thay thế chuỗi trong trường đích","Docs":"Tài liệu","Documentation Link":"Liên kết tài liệu","Documentation or external knowledge base.":"Tài liệu hoặc cÆ¡ sở kiến thức bên ngoài.","does not exist or might have been removed.":"không tồn tại hoặc có thể đã bị xóa.","Domain":"Miền","Domain Filter Mode":"Chế độ lọc miền","Don\'t have an account?":"Chưa có tài khoản?","Done":"Xong","Doubao custom API address editing unlocked":"Đã mở khóa chỉnh sá»­a địa chỉ API tùy chỉnh Doubao","DoubaoVideo":"DoubaoVideo","Double check the configuration below. Your system will be locked until initialization is complete.":"Kiểm tra kỹ lại cấu hình bên dưới. Hệ thống cá»§a bạn sẽ bị khóa cho đến khi quá trình khởi tạo hoàn tất.","Download":"Tải xuống","Draw":"Vẽ","Drawing":"Vẽ","Drawing logs":"Nhật ký vẽ","Drawing Logs":"Nhật ký bản vẽ","Drawing task records":"Lịch sá»­ tác vụ vẽ","Duplicate":"Nhân bản","Duplicate group names: {{names}}":"Tên nhóm bị trùng: {{names}}","Duplicate source model mappings are not allowed":"Không cho phép ánh xạ mô hình nguồn trùng lặp","Duplicate source model(s): {{models}}":"Mô hình nguồn trùng lặp: {{models}}","Duration":"Thời lượng","Duration (hours)":"Thời lượng (giờ)","Duration Settings":"Cài đặt thời lượng","Duration Unit":"Đơn vị thời lượng","Duration Value":"Giá trị thời lượng","Dynamic Pricing":"Giá linh hoạt","e.g. Â¥ or HK$":"ví dụ Â¥ hoặc HK$","e.g. 401, 403, 429, 500-599":"vd. 401, 403, 429, 500-599","e.g. 8 means 1 USD = 8 units":"Ví dụ: 8 có nghÄ©a là 1 USD = 8 đơn vị","e.g. Basic Plan":"ví dụ: Gói cÆ¡ bản","e.g. Clean tool parameters to avoid upstream validation errors":"ví dụ: Dọn dẹp tham số công cụ để tránh lỗi xác thá»±c upstream","e.g. example.com":"ví dụ example.com","e.g. llama3.1:8b":"ví dụ: llama3.1:8b","e.g. My GitLab":"ví dụ: GitLab cá»§a tôi","e.g. my-gitlab":"ví dụ: my-gitlab","e.g. New API Console":"Ví dụ: Bảng điều khiển API mới","e.g. openid profile email":"ví dụ: openid profile email","e.g. Suitable for light usage":"ví dụ: Phù hợp cho sá»­ dụng nhẹ","e.g. This request does not meet access policy":"ví dụ: Yêu cầu này không đáp ứng chính sách truy cập","e.g., 0.95":"e.g., 0.95","e.g., 100":"e.g., 100","e.g., 123456":"e.g., 123456","e.g., 2025-04-01-preview":"ví dụ: 2025-04-01-preview","e.g., 50":"e.g., 50","e.g., 500000":"ví dụ, 500000","e.g., 7342866812345":"e.g., 7342866812345","e.g., 8 means 8 local currency per USD":"Ví dụ, 8 có nghÄ©a là 8 đơn vị tiền tệ địa phương trên mỗi USD","e.g., Alipay, WeChat":"ví dụ: Alipay, WeChat","e.g., Basic Package":"ví dụ, Gói cÆ¡ bản","e.g., CN2 GIA":"ví dụ, CN2 GIA","e.g., Core APIs, OpenAI, Claude"
107:"ví dụ: Core APIs, OpenAI, Claude","e.g., d6b5da8hk1awo8nap34ube6gh":"ví dụ: d6b5da8hk1awo8nap34ube6gh","e.g., default, vip, premium":"ví dụ: mặc định, VIP, cao cấp","e.g., gpt-4, claude-3":"vd: gpt-4, claude-3","e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$":"ví dụ: gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$","e.g., https://api.example.com (path before /suno)":"ví dụ: https://api.example.com (đường dẫn trước /suno)","e.g., https://api.openai.com/v1/chat/completions":"ví dụ: https://api.openai.com/v1/chat/completions","e.g., https://ark.cn-beijing.volces.com":"ví dụ, https://ark.cn-beijing.volces.com","e.g., https://docs-test-001.openai.azure.com":"ví dụ: https://docs-test-001.openai.azure.com","e.g., https://fastgpt.run/api/openapi":"ví dụ: https://fastgpt.run/api/openapi","e.g., OpenAI GPT-4 Production":"ví dụ: OpenAI GPT-4 Sản xuất","e.g., preview":"ví dụ: xem trước","e.g., prod_xxx":"ví dụ, prod_xxx","e.g., Recommended for China Mainland Users":"ví dụ: Khuyến nghị dành cho người dùng Trung Quốc đại lục","e.g., us-central1 or JSON format for model-specific regions":"chẳng hạn như us-central1 hoặc định dạng JSON cho các khu vá»±c dành riêng cho mô hình","e.g., v2.1":"e.g., v2.1","Each backup code can only be used once.":"Mỗi mã dá»± phòng chỉ có thể được sá»­ dụng một lần.","Each item must be an object with a single key-value pair.":"Mỗi mục phải là đối tượng với một cặp khóa-giá trị duy nhất.","Each item must have exactly one key-value pair.":"Mỗi mục phải có chính xác một cặp khóa-giá trị.","Each line represents one keyword. Leave blank to disable the list but keep the switch states.":"Mỗi dòng đại diện cho một từ khóa. Để trống để tắt danh sách nhưng vẫn giữ trạng thái công tắc.","Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.":"Mỗi bậc hỗ trợ 0~2 điều kiện (đối với len, p, c); bậc cuối là bậc dá»± phòng không cần điều kiện. Hãy dùng len (độ dài đầu vào đầy đủ, bao gồm cả cache hits) cho điều kiện bậc để tránh định tuyến sai khi cache hits làm giảm p.","Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.":"Mỗi tầng hỗ trợ tối đa 2 điều kiện; tầng cuối cùng là tầng dá»± phòng không có điều kiện. Hãy dùng độ dài đầu vào đầy đủ cho điều kiện tầng để tránh chọn sai tầng khi cache hit làm giảm token đầu vào tính phí.","Each tier supports up to 2 conditions. The last tier without conditions is the fallback.":"Mỗi tầng hỗ trợ tối đa 2 điều kiện. Tầng cuối cùng không có điều kiện là tầng dá»± phòng.","Earn rewards when your referrals add funds. Transfer accumulated rewards to your balance anytime.":"Nhận phần thưởng khi người bạn giới thiệu nạp tiền","Edit":"Chỉnh sá»­a","Edit {{title}}":"Chỉnh sá»­a {{title}}","Edit all channels with tag:":"Chỉnh sá»­a tất cả các kênh với thẻ:","Edit Announcement":"Chỉnh sá»­a thông báo","Edit API Shortcut":"Chỉnh sá»­a lối tắt API","Edit billing ratios and user-selectable groups in one table.":"Chỉnh sá»­a tá»· lệ tính phí và nhóm người dùng có thể chọn trong một bảng.","Edit Channel":"Chỉnh sá»­a Kênh","Edit chat preset":"Chỉnh sá»­a cài đặt trước trò chuyện","Edit discount tier":"Chỉnh sá»­a bậc giảm giá","Edit FAQ":"Chỉnh sá»­a câu hỏi thường gặp","Edit group rate limit":"Chỉnh sá»­a giới hạn tốc độ nhóm","Edit JSON object directly. Suitable for simple parameter overrides.":"Chỉnh sá»­a đối tượng JSON trá»±c tiếp. Phù hợp cho ghi đè tham số đơn giản.","Edit JSON text directly. Format will be validated on save.":"Chỉnh sá»­a văn bản JSON trá»±c tiếp. Định dạng sẽ được kiểm tra khi lưu.","Edit model":"Chỉnh sá»­a mô hình","Edit Model":"Chỉnh sá»­a Mô hình","Edit model pricing":"Chỉnh sá»­a giá mô hình","Edit OAuth Provider":"Chỉnh Sá»­a Nhà Cung Cấp OAuth","Edit payment method":"Sá»­a phương thức thanh toán","Edit Prefill Group":"Chỉnh sá»­a Nhóm Điền sẵn","Edit product":"Chỉnh sá»­a sản phẩm","Edit ratio override":"Chỉnh sá»­a ghi đè tá»· lệ","Edit Rule":"Sá»­a quy tắc","Edit selectable group":"Chỉnh sá»­a nhóm có thể chọn","Edit Tag":"Chỉnh sá»­a Thẻ","Edit Tag:":"Chỉnh sá»­a thẻ:","Edit Uptime Kuma Group":"Chỉnh sá»­a Nhóm Uptime Kuma","Edit Vendor":"Chỉnh sá»­a Nhà cung cấp","edit_this":"edit_this","Edited channels with tag {{tag}}":"Đã chỉnh sá»­a các kênh có thẻ {{tag}}","Editor mode":"Chế độ trình sá»­a","Education":"Giáo dục","Email":"Email","Email (required for verification)":"Email (bắt buộc để xác minh)","Email Address":"Địa chỉ email","Email Alias Restriction":"Hạn chế Bí danh Email","Email bound successfully!":"Email đã được liên kết thành công!","Email Domain Restriction":"Hạn chế Tên miền Email","Email Domain Whitelist":"Danh sách trắng tên miền email","Email Field":"Trường Email","Email Verification":"Xác minh Email","Email, summarisation, knowledge work":"Email, tóm tắt, làm việc tri thức","Embeddings":"Embeddings","Empty":"Trống","Empty value will be saved as {}.":"Giá trị trống sẽ được lưu thành {}.","Enable":"Bật","Enable 2FA":"Bật 2FA","Enable All":"Bật tất cả","Enable check-in feature":"Bật tính năng điểm danh","Enable Data Dashboard":"Kích hoạt Trang tổng quan Dữ liệu","Enable demo mode with limited functionality":"Bật chế độ demo với chức năng hạn chế","Enable Discord OAuth":"Bật Discord OAuth","Enable Disk Cache":"Bật bộ nhớ đệm đĩa","Enable drawing features":"Bật tính năng vẽ","Enable filtering":"Bật lọc","Enable FunctionCall thoughtSignature Fill":"Bật tính năng điền FunctionCall thoughtSignature","Enable GitHub OAuth":"Kích hoạt GitHub OAuth","Enable Groups":"Bật Nhóm","Enable if this is an OpenRouter enterprise account with special response format":"Bật nếu đây là tài khoản doanh nghiệp OpenRouter với định dạng phản hồi đặc biệt","Enable io.net deployments":"Bật triển khai io.net","Enable io.net model deployment service in console":"Bật dịch vụ triển khai mô hình io.net trong bảng điều khiển","Enable LinuxDO OAuth":"Bật LinuxDO OAuth","Enable model performance metrics":"Bật chỉ số hiệu năng mô hình","Enable OIDC":"Bật OIDC","Enable or disable this channel":"Bật hoặc tắt kênh này","Enable or disable this model":"Bật hoặc tắt mô hình này","Enable Passkey":"Bật khóa truy cập","Enable Performance Monitoring":"Bật giám sát hiệu suất","Enable rate limiting":"Bật giới hạn tốc độ","Enable Request Passthrough":"Bật Truyền qua Yêu cầu","Enable selected channels":"Kích hoạt các kênh đã chọn","Enable selected models":"Kích hoạt các mô hình đã chọn","Enable SSL/TLS":"Bật SSL/TLS","Enable SSRF Protection":"Kích hoạt Bảo vệ SSRF","Enable streaming mode for the test request.":"Bật chế độ streaming cho yêu cầu thá»­ nghiệm.","Enable Telegram OAuth":"Bật Telegram OAuth","Enable test mode for Creem payments":"Bật chế độ thá»­ nghiệm cho thanh toán Creem","Enable this key?":"Kích hoạt khóa này?","Enable Turnstile":"Bật Turnstile","Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.":"Bật XÃ
107¡c thá»±c hai yếu tố hoặc Passkey trong hồ sÆ¡ cá»§a bạn để mở khóa các thao tác nhạy cảm.","Enable unlimited quota for this API key":"Kích hoạt hạn mức không giới hạn cho khóa API này","Enable violation deduction":"Bật trừ tiền vi phạm","Enable Waffo":"Bật Waffo","Enable Waffo Pancake":"Bật Waffo Pancake","Enable WeChat Auth":"Bật xác thá»±c WeChat","Enable when proxying workers that fetch images over HTTP.":"Kích hoạt khi làm proxy cho các worker tìm nạp hình ảnh qua HTTP.","Enabled":"Đã bật","Enabled all channels with tag: {{tag}}":"Đã bật tất cả kênh với nhãn: {{tag}}","Enabled channels with tag {{tag}}":"Đã kích hoạt các kênh có thẻ {{tag}}","Enabled Status":"Trạng thái kích hoạt","Enabling...":"Đang bật...","Encourages introducing new topics":"Khuyến khích chá»§ đề mới","End":"End","End Error":"Lỗi kết thúc","End Reason":"Lý do kết thúc","End Time":"Thời gian kết thúc","End-user identifier for abuse monitoring":"Định danh người dùng cuối để giám sát lạm dụng","Endpoint":"Endpoint","Endpoint config":"Cấu hình điểm cuối","Endpoint Configuration":"Cấu hình điểm cuối","Endpoint Type":"Loại điểm cuối","Endpoint, provider-specific settings, and credentials.":"Endpoint, cài đặt riêng cá»§a nhà cung cấp và thông tin xác thá»±c.","Endpoint:":"Điểm cuối:","Endpoints":"Điểm cuối","English":"Tiếng Anh","Ensure Prefix":"Đảm bảo tiền tố","Ensure Suffix":"Đảm bảo hậu tố","Ensure the string has a specified prefix":"Đảm bảo chuỗi có tiền tố chỉ định","Ensure the string has a specified suffix":"Đảm bảo chuỗi có hậu tố chỉ định","Enter 6-digit code":"Nhập mã 6 chữ số","Enter a name":"Nhập tên","Enter a new name":"Nhập tên mới","Enter a positive or negative amount to adjust the quota":"Nhập một giá trị dương hoặc âm để điều chỉnh hạn ngạch","Enter a valid email or leave blank":"Nhập email hợp lệ hoặc để trống","Enter a value and press Enter":"Nhập giá trị và nhấn Enter","Enter amount in {{currency}}":"Nhập số tiền bằng {{currency}}","Enter amount in tokens":"Nhập số lượng token","Enter announcement content (supports Markdown & HTML)":"Nhập nội dung thông báo (hỗ trợ Markdown & HTML)","Enter announcement content (supports Markdown/HTML)":"Nhập nội dung thông báo (hỗ trợ Markdown/HTML)","Enter API Key":"Nhập khóa API","Enter API key for this channel":"Nhập khóa API cho kênh này","Enter API Key, format: APIKey|Region":"Nhập khóa API, định dạng: APIKey|Region","Enter API Key, one per line, format: APIKey|Region":"Nhập khóa API, mỗi dòng một khóa, định dạng: APIKey|Region","Enter application token":"Nhập token ứng dụng","Enter authenticator code":"Nhập mã xác thá»±c","Enter backup code (e.g., CAWD-OQDV)":"Nhập mã dá»± phòng (ví dụ: CAWD-OQDV)","Enter code":"Nhập mã","Enter code or backup code":"Nhập mã hoặc mã dá»± phòng","Enter Completion price to calculate ratio":"Nhập giá hoàn thành để tính tá»· lệ","Enter Creem API key":"Nhập khóa API Creem","Enter custom API endpoint URL":"Nhập URL điểm cuối API tùy chỉnh","Enter deployment region or JSON mapping:":"Nhập khu vá»±c triển khai hoặc ánh xạ JSON:","Enter display name":"Nhập tên hiển thị","Enter HTML code (e.g., <p>About us...</p>) or a URL (e.g., https://example.com) to embed as iframe":"Nhập mã HTML (ví dụ, <p>Về chúng tôi...</p>) hoặc một URL (ví dụ, https://example.com) để nhúng dưới dạng iframe","Enter Input price to calculate ratio":"Nhập giá đầu vào để tính tá»· lệ","Enter JSON to override request headers":"Nhập JSON để ghi đè header yêu cầu","Enter key, format: AccessKey|SecretAccessKey|Region":"Nhập khóa, định dạng: AccessKey|SecretAccessKey|Region","Enter key, one per line, format: AccessKey|SecretAccessKey|Region":"Nhập khóa, mỗi dòng một khóa, định dạng: AccessKey|SecretAccessKey|Region","Enter model name":"Nhập tên mô hình","Enter new key to update":"Nhập khóa mới để cập nhật","Enter new key to update, or leave empty to keep current key":"Nhập khóa mới để cập nhật, hoặc để trống để giữ khóa hiện tại","Enter new tag name (leave empty to disband tag)":"Nhập tên thẻ mới (để trống để há»§y thẻ)","Enter new tag name or leave empty":"Enter new tag name or leave blank","Enter new token to update":"Nhập mã thông báo mới để cập nhật","Enter one API key per line for batch creation":"Nhập một khóa API mỗi dòng để tạo hàng loạt","Enter one key per line for batch creation":"Nhập một khóa mỗi dòng để tạo hàng loạt","Enter one keyword per line":"Nhập một từ khóa mỗi dòng","Enter password":"Nhập mật khẩu","Enter password (8-20 characters)":"Nhập mật khẩu (8-20 ký tá»±)","Enter password (min 8 characters)":"Nhập mật khẩu (tối thiểu 8 ký tá»±)","Enter quota in {{currency}}":"Nhập hạn mức bằng {{currency}}","Enter quota in tokens":"Nhập hạn mức bằng token","Enter secret key":"Nhập khóa bí mật","Enter system prompt (user prompt takes priority)":"Nhập lời nhắc hệ thống (lời nhắc người dùng được ưu tiên)","Enter tag name (optional)":"Nhập tên thẻ (tùy chọn)","Enter the 6-digit code from your authenticator app":"Nhập mã 6 chữ số từ ứng dụng xác thá»±c cá»§a bạn","Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.":"Nhập Mật khẩu dùng một lần dá»±a trên thời gian gồm 6 chữ số hoặc mã dá»± phòng gồm 8 ký tá»± từ ứng dụng xác thá»±c cá»§a bạn.","Enter the complete URL, supports":"Nhập địa chỉ URL hoàn chỉnh, hỗ trợ","Enter the Coze agent ID":"Nhập ID tác nhân Coze","Enter the full URL of your Gotify server"
107:"Nhập URL đầy đủ của máy chủ Gotify của bạn","Enter the knowledge base ID":"Nhập ID cơ sở tri thức","Enter the path before /suno, usually just the domain":"Nhập đường dẫn trước /suno, thường chỉ là tên miền","Enter the quota amount in {{currency}}":"Nhập số lượng hạn mức bằng {{currency}}","Enter the quota amount in tokens":"Nhập số lượng hạn ngạch bằng token","Enter the verification code":"Nhập mã xác minh","Enter threshold":"Nhập ngưỡng","Enter token counts to preview the estimated cost (excluding group multipliers).":"Nhập số lượng token để xem ước tính chi phí (không gồm bội số nhóm).","Enter URL...":"Nhập URL...","Enter username":"Nhập tên người dùng","Enter verification code":"Nhập mã xác minh","Enter webhook secret":"Nhập bí mật webhook","Enter your authenticator code or a backup code":"Nhập mã xác thực hoặc mã dự phòng của bạn","Enter your email":"Nhập email của bạn","Enter your redemption code":"Nhập mã đổi thưởng của bạn","Enter your registered email and we will send you a link to reset your password.":"Nhập email đã đăng ký của bạn và chúng tôi sẽ gửi cho bạn một liên kết để đặt lại mật khẩu.","Enter your username":"Nhập tên đăng nhập của bạn","Enter your username or email":"Nhập tên đăng nhập hoặc email của bạn","Enterprise Account":"Business account","Enterprise-grade security with comprehensive permission management":"Bảo mật cấp doanh nghiệp với quản lý quyền toàn diện","Entrypoint (space separated)":"Entrypoint (cách nhau bằng dấu cách)","Env (JSON object)":"Env (đối tượng JSON)","Environment variables":"Biến môi trường","Environment variables (JSON)":"Biến môi trường (JSON)","Epay endpoint":"Epay điểm cuối","Epay Gateway":"Cổng thanh toán Epay","Epay merchant ID":"ID người bán Epay","Epay secret key":"Khóa bí mật Epay","Equals":"Bằng","Error":"Lỗi","Error Code (optional)":"Mã lỗi (tùy chọn)","Error Message":"Thông báo lỗi","Error Message (required)":"Thông báo lỗi (bắt buộc)","Error Type (optional)":"Loại lỗi (tùy chọn)","Estimated cost":"Chi phí ước tính","Estimated quota cost":"Ước tính chi phí hạn mức","Exact":"Chính xác","Exact Match":"Khớp chính xác","Example":"Ví dụ","Example (all channels):":"Ví dụ (tất cả kênh):","Example (specific channels):":"Ví dụ (kênh cụ thể):","Example:":"Ví dụ:","example.com&#10;blocked-site.com":"example.com\\nblocked-site.com","example.com&#10;company.com":"example.com\\ncompany.com","Excellent":"Tuyệt vời","Exchange rate is required":"Cần có tỷ giá","Exchange rate must be greater than 0":"Tỷ giá phải lớn hơn 0","Execute code in a sandbox during the response":"Thực thi mã trong sandbox trong quá trình phản hồi","Exhausted":"Đã cạn kiệt","Existing account will be reused":"Tài khoản hiện có sẽ được sử dụng lại","Existing Models ({{count}})":"Các mô hình hiện có ({{count}})","Exists":"Tồn tại","Expand":"Mở rộng","Expand All":"Mở rộng tất cả","Expected a JSON array of group identifiers":"Cần là một mảng JSON gồm các định danh nhóm","Expected a JSON array.":"Cần là một mảng JSON.","Experiment with prompts and models in real time.":"Thử nghiệm với prompt và mô hình theo thời gian thực.","Expiration Time":"Thời gian hết hạn","expired":"Đã hết hạn","Expired":"Hết hạn","Expired at":"Hết hạn lúc","Expired time cannot be earlier than current time":"Thời gian hết hạn không thể sớm hơn thời gian hiện tại","Expires":"Hết hạn","Expose ratio API":"Cung cấp API tỷ lệ","Exposes the pricing/models catalog in the top navigation.":"Hiển thị danh mục giá/mô hình trên thanh điều hướng đầu trang.","Expression":"Biểu thức","Expression based":"Dựa trên biểu thức","Expression billing":"Tính phí biểu thức","Expression editor":"Trình sửa biểu thức","Expression error":"Lỗi biểu thức","Expression pricing":"Định giá bằng biểu thức","Extend":"Gia hạn","Extend deployment":"Gia hạn triển khai","Extend failed":"Gia hạn thất bại","Extended successfully":"Gia hạn thành công","External Device":"Thiết bị ngoại vi","External link for users to purchase quota":"Liên kết ngoài để người dùng mua hạn mức","External operations":"Vận hành bên ngoài","External operations mode":"Chế độ vận hành bên ngoài","External Speed Test":"Kiểm tra tốc độ bên ngoài","Extra":"Thêm","Extra Notes (Optional)":"Ghi chú bổ sung (Tùy chọn)","extras":"mục bổ sung","Fail Reason":"Lý do thất bại","Fail Reason Details":"Chi tiết lý do thất bại","Failed":"Thất bại","Failed to {{action}} user":"Không thể {{action}} người dùng","Failed to adjust quota":"Không thể điều chỉnh hạn mức","Failed to apply overwrite.":"Không thể áp dụng ghi đè.","Failed to bind email":"Không thể liên kết email","Failed to change password":"Không thể thay đổi mật khẩu","Failed to check for updates":"Không thể kiểm tra cập nhật","Failed to clean logs":"Không thể dọn sạch nhật ký","Failed to complete order":"Không thể hoàn thành đơn hàng","Failed to complete Passkey login":"Không thể hoàn tất đăng nhập Passkey","Failed to confirm compliance":"Không thể xác nhận tuân thủ","Failed to contact GitHub releases API":"Không thể kết nối API GitHub Releases","Failed to copy":"Sao chép thất bại","Failed to copy channel":"Không thể sao chép kênh","Failed to copy keys":"Không thể sao chép khóa","Failed to copy model names":"Không thể sao chép tên mô hình","Failed to copy to clipboard":"Không thể sao chép vào bộ nhớ tạm","Failed to create API key":"Tạo API key thất bại","Failed to create channel":"Không thể tạo kênh","Failed to create deployment":"Tạo triển khai thất bại","Failed to create provider":"Tạo nhà cung cấp thất bại","Failed to create redemption code":"Không thể tạo mã đổi thưởng","Failed to create user":"Tạo người dùng thất bại","Failed to delete {{count}} model(s)":"Không thể xóa {{count}} mô hình","Failed to delete account":"Không thể xóa tài khoản","Failed to delete API key":"Xóa API key thất bại","Failed to delete API keys":"Không thể xóa khóa API","Failed to delete channel":"Không thể xóa kênh","Failed to delete disabled channels":"Không thể xóa các kênh đã vô hiệu hóa","Failed to delete invalid redemption codes":"Không thể xóa các mã đổi thưởng không hợp lệ","Failed to delete model":"Không thể xóa mô hình","Failed to delete provider":"Xóa nhà cung cấp thất bại","Failed to delete redemption code":"Xóa mã đổi quà không thành công","Failed to delete user":"Không thể xóa người dùng","Failed to delete vendor":"Không thể xóa nhà cung cấp","Failed to disable {{count}} model(s)":"Không thể tắt {{count}} mô hình","Failed to disable 2FA":"Không thể vô hiệu hóa 2FA","Failed to disable channels":"Không thể vô hiệu hóa các kênh","Failed to disable model":"Không thể vô hiệu hóa mô hình","Failed to disable tag channels":"Không thể vô hiệu hóa các kênh thẻ","Failed to discover OIDC endpoints":"Khám phá điểm cuối OIDC thất bại","Failed to enable {{count}} model(s)":"Không thể bật {{count}} mô hình","Failed to enable 2FA":"Không thể bật 2FA","Failed to enable channels":"Không thể kích hoạt các kênh","Failed to enable model":"Không thể kích hoạt mô hình","Failed to enable tag channels":"Không thể kích hoạt kênh thẻ","Failed to fetch channel key":"Không thể lấy khóa kênh","Failed to fetch checkin status":"Không thể tải trạng thái điểm danh","Failed to fetch deployment details":"Không thể lấy chi tiết triển khai","Failed to fetch models":"Không thể lấy các mô hình","Failed to fetch OIDC configuration. Please check the URL and network status":"Không thể lấy cấu hình OIDC. Vui lòng kiểm tra URL và trạng thái mạng","Failed to fetch upstream prices":"Không thể lấy giá từ upstream","Failed to fetch upstream ratios":"Không thể lấy tỷ lệ upstream","Failed to fetch usage":"Không lấy được mức sử dụng","Failed to fetch user information":"Không lấy được thông tin người dùng","Failed to fix abilities":"Không thể khắc phục các khả năng","Failed to generate token":"Không thể tạo token","Failed to initialize OAuth":"Không thể khởi tạo OAuth","Failed to initialize system":"Không thể khởi tạo hệ thống","Failed to load":"Tải thất bại","Failed to load API keys":"Không thể tải khóa API","Failed to load billing history":"Không thể tải lịch sử thanh toán","Failed to load home page content":"Không thể tải nội dung trang chủ","Failed to load image":"Không thể tải ảnh","Failed to load key status":"Không thể tải trạng thái khóa","Failed to load logs":"Không tải được nhật ký","Failed to load Passkey status":"Không thể tải trạng thái Passkey","Failed to load profile":"Không thể tải hồ sơ","Failed to load redemption codes":"Không thể tải mã đổi thưởng","Failed to load setup data":"Không thể tải dữ liệu thiết lập","Failed to load setup status":"Không thể tải trạng thái thiết lập","Failed to load tag data":"Không thể tải dữ liệu thẻ","Failed to load users":"Không thể tải người dùng","Failed to parse group items":"Thất bại khi phân tích các mục nhóm","Failed to parse JSON file: {{name}}":"Không thể phân tích cú pháp tệp JSON: {{name}}","Failed to query balance":"Không thể truy vấn số dư","Failed to refresh cache stats":"Không thể làm mới thống kê bộ nhớ đệm","Failed to refresh credential":"Không thể làm mới thông tin xác thực","Failed to regenerate backup codes":"Không thể tạo lại mã sao lưu","Failed to register Passkey":"Không thể đăng ký Passkey","Failed to remove Passkey":"Không thể xóa Passkey","Failed to reset 2FA":"Không thể đặt lại 2FA","Failed to reset model ratios":"Không thể đặt lại tỷ lệ mô hình","Failed to reset Passkey":"Không thể đặt lại Passkey","Failed to save":"Lưu thất bại","Failed to save announcements":"Không thể lưu thông báo","Failed to save API info":"Không thể lưu thông tin API","Failed to save FAQ":"Không thể lưu FAQ","Failed to save Uptime Kuma groups":"Không thể lưu nhóm Uptime Kuma","Failed to search API keys":"Không thể tìm kiếm khóa API","Failed to search redemption codes":"Không thể tìm kiếm mã đổi thưởng","Failed to search users":"Không thể tìm kiếm người dùng","Failed to send verification code":"Không thể gửi mã xác minh","Failed to set tag":"Không thể đặt thẻ","Failed to setup 2FA":"Không thể thiết lập 2FA","Failed to start {{provider}} login":"Không thể bắt đầu đăng nhập {{provider}}","Failed to start Discord login":"Không thể bắt đầu đăng nhập Discord","Failed to start GitHub login":"Không thể bắt đầu đăng nhập GitHub","Failed to start LinuxDO login":"Không thể bắt đầu đăng nhập LinuxDO","Failed to start OIDC login":"Không thể bắt đầu đăng nhập OIDC","Failed to start Passkey login":"Không thể bắt đầu đăng nhập Passkey","Failed to start Passkey registration":"Không thể bắt đầu đăng ký Passkey","Failed to start testing all channels":"Không thể bắt đầu kiểm tra tất cả các kênh","Failed to sync prices":"Không thể đồng bộ giá","Failed to sync ratios":"Không thể đồng bộ tỷ lệ","Failed to test all channels":"Không thể kiểm tra tất cả các kênh","Failed to test channel":"Không thể kiểm tra kênh","Failed to update all balances":"Không thể cập nhật tất cả số dư","Failed to update API key":"Không thể cập nhật khóa API","Failed to update API key status":"Không thể cập nhật trạng thái khóa API","Failed to update balance":"Không thể cập nhật số dư","Failed to update channel":"Cập nhật kênh không thành công","Failed to update models":"Không thể cập nhật mô hình","Failed to update profile":"Không thể cập nhật hồ sơ","Failed to update provider":"Cập nhật nhà cung cấp thất bại","Failed to update redemption code":"Không thể cập nhật mã đổi thưởng","Failed to update redemption code status":"Không thể cập nhật trạng thái mã đổi thưởng","Failed to update setting":"Không thể cập nhật cài đặt","Failed to update settings":"Không thể cập nhật cài đặt","Failed to update tag":"Không thể cập nhật thẻ","Failed to update user":"Không thể cập nhật người dùng","Failure keywords":"Từ khóa thất bại","Fair":"Công bằng","Fallback t
107ier":"Tầng dự phòng","FAQ":"FAQ","FAQ added. Click \\"Save Settings\\" to apply.":"Đã thêm FAQ. Nhấp \\"Lưu cài đặt\\" để áp dụng.","FAQ deleted. Click \\"Save Settings\\" to apply.":"Đã xóa FAQ. Nhấp \\"Lưu cài đặt\\" để áp dụng.","FAQ saved successfully":"FAQ đã lưu thành công","FAQ updated. Click \\"Save Settings\\" to apply.":"FAQ đã cập nhật. Nhấp \\"Lưu cài đặt\\" để áp dụng.","FastGPT":"FastGPT","Feature in development":"Tính năng đang phát triển","Fee":"Phí","Fee Amount":"Số tiền phí","Fetch available models for:":"Tìm nạp các mô hình khả dụng cho:","Fetch from Upstream":"Lấy từ nguồn","Fetch Models":"Tìm nạp Mô hình","Fetched {{count}} model(s) from upstream":"Đã lấy {{count}} mô hình từ upstream","Fetched {{count}} models":"Đã lấy {{count}} mô hình","Fetching prefill groups...":"Đang tải nhóm điền sẵn...","Fetching upstream prices...":"Đang lấy giá upstream...","Fetching upstream ratios...":"Đang lấy tỷ lệ thượng nguồn...","field":"trường","Field Mapping":"Ánh Xạ Trường","Field passthrough controls":"Điều khiển chuyển tiếp trường","Field Path":"Đường dẫn trường","File":"Tệp","File Search":"Tìm kiếm tệp","Files to Retain":"Số tệp giữ lại","Fill All Models":"Điền Tất Cả Mô Hình","Fill Codex CLI / Claude CLI Templates":"Điền mẫu Codex CLI / Claude CLI","Fill example (all channels)":"Điền ví dụ (tất cả kênh)","Fill example (specific channels)":"Điền ví dụ (kênh cụ thể)","Fill in both Merchant ID and API Private Key before creating.":"Nhập cả Merchant ID và khóa riêng API trước khi tạo.","Fill in the credentials above to begin.":"Nhập thông tin xác thực ở trên để bắt đầu.","Fill in the following info to create a new subscription plan":"Điền thông tin sau để tạo gói đăng ký mới","Fill Related Models":"Điền Mô hình Liên quan","Fill Template":"Điền Mẫu","Fill Templates":"Điền mẫu","Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format":"Điền thoughtSignature chỉ dành cho các kênh Gemini/Vertex sử dụng định dạng OpenAI","Filled {{count}} model(s)":"Đã điền {{count}} mô hình","Filled {{count}} related model(s)":"Đã điền {{count}} mô hình liên quan","Filter":"Lọc","Filter by API key...":"Lọc theo khóa API...","Filter by channel ID":"Lọc theo ID kênh","Filter by group":"Lọc theo nhóm","Filter by Midjourney task ID":"Lọc theo ID nhiệm vụ Midjourney","Filter by model name...":"Lọc theo tên mô hình...","Filter by model...":"Lọc theo mẫu...","Filter by name or ID...":"Lọc theo tên hoặc ID...","Filter by name, ID, or key...":"Lọc theo tên, ID hoặc khóa...","Filter by name...":"Lọc theo tên...","Filter by price field":"Lọc theo trường giá","Filter by ratio type":"Lọc theo loại tỷ lệ","Filter by request ID":"Lọc theo ID yêu cầu","Filter by task ID":"Lọc theo ID nhiệm vụ","Filter by token name":"Lọc theo tên token","Filter by username":"Lọc theo tên người dùng","Filter by username, name or email...":"Lọc theo tên người dùng, tên hoặc email...","Filter Dashboard Models":"Lọc Mô hình Bảng điều khiển","Filter models by provider, group, type, endpoint, and tags.":"Lọc mô hình theo nhà cung cấp, nhóm, loại, endpoint và thẻ.","Filter models by type, endpoint, vendor, group and tags":"Lọc mô hình theo loại, endpoint, nhà cung cấp, nhóm và thẻ","Filter models...":"Lọc mô hình...","Filter the model analytics view by time range and user.":"Lọc chế độ xem phân tích mô hình theo khoảng thời gian và người dùng.","Filter...":"Lọc...","Filters":"Bộ lọc","Filters active":"Bộ lọc đang bật","Final Consumed":"Tiêu thụ cuối cùng","Final cost = base × multiplier when conditions match":"Chi phí cuối = cơ sở × hệ số khi thỏa điều kiện","Final price multiplier (0.95 = 5% discount":"Hệ số nhân giá cuối cùng (0.95 = giảm giá 5%)","Finance":"Tài chính","Finish Time":"Thời gian hoàn thành","First API request":"Yêu cầu API đầu tiên","First/Last Frame to Video":"Khung đầu/cuối sang video","Fix Abilities":"Sửa Kỹ năng","Fixed abilities: {{success}} succeeded, {{fails}} failed":"Sửa khả năng: {{success}} thành công, {{fails}} thất bại","Fixed price":"Giá cố định","Fixed price (USD)":"Giá cố định (USD)","Fixed request price":"Giá cố định theo yêu cầu","Floating":"Nổi","FluentRead extension not detected. Please ensure it is installed and active.":"Không phát hiện tiện ích mở rộng FluentRead. Vui lòng đảm bảo nó đã được cài đặt và kích hoạt.","Flush interval (minutes)":"Khoảng ghi xuống DB (phút)","Follow the guided steps to prepare your workspace before the first login.":"Thực hiện theo các bước hướng dẫn để chuẩn bị không gi
107an làm việc cá»§a bạn trước lần đăng nhập đầu tiên.","Font":"Phông chữ","Footer":"Chân trang","Footer text displayed at the bottom of pages":"Văn bản chân trang hiển thị ở cuối các trang","footer.columns.about.links.aboutProject":"Về Dá»± án","footer.columns.about.links.contact":"Liên hệ Chúng tôi","footer.columns.about.links.features":"Tính năng","footer.columns.about.title":"Về Chúng tôi","footer.columns.docs.links.apiDocs":"Tài liệu API","footer.columns.docs.links.installation":"Hướng Dẫn Cài Đặt","footer.columns.docs.links.quickStart":"Bắt Đầu Nhanh","footer.columns.docs.title":"Tài Liệu","footer.columns.related.links.midjourney":"Midjourney-Proxy","footer.columns.related.links.newApiKeyTool":"new-api-key-tool","footer.columns.related.links.oneApi":"One API","footer.columns.related.title":"Các Dá»± Án Liên Quan","footer.defaultCopyright":"Bản quyền được bảo lưu.","footer.newapi.projectAttributionSuffix":"Bản quyền được bảo lưu. Được thiết kế và phát triển bởi các cộng tác viên dá»± án.","For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment":"Đối với các kênh được thêm sau ngày 10 tháng 5 năm 2025, không cần loại bỏ \\".\\" khỏi tên mô hình trong quá trình triển khai","For private deployments, format: https://fastgpt.run/api/openapi":"Đối với các triển khai riêng tư, định dạng: https://fastgpt.run/api/openapi","Force a syntactically valid JSON response":"Buộc phản hồi JSON hợp lệ về cú pháp","Force AUTH LOGIN":"Bắt buộc AUTH LOGIN","Force Format":"Buộc định dạng","Force format response to OpenAI standard (OpenAI channel only)":"Buộc định dạng phản hồi theo tiêu chuẩn OpenAI (chỉ kênh OpenAI)","Force JSON object or schema-conforming output":"Bắt buộc xuất JSON hoặc theo schema","Force SMTP authentication using AUTH LOGIN method":"Bắt buộc xác thá»±c SMTP sá»­ dụng phương thức AUTH LOGIN","Force-disabled two-factor authentication for the user":"Đã buộc tắt xác thá»±c hai yếu tố cá»§a người dùng","Forest Whisper":"Tiếng thì thầm rừng cây","Forgot password":"Quên mật khẩu","Forgot password?":"Quên mật khẩu?","Form reset to saved values":"Đã đặt lại biểu mẫu về các giá trị đã lưu","Format":"Định dạng","Format JSON":"Định dạng JSON","Format:":"Định dạng:","Format: Access Key ID|Secret Access Key":"Định dạng: ID khóa truy cập|Khóa truy cập bí mật","Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)":"Định dạng: AccessKey|SecretKey (hoặc chỉ ApiKey nếu hệ thống thượng nguồn là New API)","Format: Ak|Sk|Region":"Định dạng: Ak|Sk|Region","Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041":"Định dạng: APIKey-AppId, ví dụ: fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041","Format: APIKey|SecretKey":"Định dạng: APIKey|SecretKey","Format: APPID|APISecret|APIKey":"Định dạng: APPID|APISecret|APIKey","Format: AppId|SecretId|SecretKey":"Định dạng: AppId|SecretId|SecretKey","Forward requests directly to upstream providers without any post-processing.":"Chuyển tiếp các yêu cầu trá»±c tiếp đến các nhà cung cấp ngược dòng mà không cần xá»­ lý hậu kỳ nào.","Frames per second":"Khung hình / giây","Free: {{free}} / Total: {{total}}":"Còn trống: {{free}} / Tổng: {{total}}","Friendly name to identify this channel":"Tên thân thiện để nhận dạng kênh này","From Address":"Địa chỉ Người gá»­i","From IO.NET deployment":"Từ triển khai IO.NET","From model redirect, not yet added to models list":"Từ chuyển hướng mô hình, chưa được thêm vào danh sách mô hình","Frontend Theme":"Giao diện Frontend","Full API Key":"Khóa API đầy đủ","Full Base URL (supports":"URL cÆ¡ sở đầy đủ (hỗ trợ","Full Code":"Mã đầy đủ","Full input length":"Độ dài đầu vào đầy đủ","Full layout":"Bố cục đầy đủ","Full width":"Toàn chiều rộng","Function calling":"Gọi hàm","Functions":"Hàm","GC Count":"Số lần GC","GC executed":"GC đã thá»±c thi","GC execution failed":"Thá»±c thi GC thất bại","Gemini":"Song Tá»­","Gemini Image 4K":"Gemini Image 4K","Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.":"Gemini sẽ tiếp tục tá»± động phát hiện chế độ suy nghÄ© ngay cả khi bộ điều hợp bị tắt. Chỉ bá
107º­t tính năng này khi bạn cần kiểm soát chi tiết hÆ¡n về giá cả và lập ngân sách.","General":"Chung","General Settings":"General settings","Generate and manage your API access token":"Tạo và quản lý mã thông báo truy cập API cá»§a bạn","Generate Lyrics":"Tạo lời bài hát","Generate Music":"Tạo nhạc","Generate new backup codes for account recovery":"Tạo mã dá»± phòng mới để khôi phục tài khoản","Generate New Codes":"Tạo mã mới","Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.":"Tạo token tại trang Tokens; bạn có thể giới hạn theo model, nhóm, IP và rate-limit.","Generated image":"Ảnh được tạo","Generating new codes will invalidate all existing backup codes.":"Tạo mã mới sẽ vô hiệu hóa tất cả các mã dá»± phòng hiện có.","Generating...":"Đang tạo...","Generation quality preset":"Mức chất lượng sinh","Generic cache":"Bộ đệm chung","Get notified when balance falls below this value":"Nhận thông báo khi số dư giảm xuống dưới giá trị này","Get one here":"Nhận tại đây","Get started":"Bắt đầu","Get Started":"Bắt đầu","GitHub":"GitHub","Give the group a recognizable name and optional description.":"Đặt cho nhóm một cái tên dễ nhận biết và mô tả tùy chọn.","Give this group a recognizable name.":"Hãy đặt cho nhóm này một cái tên dễ nhận biết.","Global configuration and administrative tools.":"Cấu hình toàn cục và công cụ quản trị.","Global Coverage":"Phạm vi toàn cầu","Global Model Configuration":"Cấu hình Mô hình Toàn cầu","Global throughput":"Thông lượng toàn hệ thống","Go Back":"Quay lại","Go back and edit":"Quay lại và chỉnh sá»­a","Go to Dashboard":"Truy cập Dashboard","Go to first page":"Đi đến trang đầu tiên","Go to home":"Về trang chá»§","Go to io.net API Keys":"Đi đến Khóa API io.net","Go to last page":"Đi đến trang cuối cùng","Go to next page":"Đi đến trang tiếp theo","Go to page {{page}}":"Đi đến trang {{page}}","Go to previous page":"Quay lại trang trước","Go to settings":"Đi tới cài đặt","Go to Settings":"Đi đến Cài đặt","Good":"Tốt","Gotify Application Token":"Mã thông báo ứng dụng Gotify","Gotify Documentation":"Tài liệu Gotify","Gotify Server URL":"URL máy chá»
107§ Gotify","gpt-3.5-turbo":"gpt-3.5-turbo","gpt-3.5-turbo-0125":"gpt-3.5-turbo-0125","gpt-4":"gpt-4","gpt-4, claude-3-opus, etc.":"gpt-4, claude-3-opus, v.v.","GPU count":"Số lượng GPU","Greater than":"Lớn hÆ¡n","Greater Than":"Lớn hÆ¡n","Greater than or equal":"Lớn hÆ¡n hoặc bằng","Greater Than or Equal":"Lớn hÆ¡n hoặc bằng","Grok":"Grok","Grok Settings":"Cài đặt Grok","Group":"Nhóm","Group & Quota":"Nhóm & Hạn mức","Group added. Click \\"Save Settings\\" to apply.":"Nhóm đã được thêm. Nhấp vào \\"Lưu Cài đặt\\" để áp dụng.","Group channels by tag for batch operations":"Nhóm kênh theo thẻ để thá»±c hiện các thao tác hàng loạt","Group config overrides global limits, shares the same period":"Cấu hình nhóm ghi đè giới hạn toàn cầu, chia sẻ cùng một chu kỳ","Group deleted. Click \\"Save Settings\\" to apply.":"Nhóm đã bị xóa. Nhấp vào \\"Lưu Cài đặt\\" để áp dụng.","Group description":"Mô tả nhóm","Group details":"Chi tiết nhóm","Group identifier":"Định danh nhóm","Group is required":"Yêu cầu nhóm","Group name":"Tên nhóm","Group Name":"Tên Nhóm","Group name cannot be changed when editing.":"Tên nhóm không thể thay đổi khi chỉnh sá»­a.","Group prices cannot be expanded because this expression is not a standard tiered pricing expression.":"Không thể mở rộng giá theo nhóm vì biểu thức này không phải là biểu thức giá theo bậc tiêu chuẩn.","Group Pricing":"Định giá nhóm","Group pricing usage guide":"Hướng dẫn sá»­ dụng định giá theo 
107nhóm","group ratio":"tá»· lệ nhóm","Group Ratio":"Tá»· lệ nhóm","Group ratios":"Tá»· lệ nhóm","Group updated. Click \\"Save Settings\\" to apply.":"Nhóm đã được cập nhật. Nhấp vào \\"Lưu Cài đặt\\" để áp dụng.","Group-based rate limits":"Giới hạn tá»· lệ dá»±a trên nhóm","Group:":"Nhóm:","Group: {{ratio}}x":"Nhóm: {{ratio}}x","Grouped monitor status from Uptime Kuma":"Trạng thái giám sát theo nhóm từ Uptime Kuma","Groups":"Nhóm","Groups *":"Nhóm *","Groups that users can select when creating API keys.":"Các nhóm mà người dùng có thể chọn khi tạo khóa API.","Growth":"Tăng trưởng","Guardrails":"Hàng rào bảo vệ","Guest":"Khách","h":"h","Haiku Model":"Mô hình Haiku","Hang tight while we finish connecting your account.":"Hãy chờ một chút trong khi chúng tôi hoàn tất việc kết nối tài khoản cá»§a bạn.","Hang tight while we securely link this account to your profile.":"Hãy chờ một chút trong khi chúng tôi liên kết bảo mật tài khoản này với hồ sÆ¡ cá»§a bạn.","Hardware":"Phần cứng","Hardware type":"Loại phần cứng","Has been disabled":"Đã vô hiệu hóa thành công","Has been enabled":"Đã kích hoạt thành công","Has been invalidated":"Đã vô hiệu hóa thành công","Have a Code?":"Có mã không?","Header":"Header","header instead.":".","Header Name":"Tên header","Header navigation":"Điều hướng đầu trang","Header Override":"Ghi đè tiêu đề","Header Passthrough (X-Request-Id)":"Chuyển tiếp header (X-Request-Id)","Header Value (supports string or JSON mapping)":"Giá trị header (hỗ trợ chuỗi hoặc ánh xạ JSON)","header. Anthropic-formatted endpoints accept the":". Các endpoint định dạng Anthropic chấp nhận header","Health":"Sức khỏe","Healthy":"Bình thường","Hidden — verify to reveal":"Ẩn — xác minh để hiển thị","Hide":"Ẩn","Hide API key":"Ẩn khóa API","Hide setup guide":"Ẩn hướng dẫn thiết lập","High Performance":"Hiệu suất cao","High-risk operation confirmation":"Xác nhận thao tác rá»§i ro cao","High-risk status code retry confirmation text":"TÔI XÁC NHẬN","High-risk status code retry input mismatch":"Văn bản nhập không khớp, vui lòng thá»­ lại.","High-risk status code retry input placeholder":"Vui lòng nhập văn bản xác nhận ở trên","High-risk status code retry risk check 1":"Tôi hiểu rằng việc thá»­ lại với các mã trạng thái này có thể khiến nhà cung cấp tính phí bình thường, và các khoản phí này không thể thu hồi.","High-risk status code retry risk check 2":"Tôi hiểu rằng các mã trạng thái này thường cho biết yêu cầu đã được xá»­ lý thành công, và việc thá»­ lại có thể dẫn đến tính phí trùng lặp.","High-risk status code retry risk check 3":"Tôi thừa nhận rằng các cấu hình này có thể gây tổn thất tài chính đáng kể và chấp nhận tất cả rá»§i ro liên quan.","High-risk status code retry risk check 4":"Tôi đã kiểm tra kỹ các quy tắc chuyển hướng mã trạng thái ở trên và xác nhận chúng chính xác.","High-risk status code retry risk disclaimer":"Các quy tắc chuyển hướng mã trạng thái sau chứa cấu hình rá»§i ro cao. Thá»­ lại trên các mã này có thể phát sinh phí không thể thu hồi. Vui lòng xác minh cẩn thận.","Higher priority channels are selected first":"Các kênh ưu tiên cao hÆ¡n được chọn trước tiên","Historical Usage":"Lịch sá»­ sá»­ dụng","History of Midjourney-style image tasks.":"Lịch sá»­ các tác vụ hình ảnh kiểu Midjourney.","Hit criteria: If cached tokens exist in usage, it counts as a hit.":"Tiêu chí trúng: Nếu cached tokens tồn tại trong usage, được tính là trúng.","Hit Rate":"Tá»· lệ trúng","Hit tier":"Bậc trúng","Home":"Trang chá»§","Home Page Content":"Nội dung Trang chá»§","Hostname or IP of your SMTP provider":"Tên máy chá»
107§ hoặc IP cá»§a nhà cung cấp SMTP cá»§a bạn","Hour":"Giờ","Hour of day":"Giờ trong ngày","Hourly token usage by model across the last 24 hours":"Sá»­ dụng token theo giờ cá»§a từng mô hình trong 24 giờ qua","Hourly token usage by model over the past 24 hours":"Sá»­ dụng token theo mô hình theo giờ trong 24 giờ qua","hours":"giờ","How client credentials are sent to the token endpoint":"Cách thông tin xác thá»±c client được gá»­i đến endpoint token","How frequently the system tests all channels":"Tần suất hệ thống kiểm tra tất cả các kênh là bao nhiêu?","How It Works":"Cách hoạt động","How model mapping works":"Cách hoạt động cá»§a ánh xạ mô hình","How much to charge for each US dollar of balance (Epay)":"Tính phí bao nhiêu cho mỗi đô la Mỹ số dư (Epay)","How this model name should match requests":"Tên mô hình này nên khớp với các yêu cầu như thế nào","How to deliver the resulting image":"Cách trả về ảnh kết quả","How to get an io.net API Key":"Cách lấy Khóa API io.net","How to reset my quota?":"Cách đặt lại hạn mức cá»§a tôi?","How to select keys: random or sequential polling":"Cách chọn khóa: thăm dò ngẫu nhiên hay tuần tá»±","How will you use the platform?":"Bạn sẽ sá»­ dụng nền tảng như thế nào?","https://api.day.app/yourkey/{{title}}/{{content}}":"https://api.day.app/yourkey/{{title}}/{{content}}","https://api.example.com":"https://api.example.com","https://ark.ap-southeast.bytepluses.com":"https://ark.ap-southeast.bytepluses.com","https://ark.cn-beijing.volces.com":"https://ark.cn-beijing.volces.com","https://cloud.siliconflow.cn/i/hij0YNTZ":"https://cloud.siliconflow.cn/i/hij0YNTZ","https://docs.example.com":"https://docs.example.com","https://example.com":"https://example.com","https://example.com/logo.png":"https://example.com/logo.png","https://example.com/qr-code.png":"https://example.com/qr-code.png","https://example.com/topup":"https://example.com/topup","https://example.com/webhook":"https://example.com/webhook","https://gateway.example.com":"https://gateway.example.com","https://github.com/QuantumNous/new-api":"https://github.com/QuantumNous/new-api","https://gotify.example.com":"https://gotify.example.com","https://pay.example.com":"https://pay.example.com","https://provider.com/.well-known/openid-configuration":"https://provider.com/.well-known/openid-configuration","https://status.example.com":"https://status.example.com","https://wechat-server.example.com":"https://wechat-server.example.com","https://worker.example.workers.dev":"https://worker.example.workers.dev","https://your-server.example.com":"https://your-server.example.com","Human-readable name shown to users during Passkey prompts.":"Tên dễ đọc hiển thị cho người dùng trong quá trình nhắc nhở Passkey.","I confirm enabling high-risk retry":"Tôi xác nhận bật thá»­ lại rá»§i ro cao","I have read and agree to the":"Tôi đã đọc và đồng ý với","I have read and understood the above compliance reminder":"Tôi đã đọc và hiểu nhắc nhở tuân thá»§ ở trên","I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.":"Tôi đã đọc và hiểu nhắc nhở tuân thá»§ ở trên, thừa nhận các rá»§i ro pháp lý liên quan và xác nhận rằng tôi chịu trách nhiệm pháp lý phát sinh từ việc triển khai, vận hành và thu phí.","I understand that disabling 2FA will remove all protection and backup codes":"Tôi hiểu rằng việc vô","Icon":"Biểu tượng","Icon file must be 100 KB or smaller":"Tệp biểu tượng phải có kích thước 100 KB hoặc nhỏ hÆ¡n","Icon identifier (e.g. github, gitlab)":"Mã định danh biểu tượng (ví dụ: github, gitlab)","ID":"ID","If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.":"Nếu một lỗi thượng nguồn chứa bất kỳ từ khóa nào trong số này (không phân b
107iệt chữ hoa chữ thường), kênh sẽ tá»± động bị vô hiệu hóa.","If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.":"Nếu á»§y quyền thành công, JSON tạo ra sẽ được chèn vào trường khóa. Bạn vẫn cần lưu kênh để áp dụng.","If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know what you are doing":"Nếu kết nối với dá»± án relay One API hoặc New API upstream, hãy sá»­ dụng loại OpenAI thay thế trừ khi bạn biết mình đang làm gì","If default auto group is enabled, newly created tokens start with auto instead of an empty group.":"Nếu bật nhóm auto mặc định, token mới sẽ bắt đầu với auto thay vì nhóm trống.","If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.":"Nếu kênh ưu tiên thất bại và thá»­ lại thành công trên kênh khác, cập nhật ưu tiên sang kênh thành công.","If this keeps happening, please report it on GitHub Issues.":"Nếu sá»± cố tiếp tục xảy ra, vui lòng báo cáo trên GitHub Issues.","If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.":"Nếu bạn cung cấp dịch vụ AI tạo sinh cho công chúng tại Trung Quốc đại lục, bạn sẽ thá»±c hiện các nghÄ©a vụ pháp lý bao gồm đăng ký, đánh giá an toàn, an toàn nội dung, xá»­ lý khiếu nại, gắn nhãn nội dung được tạo, lưu giữ nhật ký và bảo vệ thông tin cá nhân.","Ignored upstream models":"Mô hình upstream bị bỏ qua","Image":"Hình ảnh","Image Generation":"Tạo hình ảnh","Image In":"Ảnh vào","Image input":"Đầu vào hình ảnh","Image input price":"Giá đầu vào hình ảnh","Image Out":"Ảnh ra","Image output price":"Giá đầu ra hình ảnh","Image Preview":"Xem trước ảnh","Image ratio":"Tá»· lệ hình ảnh","Image to Video":"Ảnh sang video","Image Tokens":"Token hình ảnh","Import to CC Switch":"Nhập vào CC Switch","In Progress":"Đang xá»­ lý","In:":"Vào:","incident":"sá»± cố","incidents":"sá»± cố","Incidents":"Sá»± cố","Include Group":"Bao gồm nhóm","Include Model":"Bao gồm mô hình","Include Rule Name":"Bao gồm tên quy tắc","Includes request rules":"Bao gồm quy tắc yêu cầu","Including failed requests, 0 = unlimited":"Bao gồm các yêu cầu thất bại, 0 = không giới hạn","Increased user quota by {{quota}}":"Đã tăng hạn mức người dùng thêm {{quota}}","Index":"Chỉ mục","Initial quota given to new users":"Hạn mức ban đầu cấp cho người dùng mới","Initialization failed, please try again.":"Khởi tạo thất bại, vui lòng thá»­ lại.","Initialize":"Khởi tạo","Initialize system":"Khởi tạo hệ thống","Initializing…":"Đang khởi tạo…","Inpaint":"Inpaint","Input":"Đầu vào","Input mode":"Chế độ nhập","Input price":"Giá đầu vào","Input price is required before saving dependent prices.":"Cần có giá đầu vào trước khi lưu các giá phụ thuộc.","Input tokens":"Token đầu vào","Input Tokens":"Token đầu vào","Inset":"Khung trong","Inspect requests, errors, and billing details":"Kiểm tra yêu cầu, lỗi và chi tiết thanh toán","Inspect user prompts":"Kiểm tra lời nhắc cá»§a người dùng","Instance":"Phiên bản","Insufficient balance":"Số dư không đủ","Integrations":"Tích hợp","Inter-group overrides":"Ghi đè liên nhóm","Inter-group ratio overrides":"Tá»· lệ liên nhóm ghi đè","Interface Language":"Ngôn ngữ giao diện","Internal Notes":"Ghi chú nội bộ","Internal notes (not shown to users)":"Ghi chú nội bộ (không hiển thị cho người dùng)","Internal Server Error!":"Lỗi máy chá»
107§ nội bộ!","Invalid chat link. Please contact the administrator.":"Liên kết trò chuyện không hợp lệ. Vui lòng liên hệ quản trị viên.","Invalid chat link. Please contact your administrator.":"Liên kết trò chuyện không hợp lệ. Vui lòng liên hệ với quản trị viên cá»§a bạn.","Invalid code":"Mã không hợp lệ","Invalid JSON":"JSON không hợp lệ","Invalid JSON format":"Định dạng JSON không hợp lệ","Invalid JSON format or values out of allowed range":"Định dạng JSON không hợp lệ hoặc giá trị ngoài phạm vi cho phép","Invalid JSON in parameter override template":"JSON không hợp lệ trong mẫu ghi đè tham số","Invalid JSON string.":"Chuỗi JSON không hợp lệ.","Invalid model mapping format":"Định dạng ánh xạ mô hình không hợp lệ","Invalid Passkey registration response":"Phản hồi đăng ký Passkey không hợp lệ","Invalid Passkey response":"Phản hồi Passkey không hợp lệ","Invalid payment redirect URL":"URL chuyển hướng thanh toán không hợp lệ","Invalid reset link, please request a new password reset":"Liên kết đặt lại không hợp lệ, vui lòng yêu cầu đặt lại mật khẩu mới","Invalid reset link, please request a new password reset.":"Liên kết đặt lại không hợp lệ, vui lòng yêu cầu đặt lại mật khẩu mới.","Invalid rules JSON format":"Định dạng JSON quy tắc không hợp lệ","Invalid status code mapping entries: {{entries}}":"Mục ánh xạ mã trạng thái không hợp lệ: {{entries}}","Invalidate":"Vô hiệu hóa","Invalidated":"Đã vô hiệu","Invert match":"Đảo điều kiện khớp","Invitation Code":"Mã mời","Invitation Quota":"Hạn mức lời mời","Invite Info":"Thông tin mời","Invited":"Đã mời","Invited by user ID":"Được mời bởi ID người dùng","Invited Users":"Người dùng được mời","Invitee Reward":"Referral reward","Inviter":"Người mời","Inviter Reward":"Phần thưởng người mời","Invites":"Mời","Invoke developer-defined functions with structured arguments":"Gọi các hàm do nhà phát triển định nghÄ©a với đối số có cấu trúc","io.net API Key":"Khóa API io.net","io.net Deployments":"Triển khai io.net","IP":"IP","IP Address":"Địa chỉ IP","IP Filter Mode":"Lọc IP","IP Restriction":"Giới hạn IP","IP Whitelist (supports CIDR)":"Danh sách trắng IP (hỗ trợ CIDR)","is less than the configured maximum cache size":"nhỏ hÆ¡n kích thước bộ nhớ đệm tối đa đã cấu hình","is the default price; ":"là giá mặc định; ","It seems like the page you\'re looking for":"Có vẻ như trang bạn đang tìm kiếm","Items":"Mục","Japanese":"Nhật Bản","Jimeng":"Jimeng","Jina":"Jina","JSON":"JSON","JSON array of group identifiers. When enabled below, new tokens rotate through this list.":"Mảng JSON cá»§a các định danh nhóm. Khi được bật bên dưới, các token mới sẽ luân phiên qua danh sách này.","JSON Editor":"Trình chỉnh sá»­a JSON","JSON format error":"Lỗi định dạng JSON","JSON format supports service account JSON files":"Định dạng JSON hỗ trợ các tệp JSON tài khoản dịch vụ","JSON is invali
107d at line {{line}}, column {{column}}.":"JSON không hợp lệ tại dòng {{line}}, cột {{column}}.","JSON is invalid at position {{position}}.":"JSON không hợp lệ tại vị trí {{position}}.","JSON is invalid. Please check the syntax.":"JSON không hợp lệ. Vui lòng kiểm tra cú pháp.","JSON map of group → description exposed when users create API keys.":"Ánh xạ JSON của nhóm → mô tả được hiển thị khi người dùng tạo khóa API.","JSON map of group → ratio applied when the user selects the group explicitly.":"Bản đồ JSON của nhóm → tỷ lệ được áp dụng khi người dùng chọn nhóm đó một cách rõ ràng.","JSON map of model → multiplier applied to quota billing.":"Bản đồ JSON của mô hình → hệ số nhân áp dụng cho thanh toán hạn mức.","JSON map of model → USD cost per request. Takes precedence over ratio based billing.":"Ánh xạ JSON của mô hình → chi phí USD mỗi yêu cầu. Ưu tiên hơn thanh toán dựa trên tỷ lệ.","JSON mode":"Chế độ JSON","JSON Mode":"Chế độ JSON","JSON must be an object":"JSON phải là object","JSON object:":"Đối tượng JSON:","JSON structure is invalid":"Cấu trúc JSON không hợp lệ","JSON Text":"Văn bản JSON","JSON-based access control rules. Leave empty to allow all users.":"Quy tắc kiểm soát truy cập dựa trên JSON. Để trống để cho phép tất cả người dùng.","Just now":"Vừa nãy","JustSong":"JustSong","K":"K","Keep affinity when channel is disabled":"Giữ ưu tiên khi kênh bị tắt","Keep enabled if you need to proxy requests for different upstream accounts.":"Giữ bật nếu bạn cần proxy yêu cầu cho các tài khoản upstream khác nhau.","Keep enough balance before production traffic":"Giữ đủ số dư trước khi chạy lưu lượng production","Keep original value":"Giữ giá trị gốc","Keep original value (skip if target exists)":"Giữ giá trị gốc (bỏ qua nếu đích đã tồn tại)","Keep the platform ready":"Giữ nền tảng luôn sẵn sàng","Keep this above 1 minute to avoid heavy database load":"Giữ cái này trên 1 phút để tránh tải nặng cơ sở dữ liệu","Keep-alive Ping":"Ping duy trì","Key":"Khóa","Key Fingerprint":"Vân tay khóa","Key Sources":"Nguồn khóa","Key Summary":"Tóm tắt khóa","Key Update Mode":"Chế độ cập nhật khóa","Keys, OAuth credentials, and multi-key update behavior.":"Khóa, thông tin xác thực OAuth và hành vi cập nhật nhiều khóa.","Kling":"Kling","Knowledge Base ID *":"Mã số Cơ sở kiến thức *","Knowledge cutoff":"Mốc dữ liệu","Lake View":"Hồ nước","Landing page with system overview.":"Trang chủ với tổng quan hệ thống.","Language preference saved":"Đã lưu tùy chọn ngôn ngữ","Language Preferences":"Tùy chọn ngôn ngữ","Language preferences sync across your signed-in devices and affect API error messages.":"Tùy chọn ngôn ngữ sẽ đồng bộ trên các thiết bị đã đăng nhập và ảnh hưởng đến ngôn ngữ thông báo lỗi API.","Last 24h usage":"Sử dụng 24h qua","Last 30 days uptime":"Uptime 30 ngày qua","Last check time":"Thời gian kiểm tra gần nhất","Last detected addable models":"Mô hình có thể thêm được phát hiện gần nhất","Last Login":"Lần đăng nhập cuối","Last Seen":"Lần cuối","Last Tested":"Được kiểm tra lần cuối","Last updated:":"Cập nhật lần cuối:","Last Used":"Dùng lần cuối","Last used:":"Lần cuối sử dụng:","Latency":"Độ trễ","Latency check":"Kiểm tra độ trễ","Latency short":"Trễ","Latency trend (last 24h)":"Xu hướng độ trễ (24 giờ qua)","Latest platform updates and notices":"Cập nhật và thông báo nền tảng mới nhất","Lavender Dream":"Mộng hoa oải hương","Layout":"Bố cục","lead":"dẫn đầu","Leaderboards":"Bảng xếp hạng","Learn more":"Tìm hiểu thêm","Learn more:":"Tìm hiểu thêm:","Leave":"Rời khỏi","Leave blank to keep the existing credential":"Để trống để giữ thông tin xác thực hiện có","Leave blank to keep the existing key":"Để trống để giữ khóa hiện có","Leave blank unless rotating the secret":"Để trống trừ khi xoay vòng bí mật","Leave empty for never expires":"Để trống để không bao giờ hết hạn","Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Để trống để tắt yêu cầu đồng ý. Hỗ trợ Markdown, HTML hoặc một URL đầy đủ để chuyển hướng người dùng.","Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Để trống để vô hiệu hóa yêu cầu chính sách bảo mật. Hỗ trợ Markdown, HTML hoặc một URL đầy đủ để chuyển hướng người dùng.","Leave empty to disband the tag":"Để trống để giải tán thẻ","Leave empty to keep existing key":"Để trống để giữ khóa hiện có","Leave empty to keep unchanged":"Để trống để giữ nguyên","Leave empty to use account email":"Để trống để sử dụng email tài khoản","Leave empty to use default":"Để trống để sử dụng mặc định","Leave empty to use system temp directory":"Để trống để sử dụng thư mục tạm 
107cá»§a hệ thống","Leave empty to use username":"Để trống để sá»­ dụng tên người dùng","Left to Right":"Trái sang phải","Legacy Format (JSON Object)":"Định dạng cÅ© (đối tượng JSON)","Legacy format must be a JSON object":"Định dạng cÅ© phải là đối tượng JSON","Legacy Format Template":"Mẫu định dạng cÅ©","Legal":"Pháp lý","Less":"Ít hÆ¡n","Less than":"Nhỏ hÆ¡n","Less Than":"Nhỏ hÆ¡n","Less than 1 day left":"Còn dưới 1 ngày","Less than or equal":"Nhỏ hÆ¡n hoặc bằng","Less Than or Equal":"Nhỏ hÆ¡n hoặc bằng","License":"Giấy phép","Light":"Ánh sáng","Lightning Fast":"Nhanh như chớp","Limit period":"Thời hiệu","Limit Reached":"Đã đạt giới hạn","Limit which models can be used with this key":"Giới hạn các mô hình có thể được sá»­ dụng với khóa này","Limited":"Giới hạn","LingYiWanWu":"LingYiWanWu","Link to your documentation site":"Liên kết đến trang web tài liệu cá»§a bạn","LinuxDO":"LinuxDO","LinuxDO Client ID":"LinuxDO Mã khách hàng","LinuxDO Client Secret":"LinuxDO Bí mật máy khách","List of models supported by this channel. Use comma to separate multiple models.":"Danh sách các mô hình được hỗ trợ bởi kênh này. Sá»­ dụng dấu phẩy để phân tách nhiều mô hình.","List of origins (one per line) allowed for Passkey registration and authentication.":"Danh sách các nguồn gốc (mỗi dòng một mục) được phép đăng ký và xác thá»±c Passkey.","List view":"Xem dạng danh sách","LLM Leaderboard":"Bảng xếp hạng LLM","LLM prompt helper":"Trợ lý prompt LLM","Load Balancing":"Tải cân bằng","Load template...":"Tải mẫu...","Loader":"Trình tải","Loading":"Đang tải","Loading channel details":"Đang tải chi tiết kênh","Loading configuration":"Đang tải cấu hình","Loading content settings...":"Đang tải cài đặt nội dung...","Loading current models...":"Đang tải các mô hình hiện tại...","Loading failed":"Tải thất bại","Loading maintenance settings...":"Đang tải cài đặt bảo trì...","Loading settings...":"Đang tải cài đặt...","Loading setup status…":"Đang tải trạng thái cài đặt…","Loading...":"Đang tải...","Local":"Địa phương","Local Billing":"Thanh toán nội địa","Local models":"Mô hình cục bộ","Locations":"Vị trí","Locked":"Đã khóa","log":"nhật ký","Log Details":"Chi tiết Nhật ký","Log Directory":"Thư mục nhật ký","Log File Count":"Số tệp nhật ký","Log files older than {{value}} days will be deleted.":"Các tệp nhật ký cÅ© hÆ¡n {{value}} ngày sẽ bị xóa.","Log IP address for usage and error logs":"Ghi lại địa chỉ IP cho nhật ký sá»­ dụng và lỗi","Log Maintenance":"Bảo trì Nhật ký","Log Type":"Loại nhật ký","Logged in successfully via {{method}}":"Đăng nhập thành công qua {{method}}","Logic":"Logic","Login":"Đăng nhập","Login failed":"Đăng nhập thất bại","Login Info":"Thông tin đăng nhập","Login Method":"Phương thức đăng nhập","Logo":"Logo","Logo URL":"URL Logo","Logs":"Nhật ký","Low balance":"Số dư thấp","Lowest median first-token latency":"Độ trễ trung vị token đầu tiên thấp nhất","m":"m","Maintenance":"Bảo trì","Make it easier for teammates to pick the right group.":"Giúp đồng đội dễ dàng chọn đúng nhóm hÆ¡n.","Manage":"Quản lý","Manage account bindings for this user":"Quản lý liên kết tài khoản cho người dùng này","Manage Bindings":"Quản lý liên kết","Manage catalog visibility and pricing.":"Quản lý hiển thị danh mục và giá cả.","Manage custom OAuth providers for user authentication":"Quản lý nhà cung cấp OAuth tùy chỉnh để xác thá»±c người dùng","Manage Keys":"Quản lý Khóa","Manage local models for:":"Quản lý mô hình cục bộ cho:","Manage multi-key status and configuration for this channel":"Quản lý trạng thái và cấu hình đa khóa cho kênh này","Manage Ollama Models":"Quản lý mô hình Ollama","Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.":"Quản lý tệp nhật ký máy chá»
107§. Tệp nhật ký tích lÅ©y theo thời gian; nên dọn dẹp định kỳ để giải phóng dung lượng đĩa.","Manage subscription plans and pricing.":"Quản lý gói đăng ký và giá cả.","Manage Subscriptions":"Quản lý đăng ký","Manage Vendors":"Quản lý Nhà cung cấp","Manage your security settings and account access":"Quản lý cài đặt bảo mật và quyền truy cập tài khoản cá»§a bạn","Manual Disabled":"Vô hiệu hóa thá»§ công","Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).":"Ánh xạ các trường từ phản hồi thông tin người dùng sang thuộc tính người dùng cục bộ. Hỗ trợ đường dẫn lồng nhau (ví dụ: ocs.data.id).","Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.":"Ánh xạ các mã định danh mô hình với các phiên bản API Gemini. Một mục `default` áp dụng khi không tìm thấy kết quả khớp cụ thể nào.","Map request model names to actual provider model names (JSON format)":"Ánh xạ tên mô hình yêu cầu đến tên mô hình thá»±c tế cá»§a nhà cung cấp (định dạng JSON)","Map response status codes (JSON format)":"Ánh xạ mã trạng thái phản hồi (định dạng JSON)","Map upstream status codes to different codes":"Ánh xạ mã trạng thái upstream sang các mã khác","Market Share":"Thị phần","Marketing":"Tiếp thị","Match All (AND)":"Tất cả khớp (AND)","Match Any (OR)":"Bất kỳ khớp (OR)","Match Mode":"Chế độ khớp","Match model name exactly":"Khớp chính xác tên mô hình","Match models containing this name":"Khớp các mô hình chứa tên này","Match models ending with this name":"Khớp các mô hình kết thúc bằng tên này","Match models starting with this name":"Khớp các mô hình bắt đầu bằng tên này","Match Text":"Văn bản khớp","Match Type":"Loại đối sánh","Match Value":"Giá trị khớp","Match Value (optional)":"Giá trị khớp (tùy chọn)","Matched":"Đã khớp","Matched Tier":"Bậc khớp","Matching Rules":"Quy tắc khớp","Max Disk Cache Size (MB)":"Dung lượng tối đa bộ nhớ đệm đĩa (MB)","Max Entries":"Số mục tối đa","Max output":"Đầu ra tối đa","Max Requests (incl. failures)":"Maximum number of requests (including errors)","Max Requests (including failures)":"Số yêu cầu tối đa (bao gồm cả các lỗi)","Max requests per period":"Yêu cầu tối đa mỗi khoảng thời gian","Max Success":"Thành công tối đa","Max successful requests":"Số yêu cầu thành công tối đa","Max Successful Requests":"Yêu cầu thành công tối đa","Maximum 1000 characters. Supports Markdown and HTML.":"Tối đa 1000 ký tá»±. Hỗ trợ Markdown và HTML.","Maximum 200 characters":"Tối đa 200 ký tá»±","Maximum 500 characters. Supports Markdown and HTML.":"Tối đa 500 ký tá»±. Hỗ trợ Markdown và HTML.","Maximum check-in quota":"Hạn ngạch điểm danh tối đa","Maximum input window":"Cá»­a sổ nhập tối đa","Maximum number of tokens in the response":"Số token tối đa trong phản hồi","Maximum quota amount awarded for check-in":"Số lượng hạn ngạch tối đa được trao cho điểm danh","Maximum tokens including hidden reasoning tokens":"Số token tối đa bao gồm token suy luận ẩn","Maximum tokens per response":"Số token tối đa mỗi phản hồi","maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647":"maxRequests ≥ 0, maxSuccess ≥ 1, cả hai đều ≤ 2,147,483,647","May be used for training by upstream provider":"Có thể được nhà cung cấp dùng để huấn luyện","Media pricing":"Giá phương tiện","Median time-to-first-token (TTFT) sampled hourly per group":"Độ trễ token đầu tiên trung vị (TTFT) lấy mẫu mỗi giờ theo nhóm","Medical Q&A, mental health support":"Hỏi đáp y tế, hỗ trợ sức khỏe tinh thần","Memory Hits":"Lượt truy cập bộ nhớ","Memory Threshold (%)":"Ngưỡng bộ nhớ (%)","Merchant ID":"Mã thương gia","Merchant ID is required":"Bắt buộc 
107nhập Merchant ID","Message Priority":"Ưu tiên tin nhắn","Metadata":"Siêu dữ liệu","Midjourney":"Midjourney","MidjourneyPlus":"MidjourneyPlus","min downtime":"phút gián đoạn","Min Top-up":"Nạp tối thiểu","Min Top-up:":"Nạp tối thiểu:","MiniMax":"MiniMax","Minimum check-in quota":"Hạn ngạch điểm danh tối thiểu","Minimum LinuxDO trust level required":"Yêu cầu mức độ tin cậy {{LinuxDO}} tối thiểu","Minimum quota amount awarded for check-in":"Số lượng hạn ngạch tối thiểu được trao cho điểm danh","Minimum recharge amount in USD":"Số tiền nạp tối thiểu bằng USD","Minimum recharge amount to qualify for this discount.":"Số tiền nạp tối thiểu để đủ điều kiện nhận chiết khấu này.","Minimum top-up (optional)":"Số tiền nạp tối thiểu (tùy chọn)","Minimum top-up (USD)":"Mức nạp tối thiểu (USD)","Minimum top-up amount must be at least 1":"Số tiền nạp tối thiểu phải từ 1 trở lên","Minimum top-up quantity":"Số lượng nạp tối thiểu","Minimum topup amount: {{amount}}":"Số tiền nạp tối thiểu: {{amount}}","Minimum Trust Level":"Mức độ tin cậy tối thiểu","Minimum:":"Tối thiểu:","Minor blips in the last 30 days":"Vài gián đoạn nhỏ trong 30 ngày qua","Mint a fresh pair below — or pick an existing one further down. Click Save when ready.":"Tạo một cặp mới bên dưới, hoặc chọn một cặp hiện có ở phía dưới. Nhấn Lưu khi đã sẵn sàng.","Minute":"Phút","minutes":"phút","Missing code":"Thiếu mã","Missing Models":"Thiếu Mô hình","Missing user data from Passkey login response":"Thiếu dữ liệu người dùng từ phản hồi đăng nhập Passkey","Mistral":"Mistral","Modalities":"Phương thức","Modality":"Phương thức","Mode":"Chế độ","model":"mô hình","Model":"Mô hình","Model Access":"Truy cập mô hình","Model Analytics":"Phân tích mô hình","Model Analytics Defaults":"Mặc định phân tích mô hình","Model Analytics Filters":"Bộ lọc phân tích mô hình","model billing support":"hỗ trợ tính phí mô hình","Model Call Analytics":"Phân tích lượt gọi mô hình","Model context usage":"Sá»­ dụng ngữ cảnh mô hình","Model deleted":"Đã xóa mô hình","Model deleted successfully":"Model đã được xóa thành công","Model Deployment":"Triển khai mô hình","Model deployment service is disabled":"Dịch vụ triển khai mô hình đang bị tắt","Model Description":"Mô tả Mô hình","Model details":"Chi tiết mô hình","Model disabled successfully":"Model đã được vô hiệu hóa thành công","Model enabled successfully":"Model đã được kích hoạt thành công","Model fixed pricing":"Fixed-price model","Model Group":"Nhóm Mô hình","Model Limits":"Giới hạn Mô hình","Model Mapping":"Ánh xạ mô hình","Model Mapping (JSON)":"Ánh xạ mô hình (JSON)","Model Mapping must be a JSON object like":"Ánh xạ Mô hình phải là một đối tượng JSON như","Model mapping must be a JSON object with string values":"Ánh xạ mô hình phải là đối tượng JSON với giá trị chuỗi","Model mapping must be valid JSON":"Ánh xạ mô hình phải là JSON hợp lệ","Model mapping values must be strings":"Giá trị ánh xạ mô hình phải là chuỗi","Model name":"Tên mẫu","Model Name":"Tên mẫu","Model Name *":"Tên mẫu *","Model name is required":"Tên mô hình là bắt buộc","Model names copied to clipboard":"Tên mô hình đã được sao chép vào bộ nhớ tạm","Model not found":"Không tìm thấy mô hình","Model performance metrics":"Chỉ số hiệu năng mô hình","Model Price":"Giá mô hình","Model price is not configured. Please complete model pricing in settings.":"Giá mô hình chưa được cấu hình. Vui lòng hoàn tất định giá mô hình trong cài đặt.","Model Price Not Configured":"Giá mô hình chưa được cấu hình","Model prices":"Giá mô hình","Model prices reset successfully":"Đã đặt lại giá mô hình thành công","Model Pricing":"Định giá mô hình","Model pull failed: {{msg}}":"Tải mô hình thất bại: {{msg}}","Model ratio":"Tá»· lệ mô hình","Model ratios":"Tá»· lệ mô hình","Model ratios reset successfully":"Tá»· lệ mô hình đã được đặt lại thành công","Model Regex":"Regex mô hình","Model Regex (one per line)":"Regex mô hình (mỗi dòng một mục)","Model selected":"Đã chọn mô hình","Model Square":"Quảng trường mô hình","Model Tags":"Thẻ mô hình","Model to use for testing":"Mô hình dùng để kiểm thá»­","Model to use when testing channel connectivity":"Mô hình để sá»­ dụng khi kiểm tra kết nối kênh","Model Version *":"Phiên bản mô hình *","model(s) selected out of":"mô hình(s) được chọn trong số","model(s)? This action cannot be undone.":"mô hình(s)? Hành động này không thể hoàn tác.","models":"mô hình","Models":"Mô hình","Models *":"Các mô hình *","Models & Groups":"Mô hình & Nhóm","Models & Routing":"Mô hình & định tuyến","Models appended successfully":"Đã thêm mô hình thành công","Models are required":"Các mô hình được yêu cầu","Models climbing the leaderboard":"Các mô hình đang leo bảng xếp hạng","Models climbing the leaderboard fastest":"Mô hình tăng hạng nhanh nhất","Models directory":"Thư mục mô hình","Models Directory":"Danh má
107»¥c mô hình","Models fetched successfully":"Các mô hình đã được tải thành công","Models filled to form":"Mô hình đã được điền vào biểu mẫu","Models listed here will not automatically append or remove -thinking / -nothinking suffixes.":"Các mô hình được liệt kê ở đây sẽ không tá»± động thêm hoặc xóa hậu tố -thinking / -nothinking.","Models losing positions":"Các mô hình đang mất vị trí","Models losing the most positions":"Mô hình tụt hạng nhiều nhất","Models not in list, may fail to invoke":"Các mô hình không có trong danh sách, có thể gọi thất bại","Models that are being used but not configured in the system":"Mô hình đang được sá»­ dụng nhưng chưa được cấu hình trong hệ thống","Models that skip thinking suffix processing":"Mô hình bỏ qua xá»­ lý hậu tố thinking","Models updated successfully":"Mô hình đã được cập nhật thành công","Modify existing subscription plan configuration":"Sá»­a đổi cấu hình gói đăng ký hiện có","Module availability":"Khả dụng cá»§a mô-đun","MokaAI":"MokaAI","Monitor":"Giám sát","Monitor balance, usage, and request volume":"Theo dõi số dư, mức dùng và số lượng yêu cầu","Monitored relay requests":"Yêu cầu relay được giám sát","Monitoring & Alerts":"Giám sát & Cảnh báo","Month":"Tháng","Month number":"Số tháng","Monthly":"Hàng tháng","Monthly tokens":"Token mỗi tháng","months":"tháng","Moonshot":"Dá»± án táo bạo","More":"Thêm","More Apps":"Thêm","more mapping":"thêm lập bản đồ","More templates...":"Thêm mẫu...","More than 999 days left":"HÆ¡n 999 ngày","More...":"Thêm...","Most-used models in the selected period and category":"Mô hình được dùng nhiều nhất trong khoảng thời gian và danh mục đã chọn","Move":"Di chuyển","Move a request header":"Di chuyển header yêu cầu","Move affiliate rewards to your main balance":"Chuyển phần thưởng liên kết vào số dư chính cá»§a bạn","Move Field":"Di chuyển trường","Move Header":"Di chuyển tiêu đề","Move Request Header":"Di chuyển header yêu cầu","Move source field to target field":"Di chuyển trường nguồn sang trường đích","ms":"ms","Multi-key channel: Keys will be":"Kênh đa khóa: Các khóa sẽ là","Multi-Key Management":"Quản lý đa khóa","Multi-key management {{action}} on channel (ID: {{id}})":"Quản lý đa khóa {{action}} trên kênh (ID: {{id}})","Multi-Key Mode (multiple keys, one channel)":"Chế độ đa phím (nhiều phím, một kênh)","Multi-Key Strategy":"Chiến lược đa khóa","Multi-key: Polling rotation":"Đa khóa: Xoay vòng tuần tá»±","Multi-key: Random rotation":"Đa khóa: Xoay vòng ngẫu nhiên","Multi-protocol Compatible":"Tương thích đa giao thức","Multi-region deployment for stable global access":"Triển khai đa khu vá»±c để truy cập toàn cầu ổn định","Multi-step thinking before final answer":"Suy luận nhiều bước trước khi đưa ra câu trả lời cuối","Multi-user management with flexible permission allocation":"Quản lý nhiều người dùng với phân bổ quyền linh hoạt","Multilingual translation and localisation":"Dịch và bản địa hoá đa ngôn ngữ","Multimodal":"Đa phương thức","Multiplier":"Hệ số nhân","Multiplier applied when":"Hệ số nhân áp dụng khi","Multiplier applied when {{userGroup}} uses {{targetGroup}}":"Hệ số áp dụng khi {{userGroup}} sá»­ dụng {{targetGroup}}","Multiplier for audio inputs.":"Hệ số nhân cho đầu vào âm thanh.","Multiplier for audio outputs.":"Hệ số nhân cho đầu ra âm thanh.","Multiplier for completion tokens.":"Hệ số nhân cho token hoàn thành.","Multiplier for image processing.":"Hệ số nhân trong xá»­ lý ảnh.","Multiplier for prompt tokens.":"Hệ số nhân cho token nhắc lệnh.","Multipliers for recharge pricing based on user groups.":"Hệ số nhân cho việc định giá nạp tiền dá»±a trên nhóm người dùng.","Must be a valid URL":"Phải là URL hợp lệ","Must be at least 8 characters":"Phải có ít nhất 8 ký tá»±","My Subscriptions":"Gói đăng ký cá»§a tôi","my-status":"trạng thái cá»§a tôi","MySQL detected":"Đã phát hiện MySQL","MySQL is a production-ready relational database. Keep your credentials secure.":"MySQL là cÆ¡ sở dữ liệu quan hệ sẵn sàng cho production. Hãy giữ thông tin đăng nhập an toàn.","MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.":"MySQL đã sẵn sàng để triển khai sản xuất. Đảm bảo sao lưu tá»± động và một người dùng chuyên dụng với các đặc quyền tối thiểu cần thiết được cấu hình.","N/A":"N/A","Name":"Tên","Name *":"Tên *","Name for this redemption code (1-20 characters)":"Tên cho mã đổi quà này (1-20 ký tá»±)","Name is available":"Tên có sẵn","Name is not available":"Tên không có sẵn","Name must be between {{min}} and {{max}} characters":"Tên phải có giữa {{min}} và {{max}} ký tá»±","Name Rule":"Quy tắc đặt tên","Name Suffix":"Hậu tố tên","Name the channel and choose the upstream provider.":"Đặt tên kênh và chọn nhà cung cấp upstream.","Name the channel, choose the provider, configure API access, and set credentials.":"Đặt tên kênh, chọn nhà cung cấp, cấu hình truy cập API và thiết lập thông tin xác thá»±c.","Name, provider type, and availability.":"Tên, loại nhà cung cấp và trạng thái khả dụng.","[email protected]":"[email protected]","Native format":"Định dạng gốc","Need a redemption code?":"Cần mã đổi thưởng?","Needs API key":"Cần khóa API","Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.":"JSON lồng nhau xác định quy tắc theo nhóm để thêm (+:), xóa (-:), hoặc nối các nhóm có thể sá»­ dụng.","Nested JSON: source group →":"JSON lồng nhau: nhóm nguồn →","Network proxy for this channel (supports socks5 protocol)":"Proxy mạng cho kênh này (hỗ trợ giao thức socks5)","Never":"Không bao giờ","Never expires":"Không hết hạn","Never used an API Gateway?":"Chưa bao g
107iờ sá»­ dụng API Gateway?","NEW":"MỚI","New API":"API mới","New API &lt;[email protected]&gt;":"API mới &lt;[email protected]&gt;","New API Project Repository:":"Kho lưu trữ Dá»± án API Mới:","New Format Template":"Mẫu định dạng mới","New Group":"Nhóm mới","New model":"Mô hình mới","New Models ({{count}})":"Mô hình mới ({{count}})","New name will be:":"Tên mới sẽ là:","New password":"Mật khẩu mới","New Password":"Mật khẩu mới","New password must be different from current password":"Mật khẩu mới phải khác với mật khẩu hiện tại","New User Quota":"Hạn mức người dùng mới","New version available: {{version}}":"Có phiên bản mới: {{version}}","NewAPI":"NewAPI","Newly released":"Vừa phát hành","Next":"Tiếp","Next branch":"Nhánh tiếp theo","Next page":"Trang tiếp theo","Next reset":"Lần đặt lại tiếp theo","No":"Không","No About Content Set":"Chưa đặt nội dung Giới thiệu","No Active":"Không hoạt động","No additional type-specific settings for this channel type.":"Không có cài đặt bổ sung cụ thể theo loại cho loại kênh này.","No amount options configured. Add amounts below to get started.":"Chưa có tùy chọn số tiền nào được cấu hình. Thêm các số tiền bên dưới để bắt đầu.","No announcements at this time":"Hiện tại chưa có thông báo nào.","No announcements yet. Click \\"Add Announcement\\" to create one.":"Chưa có thông báo nào. Nhấp vào \\"Thêm thông báo\\" để tạo một thông báo.","No API Domains yet. Click \\"Add API\\" to create one.":"Chưa có Tên miền API nào. Nhấp vào \\"Thêm API\\" để tạo.","No API key yet":"Chưa có khóa API","No API keys available. Create your first API key to get started.":"Không có khóa API nào khả dụng. Tạo khóa API đầu tiên cá»§a bạn để bắt đầu.","No API Keys Found":"Không tìm thấy khóa API","No API routes configured":"Chưa có tuyến API nào được cấu hình","No app usage data available for this model.":"Chưa có dữ liệu sá»­ dụng ứng dụng cho mô hình này.","No apps match the selected filters":"Không có ứng dụng phù hợp bộ lọc","No available models":"Không có mô hình khả dụng","No available Web chat links":"Không có liên kết Web chat khả dụng","No backup":"Chưa sao lưu","No base input price":"Chưa có giá đầu vào cÆ¡ bản","No billing records found":"Không tìm thấy hồ sÆ¡ thanh toán","No capabilities reported for this model.":"Chưa có khả năng nào được báo cáo cho mô hình này.","No Change":"Không thay đổi","No changes":"Không có thay đổi","No changes made":"Không có thay đổi nào được thá»±c hiện","No changes to save":"Không có thay đổi nào để lưu","No channel selected":"Chưa chọn kênh nào","No channel type found.":"Không tìm thấy loại kênh.","No channels available. Create your first channel to get started.":"Không có kênh nào khả dụng. Hãy tạo kênh đầu tiên cá»§a bạn để bắt đầu.","No channels found":"Không tìm thấy kênh nào","No Channels Found":"Không tìm thấy kênh nào","No channels selected":"Không có kênh nào được chọn","No chat presets configured. Click \\"Add chat preset\\" to get started.":"Chưa cấu hình cài đặt trước trò chuyện. Nhấp vào \\"Thêm cài đặt trước trò chuyện\\" để bắt đầu.","No chat presets match your search":"Không có cài đặt trước trò chuyện nào khớp với tìm kiếm cá»§a bạn","No conflict entries available.":"Không có mục xung đột nào khả dụng.","No conflicts match your search.":"Không có xung đột nào khớp với tìm kiếm cá»§a bạn.","No console output":"Không có đầu ra console","No containers":"Không có container","No custom OAuth providers configured yet.":"Chưa có nhà cung cấp OAuth tùy chỉnh nào được cấu hình.","No data":"Không có dữ liệu","No Data":"Không có dữ liệu","No data available":"Không có dữ liệu","No deployments available. Create one to get started.":"Không có triển khai nào khả dụng. Tạo má
107»™t cái để bắt đầu.","No Deployments Found":"Không tìm thấy triển khai nào","No description available.":"Chưa có mô tả.","No discount tiers configured. Click \\"Add discount tier\\" to get started.":"Chưa cấu hình cấp chiết khấu nào. Nhấp vào \\"Thêm cấp chiết khấu\\" để bắt đầu.","No duplicate keys found":"Không tìm thấy khóa trùng lặp","No enabled tokens available":"Không có token nào được kích hoạt","No endpoints configured. Switch to JSON mode or add rows to define endpoints.":"Chưa cấu hình endpoint nào. Chuyển sang chế độ JSON hoặc thêm hàng để định nghÄ©a endpoint.","No FAQ entries available":"Không có mục FAQ nào.","No FAQ entries yet. Click \\"Add FAQ\\" to create one.":"Chưa có mục FAQ nào. Nhấp vào \\"Thêm FAQ\\" để tạo một mục.","No files match the accepted types.":"Không có tệp nào khớp với các loại được chấp nhận.","No group found.":"Không tìm thấy nhóm.","No group-based rate limits configured. Click \\"Add group\\" to get started.":"Chưa cấu hình giới hạn tốc độ dá»±a trên nhóm. Nhấp \\"Add group\\" để bắt đầu.","No groups match your search":"Không có nhóm nào khớp với tìm kiếm cá»§a bạn","No groups yet. Add a group to get started.":"Chưa có nhóm nào. Thêm một nhóm để bắt đầu.","No header overrides configured.":"Không có ghi đè tiêu đề nào được cấu hình.","No history data available":"Không có dữ liệu lịch sá»­","No incidents in the last 24 hours":"Không có sá»± cố trong 24 giờ qua","No incidents in the last 30 days":"Không có sá»± cố trong 30 ngày qua","No Inviter":"Không có người mời","No keys found":"Không tìm thấy khóa","No latency data available":"Không có dữ liệu độ trễ","No log entries matched the selected time.":"Không có mục nhật ký nào khớp với thời gian đã chọn.","No logs":"Không có nhật ký","No Logs Found":"Không tìm thấy nhật ký","No mappings configured. Click \\"Add Row\\" to get started.":"Chưa có ánh xạ nào được cấu hình. Nhấp vào \\"Thêm hàng\\" để bắt đầu.","No matches found":"Không tìm thấy kết quả nào","No matching items":"Không có mục phù hợp","No matching results":"Không có kết quả phù hợp","No matching rules":"Không có quy tắc phù hợp","No messages yet":"Chưa có tin nhắn","No missing models found.":"Không tìm thấy mô hình nào bị thiếu.","No model found.":"Không tìm thấy mô hình.","No model mappings configured. Click \\"Add Mapping\\" to get started.":"Chưa có ánh xạ mô hình nào được cấu hình. Nhấp vào \\"Thêm ánh xạ\\" để bắt đầu.","No models available":"Không có mô hình nào khả dụng","No models available in this category":"Không có mô hình nào trong danh mục này","No models available. Create your first model to get started.":"Không có mô hình nào khả dụng. Hãy tạo mô hình đầu tiên cá»§a bạn để bắt đầu.","No models configured. Use Add model to get started.":"Chưa cấu hình mô hình. Dùng Thêm mô hình để bắt đầu.","No models fetched from upstream":"Không lấy được mô hình nào từ upstream","No models fetched yet.":"Chưa có mô hình nào được tìm nạp.","No models found":"Không tìm thấy mô hình nào","No Models Found":"No models found","No models found.":"Không tìm thấy mô hình.","No models match the selected filters":"Không có mô hình phù hợp bộ lọc","No models match your current filters.":"Không có mô hình nào khớp với bộ lọc hiện tại cá»§a bạn.","No models match your search":"Không có mô hình phù hợp với tìm kiếm","No models selected":"Chưa chọn mô hình nào","No models to add":"Không có mô hình để thêm","No models to copy":"Không có mô hình nào để sao chép","No models to remove":"Không có mô hình để xóa","No new models to add":"Không có mô hình mới để thêm","No new models yet":"Chưa có mô hình mới","No notable climbers right now":"Hiện chưa có mô hình nào tăng đáng kể","No notable drops right now":"Hiện chưa có mô hình nào giảm đáng kể","No parameter overrides configured.":"Không có ghi đè tham số nào được cấu hình.","No payment methods available. Please contact administrator.":"Không có phương thức thanh toán nào khả dụng. Vui lòng liên hệ quản trị viên.","No payment methods configured":"Chưa cấu hình phương thức thanh toán","No payment methods configured. Click \\"Add method\\" or use templates to get started.":"Chưa cấu hình phương thức thanh toán. Nhấp vào \\"Thêm phương thức\\" hoặc sá»­ dụng mẫu để bắt đầu.","No payment methods match your search":"Không có phương thức thanh toán nào khớp với tìm kiếm cá»§a bạn","No performance data available":"Không có dữ liệu hiệu năng","No plans available":"Không có gói nào khả dụng","No preference":"Không có ưu tiên","No prefill groups yet":"Chưa có nhóm điền sẵn nào","No price differences found":"Không tìm thấy sá»± khác biệt về giá","No processable upstream model updates for this channel":"Không có cập nhật mô hình upstream có thể xá»­ lý cho kênh này","No products configured. Click \\"Add product\\" to get started.":"Chưa cấu hình sản phẩm nào. Nhấp \\"Thêm sản phẩm\\" để bắt đầu.","No products match your search":"Không có sản phẩm nào khớp với tìm kiếm cá»§a bạn","No providers available":"Không có nhà cung cấp khả dụng","No Quota":"Không hạn ngạch","No ratio differences found":"Không tìm thấy sá»± khác biệt tá»· lệ","No recent usage":"Chưa có sá»­ dụng gần đây","No records foun
107d. Try adjusting your filters.":"Không tìm thấy bản ghi nào. Hãy thá»­ điều chỉnh bộ lọc cá»§a bạn.","No redemption codes available. Create your first redemption code to get started.":"Hiện không có mã đổi thưởng nào. Hãy tạo mã đổi thưởng đầu tiên cá»§a bạn để bắt đầu.","No Redemption Codes Found":"Không tìm thấy mã đổi thưởng","No related models available for this channel type":"Không có mô hình liên quan nào cho loại kênh này","No release notes provided.":"Không có ghi chú phát hành nào được cung cấp.","No Reset":"Không đặt lại","No restriction":"Không giới hạn","No results for \\"{{query}}\\". Try adjusting your search or filters.":"Không tìm thấy kết quả cho \\"{{query}}\\". Hãy thá»­ điều chỉnh tìm kiếm hoặc bộ lọc.","No results found":"Không tìm thấy kết quả nào","No results found.":"Không tìm thấy kết quả.","No Retry":"Không thá»­ lại","No rules yet":"Chưa có quy tắc","No rules yet. Add a group below to get started.":"Chưa có quy tắc nào. Thêm một nhóm bên dưới để bắt đầu.","No separate media pricing configured.":"Chưa cấu hình giá phương tiện riêng.","No status code mappings configured.":"Chưa cấu hình ánh xạ mã trạng thái.","No stores on this merchant yet. Set a return URL and click Create to mint your first pair.":"Merchant này chưa có cá»­a hàng. Đặt URL trả về và nhấn Tạo để tạo cặp đầu tiên.","No subscription plans yet":"Chưa có gói đăng ký nào","No subscription records":"Không có bản ghi đăng ký","No Sync":"Không đồng bộ","No system announcements":"Không có thông báo hệ thống","No token found.":"Không tìm thấy mã thông báo.","No tools configured":"Chưa cấu hình công cụ nào","No Upgrade":"Không nâng cấp","No upstream price differences found":"Không tìm thấy sá»± khác biệt về giá upstream","No upstream ratio differences found":"Không tìm thấy chênh lệch tá»· lệ thượng nguồn","No uptime data available":"Không có dữ liệu thời gian hoạt động","No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.":"Chưa có nhóm Uptime Kuma nào. Nhấp vào \\"Thêm nhóm\\" để tạo một nhóm.","No uptime monitoring configured":"Chưa cấu hình giám sát thời gian hoạt động","No usage logs available. Logs will appear here once API calls are made.":"Chưa có nhật ký sá»­ dụng. Nhật ký sẽ hiển thị sau khi có gọi API.","No user information available":"Không có thông tin người dùng","No user selected":"Chưa chọn người dùng","No users available. Try adjusting your search or filters.":"Không có người dùng nào. Hãy thá»­ điều chỉnh tìm kiếm hoặc bộ lọc cá»§a bạn.","No Users Found":"Không tìm thấy người dùng nào","No vendor data available":"Không có dữ liệu nhà cung cấp","No X Found":"Không tìm thấy X","Node Name":"Tên nút","Non-stream":"Không phát trá»±c tuyến","Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.":"Phần thưởng mời khác 0 yêu cầu xác nhận tuân thá»§ trong cài đặt Cổng thanh toán.","None":"Không có","[email protected]":"[email protected]","Normalized:":"Chuẩn hóa:","Not available":"Không khả dụng","Not backed up":"Chưa sao lưu","Not bound":"Không bị ràng buộc","Not Equals":"Không bằng","Not Set":"Chưa đặt","Not set yet":"Chưa thiết lập","Not Started":"Chưa bắt đầu","Not Submitted":"Chưa gá»­i","Not tested":"Chưa kiểm tra","Not used for upstream training by default":"Mặc định không dùng để huấn luyện ở phía nhà cung cấp","Not used yet":"Chưa sá»­ dụng","Notice":"Thông báo","Notification Email":"Email thông báo","Notification Method":"Phương thức thông báo","Notifications":"Thông báo","Nucleus sampling probability mass":"Tổng xác suất cho nucleus sampling","Number of codes to create":"Số mã cần tạo","Number of completions to generate":"Số lượng phản hồi cần sinh","Number of images to generate":"Số ảnh cần sinh","Number of keys to create":"Số lượng khóa cần tạo","Number of times to retry failed requests (0-10)":"Số lần thá»­ lại các yêu cầu không thành công (0-10)","Number of tokens per unit quota":"Số token trên đơn vị hạn mức","Number of top log probabilities returned per token":"Số log probabilities hàng đá
107º§u trên mỗi token","Number of users invited":"Số người dùng được mời","OAuth Client ID":"ID Client OAuth","OAuth Client Secret":"Bí mật OAuth Client","OAuth failed":"OAuth thất bại","OAuth Integrations":"Tích hợp OAuth","Object Prune Rules":"Quy tắc dọn dẹp đối tượng","Observability":"Khả năng quan sát","Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.":"Lấy API key, mã thương gia và cặp khóa RSA từ bảng điều khiển Waffo, đồng thời cấu hình URL callback.","Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: <ServerAddress>/api/waffo-pancake/webhook":"Lấy merchant, store, product và khóa ký từ bảng điều khiển Waffo. Webhook: <ServerAddress>/api/waffo-pancake/webhook","Ocean Breeze":"Gió biển","of":"of","of 3:":"of 3:","off":"off","Official":"Chính thức","Official documentation":"Tài liệu chính thức","Official Repository":"Kho lưu trữ chính thức","Official Sync":"Official sync","OhMyGPT":"OhMyGPT","OIDC":"OIDC","OIDC Client ID":"Mã máy khách OIDC","OIDC Client Secret":"Mã bí mật ứng dụng khách OIDC","OIDC configuration fetched successfully":"Cấu hình OIDC đã được lấy thành công","OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.":"URL khám phá OIDC. Nhấp \\"Tá»± động khám phá\\" để tá»± động lấy các endpoint.","OIDC endpoints discovered successfully":"Đã khám phá thành công các endpoint OIDC","Old Format Template":"Mẫu Định dạng CÅ©","Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.":"Định dạng cÅ©: Ghi đè trá»±c tiếp. Định dạng mới: Hỗ trợ phán đoán có điều kiện và các thao tác JSON tùy chỉnh.","Ollama":"Ollama","Ollama Models":"Mô hình Ollama","One API":"Một API","One domain per line":"Một tên miền mỗi dòng","One domain per line (only used when domain restriction is enabled)":"Mỗi dòng một tên miền (chỉ được sá»­ dụng khi hạn chế tên miền được bật)","One IP or CIDR range per line":"Một IP hoặc dải CIDR mỗi dòng","One IP per line (empty for no restriction)":"Mỗi IP một dòng (để trống nếu không giới hạn)","one keyword per line":"Mỗi dòng một từ khóa","Online":"Trá»±c tuyến","Online payment is not enabled. Please contact the administrator.":"Thanh toán trá»±c tuyến chưa được kích hoạt. Vui lòng liên hệ quản trị viên.","Online topup is not enabled. Please use redemption code or contact administrator.":"Tính năng nạp tiền trá»±c tuyến chưa được bật. Vui lòng sá»­ dụng mã quy đổi hoặc liên hệ quản trị viên.","Only allow specific email domains":"Chỉ cho phép các tên miền email cụ thể","Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.":"Chỉ khả dụng cho quản trị viên. Khi bật, bạn sẽ nhận được thông báo tổng hợp qua phương thức đã chọn khi kiểm tra mô hình định kỳ phát hiện thay đổi mô hình nguồn hoặc lỗi kiểm tra.","Only configured combinations are overridden. All other calls keep the token group base ratio.":"Chỉ các tổ hợp đã cấu hình mới bị ghi đè. Các lệnh gọi khác giữ tá»· lệ cÆ¡ bản cá»§a nhóm token.","Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear."
107:"Chỉ các trường được chọn sẽ bị ghi đè. Bạn có thể chạy lại trình hướng dẫn đồng bộ hóa nếu có xung đột mới xuất hiện.","Only successful requests":"Chỉ các yêu cầu thành công","Only successful requests count toward this limit.":"Chỉ những yêu cầu thành công mới được tính vào giới hạn này.","Only the last {{value}} log files will be retained; the rest will be deleted.":"Chỉ giữ lại {{value}} tệp nhật ký gần nhất; phần còn lại sẽ bị xóa.","Oops! Page Not Found!":"Ối! Không tìm thấy trang!","Oops! Something went wrong":"Oops! An error occurred.","Open":"Mở","Open a source model first":"Mở một mô hình nguồn trước","Open CC Switch":"Mở công tắc CC","Open in chat":"Mở trong trò chuyện","Open in new tab":"Mở trong tab mới","Open in New Tab":"Mở trong tab mới","Open menu":"Mở menu","Open release":"Phát hành mở","Open source":"Mã nguồn mở","Open Source":"Mã nguồn mở","Open the io.net console API Keys page":"Mở trang Khóa API của console io.net","Open theme settings":"Mở cài đặt giao diện","Open weights":"Trọng số mở","OpenAI":"OpenAI","OpenAI Compatible":"Tương thích OpenAI","OpenAI Organization":"Tổ chức OpenAI","OpenAI Organization ID (optional)":"ID Tổ chức OpenAI (tùy chọn)","OpenAI, Anthropic, etc.":"OpenAI, Anthropic, v.v.","OpenAI, Anthropic, Google, etc.":"OpenAI, Anthropic, Google, v.v.","OpenAIMax":"OpenAIMax","OpenRouter":"OpenRouter","opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.":"mở trong một ứng dụng bên ngoài. Kích hoạt nó từ thanh bên hoặc các hành động khóa API để khởi chạy ứng dụng đã cấu hình.","Operation":"Thao tác","operation and charging behavior":"hành vi vận hành và thu phí","Operation Audit Info":"Thông tin kiểm toán thao tác","Operation failed":"Thao tác thất bại","Operation successful":"Thao tác thành công","Operation Type":"Loại thao tác","Operations":"Vận hành","Operator Admin":"Quản trị viên vận hành","Optimize system for self-hosted single-user usage":"Tối ưu hóa hệ thống cho việc sử dụng đơn người dùng tự lưu trữ","Optimized network architecture ensures millisecond response times":"Kiến trúc mạng tối ưu đảm bảo thời gian phản hồi mili giây","Optional callback override. Leave blank to use server address":"Tùy chọn ghi đè callback. Để trống để sử dụng địa chỉ máy chủ","Optional icon identifier for the login button":"Định danh biểu tượng tùy chọn cho nút đăng nhập","Optional JSON policy to restrict access based on user info fields":"Chính sách JSON tùy chọn để hạn chế truy cập dựa trên các trường thông tin người dùng","Optional minimum recharge amount for this method.":"Số tiền nạp tối thiểu tùy chọn cho phương thức này.","Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as":"Hệ số nhân tùy chọn cho mỗi nhóm người dùng, được sử dụng khi tính toán giá nạp tiền. Cung cấp một đối tượng JSON như","Optional notes about this channel":"Ghi chú tùy chọn về kênh này","Optional notes about when to use this group":"Các ghi chú tùy chọn về thời điểm sử dụng nhóm này","Optional ratio used when upstream cache hits occur.":"Tỷ lệ tùy chọn được sử dụng khi xảy ra các lượt truy cập bộ nhớ đệm ngược dòng.","Optional rule description":"Mô tả quy tắc tùy chọn","Optional settings for advanced container configuration.":"Cài đặt tùy chọn cho cấu hình container nâng cao.","Optional supplementary information (max 100 characters)":"Thông tin bổ sung tùy chọn (tối đa 100 ký tự)","Optional tag for grouping channels":"Thẻ tùy chọn để nhóm kênh","Opus Model":"Mô hình Opus","Or continue with":"Hoặc tiếp tục với","Or enter this key manually:":"Hoặc nhập khóa này thủ công:","or pick existing":"hoặc chọn cặp hiện có","Order completed successfully":"Đơn hàng đã hoàn thành thành công","Order History":"Lịch sử đơn hàng","Order Payment Method":"Phương thức thanh toán đơn hàng","org-...":"org-...","Original Model":"Nguyên mẫu","Other":"Khác","Outage":"Gián đoạn","Output":"Đầu ra","Output aspect ratio":"Tỉ lệ khung hình","Output image size":"Kích thước ảnh đầu ra","Output price":"Giá đầu ra","Output token price for generated tokens.":"Giá token đầu ra cho nội dung được tạo.","Output tokens":"Token đầu ra","Output Tokens":"Token đầu ra","overall":"tổng","Over
107night range":"Khoảng qua nửa đêm","override":"ghi đè","Override":"Ghi đè","Override auto-discovered endpoint":"Ghi đè điểm cuối tự động phát hiện","Override request headers":"Ghi đè tiêu đề yêu cầu","Override request headers (JSON format)":"Ghi đè tiêu đề yêu cầu (định dạng JSON)","Override request parameters":"Ghi đè tham số yêu cầu","Override request parameters (JSON format)":"Ghi đè tham số yêu cầu (định dạng JSON)","Override request parameters. Cannot override":"Ghi đè tham số yêu cầu. Không thể ghi đè","Override request parameters. Cannot override stream parameter.":"Ghi đè tham số yêu cầu. Không thể ghi đè tham số stream.","Override Rules":"Quy tắc ghi đè","Override the endpoint used for testing. Leave empty to auto detect.":"Ghi đè điểm cuối dùng để kiểm thử. Để trống để tự động phát hiện.","overrides for matching model prefix.":"ghi đè theo tiền tố model tương ứng.","Overrode user quota from {{from}} to {{to}}":"Đã ghi đè hạn mức người dùng từ {{from}} thành {{to}}","Overview":"Tổng quan","Overwritten":"Đã ghi đè","Page":"Trang","Page {{current}} of {{total}}":"Trang {{current}} / {{total}}","PaLM":"PaLM","Pan":"Pan","Pancake":"Pancake","Param Override":"Ghi đè tham số","Parameter":"Tham số","Parameter configuration error":"Lỗi cấu hình tham số","Parameter Override":"Ghi đè Tham số","Parameter override must be a valid JSON object":"Ghi đè tham số phải là đối tượng JSON hợp lệ","Parameter override must be valid JSON format":"Ghi đè tham số phải ở định dạng JSON hợp lệ","Parameter Override Template (JSON)":"Mẫu ghi đè tham số (JSON)","Parameter override template must be a JSON object":"Mẫu ghi đè tham số phải là đối tượng JSON","parameter.":"tham số","Parameters":"Tham số","Parsed {{count}} service account file(s)":"Đã phân tích {{count}} tệp tài khoản dịch vụ","Partial Submission":"Gửi một phần","Pass Headers":"Chuyển tiếp tiêu đề","Pass request body directly to upstream":"Truyền phần thân yêu cầu trực tiếp lên upstream","Pass specified request headers to upstream":"Chuyển tiếp header yêu cầu chỉ định lên upstream","Pass Through Body":"Xuyên qua cơ thể","Pass Through Headers":"Truyền header qua","Pass through the anthropic-beta header for beta features":"Chuyển tiếp header anthropic-beta cho tính năng beta","Pass through the include field for usage obfuscation":"Chuyển tiếp trường include cho che giấu sử dụng","Pass through the inference_geo field for Claude data residency region control":"Chuyển tiếp trường inference_geo để kiểm soát vùng lưu trữ dữ liệu Claude","Pass through the inference_geo field for geographic routing":"Chuyển tiếp trường inference_geo cho định tuyến địa lý","Pass through the safety_identifier field":"Chuyển tiếp trường safety_identifier","Pass through the service_tier field":"Chuyển tiếp trường service_tier","Pass through the speed field for Claude inference speed mode control":"Chuyển tiếp trường speed để kiểm soát chế độ tốc độ suy luận Claude","Pass when key is missing":"Cho qua khi thiếu khóa","Pass-Through":"Chuyển tiếp","Pass-through Headers (comma-separated or JSON array)":"Header chuyển tiếp (phân cách bằng dấu phẩy hoặc mảng JSON)","Passkey":"Khóa truy cập","Passkey Authentication":"Xác thực khóa truy cập","Passkey is not available in this browser":"Passkey không khả dụng trong trình duyệt này","Passkey is not supported in this environment":"Passkey không được hỗ trợ trong môi trường này","Passkey is not supported on this device":"Passkey không được hỗ trợ trên thiết bị này","Passkey is not supported on this device.":"Khóa truy cập không được hỗ trợ trên thiết bị này.","Passkey Login":"Đăng nhập bằng khóa truy cập","Passkey login failed":"Đăng nhập Passkey thất bại","Passkey login was cancelled":"Đăng nhập Passkey đã bị hủy","Passkey login was cancelled or timed out":"Đăng nhập Passkey đã bị hủy hoặc hết thời gian","Passkey not supported on this device":"Khóa truy cập không được hỗ trợ trên thiết bị này","Passkey registered successfully":"Passkey đã được đăng ký thành công","Passkey registration was cancelled":"Đăng ký Passkey đã bị hủy","Passkey removed successfully":"Đã xóa Passkey thành công","Passkey reset successfully":"Đặt lại Passkey thành công","Passthrough Template":"Mẫu truyền qua","Password":"Mật khẩu","Password / A
107ccess Token":"Mật khẩu / Access Token","Password changed successfully":"Đổi mật khẩu thành công","Password copied to clipboard: {{password}}":"Mật khẩu đã sao chép vào clipboard: {{password}}","Password has been copied to clipboard":"Mật khẩu đã được sao chép vào bộ nhớ tạm","Password Login":"Đăng nhập bằng mật khẩu","Password must be at least 8 characters":"Mật khẩu phải có ít nhất 8 ký tự","Password must be at least 8 characters long":"Mật khẩu phải có ít nhất 8 ký tự","Password Registration":"Đăng ký mật khẩu","Password reset and copied to clipboard: {{password}}":"Mật khẩu đã đặt lại và sao chép vào clipboard: {{password}}","Password reset: {{password}}":"Mật khẩu đã đặt lại: {{password}}","Passwords do not match":"Mật khẩu không khớp","Path":"Đường dẫn","Path not set":"Chưa đặt đường dẫn","Path Regex (one per line)":"Regex đường dẫn (mỗi dòng một mục)","Path:":"Đường dẫn:","Pay":"Pay","Pay with Balance":"Thanh toán bằng số dư","Pay-as-you-go with real-time usage monitoring":"Thanh toán theo mức sử dụng với theo dõi mức sử dụng theo thời gian thực","Payment":"Thanh toán","Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.":"Chế độ tổng hợp thanh toán — đăng ký bằng công ty đã đăng ký của bạn (pháp nhân offshore). Dành cho doanh nghiệp.","Payment Channel":"Kênh thanh toán","Payment Gateway":"Cổng thanh toán","Payment initiated":"Đã khởi tạo thanh toán","Payment Method":"Phương thức thanh toán","Payment method name":"Tên phương thức thanh toán","Payment method name is required":"Tên phương thức thanh toán là bắt buộc","Payment method type":"Loại phương thức thanh toán","Payment method type is required":"Loại phương thức thanh toán là bắt buộc","Payment methods":"Phương thức thanh toán","Payment Methods":"Phương thức thanh toán","Payment page opened":"Đã mở trang thanh toán","Payment request failed":"Yêu cầu thanh toán thất bại","Payment return URL":"URL trả về thanh toán","Payment return URL is empty. Create the product without a SuccessURL redirect?":"URL trả về thanh toán đang trống. Tạo sản phẩm mà không có chuyển hướng SuccessURL?","Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.":"Thanh toán, mã đổi thưởng, gói đăng ký và phần thưởng mời sẽ bị khóa cho đến khi quản trị viên root xác nhận điều khoản tuân thủ.","Peak":"Đỉnh","Peak throughput":"Thông lượng đỉnh","Penalises repetition of frequent tokens":"Phạt việc lặp các token phổ biến","Pending":"Đang chờ","per":"per","Per 1K tokens":"Mỗi 1K tokens","Per 1M tokens":"Mỗi 1M tokens","per request":"theo yêu cầu","Per request":"Mỗi yêu cầu","Per Request":"Theo yêu cầu","Per-call":"Mỗi lần gọi","Per-feature metered windows split by model or capability.":"Cửa sổ tính phí theo từng tính năng, tách theo mô hình hoặc năng lực.","Per-group performance":"Hiệu năng theo nhóm","Per-request":"Theo yêu cầu","Per-request (fixed price)":"Theo yêu cầu (giá cố định)","Per-token":"Theo token","Per-token (ratio based)":"Mỗi token (dựa trên tỷ lệ)","Per-token logit bias map":"Bảng logit bias theo token","Percentage:":"Phần trăm:","Performance":"Hiệu suất","Performance data is not yet available for this model.":"Chưa có dữ liệu hiệu năng cho mô hình này.","Performance health":"Tình trạng hiệu suất","Performance metrics for the last 24 hours":"Chỉ số hiệu năng trong 24 giờ qua","Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.":"Các chỉ số hiệu năng hiển thị tại đây là dữ liệu mô phỏng để xem trước và sẽ được thay thế bằng dữ liệu thực sau khi tích hợp backend.","Performance Monitor":"Giám sát hiệu suất","Performance Settings":"Cài đặt hiệu suất","Performed {{action}} on user {{username}} (ID: {{id}})":"Đã thực hiện {{action}} trên người dùng {{username}} (ID: {{id}})","Period":"Khoảng thời gian","Periodically check for upstream model changes":"Kiểm tra định kỳ các thay đổi mô hình nguồn","Periodically send ping frames to keep streaming connections active.":"Định kỳ gửi các khung ping để duy trì các kết nối truyền phát hoạt động.","Permanently delete your account and all data":"Xóa vĩnh viễn tài khoản của bạn và tất cả dữ liệu","Permit Passkey registration on non-HTTPS origins (only recommended for development)":"Cho phép đăng ký Passkey trên các nguồn gốc không phải HTTPS (chỉ khuyến nghị cho mục đích phát triển)","Perplexity":"Sự bối rối","Persist your data file":"Lưu trữ tệp dữ liệu của bạn","Personal":"Cá nhân","Personal area":"Khu vực cá nhân","Personal Center Area":"Khu vực cá nhân","Personal info settings":"Cài đặt thông tin cá nhân","Personal Settings":"Cài đặt cá nhân","Personal settings and profile management."
107:"Cài đặt cá nhân và quản lý hồ sơ.","Personal use":"Sử dụng cá nhân","Personal use mode":"Chế độ sử dụng cá nhân","Pick a date":"Chọn ngày","Pick or create both a store and a product before saving.":"Hãy chọn hoặc tạo cả cửa hàng và sản phẩm trước khi lưu.","Ping Interval (seconds)":"Thời gian Ping (giây)","Plan":"Gói","Plan Name":"Tên gói","Plan price must be greater than zero":"Giá gói phải lớn hơn 0","Plan Subtitle":"Phụ đề gói","Plan Title":"Tiêu đề gói","Plan title is required":"Tiêu đề gói là bắt buộc","Planned maintenance on Friday at 22:00 UTC...":"Bảo trì theo kế hoạch vào thứ Sáu lúc 22:00 UTC...","Platform":"Nền tảng","Playground":"Sân chơi","Playground and chat functions":"Chức năng sân chơi và trò chuyện","Playground experiments and live conversations.":"Các thí nghiệm Playground và trò chuyện trực tiếp.","Please agree to the legal terms first":"Vui lòng đồng ý với các điều khoản pháp lý trước","Please complete the security check to continue.":"Vui lòng hoàn thành kiểm tra bảo mật để tiếp tục.","Please confirm that you understand the consequences":"Vui lòng xác nhận rằng bạn hiểu hậu quả","Please enable io.net model deployment service and configure an API key in System Settings.":"Vui lòng bật dịch vụ triển khai mô hình io.net và cấu hình khóa API trong Cài đặt hệ thống.","Please enable Two-factor Authentication or Passkey before proceeding":"Vui lòng bật Xác thực hai yếu tố hoặc Passkey trước khi tiếp tục","Please enter a name":"Vui lòng nhập tên","Please enter a new password":"Vui lòng nhập mật khẩu mới","Please enter a redemption code":"Vui lòng nhập mã đổi thưởng","Please enter a valid duration":"Vui lòng nhập thời lượng hợp lệ","Please enter a valid email address":"Vui lòng nhập địa chỉ email hợp lệ","Please enter a valid number":"Vui lòng nhập một số hợp lệ","Please enter a Well-Known URL first":"Vui lòng nhập URL Well-Known trước","Please enter amount":"Vui lòng nhập số tiền","Please enter an administrator username":"Vui lòng nhập tên người dùng quản trị viên","Please enter API key first":"Vui lòng nhập khóa API trước","Please enter chat client name":"Vui lòng nhập tên ứng dụng chat","Please enter email and verification code":"Vui lòng nhập email và mã xác thực","Please enter keys first":"Vui lòng nhập các khóa trước","Please enter model name":"Vui lòng nhập ID hoặc tên mô hình.","Please enter plan title":"Vui lòng nhập tên gói","Please enter the authentication code.":"Vui lòng nhập mã xác thực.","Please enter the URL":"Vui lòng nhập URL","Please enter the verification code":"Vui lòng nhập mã xác minh","Please enter your current password":"Vui lòng nhập mật khẩu hiện tại của bạn","Please enter your email":"Vui lòng nhập email của bạn","Please enter your email first":"Vui lòng nhập email trước","Please enter your verification code":"Vui lòng nhập mã xác thực của bạn","Please enter your verification code or backup code":"Vui lòng nhập mã xác thực hoặc mã dự phòng của bạn","Please fix JSON errors before saving":"Vui lòng sửa lỗi JSON trước khi lưu","Please fix the highlighted fields before saving":"Vui lòng sửa các trường được đánh dấu trước khi lưu","Please log in with the appropriate credentials":"Vui lòng đăng nhập bằng thông tin xác thực phù hợp","Please select a container":"Vui lòng chọn một container","Please select a payment method":"Vui lòng chọn phương thức thanh toán","Please select a primary model":"Vui lòng chọn một mô hình chính","Please select a subscription plan":"Vui lòng chọn gói đăng ký","Please select at least one channel":"Vui lòng chọn ít nhất một kênh","Please select at least one model":"Vui lòng chọn ít nhất một mô hình","Please select items to delete":"Vui lòng chọn các mục để xóa","Please Select user groups that can access this channel."
107:"Vui lòng chọn nhóm người dùng có thể truy cập kênh này.","Please set Ollama API Base URL first":"Vui lòng đặt URL cÆ¡ sở API Ollama trước","Please sign in to view {{module}}.":"Vui lòng đăng nhập để xem {{module}}.","Please try again later.":"Vui lòng thá»­ lại sau.","Please type the following text to confirm:":"Vui lòng nhập văn bản sau để xác nhận:","Please upload key file(s)":"Vui lòng tải lên (các) tệp khóa","Please wait a moment before trying again.":"Vui lòng chờ một lát rồi thá»­ lại.","Please wait a moment, human check is initializing...":"Vui lòng đợi một chút, kiểm tra con người đang khởi tạo...","Please wait before editing to avoid overwriting saved values.":"Vui lòng chờ trước khi chỉnh sá»­a để tránh ghi đè các giá trị đã lưu.","Policy JSON":"JSON chính sách","Polling":"Thăm dò","Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded":"Chế độ thăm dò yêu cầu Redis và bộ nhớ đệm, nếu không hiệu suất sẽ bị suy giảm đáng kể.","Poor":"Nghèo","Port":"Cảng","Port must be a positive integer":"Cổng phải là số nguyên dương","Post Delta":"Chênh lệch sau","PostgreSQL detected":"Phát hiện PostgreSQL","PostgreSQL offers advanced reliability and data integrity for production workloads.":"PostgreSQL cung cấp độ tin cậy cao và tính toàn vẹn dữ liệu cho khối lượng công việc production.","PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.":"PostgreSQL cung cấp các đảm bảo độ tin cậy cao. Hãy kiểm tra kỹ lưỡng cá»­a sổ bảo trì và các chính sách lưu giữ cá»§a bạn trước khi vận hành chính thức.","Power AI applications, manage digital assets, connect the Future":"Vận hành ứng dụng AI, quản lý tài sản số, kết nối Tương lai","Powerful API Management Platform":"Nền tảng Quản lý API mạnh mẽ","Pre-Consume for Free Models":"Dùng trước các mô hình miễn phí","Pre-consumed":"Khấu trừ trước","Pre-Consumed Quota":"Hạn mức đã tiêu thụ trước","Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.":"Tùy chọn đã lưu là {{pref}}, nhưng không có gói đăng ký đang hoạt động. Ví sẽ được sá»­ dụng tá»± động.","Preferences":"Tùy chọn","Prefill Group Management":"Quản lý Nhóm Điền sẵn","Prefill Groups":"Điền sẵn các nhóm","Prefill groups help you keep complex configurations in sync.":"Nhóm điền trước giúp bạn giữ các cấu hình phức tạp đồng bộ.","Prefix":"Tiền tố","Prefix Match":"Khớp tiền tố","Prefix used when displaying prices":"Tiền tố được sá»­ dụng khi hiển thị giá","Prefix/Suffix Text":"Văn bản tiền tố/hậu tố","Premium chat models":"Mô hình chat cao cấp","Premium plan, half price":"Gói premium, ná»­a giá","Preparing chat keys…":"Đang chuẩn bị khóa trò chuyện…","Preparing your chat link, please try again in a moment.":"Đang chuẩn bị liên kết trò chuyện cá»§a bạn, vui lòng thá»­ lại trong giây lát.","Preparing your chat link…":"Đang chuẩn bị liên kết trò chuyện cá»§a bạn…","Prepend":"Thêm vào đầu","Prepend to Start":"Thêm vào đầu","Prepend value to array / string / object start":"Thêm giá trị vào đầu mảng / chuỗi / đối tượng","Preserve the original field when applying this rule":"Giữ trường gốc khi áp dụng quy tắc này","Preset groups":"Nhóm đặt sẵn","Preset recharge amounts (JSON array)":"Số tiền nạp đặt trước (mảng JSON)","Preset recharge amounts displayed to users":"Các mức nạp tiền đặt trước hiển thị cho người dùng","Preset Template":"Mẫu cài sẵn","Preset templates":"Mẫu sẵn","preset.anthropic":"Anthropic","preset.default":"Mặc định","preset.forest-whisper":"Thì thầm rừng","preset.lake-view":"Hồ nước","preset.lavender-dream":"Giấc mÆ¡ oải hương","preset.ocean-breeze":"Gió biển","preset.rose-garden":"Vườn hồng","preset.simple-large":"Chữ lớn & Đơn giản","preset.sunset-glow":"Hoàng hôn","preset.underground":"Bóng đêm","Press Enter or comma to add tags":"Nhấn Enter hoặc dấu phẩy để thêm thẻ","Press Enter to use \\"{{value}}\\"":"Nhấn Enter để dùng \\"{{value}}\\"","Prevent server-side request forgery attacks":"Ngăn chặn các cuộc tấn công giả mạo yêu cầu phía máy chá»
107§","Preview":"Xem trước","Previous":"Trước","Previous branch":"Nhánh trước","Previous page":"Trang trước","Price":"Giá","Price ($/1K calls)":"Giá ($/1K lượt gọi)","Price (local currency / USD)":"Giá (tiền tệ địa phương / USD)","Price display":"Hiển thị giá","Price display mode":"Chế độ hiển thị giá","Price estimation":"Ước tính chi phí","Price estimation description":"Sau khi hoàn thành loại phần cứng, vị trí triển khai, số lượng bản sao, v.v., giá sẽ được tính toán tá»± động.","Price ID":"Mã giá","Price mode (USD per 1M tokens)":"Chế độ giá (USD mỗi 1 triệu token)","Price summary":"Tóm tắt giá","price_xxx":"price_xxx","Price:":"Giá:","Price: High to Low":"Giá: Từ cao đến thấp","Price: Low to High":"Giá: Thấp đến Cao","Prices shown per":"Giá hiển thị theo","Prices synced successfully":"Đồng bộ giá thành công","Prices vary by usage tier and request conditions":"Giá thay đổi theo bậc dùng và điều kiện yêu cầu","Pricing":"Giá cả","Pricing & Display":"Giá cả & Hiển thị","Pricing by Group":"Giá theo Nhóm","Pricing Configuration":"Price configuration","Pricing group example":"Ví dụ nhóm định giá","Pricing groups":"Nhóm định giá","Pricing mode":"Chế độ định giá","Pricing Ratios":"Tá»· lệ định giá","Pricing Type":"Price type","Primary Model":"Mô hình chính","Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)":"Ưu tiên sá»­ dụng lại kênh thành công gần nhất dá»±a trên các khóa trích xuất từ ngữ cảnh yêu cầu (định tuyến dính)","Priority":"Ưu tiên","Priority (Default)":"Ưu tiên (Mặc định)","Priority level from 0 (lowest) to 10 (highest), default is 5":"Mức độ ưu tiên từ 0 (thấp nhất) đến 10 (cao nhất), mặc định là 5","Priority order for automatic group assignment. New tokens rotate through this list.":"Thứ tá»± ưu tiên cho việc gán nhóm tá»± động. Các token mới sẽ luân phiên qua danh sách này.","Privacy Policy":"Chính sách quyền riêng tư","Private Deployment URL":"URL Triển khai Riêng","Processing OAuth response...":"Đang xá»­ lý phản hồi OAuth...","Processing...":"Đang xá»­ lý...","Product":"Sản phẩm","Product ID":"ID sản phẩm","Product ID is required":"Bắt buộc 
107nhập Product ID","Product Name":"Tên sản phẩm","Productivity":"Năng suất","Products":"Sản phẩm","Professional team providing 24/7 technical support":"Đội ngũ chuyên nghiệp cung cấp hỗ trợ kỹ thuật 24/7","Profile":"Hồ sơ","Profile updated successfully":"Hồ sơ đã được cập nhật thành công","Programming":"Lập trình","Progress":"Tiến độ","Project":"Dự án","Promote":"Thúc đẩy","Promotion codes":"Mã khuyến mãi","Prompt":"Lời nhắc","Prompt (EN)":"Lời nhắc (EN)","Prompt cache ratio":"Tỷ lệ bộ nhớ đệm lời nhắc","Prompt caching":"Bộ nhớ đệm lời nhắc","Prompt Caching":"Bộ đệm lời nhắc","Prompt Details":"Chi tiết lời nhắc","Prompt price ($/1M tokens)":"Giá prompt ($/1 triệu token)","Proprietary":"Độc quyền","Provide a JSON object where each key maps to an endpoint definition.":"Cung cấp một đối tượng JSON nơi mỗi khóa ánh xạ đến một định nghĩa điểm cuối.","Provide a valid URL starting with http:// or https://":"Cung cấp URL hợp lệ bắt đầu bằng http:// hoặc https://","Provide Markdown, HTML, or an external URL for the privacy policy":"Cung cấp Markdown, HTML, hoặc một URL bên ngoài cho chính sách quyền riêng tư","Provide Markdown, HTML, or an external URL for the user agreement":"Cung cấp Markdown, HTML, hoặc một URL bên ngoài cho thỏa thuận người dùng","Provide per-category safety overrides as JSON. Use `default` for fallback values.":"Cung cấp các ghi đè an toàn theo từng danh mục dưới dạng JSON. Sử dụng `default` cho các giá trị dự phòng.","Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.":"Cung cấp các ghi đè tiêu đề theo từng mô hình dưới dạng JSON. Hữu ích để bật các tính năng beta như cửa sổ ngữ cảnh mở rộng.","Provider":"Nhà cung cấp","Provider & data privacy":"Nhà cung cấp & quyền riêng tư","Provider created successfully":"Đã tạo nhà cung cấp thành công","Provider deleted successfully":"Đã xóa nhà cung cấp thành công","Provider Name":"Tên Nhà cung cấp","Provider type (OpenAI, Anthropic, etc.)":"Loại nhà cung cấp (OpenAI, Anthropic, v.v.)","Provider updated successfully":"Nhà cung cấp đã được cập nhật thành công","Provider-specific endpoint, account, and compatibility settings.":"Thiết lập endpoint, tài khoản và tương thích riêng cho nhà cung cấp.","Proxy Address":"Địa chỉ Proxy","Prune Object Items":"Dọn mục đối tượng","Prune object items by conditions":"Dọn dẹp các mục đối tượng theo điều kiện","Prune Rule (string or JSON object)":"Quy tắc dọn dẹp (chuỗi hoặc đối tượng JSON)","Public model catalog and pricing page.":"Trang công khai cho danh mục mô hình và giá.","Public rankings page based on live usage data.":"Trang bảng xếp hạng công khai dựa trên dữ liệu sử dụng thực.","Publish Date":"Ngày xuất bản","Published":"Đã xuất bản","Published models, groups, and model remapping rules.":"Các mô hình đã xuất bản, nhóm và quy tắc ánh xạ lại mô hình.","Published:":"Đã xuất bản:","Pull":"Tải","Pull model":"Tải mô hình","Pulling...":"Đang tải...","Purchase Limit":"Giới hạn mua","Purchase limit reached":"Đã đạt giới hạn mua","Purchase Subscription":"Mua gói đăng ký","QR Code Image URL":"Đường dẫn URL hình ảnh mã QR","QR code is not configured. Please contact support.":"Mã QR chưa được cấu hình. Vui lòng liên hệ bộ phận hỗ trợ.","Quantity":"Số lượng","QuantumNous":"QuantumNous","Query Balance":"Truy vấn số dư","Query Param":"Query param","Querying...":"Đang truy vấn...","Question":"Câu hỏi","Queued":"Trong hàng đợi","Quick actions":"Thao tác nhanh","Quick insert common payment methods":"Chèn nhanh các phương thức thanh toán phổ biến","Quick Range":"Phạm vi nhanh","Quick Setup from Preset":"Thiết lập nhanh từ cấu hình sẵn","Quota":"Hạn ngạch","Quota ({{currency}})":"Hạn mức ({{currency}})","Quota adjusted successfully":"Điều chỉnh hạn mức thành công","Quota consumed before charging users":"Hạn mức tiêu thụ trước khi tính phí người dùng","Quota Distribution":"Phân bổ hạn ngạch","Quota given to invited users":"Hạn mức được cấp cho người dùng được mời","Quota given to users who invite others":"Limit for users inviting others","Quota must be a positive number":"Hạn mức phải là một số dương","Quota must be zero or greater":"Hạn mức không được âm","Quota Per Unit":"Định mức mỗi đơn vị","Quota reminder (tokens)":"Nhắc nhở hạn mức (token)","Quota Reset":"Đặt lại hạn mức","Quota Settings":"Cài đặt Hạn mức","Quota Types":"Các loại hạn ngạch","Quota Warning Threshold":"Ngưỡng cảnh báo hạn mức","Quota:":"Hạn ngạch:","Radius":"Bo góc","Random":"Ngẫu nhiên","Randomly select a key from the pool for each request":"Chọn ngẫu nhiên một khóa từ kho cho mỗi yêu cầu","Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.":"Dữ liệu xếp hạng hiện đang được mô phỏng để xem trước và sẽ được thay bằng dữ liệu thực sau khi tích hợp backend.","Rankings":"Bảng xếp hạng","Rate Limit Windows":"Cửa sổ giới hạn tốc độ","Rate Limited":"Giới hạn tốc độ","Rate Limiting":"Rate limit","Rate limits":"Giới hạn tốc độ","Ratio":"Tỷ lệ","Ratio applied to audio completions for streaming models.":"Tỷ lệ áp dụng cho các phần hoàn tất âm thanh của các mô hình phát trực tuyến.","Ratio applied to audio inputs where supported by the upstream model.":"Tỷ lệ áp dụng cho đầu vào âm thanh nếu được mô hình thượng nguồn hỗ trợ.","Ratio applied when creating cache entries for supported models.":"Hệ số nhân được áp dụng khi tạo mục cache 
107cho các mô hình được hỗ trợ.","Ratio mode":"Chế độ tỷ lệ","Ratio Type":"Rate type","Ratio: {{value}}":"Tỷ lệ: {{value}}","Ratios synced successfully":"Tỷ lệ đã đồng bộ thành công","Raw expression":"Biểu thức gốc","Raw JSON":"JSON thô","Raw Quota":"Hạn mức gốc","Re-enable on success":"Kích hoạt lại khi thành công","Re-login":"Đăng nhập lại","Ready":"Sẵn sàng","Ready to initialize":"Sẵn sàng khởi tạo","Ready to simplify":"Sẵn sàng đơn giản hóa","Real exchange rate between USD and your payment gateway currency":"Tỷ giá hối đoái thực giữa USD và tiền tệ của cổng thanh toán của bạn","Reason":"Lý do","Reason:":"Lý do:","Reasoning":"Lý luận","Reasoning Effort":"Cường độ suy luận","Receive Upstream Model Update Notifications":"Nhận thông báo cập nhật mô hình nguồn","Received":"Đã nhận","Recently launched models":"Các mô hình ra mắt gần đây","Recently launched models gaining traction":"Mô hình mới phát hành đang được ưa chuộng","Recharge":"Nạp lại","Recharge Amount":"Số tiền nạp","Recharge Amount (USD)":"Số tiền nạp (USD)","Recommended":"Đề xuất","Recommended actions":"Hành động đề xuất","Recommended to keep this high to avoid upstream throttling.":"Khuyến nghị giữ mức này cao để tránh điều tiết từ phía thượng nguồn.","Record IP Address":"Ghi lại địa chỉ IP","Record quota usage":"Ghi lại mức sử dụng hạn mức","Recursion Strategy":"Chiến lược đệ quy","Recursive":"Đệ quy","Redeem":"Đổi","Redeem codes":"Đổi mã","Redeemed By":"Được chuộc bởi","Redeemed:":"Đã đổi:","Received amount":"Số tiền đã nhận","redemption code":"mã đổi thưởng","Redemption Code":"Mã đổi thưởng","Redemption code deleted successfully":"Mã đổi thưởng đã xóa thành công","Redemption code disabled successfully":"Mã đổi thưởng đã vô hiệu hóa thành công","Redemption code enabled successfully":"Mã đổi thưởng đã kích hoạt thành công.","Redemption code updated successfully":"Mã đổi thưởng đã cập nhật thành công","Redemption code(s) created successfully":"Mã đổi thưởng đã tạo thành công","Redemption Codes":"Mã đổi thưởng","Redemption codes are disabled until the administrator confirms compliance terms.":"Mã đổi thưởng bị tắt cho đến khi quản trị viên xác nhận điều khoản tuân thủ.","redemption codes.":"Mã đổi thưởng","Redemption failed":"Đổi thưởng thất bại","Redemption successful! Added: {{quota}}":"Đổi mã thành công! Đã thêm: {{quota}}","Redirecting to chat page...":"Đang chuyển hướng đến trang trò chuyện...","Redirecting to Creem checkout...":"Đang chuyển hướng đến thanh toán Creem...","Redirecting to GitHub...":"Đang chuyển hướng đến GitHub...","Redirecting to payment page...":"Đang chuyển hướng đến trang thanh toán...","Redirecting to sign in in {{seconds}} seconds.":"Đang chuyển đến trang đăng nhập sau {{seconds}} giây.","Reference Video":"Video tham chiếu","Referral link:":"Liên kết giới thiệu:","Referral Program":"Chương trình Giới thiệu","Referral reward transfer is disabled until the administrator confirms compliance terms.":"Chuyển phần thưởng giới thiệu bị tắt cho đến khi quản trị viên xác nhận điều khoản tuân thủ.","Refine models by provider, group, type, and tags.":"Tinh chỉnh mô hình theo nhà cung cấp, nhóm, loại và thẻ.","Refresh":"Làm mới","Refresh Cache":"Làm mới bộ nhớ đệm","Refresh credential":"Làm mới thông tin xác thực","Refresh failed":"Làm mới thất bại","Refresh interval (minutes)":"Khoảng thời gian làm mới (phút)","Refresh Stats":"Làm mới thống kê","Refreshing...":"Đang làm mới...","Refund":"Hoàn tiền","Refund Details":"Chi tiết hoàn tiền","Regenerate":"Tạo lại","Regenerate Backup Codes":"Tạo lại Mã dự phòng","Regex":"Biểu thức chính quy","Regex Pattern":"Mẫu biểu thức chính quy","Regex Replace":"Thay thế regex","Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.":"Đăng ký từng URL vào ô webhook Test Mode / Production Mode tương ứng trong bảng điều khiển Pancake. Endpoint riêng biệt giúp tránh việc lưu lượng thử nghiệm vô tình cộng tiền vào tài khoản sản xuất.","Register Passkey":"Đăng ký Passkey","Registered a passkey":"Đã đăng ký một passkey","Registration Enabled":"Đăng ký đã bật","Registry (optional)":"Registry (tùy chọn)","Registry secret":"Bí mật Registry","Registry username":"Tên người dùng Registry","Reject Reason":"Lý do từ chối","Release details":"Chi tiết phiên bản","Released":"Phát hành","Relying Party Display Name":"Tên Hiển Thị của Bên Tin Cậy","Relying Party ID":"Định danh Bên phụ thuộc","Remaining":"Còn lại","Remaining quota":"Hạn ngạch còn lại","Remaining Quota ({{currency}})":"Hạn mức còn lại ({{currency}})","Remaining quota units":"Đơn vị hạn ngạch còn lại","Remaining:":"Còn lại:","Remark":"Nhận xét","Remove":"Xóa","Remove {{value}}":"Xóa {{value}}","Remove ${{amount}}":"Xóa ${{amount}}","Remove all log entries created before the selected timestamp.":"Xóa tất cả các mục nhật ký được tạo trước mốc thời gian đã chọn.","Remove attachment":"Xóa tệp đính kèm","Remove c
107ondition":"Gỡ điều kiện","Remove Duplicates":"Xóa trùng lặp","Remove filter":"Xóa bộ lọc","Remove functionResponse.id field":"Loại bỏ trường functionResponse.id","Remove mapped targets":"Xóa đích đã ánh xạ","Remove Models":"Xóa mô hình","Remove Passkey":"Xóa Khóa truy cập","Remove Passkey?":"Xóa khóa truy cập?","Remove rule group":"Gỡ nhóm quy tắc","Remove string prefix":"Xóa tiền tố chuỗi","Remove string suffix":"Xóa hậu tố chuỗi","Remove the target field":"Xóa trường đích","Remove tier":"Gỡ bậc","Removed":"Đã xóa","Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}":"Đã xóa {{removed}} khóa trùng lặp. Trước: {{before}}, Sau: {{after}}","Removed an OAuth binding for the user":"Đã gỡ một liên kết OAuth cá»§a người dùng","Removed Models ({{count}})":"Các mô hình đã xóa ({{count}})","Removes Midjourney flags such as --fast, --relax, and --turbo from user prompts.":"Loại bỏ các cờ Midjourney như --fast, --relax và --turbo khỏi lời nhắc cá»§a người dùng.","Removing Passkey will require you to sign in with your password next time. You can re-register anytime.":"Xóa Khóa truy cập sẽ yêu cầu bạn đăng nhập bằng mật khẩu cá»§a mình vào lần tới. Bạn có thể đăng ký lại bất cứ lúc nào.","Rename":"Đổi tên","Rename deployment":"Đổi tên deployment","Rename failed":"Đổi tên thất bại","Renamed successfully":"Đổi tên thành công","Repeat the administrator password":"Nhập lại mật khẩu quản trị viên","Replace":"Thay thế","Replace all existing keys":"Thay thế tất cả các khóa hiện có","Replace channel models":"Thay thế mô hình kênh","Replace mode: Will completely replace all existing keys":"Chế độ Thay thế: Sẽ thay thế hoàn toàn tất cả các khóa hiện có","Replace With":"Thay bằng","replaced":"thay thế","Replacement Model":"Replacement model","Replica count":"Số bản sao","Replicate":"Sao chép","Report an issue":"Báo cáo sá»± cố","request":"yêu cầu","Request":"Yêu cầu","Request Body Disk Cache":"Bộ nhớ đệm đĩa nội dung yêu cầu","Request Body Field":"Trường thân yêu cầu","Request Body Memory Cache":"Bộ nhớ đệm RAM nội dung yêu cầu","Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.":"Chuyển tiếp body yêu cầu đã được bật. Body yêu cầu sẽ được gá»­i trá»±c tiếp mà không chuyển đổi.","Request conversion":"Chuyển đổi yêu cầu","Request Conversion":"Chuyển đổi yêu cầu","Request Count":"Number of requests","Request failed":"Yêu cầu thất bại","Request flow":"Luồng yêu cầu","Request Header Field":"Trường header yêu cầu","Request Header Override":"Ghi đè header yêu cầu","Request Header Overrides":"Ghi đè Tiêu đề Yêu cầu","Request ID":"ID yêu cầu","Request Limits":"Hạn mức yêu cầu","Request Model":"Mô hình yêu cầu","Request Model:":"Mô hình yêu cầu:","Request overrides, routing behavior, and upstream model automation":"Ghi đè yêu cầu, hành vi định tuyến và tá»± động hóa mô hình upstream","Request rule pricing":"Quy tắc tính giá theo request","Request success rate sampled over the last 24 hours":"Tá»· lệ yêu cầu thành công được lấy mẫu trong 24 giờ qua","Request success rate; {{incidents}} incident buckets in the last 24 hours":"Tá»· lệ yêu cầu thành công; {{incidents}} khoảng có sá»± cố trong 24 giờ qua","Request timed out, please refresh and restart GitHub login":"Yêu cầu đã hết thời gian chờ, vui lòng làm mới và đăng nhập lại GitHub","Request-based":"Theo yêu cầu","Requests (24h)":"Yêu cầu (24h)","Requests / 24h":"Yêu cầu / 24h","Requests per minute":"Yêu cầu mỗi phút","requests served":"yêu cầu đã phục vụ","Requests will be forwarded to this worker. Trailing slashes are removed automatically.":"Các yêu cầu sẽ được chuyển tiếp đến worker này. Dấu gạch chéo ở cuối được tá»± động loại bỏ.","Requests:":"YÃ
107ªu cầu:","Require email verification for new accounts":"Yêu cầu xác minh email cho tài khoản mới","Require job success before follow-up actions":"Yêu cầu công việc thành công trước các hành động tiếp theo","Require login to view models":"Yêu cầu đăng nhập để xem các mô hình","Require login to view rankings":"Yêu cầu đăng nhập để xem bảng xếp hạng","required":"bắt buộc","Required":"Bắt buộc","Required events:":"Sá»± kiện bắt buộc:","Required provider, authentication, model, and group settings":"Thiết lập bắt buộc về nhà cung cấp, xác thá»±c, mô hình và nhóm","Required to expose Midjourney-style image generation to end users.":"Cần thiết để cung cấp tính năng tạo hình ảnh kiểu Midjourney cho người dùng cuối.","Rerank":"Re-rank","Reroll":"Quay lại","Research, analysis, scientific reasoning":"Nghiên cứu, phân tích, suy luận khoa học","Resend ({{seconds}}s)":"Gá»­i lại ({{seconds}}s)","Reset":"Đặt lại","Reset 2FA":"Đặt lại 2FA","Reset all model prices?":"Đặt lại tất cả giá mô hình?","Reset all model ratios?":"Đặt lại tất cả tá»· lệ mô hình?","Reset all settings to default values":"Đặt lại tất cả cài đặt về giá trị mặc định","Reset at:":"Đặt lại lúc:","Reset balance and used quota":"Đặt lại số dư và hạn mức đã sá»­ dụng","Reset Cycle":"Chu kỳ đặt lại","Reset email sent, please check your inbox":"Email đặt lại đã được gá»­i, vui lòng kiểm tra hộp thư đến","Reset failed":"Đặt lại thất bại","Reset model ratios":"Đã đặt lại tá»· lệ mô hình","Reset Passkey":"Đặt lại Khóa truy cập","Reset password":"Đặt lại mật khẩu","Reset Period":"Chu kỳ đặt lại","Reset prices":"Đặt lại giá","Reset ratios":"Đặt lại tá»· lệ","Reset Stats":"Đặt lại thống kê","Reset the user passkey":"Đã đặt lại passkey cá»§a người dùng","Reset to default":"Đặt lại mặc định","Reset to Default":"Đặt lại mặc định","Reset to default configuration":"Đã đặt lại cấu hình mặc định","Reset Two-Factor Authentication":"Đặt lại Xác thá»±c hai yếu tố","Resets in:":"Đặt lại sau:","Resolve Conflicts":"Giải quyết Xung đột","Resource Configuration":"Cấu hình tài nguyên","Response":"Phản hồi","Response Time":"Thời gian phản hồi","Responses API Version":"Phiên bản API Phản hồi","Restore defaults":"Khôi phục mặc định","Restrict user model request frequency (may impact high concurrency performance)":"Hạn chế tần suất yêu cầu mô hình người dùng (có thể ảnh hưởng đến hiệu suất khi có độ đồng thời cao)","Result":"Kết quả","Retain last N days":"Giữ lại N ngày gần nhất","Retain last N files":"Giữ lại N tệp gần nhất","Retention days":"Số ngày lưu giữ","Retry":"Thá»­ lại","Retry Chain":"Chuỗi thá»­ lại","Retry Suggestion":"Gợi ý thá»­ lại","Retry Times":"Số lần thá»­ lại","Return a custom error immediately":"Trả về lỗi tùy chỉnh ngay lập tức","Return Custom Error":"Trả lỗi tùy chỉnh","Return data conforming to a JSON schema":"Trả về dữ liệu tuân theo JSON Schema","Return Error":"Trả về lỗi","Return per-token log probabilities":"Trả về log probabilities cho từng token","Return to dashboard":"Quay lại bảng điều khiển","Return vector embeddings for inputs":"Trả về vector embedding cho đầu vào","Reveal API key":"Hiển thị khóa API","Reveal key":"Display key","Revenue":"Doanh thu","Review & initialize":"Xem lại và khởi tạo","Review model rates before scaling traffic":"Xem giá mô hình trước khi mở rộng lưu lượng","Review your payment details":"Xem lại chi tiết thanh toán cá»§a bạn","Review your purchase details before proceeding.":"Xem lại chi tiết mua hàng trước khi tiếp tục.","Rewards will be added directly to your balance":"Phần thưởng sẽ được thêm trá»±c tiếp vào số dư cá»§a bạn","Rewrite callback URLs to the local server":"Viết lại URL callback đến máy chá»
107§ cục bộ","Right to Left":"Phải sang trái","Role":"Vai trò","Roleplay":"Nhập vai","Root":"Gốc","Rose Garden":"Vườn hoa hồng","Route":"Tuyến đường","Route active":"Tuyến đang hoạt động","Route Description":"Mô tả lộ trình","Route is required":"Đường dẫn là bắt buộc","Route, auth, and balance check in one place":"Kiểm tra tuyến, xác thá»±c và số dư ở cùng một nÆ¡i","Routing & Overrides":"Định tuyến & ghi đè","Routing Strategy":"Chiến lược định tuyến","Rows per page":"Số hàng trên trang","RPM":"RPM","RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.":"RPM = yêu cầu mỗi phút, TPM = token mỗi phút, RPD = yêu cầu mỗi ngày. Giới hạn áp dụng cho từng nhóm token.","RSA Private Key (Production)":"RSA Private Key (Sản xuất)","RSA Private Key (Sandbox)":"Khóa riêng RSA (Sandbox)","Rule":"Quy tắc","Rule {{line}} is missing source field":"Quy tắc {{line}} thiếu trường nguồn","Rule {{line}} is missing target field":"Quy tắc {{line}} thiếu trường đích","Rule {{line}} is missing target path":"Quy tắc {{line}} thiếu đường dẫn đích","Rule {{line}} is missing value":"Quy tắc {{line}} thiếu giá trị","Rule {{line}} pass_headers format is invalid":"Định dạng pass_headers cá»§a quy tắc {{line}} không hợp lệ","Rule {{line}} pass_headers is missing header names":"pass_headers cá»§a quy tắc {{line}} thiếu tên header","Rule {{line}} prune_objects is missing conditions":"prune_objects cá»§a quy tắc {{line}} thiếu điều kiện","Rule {{line}} return_error requires a message field":"return_error cá»§a quy tắc {{line}} cần trường message","Rule Description (optional)":"Mô tả quy tắc (tùy chọn)","Rule group":"Nhóm quy tắc","rules":"quy tắc","Rules":"Quy tắc","Rules JSON":"JSON quy tắc","Rules JSON must be an array":"JSON quy tắc phải là một mảng","Run GC":"Chạy GC","Run tests for the selected models":"Chạy kiểm thá»­ cho các mô hình đã chọn","Running":"Đang chạy","Runway":"Thời gian còn lại","s":"s","Safety Settings":"Cài đặt an toàn","Same as Local":"Giống như địa phương","Sampling temperature; lower is more deterministic":"Nhiệt độ lấy mẫu; càng thấp càng ổn định","Sandbox mode":"Chế độ sandbox","Save":"Lưu","Save all settings":"Lưu tất cả cài đặt","Save Backup Codes":"Lưu mã dá»± phòng","Save changes":"Lưu thay đổi","Save Changes":"Lưu Thay đổi","Save chat settings":"Lưu cài đặt trò chuyện","Save check-in settings":"Lưu cài đặt điểm danh","Save Creem settings":"Lưu cài đặt Creem","Save drawing settings":"Lưu cài đặt bản vẽ","Save Epay settings":"Lưu cài đặt Epay","Save failed":"Lưu thất bại","Save failed, please retry":"Lưu thất bại, vui lòng thá»­ lại","Save general settings":"Lưu cài đặt chung","Save group ratios":"Lưu tá»· lệ nhóm","Save io.net settings":"Lưu cài đặt io.net","Save log settings":"Lưu cài đặt nhật ký","Save model prices":"Lưu giá mô hình","Save model ratios":"Lưu tá»· lệ mô hình","Save Models":"Lưu Mô hình","Save monitoring rules":"Lưu quy tắc giám sát","Save navigation":"Lưu điều hướng","Save notice":"Lưu thông báo","Save Preferences":"Lưu tùy chọn","Save preview":"Xem trước lưu","Save rate limits":"Lưu giới hạn tốc độ","Save sensitive words":"Lưu từ nhạy cảm","Save Settings":"Lưu Cài đặt","Save sidebar modules":"Lưu các mô-đun thanh bên","Save SMTP settings":"Lưu cài đặt SMTP","Save SSRF settings":"Lưu cài đặt SSRF","Save Stripe settings":"Lưu cài đặt Stripe","Save these backup codes in a safe place. Each code can only be used once.":"Lưu các mã dá»± phòng này ở nÆ¡i an toàn. Mỗi mã chỉ được sá»­ dụng một lần.","Save these codes in a safe place. Each code can only be used once.":"Hãy lưu các mã này ở nÆ¡i an toàn. Mỗi mã chỉ có thể được sá»­ dụng một lần.","Save tool prices":"Lưu giá công cụ","Save Waffo Pancake settings":"Lưu cài đặt Waffo Pancake","Save Worker settings":"Lưu cài đặt Worker","Saved successfully":"Lưu thành công","Saving...":"Đang lưu...","Scan QR Code":"Quét mã QR","Scan the QR code to follow the official account and reply with “验证码” to receive your verification code.":"Quét mã QR để theo dõi tài khoản chính thức, trả lời « 验证码 » để nhận mã xác minh.","Scan the QR code with WeChat to bind your account":"Quét mã QR bằng WeChat để liên kết tài khoản cá»§a bạn","Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)":"Quét mã QR này bằng ứng dụng xác thá»±c cá»§a bạn (Google Authenticator, Microsoft Authenticator, v.v.)","Scenario Templates":"Mẫu kịch bản","Scheduled channel tests":"Kiểm tra kênh theo lịch trình","scheduling controls":"điều khiển điều phối","Science":"Khoa học","Scope":"Phạm vi","Scopes":"Phạm vi","Search":"Tìm kiếm","Search by name or URL...":"Tìm kiếm theo tên hoặc URL...","Search by order number...":"Tìm kiếm theo số đơn hàng...","Search channel type...":"Tìm loại kênh...","Search chat presets...":"Tìm kiếm cài đặt sẵn trò chuyện...","Search colors...":"Tìm kiếm màu sắc...","Search conflicting models or fields":"Tìm kiếm mô hình hoặc trường xung đột","Search deployments...":"Tìm kiếm triển khai...","Search feature in development":"Tính năng tìm kiếm đang được phát triển","Search group names...":"Tìm kiếm tên nhóm...","Search groups...":"Searching for group...","Search missing models":"Tìm kiếm mô hình bị thiếu","Search model name, provider, endpoint, or tag...":"Tìm tên mô hình, nhà cung cấp, endpoint hoặc thẻ...","Search model name...":"Tìm kiếm tên mẫu...","Search models":"Tìm kiếm mô hình","Search models or fields...":"Tìm kiếm mô hình hoặc trường...","Search models...":"Mô hình tìm kiếm...","Search payment methods...":"Tìm kiếm phương thức thanh toán...","Search payment types...":"Tìm kiếm loại thanh toán...","Search products...":"Tìm kiếm sản phẩm...","Search rules...":"Tìm kiếm quy tắc…","Search tags...":"Tìm thẻ...","Search the public web at inference time":"Tìm kiếm web công khai trong khi suy luận","Search vendors...":"Tìm nhà cung cấp...","Search...":"Tìm kiếm...","seconds":"giây","Secret env (JSON object)":"Biến môi trường bí mật (đối tượng JSON)","Secret environment variables (JSON)":"Biến môi trường bí mật (JSON)","Secret Key":"Khóa bí mật","Secure & Reliable":"An toàn & Đáng tin cậy","Secured":"Đã bảo vệ","Security":"Bảo mật","Security & Limits":"Bảo mật & giới hạn","Security Check":"Kiểm tra bảo mật","Security verification":"Xác minh bảo mật","Select":"Chọn","Select a color":"Chọn một màu","Select a group":"Chọn một nhóm","Select a group type":"Chọn loại nhóm","Select a model to edit pricing":"Chọn mô hình để chỉnh sá»­a giá","Select a preset...":"Chọn cấu hình sẵn...","Select a product":"Chọn sản phẩm","Select a role":"Chọn vai trò","Select a rule to edit.":"Chọn một quy tắc để chỉnh sá»­a.","Select a store":"Chọn cá»­a hàng","Select a timestamp before clearing logs.":"Chọn một dấu thời gian trước khi xóa nhật ký.","Select a usage mode to continue":"Chọn chế độ sá»­ dụng để tiếp tục","Select a verification method first":"Vui lòng chọn phương thức xác thá»±c trước","Select all":"Chọn tất cả","Select all (filtered)":"Chọn tất cả (đã lọc)","Select all models":"Chọn tất cả mô hình","Select All Visible":"Chọn tất cả hiển thị","Select an operation mode and enter the amount":"Chọn chế độ thao tác và nhập số tiền","Select announcement type":"Select notification type","Select at least one field to overwrite.":"Chọn ít nhất một trường để ghi đè.","Select at least one target model":"Chọn ít nhất một mô hình đích","Select body font":"Chọn phông chữ nội dung","Select border radius":"Chọn độ bo góc","Select channel type":"Chọn loại kênh","Select color preset":"Chọn cài đặt màu sẵn","Select content width":"Chọn chiều rộng nội dung","Select corner radius":"Chọn độ bo góc","Select currency":"Chọn tiền tệ","Select date":"Chọn ngày","Select default chart":"Chọn biểu đồ mặc định","Select default range":"Chọn khoảng mặc định","Select display mode":"Chọn chế độ hiển thị","Select end time":"Chọn thời gian kết thúc","Select from presets or type custom identifier.":"Chọn từ các cài đặt sẵn hoặc nhập mã định danh tùy chỉnh.","Select granularity":"Select detail level","Select groups (leave empty to keep current)":"Chọn nhóm (để trống để giữ nguyên hiện tại)","Select interface density":"Chọn mật độ giao diện","Select items...":"Chọn các mục...","Select key format":"Chọn định dạng khóa","Select language":"Chọn ngôn ngữ","Select Language":"Chọn Ngôn ngữ","Select layout style":"Chọn kiểu bố cục","Select locations":"Chọn vị trí","Select Model":"Chọn mẫu","Select model {{model}}":"Chọn mô hình {{model}}","Select models (empty for allow all)":"Chọn model (để trống nếu muốn cho","Select models and apply to channel models list.":"Chọn mô hình và áp dụng cho danh sách mô hình kênh.","Select models or add custom ones":"Chọn các mô hình hoặc thêm các mô hình tùy chỉnh","Select models to process. Unselected \\"add\\" models will be ignored.":"Chọn các mô hình để xá»­ lý. Các mô hình \\"thêm\\" không được chọn sẽ bị bỏ qua.","Select models to run batch tests.":"Chọn mô hình để chạy kiểm thá»­ hàng loạt.","Select or enter color value":"Chọn hoặc nhập giá trị màu","Select or enter model name":"Chọn hoặc nhập tên mô hình","Select or enter payment type":"Chọn hoặc nhập loại thanh toán","Select payment method":"Chọn phương thức thanh toán","Select preset or enter custom CSS color value.":"Chọn cài đặt sẵn hoặc nhập giá trị màu CSS tùy chỉnh.","Select publish date":"Chọn ngày xuất bản","Select requirement":"Chọn yêu cầu","Select row":"Chọn hàng","Select sidebar style":"Chọn kiểu thanh bên","Select site direction":"Chọn hướng trang","Select start time":"Chọn thời gian bắt đầu","Select subscription plan":"Chọn gói đăng ký","Select Sync Channels":"Chọn Kênh đồng bộ","Select sync channels to compare prices":"Chọn kênh đồng bộ để so sánh giá","Select sync channels to compare ratios":"Chọn kênh đồng bộ để so sánh tá»· lệ","Select Sync Source":"Chọn Nguồn Đồng Bộ","Select the API endpoint region":"Chọn khu vá»±c điểm cuối API","Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.":"Chọn các trường bạn muốn ghi đè bằng dữ liệu thượng nguồn. Các trường không được chọn sẽ giữ nguyên giá trị cục bộ cá»§a chúng.","Select theme preference":"Chọn chá»§ đề ưu tiên","Select theme preset":"Chọn tùy chỉnh chá»§ đề","Select time granularity":"Chọn độ chi tiết thời gian","Select vendor":"Chọn nhà cung cấp","Selectable groups":"Nhóm có thể chọn","selected":"đã chọn","Selected {{count}}":"Đã chọn {{count}}","selected channel(s). Leave empty to remove tag.":"Kênh đã chọn. Để trống để xóa thẻ.","Selected conflicts were overwritten successfully.":"Các xung đột được chọn đã được ghi đè thành công.","Selected when creating a token and used as the default billing group for API calls.":"Được chọn khi tạo token và dùng làm nhóm tính phí mặc định cho các lệnh gọi API.","Self-Use Mode":"Chế độ tá»± sá»­ dụng","Send":"Gá»­i","Send a request":"Gá»­i yêu cầu","Send code":"Gá»­i mã","Send email alerts when a user falls below this quota":"Gá»­i cảnh báo email khi người dùng xuống dưới hạn mức này","Sending...":"Đang gá»­i...","Sensitive Words":"Từ ngữ nhạy cảm","Sent the API key to FluentRead.":"Đã gá»­i khóa API đến FluentRead.","Separate image/audio prices are enabled.":"Giá riêng cho hình ảnh/âm thanh đã được bật.","Serve multiple users or teams with billing and quota control.":"Phục vụ nhiều người dùng hoặc nhóm với quản lý thanh toán và hạn mức.","Server Address":"Địa chỉ máy chá»
107§","Server IP":"IP máy chá»§","Server Log Management":"Quản lý nhật ký máy chá»§","Server logging is not enabled (log directory not configured)":"Nhật ký máy chá»§ chưa được bật (chưa cấu hình thư mục nhật ký)","Server Token":"Mã thông báo máy chá»§","Service account JSON file(s)":"Tệp JSON tài khoản dịch vụ","Session expired!":"Phiên hết hạn!","Session expired?":"Phiên đã hết hạn?","Set":"Đặt","Set a discount rate for a specific recharge amount threshold.":"Đặt tá»· lệ chiết khấu cho một ngưỡng số tiền nạp cụ thể.","Set a secure password (min. 8 characters)":"Đặt mật khẩu an toàn (tối thiểu 8 ký tá»±)","Set a tag for":"Gắn thẻ cho","Set API key access restrictions":"Thiết lập hạn chế truy cập cho khóa API","Set API key basic information":"Thiết lập thông tin cÆ¡ bản cho khóa API","Set default ranges and charts for model analytics.":"Đặt khoảng thời gian và biểu đồ mặc định cho phân tích mô hình.","Set Field":"Đặt trường","Set filters to customize your dashboard statistics and charts.":"Đặt bộ lọc để tùy chỉnh số liệu thống kê và biểu đồ trên bảng điều khiển cá»§a bạn.","Set filters to narrow down your log search results.":"Đặt bộ lọc để thu hẹp kết quả tìm kiếm nhật ký cá»§a bạn.","Set Header":"Đặt tiêu đề","Set Project to io.cloud when creating/selecting key":"Đặt Dá»± án thành io.cloud khi tạo/chọn khóa","Set quota amount and limits":"Thiết lập hạn mức và giới hạn","Set Request Header":"Đặt header yêu cầu","Set runtime request header: override entire value, or manipulate comma-separated tokens":"Đặt header yêu cầu runtime: ghi đè toàn bộ giá trị hoặc thao tác token phân cách bằng dấu phẩy","Set separate prices for cache reads and writes.":"Đặt giá riêng cho đọc và ghi bộ nhớ đệm.","Set Tag":"Gán Thẻ","Set tag for selected channels":"Đặt thẻ cho các kênh đã chọn","Set the language used across the interface":"Đặt ngôn ngữ sá»­ dụng trong giao diện","Set the user\'s role (cannot be Root)":"Đặt vai trò cá»§a người dùng (không được là Root)","Setting Key":"Khóa cài đặt","Setting saved":"Cài đặt đã được lưu","Setting up 2FA...":"Đang thiết lập 2FA...","Setting updated successfully":"Cài đặt đã được cập nhật thành công","Settings":"Cài đặt","Settings & Preferences":"Cài đặt & Tùy chọn","Settings updated successfully":"Cài đặt đã được cập nhật thành công","Session":"Phiên","Setup guide":"Hướng dẫn thiết lập","Setup guide complete":"Đã hoàn tất hướng dẫn thiết lập","Setup guide is collapsed. Expand it anytime.":"Hướng dẫn thiết lập đã được thu gọn. Bạn có thể mở lại bất cứ lúc nào.","Setup Instructions":"Hướng dẫn Thiết lập","Setup progress: {{completed}}/{{total}}":"Tiến độ thiết lập: {{completed}}/{{total}}","Setup Two-Factor Authentication":"Thiết lập Xác thá»±c hai yếu tố","Share":"Tỉ lệ","Share your link and earn rewards":"Chia sẻ liên kết cá»§a bạn và kiếm phần thưởng","Shared configuration for all payment gateways":"Cấu hình chung cho tất cả các cổng thanh toán","Shorten":"Rút gọn","Show":"Hiển thị","Show All":"Hiển thị tất cả","Show all providers including unbound":"Hiển thị tất cả nhà cung cấp (bao gồm chưa liên kết)","Show only bound providers":"Chỉ hiển thị nhà cung cấp đã liên kết","Show prices in currency instead of quota.":"Hiển thị giá bằng tiền tệ thay vì hạn ngạch.","Show setup guide":"Hiển thị hướng dẫn thiết lập","Show token usage statistics in the UI":"Hiển thị thống kê sá»­ dụng token trong giao diện người dùng","Showcase core capabilities with demo credentials and limited access.":"Trình diễn các tính năng cốt l
107õi với thông tin đăng nhập demo và quyền truy cập hạn chế.","Showing":"Đang hiển thị","showing •":"hiển thị •","Sidebar":"Thanh bên","Sidebar collapsed by default for new users":"Thanh bên được thu gọn theo mặc định đối với người dùng mới","Sidebar modules":"Mô-đun thanh bên","Sidebar Personal Settings":"Cài đặt cá nhân thanh bên","Sign in":"Đăng nhập","Sign In":"Đăng nhập","Sign in now":"Đăng nhập ngay","Sign in required":"Cần đăng nhập","Sign in with Passkey":"Đăng nhập bằng Passkey","Sign out":"Đăng xuất","Sign up":"Đăng ký","Signed in":"Đã đăng nhập","Signed in successfully!":"Đã đăng nhập thành công!","Signed in via WeChat":"Đã đăng nhập qua WeChat","Signed in with Passkey":"Đã đăng nhập bằng Passkey","Signed out":"Đã đăng xuất","Significant outages detected":"Phát hiện gián đoạn nghiêm trọng","Signing you in with {{provider}}":"Đang đăng nhập bằng {{provider}}","SiliconFlow":"SiliconFlow","Simple":"Đơn giản","Simple mode only returns message; status code and error type use system defaults.":"Chế độ đơn giản chỉ trả về message; mã trạng thái và loại lỗi sử dụng giá trị mặc định.","Simple mode: prune objects by type, e.g. redacted_thinking.":"Chế độ đơn giản: dọn dẹp đối tượng theo type, ví dụ redacted_thinking.","Single Key":"Khóa đơn","Site & Branding":"Trang web & thương hiệu","Site Key":"Khóa trang web","Size:":"Kích thước:","sk_xxx or rk_xxx":"sk_xxx hoặc rk_xxx","Skip retry on failure":"Không thử lại khi thất bại","Skip to Main":"Bỏ qua đến nội dung chính","Slug":"Slug","Slug can only contain letters, numbers, hyphens, and underscores":"Slug chỉ có thể chứa chữ cái, số, dấu gạch ngang và dấu gạch dưới","Slug is required":"Slug là bắt buộc","Slug must be less than 100 characters":"Slug phải ít hơn 100 ký tự","Smallest USD amount users can recharge (Epay)":"Số tiền USD tối thiểu người dùng có thể nạp (Epay)","SMTP Email":"Email SMTP","SMTP Host":"Máy chủ SMTP","smtp.example.com":"smtp.example.com","socks5://user:pass@host:port":"socks5://user:pass@host:port","Soft Errors":"Lỗi mềm","Some channels failed: {{errorMsg}}":"Một số kênh thất bại: {{errorMsg}}","Something went wrong!":"Có gì đó không ổn!","Sonnet Model":"Mô hình Sonnet","Sora":"Sora","Sort":"Sắp xếp","Sort by ID":"Sắp xếp theo ID","Sort Order":"Thứ tự sắp xếp","Source":"Nguồn","Source Endpoint":"Điểm nguồn","Source Field":"Trường nguồn","Source Header":"Header nguồn","sources":"nguồn","Space-separated OAuth scopes":"Phạm vi OAuth phân cách bằng dấu cách","Spark model version, e.g., v2.1 (version number in API URL)":"Phiên bản mô hình Spark, ví dụ: v2.1 (số phiên bản trong URL API)","Special billing expression":"Biểu thức tính phí đặc biệt","Special group":"Nhóm đặc biệt","Special ratio rules":"Quy tắc tỷ lệ đặc biệt","Special ratios override the token group ratio for specific user group and token group combinations.":"Tỷ lệ đặc biệt ghi đè tỷ lệ nhóm token cho các tổ hợp nhóm người dùng và nhóm token cụ thể.","Special usable group rules":"Quy tắc nhóm sử dụng đặc biệt","Special usable group rules can add, remove, or append selectable token groups for a specific user group.":"Quy tắc nhóm khả dụng đặc biệt có thể thêm, xóa hoặc nối nhóm token có thể chọn cho một nhóm người dùng cụ thể.","SQLite stores all data in a single file. Make sure that file is persisted 
107when running in containers.":"SQLite lưu trữ tất cả dữ liệu trong một tệp duy nhất. Đảm bảo tệp được lưu trữ lâu dài khi chạy trong container.","SSRF Protection":"Bảo vệ SSRF","Standard":"Tiêu chuẩn","Standard price":"Giá tiêu chuẩn","Start":"Bắt đầu","Start a conversation to see messages here":"Bắt đầu một cuộc trò chuyện để xem tin nhắn tại đây","Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.":"Bắt đầu thu thanh toán toàn cầu mà không cần đăng ký công ty. Dành cho lập trình viên độc lập, chủ sở hữu OPC và startup. Waffo Pancake đóng vai trò Merchant of Record, chịu trách nhiệm tuân thủ cho việc thu thanh toán toàn cầu — thuế tiêu dùng, hóa đơn, quản lý đăng ký, hoàn tiền và tranh chấp thanh toán. Lập trình viên cá nhân có thể ra mắt nhanh và tập trung vào sản phẩm thay vì tuân thủ. Onboard trong vài phút — từ một prompt đến tích hợp hoàn chỉnh.","Start for free with generous limits. No credit card required.":"Bắt đầu miễn phí với giới hạn hào phóng. Không cần thẻ tín dụng.","Start Time":"Thời gian bắt đầu","Static page describing the platform.":"Trang tĩnh mô tả nền tảng.","Statistical count":"Số đếm thống kê","Statistical quota":"Chỉ tiêu thống kê","Statistical tokens":"Mã thông báo thống kê","Statistics reset":"Đã đặt lại thống kê","Status":"Trạng thái","Status & Sync":"Trạng thái & Đồng bộ","Status Code":"Mã trạng thái","Status Code Mapping":"Ánh xạ mã trạng thái","Status code mapping must use valid HTTP status codes":"Ánh xạ mã trạng thái phải dùng mã trạng thái HTTP hợp lệ","Status Page Slug":"Đường dẫn phụ trang trạng thái","Status short":"TT","Status:":"Trạng thái:","Stay":"Ở lại","Stay tuned though!":"Nhưng","Steer behaviour with a system instruction":"Điều hướng hành vi bằng lệnh hệ thống","Step":"Bước","Stop":"Dừng lại","Stop Retry":"Dừng thử lại","Store":"Store","Store + product created":"Đã tạo cửa hàng + sản phẩm","Store ID":"Mã cửa hàng","Store ID is required":"Bắt buộc 
107nhập Store ID","Stored value is not echoed back for security":"Vì bảo mật, giá trị đã lưu không được hiển thị lại","stream":"dòng","Stream":"Luồng","Stream Mode":"Chế độ streaming","Stream Status":"Trạng thái luồng","Stream tokens incrementally as they are generated":"Truyền dần token khi được tạo","Stream tokens via Server-Sent Events":"Truyền token qua Server-Sent Events","Streaming":"Truyền liên tục","String Replace":"Thay thế chuỗi","Stripe":"Stripe","Stripe API key (leave blank unless updating)":"Khóa API Stripe (để trống trừ khi cập nhật)","Stripe Dashboard":"Bảng điều khiển Stripe","Stripe Gateway":"Cổng thanh toán Stripe","Stripe product price ID":"ID giá sản phẩm Stripe","Stripe/Creem requires creating products on the third-party platform and entering the ID":"Stripe/Creem yêu cầu tạo sản phẩm trên nền tảng bên thứ ba và nhập ID","Structured output":"Đầu ra có cấu trúc","Submit":"Gá»­i","Submit directly":"Gá»­i trá»±c tiếp","Submit Result":"Gá»­i Kết quả","Submit Time":"Thời gian gá»­i","Submitted":"Đã gá»­i","Submitting":"Đang gá»­i","Submitting...":"Đang gá»­i...","Submodel":"Submodel","Subscribe Now":"Đăng ký ngay","Subscribe to a plan for model access":"Đăng ký gói để truy cập mô hình","Subscription":"Đăng ký","Subscription Billing":"Thanh toán gói đăng ký","Subscription First":"Ưu tiên đăng ký","Subscription Management":"Quản lý đăng ký","Subscription Only":"Chỉ đăng ký","Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.":"Việc tạo và thay đổi gói đăng ký bị khóa cho đến khi quản trị viên xác nhận điều khoản tuân thá»§ trong cài đặt Cổng thanh toán.","Subscription Plans":"Gói đăng ký","Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).":"Gói đăng ký KHÔNG dùng Sản phẩm đã liên kết — mỗi gói có một sản phẩm Pancake riêng, được đặt trong quản trị Đăng ký (hoặc tá»± động tạo bằng nút \\"+ Create\\" tại đó).","Subscription purchased successfully":"Đã mua gói đăng ký thành công","Subtract":"Trừ","Success":"Thành công","Success rate":"Tá»· lệ thành công","Successfully created {{count}} API Key(s)":"Đã tạo thành công {{count}} khóa API","Successfully created {{count}} redemption codes":"Đã tạo thành công {{count}} mã đổi thưởng","Successfully deleted {{count}} API key(s)":"Đã xóa thành công {{count}} khóa API","Successfully deleted {{count}} invalid redemption codes":"Đã xóa thành công {{count}} mã đổi thưởng không hợp lệ","Successfully deleted {{count}} model(s)":"Đã xóa thành công {{count}} mô hình","Successfully disabled {{count}} model(s)":"Đã tắt thành công {{count}} mô hình","Successfully enabled {{count}} model(s)":"Đã bật thành công {{count}} mô hình","Suffix":"Hậu tố","Suffix Match":"Khớp hậu tố","SunoAPI":"SunoAPI","Sunset Glow":"Hoàng hôn","Super Admin":"Siêu Quản trị viên","Super Large":"Rất lớn","Support for high concurrency with automatic load balancing":"Hỗ trợ đồng thời cao với cân bằng tải tá»± động","Supported Applications":"Ứng dụng được hỗ trợ","Supported Imagine Models":"Mô hình Imagine được hỗ trợ","Supported modalities":"Phương thức hỗ trợ","Supported parameters":"Tham số hỗ trợ","Supported variables":"Biến được hỗ trợ","Supports `-thinking`, `-thinking-":"Hỗ trợ `-thinking`, `-thinking-","Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.":"Hỗ trợ đánh dấu HTML hoặc nhúng iframe. Nhập mã HTML trá»±c tiếp, hoặc cung cấp một URL đầy đủ để tá»± động nhúng nó dưới dạng một iframe.","Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.":"Hỗ trợ cấu hình bằng một cú nhấp chuột và thích ứng hoàn hảo với cấu hình đa giao thức NewAPI.","Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.":"Hỗ trợ PNG, JPG, SVG hoặc WebP. Kích thước khuyến nghị: 128×128 hoặc nhỏ hÆ¡n.","Sustained tokens per second":"Token mỗi giây duy trì","Swap Face":"Đổi mặt","Switch affinity on success":"Chuyển ưu tiên khi thành công","Switch between the new frontend and the classic frontend. Changes take effect after page reload.":"Chuyển đổi giữa frontend má
107»›i và frontend cổ điển. Thay đổi có hiệu lá»±c sau khi tải lại trang.","Switch to JSON":"Chuyển sang JSON","Switch to Visual":"Chuyển sang Trá»±c quan","Sync Endpoint":"Điểm cuối đồng bộ","Sync Endpoints":"Điểm đồng bộ","Sync Fields":"Đồng bộ trường","Sync from the public upstream metadata repository.":"Đồng bộ từ kho lưu trữ siêu dữ liệu upstream công khai.","Sync Now":"Đồng bộ ngay","Sync this model with official upstream":"Synchronize this model with the official source.","Sync Upstream":"Đồng bộ nguồn","Sync Upstream Models":"Đồng bộ các mô hình nguồn","Synced upstream models":"Đã đồng bộ mô hình thượng nguồn","Synchronize models and vendors from an upstream source":"Đồng bộ hóa các mô hình và nhà cung cấp từ một nguồn thượng nguồn","Syncing prices, please wait...":"Đang đồng bộ giá, vui lòng đợi...","Syncing...":"Đang đồng bộ...","System":"Hệ thống","System Administration":"Quản trị hệ thống","System Announcements":"Thông báo hệ thống","System Behavior":"Hành vi hệ thống","System data statistics":"Thống kê dữ liệu hệ thống","System default":"Mặc định hệ thống","System Information":"Thông tin hệ thống","System initialized successfully! Redirecting…":"Hệ thống đã được khởi tạo thành công! Đang chuyển hướng…","System logo":"Logo hệ thống","System maintenance":"Bảo trì hệ thống","System Memory":"Bộ nhớ hệ thống","System Memory Stats":"Thống kê bộ nhớ hệ thống","System Name":"Tên hệ thống","System name is required":"Tên hệ thống là bắt buộc","System Notice":"Thông báo hệ thống","System Performance Monitoring":"Giám sát hiệu suất hệ thống","System prompt":"Lời nhắc hệ thống","System Prompt":"Lời nhắc hệ thống","System Prompt Concatenation":"Ghép nối Lời nhắc Hệ thống","System Prompt Override":"Ghi đè prompt hệ thống","System settings":"Cài đặt hệ thống","System Settings":"Cài đặt hệ thống","System setup wizard":"Trình hướng dẫn thiết lập hệ thống","System task records":"Lịch sá»­ tác vụ hệ thống","System Version":"Phiên bản hệ thống","Table view":"Xem dạng bảng","Tag":"Tag","Tag Aggregate":"Tổng hợp thẻ","Tag Mode":"Chế độ thẻ","Tag Name":"Tên thẻ","Tag set successfully":"Thiết lập bộ thẻ thành công","Tag updated successfully":"Đã cập nhật thẻ thành công","Tag:":"Thẻ:","Tags":"Thẻ","Take photo":"Chụp ảnh","Take screenshot":"Chụp màn hình","Target Endpoint":"Điểm đích","Target Field":"Trường đích","Target Field Path":"Đường dẫn trường đích","Target group":"Target audience","Target Header":"Header đích","Target Path (optional)":"Đường dẫn đích (tùy chọn)","Target User":"Người dùng mục tiêu","Task":"Nhiệm vụ","Task ID":"Mã nhiệm vụ","Task ID:":"ID nhiệm vụ:","Task logs":"Nhật ký tác vụ","Task Logs":"Nhật ký tác vụ","Team Collaboration":"Teamwork","Technical Support":"Hỗ trợ kỹ thuật","Telegram":"Telegram","Telegram login requires widget integration; coming soon":"Đăng nhập Telegram yêu cầu tích hợp widget; sắp ra mắt","Telegram Login Widget":"Tiện ích đăng nhập Telegram","Template":"Mẫu","Template variables:":"Biến mẫu:","Templates":"Mẫu","Templates appended":"Đã thêm mẫu","Tencent":"Tencent","Termination requested":"Yêu cầu chấm dứt","Test":"Kiểm tra","Test {{count}} selected":"Kiểm tra {{count}} mục đã chọn","Test All Channels":"Kiểm tra tất cả các kênh","Test Channel Connection":"Kiểm tra kết nối kênh","Test Connection":"Kiểm tra kết nối","Test connectivity for:":"Kiểm tra kết nối cho:","Test failed":"Kiểm tra thất bại","Test interval (minutes)":"Khoảng thời gian kiểm tra (phút)","Test Latency":"Kiểm tra độ trễ","Test Mode":"Chế độ thá»­ nghiệm","Test Model":"Kiểm tra Mô hình","Test models and prompts from the browser":"Kiểm thá»­ mô hình và prompt trong trình duyệt","Test selected models":"Kiểm tra các mô hình đã chọn","Testing all enabled channels started. Please refresh to see results.":"Bắt đầu kiểm tra tất cả các kênh đã kích hoạt. Vui lòng làm mới để xem kết quả.","Testing...":"Đang kiểm tra...","Text":"Văn bản","Text description of the desired image":"Mô tả văn bản cho ảnh mong muốn","Text description of the desired video":"Mô tả văn bản cho video mong muốn","Text Input":"Đầu vào văn bản","Text or array of texts to embed":"Văn bản hoặc mảng văn bản cần vector hoá","Text Output":"Đầu ra văn bản","Text to Video":"Văn bản sang video","The administrator account is already initialized. You can keep your existing credentials and continue to the next step.":"Tài khoản quản trị viên đã được khởi tạo. Bạn có thể giữ nguyên thông tin đăng nhập hiện có cá»§a mình và tiếp tục sang bước tiếp theo.","The administrator configured an external link for this document.":"Người quản trị đã cấu hình một liên kết ngoài cho tài liệu này.","The administrator has not configured a privacy policy yet.":"Quản trị viên chưa cấu hình chính sách bảo mật.","The administrator has not configured a user agreement yet.":"Quản trị viên chưa cấu hình thỏa thuận người dùng.","The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.":"Quản trị viên chưa cấu hình bất kỳ nội dung giới thiệu nào. Bạn có thể thiết lập nó trong trang cài đặt, hỗ trợ HTML hoặc URL.","The binding will complete automatically after authorization":"Việc liên kết sẽ hoàn tất tá»± động sau khi á»§y quyền","The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.":"Sản phẩm đã liên kết dùng cho nạp ví: khi người dùng nhập bất kỳ số tiền nào, new-api chạy thanh toán trên một sản phẩm Pancake duy nhất này và ghi đè giá theo từng phiên — không cần tạo trước SKU $1 / $5 / $10.","The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.":"Cá»­a hàng đã liên kết là vùng chứa cha cho mọi sản phẩm Pancake mà new-api tạo từ trang quản trị này — bao gồm sản phẩm nạp ví và mọi sản phẩm gói đăng ký. Một cá»­a hàng là đủ; chỉ ghim cá»­a hàng khác nếu bạn thá»±c sá»± vận hành các catalog Pancake riêng.","The effective domain for Passkey registration. Must match the current domain or be its parent domain.":"Mi","The entered text does not match the required text.":"Văn bản đã nhập không khớp với văn bản yêu cầu.","The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.":"Môi trường (test hay production) được quyết định bởi khóa bạn dán tại đây — dùng khóa Test khi tích hợp, sau đó đổi sang khóa Production khi chạy chính thức.","The exact model identifier as used in API requests.":"Mã định danh mô hình chính xác 
107như được sá»­ dụng trong các yêu cầu API.","The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.":"Các mô hình sau có xung đột loại thanh toán (giá cố định so với thanh toán theo tá»· lệ). Xác nhận để tiếp tục với các thay đổi.","The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:":"Các mô hình sau trong chuyển hướng mô hình chưa được thêm vào danh sách \\"Mô hình\\" và có thể gọi thất bại do thiếu các mô hình có sẵn:","The mapped upstream model(s)":"Mô hình(s) thượng nguồn được ánh xạ","The model you\'re looking for doesn\'t exist.":"Mô hình bạn đang tìm kiếm không tồn tại.","The name displayed across the application":"Tên hiển thị trên ứng dụng","The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations":"URL công khai cá»§a máy chá»§, dùng cho callback OAuth, webhook và các tích hợp bên ngoài khác","The requested chat preset does not exist or has been removed.":"Cài đặt sẵn cuộc trò chuyện được yêu cầu không tồn tại hoặc đã bị xóa.","The setup wizard will use this database during initialization.":"Trình hướng dẫn thiết lập sẽ sá»­ dụng cÆ¡ sở dữ liệu này trong quá trình khởi tạo.","The site is not available at the moment.":"Trang web hiện không khả dụng.","The slug is appended to the URL:":"Slug được gắn vào URL:","The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.":"Đồng bộ hóa sẽ tìm nạp các mẫu và nhà cung cấp còn thiếu từ nguồn đã chọn. Các bản ghi hiện có chỉ được cập nhật khi bạn chấp thuận các xung đột.","The token group that will have a custom ratio":"The token group will have a custom ratio.","The unique identifier for this model":"Mã định danh duy nhất cho mô hình này","The unique name for this vendor":"Tên duy nhất cho nhà cung cấp này","The URL for this chat client.":"URL cá»§a ứng dụng chat này.","Theme":"Chá»§ đề","Theme preset":"Tùy chỉnh chá»§ đề","Theme Settings":"Cài đặt chá»§ đề","There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?":"Có cả mô hình cần thêm và xóa đang chờ, nhưng bạn chỉ chọn một loại. Xác nhận chỉ gá»­i các mục đã chọn?","These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.":"Các model này vẫn được chọn nhưng không còn xuất hiện trong danh sách upstream; tên chỉ là khóa nguồn trong model_mapping đã được loại. Điều chỉnh trước khi lưu.","These toggles affect whether certain request fields are passed through to the upstream provider.":"Các chuyển đổi này ảnh hưởng đến việc các trường yêu cầu nhất định có được chuyển đến nhà cung cấp dịch vụ đầu vào hay không.","Thinking Suffix Adapter":"Adapter hậu tố thinking","Thinking to Content":"Suy nghÄ© thành Nội dung","Third-party account bindings (read-only, managed by user in profile settings)":"Liên kết tài khoản bên thứ ba (chỉ đọc, do người dùng quản lý trong cài đặt hồ sÆ¡)","Third-party Payment Config":"Cấu hình thanh toán bên thứ ba","This action cannot be undone.":"Hành động này không thể hoàn tác.","This action cannot be undone. This will permanently delete your account and remove all your data from our servers.":"Hành động này không thể hoàn tác. Việc này sẽ xóa vÄ©nh viễn tài khoản cá»§a bạn và loại bỏ tất cả dữ liệu cá»§a bạn khỏi máy chá»
107§ cá»§a chúng tôi.","This action will permanently remove 2FA protection from your account.":"Hành động này sẽ vÄ©nh viễn gỡ bỏ tính năng bảo vệ","This channel is not an Ollama channel.":"Kênh này không phải là kênh Ollama.","This channel type does not support fetching models":"Loại kênh này không hỗ trợ lấy mô hình","This channel type requires additional configuration":"Loại kênh này yêu cầu cấu hình bổ sung","This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.":"Xác nhận này mở khóa các tính năng thanh toán, mã đổi thưởng, gói đăng ký và phần thưởng mời. Vui lòng đọc kỹ các tuyên bố.","This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.":"Thiết lập này kiểm soát giới hạn tốc độ yêu cầu mô hình. Giới hạn tuyến Web/API được cấu hình bằng biến môi trường và vẫn có thể trá
107º£ về 429.","This data may be unreliable, use with caution":"Dữ liệu này có thể không đáng tin cậy, sá»­ dụng thận trọng","This device does not support Passkey":"Thiết bị này không hỗ trợ Passkey","This device does not support Passkey verification.":"Thiết bị này không hỗ trợ xác minh Passkey.","This expression is too complex for the visual editor. Please switch to expression mode to edit.":"Biểu thức này quá phức tạp cho trình sá»­a trá»±c quan. Hãy chuyển sang chế độ biểu thức để chỉnh sá»­a.","This feature is experimental. Configuration format and behavior may change.":"Tính năng này đang ở giai đoạn thá»­ nghiệm. Định dạng cấu hình và hành vi có thể thay đổi.","This feature requires server-side WeChat configuration":"Tính năng này yêu cầu cấu hình WeChat phía máy chá»§","This may cause cache failures.":"Điều này có thể gây ra lỗi bộ nhớ đệm.","This may take a few moments while we validate the request and update your session.":"Việc này có thể mất vài phút trong khi chúng tôi xác thá»±c yêu cầu và cập nhật phiên cá»§a bạn.","This model has both fixed price and ratio billing conflicts":"Mô hình này có cả mâu thuẫn về thanh toán theo giá cố định và theo tá»· lệ.","This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.":"Mô hình này có cả giá cố định và cài đặt tá»· lệ. Lưu chế độ hiện tại sẽ ghi lại các trường xung đột.","This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.":"Mô hình này có cả giá cố định và cài đặt giá theo token. Lưu chế độ hiện tại sẽ ghi lại các trường xung đột.","This model is not available in any group, or no group pricing information is configured.":"Mô hình này không khả dụng trong bất kỳ nhóm nào, hoặc thông tin giá nhóm chưa được cấu hình.","This month":"Tháng này","This page has not been created yet.":"Trang này chưa được tạo.","This plan does not allow balance redemption":"Gói này không cho phép thanh toán bằng số dư","This project must be used in compliance with the":"Dá»± án này phải được sá»­ dụng tuân thá»§ theo","This record was written by a pre-upgrade instance and lacks audit info. Upgrade the instance to record server IP, callback IP, payment method and system version.":"Bản ghi này do bản cÅ© tạo và thiếu thông tin audit. Nâng cấp bản cài để lưu IP máy chá»§, IP callback, hình thức thanh toán và phiên bản hệ thống.","This site currently has {{count}} models enabled":"Trang này hiện đã bật {{count}} mô hình","This tier catches any request that did not match earlier tiers.":"Tầng này bắt mọi yêu cầu không khớp với các tầng trước.","this token group":"nhóm token này","this user group":"nhóm người dùng này","This user has no bindings":"Người dùng này không có liên kết nào","This week":"Tuần này","This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.":"Thao tác này sẽ thêm 2 quy tắc mẫu (Codex CLI và Claude CLI) vào danh sách quy tắc hiện có.","This will clear custom pricing ratios and revert to upstream defaults.":"Điều này sẽ xóa các tá»· lệ giá tùy chỉnh và trở về mặc định ban đầu.","This will delete all":"Thao tác này sẽ xóa tất cả","This will delete all channel affinity cache entries still in memory.":"Thao tác này sẽ xóa tất cả mục bộ nhớ đệm ưu tiên kênh còn trong bộ nhớ.","This will delete temporary cache files that have not been used for more than 10 minutes":"Thao tác này sẽ xóa các tệp bộ nhớ đệm tạm không được sá»­ dụng hÆ¡n 10 phút","This will extend the deployment by the specified hours.":"Thao tác này sẽ kéo dài triển khai thêm số giờ được chỉ định.","This will permanently delete API key":"Thao tác này sẽ xóa vÄ©nh viễn khóa API","This will permanently delete redemption code":"Thao tác này sẽ xóa vÄ©nh viễn mã đổi thưởng.","This will permanently delete user":"Thao tác này sẽ xóa vÄ©nh viễn người dùng","This will permanently remove all log entries created before {{date}}.":"Thao tác này sẽ xóa vÄ©nh viễn tất cả các mục nhật ký được tạo trước {{date}}.","This will permanently remove log entries before the selected timestamp.":"Thao tác này sẽ xóa vÄ©nh viễn các mục nhật ký trước mốc thời gian đã chọn.","This year":"Năm nay","Three steps to get started":"Ba bước để bắt đầu","Throughput":"Thông lượng","Throughput by group":"Thông lượng theo nhóm","Throughput short":"TPS","Throughput trend":"Xu hướng thông lượng","Tier":"Bậc","Tier conditions":"Điều kiện tầng","Tier name":"Tên bậc","Tiered":"Nhiều bậc","Tiered (billing expression)":"Nhiều bậc (công thức tính phí)","Tiered price table":"Bảng giá theo bậc","Tiered pricing":"Định giá theo tầng","tiers":"tầng","Time":"Thời gian","Time Granularity":"Độ chi tiết thời gian","Time remaining":"Thời gian còn lại","Time window for rate limiting":"Cá»­a sổ thời gian cho giới hạn tốc độ","Time-based":"Theo thời gian","Time-sliced cache (Claude)":"Bộ đệm phân thời gian (Claude)","Time:":"Thời gian:","Timeline":"Dòng thời gian","times":"lần","Timing":"Thời gian","to access this resource.":"để truy cập tài nguyên này.","to confirm":"Chờ xác nhận","To Lower":"Chữ thường","To Lowercase":"Chuyển chữ thường","to override billing when a user in one group uses a token of another group.":"để ghi đè việc thanh toán khi một người dùng trong một nhóm sá»­ dụng token cá»§a một nhóm khác.","to the Models list so users can use them before the mapping sends traffic upstream.":"vào danh sách Mô hình để người dùng có thể sá»­ dụng chúng trước khi ánh xạ gá»­i lưu lượng truy cập lên phía trên.","To Upper":"Chữ hoa","To Uppercase":"Chuyển chữ hoa","to view this resource.":"để xem tài nguyên này.","Today":"Hôm nay","Toggle columns":"Chuyển đổi cột","Toggle navigation menu":"Chuyển đổi menu điều hướng","Toggle plan":"Chuyển đổi kế hoạch","Toggle theme":"Chuyển đổi giao diện","Token":"Mã thông báo","Token Breakdown":"Chi tiết token","Token Endpoint":"Điểm cuối Token","Token Endpoint (Optional)":"Điểm cuối Token (Tùy chọn)","Token estimator":"Ước tính token","Token group":"Nhóm token","Token management":"Quản lý token","Token Management":"Quản lý token","Token Mgmt":"Quản lý Token","Token Name":"Tên mã thông báo","Token obtained from your Gotify application":"Mã thông báo thu được từ ứng dụng Gotify cá»§a bạn","Token price for audio input.":"Giá token cho đầu vào âm thanh.","Token price for audio output.":"Giá token cho đầu ra âm thanh.","Token price for cache reads.":"Giá token cho lượt đọc cache.","Token price for creating cache entries.":"Giá token cho việc tạo mục cache.","Token price for image input.":"Giá token cho đầu vào hình ảnh.","Token prices":"Giá token","Token regenerated and copied to clipboard":"Token đã được tạo lại và sao chép vào bộ nhớ tạm","Token share by model author across the last 24 hours":"Tá»· lệ token theo 
107nhà phát triển trong 24 giờ qua","Token share by model author across the past few weeks":"Tá»· lệ token theo nhà phát triển trong vài tuần qua","Token share by model author across the past month":"Tá»· lệ token theo nhà phát triển trong tháng qua","Token share by model author across the past year":"Tá»· lệ token theo nhà phát triển trong năm qua","Token share by model author since launch":"Tá»· lệ token theo nhà phát triển kể từ khi ra mắt","Token unit":"Đơn vị token","Token usage by model since launch":"Sá»­ dụng token cá»§a từng mô hình kể từ khi ra mắt","Token-based":"Dá»±a trên token","Tokenizer":"Bộ token","tokens":"mã thông báo","Tokens":"Mã thông báo","tokens / mo":"token / tháng","Tokens by category":"Token theo danh mục","Tokens Only":"Chỉ mã thông báo","Tokens per minute":"Số token mỗi phút","Tokens since launch":"Token kể từ khi ra mắt","Tokens-only mode will show raw quota values regardless of this toggle.":"Chế độ Tokens-only sẽ hiển thị giá trị quota thô bất kể tùy chọn này.","Too many files. Some were not added.":"Quá nhiều tệp. Một số không được thêm.","Too many requests":"Quá nhiều yêu cầu","Tool / function declarations the model may call":"Khai báo công cụ / hàm mà model có thể gọi","Tool identifier":"Định danh công cụ","Tool price settings":"Cài đặt giá công cụ","Tool prices":"Giá công cụ","Tool-choice policy or specific tool name":"Chính sách chọn công cụ hoặc tên cụ thể","Tools":"Công cụ","Top {{count}}":"Top {{count}}","Top app":"Ứng dụng dẫn đầu","Top apps":"Ứng dụng hàng đầu","Top Apps":"Ứng dụng hàng đầu","Top integrations using this model":"Tích hợp hàng đầu sá»­ dụng mô hình này","Top model":"Mô hình dẫn đầu","Top models":"Mô hình hàng đầu","Top Models":"Người mẫu hàng đầu","Top models by traffic":"Mô hình có lượng truy cập cao nhất","Top up balance and view billing history.":"Nạp tiền vào tài khoản và xem lịch sá»­ thanh toán.","Top Users":"Người dùng hàng đầu","Top vendors":"Nhà cung cấp hàng đầu","Top-up":"Nạp tiền","Top-up amount options":"Tùy chọn số tiền nạp","Top-up Audit Info":"Thông tin audit nạp tiền","Top-up group ratios":"Tá»· lệ nhóm bổ sung","Top-Up Link":"Liên kết nạp tiền","top-up ratio":"tá»· lệ nạp tiền","Topup Amount":"Số tiền nạp","Total":"Tổng cộng","Total Allocated":"Tổng phân bổ","Total check-ins":"Tổng số lần điểm danh","Total consumed":"Tổng tiêu thụ","Total consumed quota":"Tổng hạn ngạch đã tiêu thụ","Total cost":"Tổng chi phí","Total Cost":"Tổng chi phí","Total Count":"Tổng số","Total earned":"Tổng thu nhập","Total Earned":"Total income","Total GPUs":"Tổng GPU","Total invitation revenue":"Tổng doanh thu mời","Total Log Size":"Tổng dung lượng nhật ký","Total Quota":"Tổng hạn mức","Total requests allowed per period. 0 = unlimited.":"Tổng số yêu cầu được phép mỗi kỳ. 0 = không giới hạn.","Total requests made":"Tổng lượt yêu cầu","Total tokens":"Tổng số token","Total Tokens":"Tổng số token","Total Usage":"Tổng Mức Sá»­ dụng","Total:":"Tổng cộng:","TPM":"TPM","Track per-request consumption to power usage analytics. Keeping this on increases database writes.":"Theo dõi mức tiêu thụ theo từng yêu cầu để phục vụ phân tích mức độ sá»­ dụng. Việc bật tính năng này làm tăng số lượt ghi vào cÆ¡ sở dữ liệu.","Track usage, costs and performance with real-time analytics":"Theo dõi sá»­ dụng, chi phí và hiệu suất với phân tích thời gian thá»±c","Tracked apps":"Ứng dụng được theo dõi","Tracks current account base limits and additional metered usage on Codex upstream.":"Theo dõi hạn cÆ¡ bản và mức dùng tính phí bổ sung cá»§a tài khoản ở phía upstream Codex.","Trading insights, accounting, advisory":"Phân tích giao dịch, kế toán, tư vấn","Transfer":"Chuyển","Transfer Amount":"Số tiền chuyển khoản","Transfer failed":"Chuyển thất bại","Transfer Rewards":"Chuyển thưởng","Transfer successful":"Chuyển thành công","Transfer to Balance":"Chuyển vào số dư","Translation":"Dịch thuật","Transparent Billing":"Thanh toán minh bạch","Trend":"Xu hướng","Trending down":"Đang giảm","Trending up":"Đang tăng","Triggered garbage collection":"Đã kích hoạt thu gom rác","Trim leading/trailing whitespace":"Xóa khoảng trắng đầu/cuối","Trim Prefix":"Cắt tiền tố","Trim Space":"Cắt khoảng trắng","Trim Suffix":"Cắt hậu tố","Truncate embeddings to this many dimensions":"Cắt embedding xuống số chiều này","Trusted":"Đáng tin cậy","Try adjusting your search":"Hãy thá»­ điều chỉnh tìm kiếm","Try adjusting your search to locate a missing model.":"Hãy thá»­ điều chỉnh tìm kiếm cá»§a bạn để định vị một mô hình bị thiếu.","TTFT P50":"TTFT P50","TTFT P95":"TTFT P95","TTFT P99":"TTFT P99","TTFT percentiles, throughput, and 30-day uptime by group":"Phân vị TTFT, thông lượng và thời gian hoạt động 30 ngày theo nhóm","TTL":"TTL","TTL (seconds, 0 = default)":"TTL (giây, 0 = mặc định)","TTL (seconds)":"TTL (giây)","Tune selection priority, testing, status handling, and request overrides.":"Tinh chỉnh ưu tiên chọn, kiểm thá»­, xá»­ lý trạng thái và ghi đè yêu cầu.","Turnstile is enabled but site key is empty.":"Turnstile đã được bật nhưng khóa trang web trống.","Tutoring, learning aids, assessment":"Gia sư, hỗ trợ học tập, đánh giá","Two-factor Authentication":"Xác thá»±c hai yếu tố","Two-Factor Authentication":"Xác thá»±c hai yếu tố","Two-factor authentication disabled":"Xác thá»±c hai yếu tố đã bị vô hiệu hóa","Two-factor authentication enabled successfully!":"Xác thá»±c hai yếu tố đã được bật thành công!","Two-factor authentication reset":"XÃ
107¡c thá»±c hai yếu tố đã được đặt lại","Two-Step Verification":"Xác minh hai bước","Type":"Loại","Type (common)":"Loại (phổ biến)","Type *":"Nhập *","Type a command or search...":"Nhập lệnh hoặc tìm kiếm...","Type the confirmation text here":"Nhập văn bản xác nhận tại đây","Type-Specific Settings":"Cài đặt theo loại","Type:":"Loại:","UI granularity only &mdash; data is still aggregated hourly":"Chỉ là độ chi tiết UI &mdash; dữ liệu vẫn được tổng hợp theo giờ","Unable to estimate price for this deployment.":"Không thể ước tính giá cho triển khai này.","Unable to generate chat link. Please contact your administrator.":"Không thể tạo liên kết trò chuyện. Vui lòng liên hệ quản trị viên cá»§a bạn.","Unable to load groups":"Không thể tải nhóm","Unable to load rankings":"Không thể tải bảng xếp hạng","Unable to load rankings data":"Không thể tải dữ liệu bảng xếp hạng","Unable to open chat":"Không thể mở trò chuyện","Unable to parse structured pricing":"Không thể phân tích giá có cấu trúc","Unable to prepare chat link. Please ensure you have an enabled API key.":"Không thể chuẩn bị liên kết chat. Vui lòng đảm bảo bạn có khóa API được kích hoạt.","Unauthorized":"Chưa xác thá»±c","Unauthorized Access":"Truy cập trái phép","Unbind":"Há»§y liên kết","Unbind failed":"Há»§y liên kết thất bại","Unbound {{provider}}":"Đã há»§y liên kết {{provider}}","Underground":"Underground","Understand how user groups, token groups, ratios, and special rules work together.":"Hiểu cách nhóm người dùng, nhóm token, tá»· lệ và quy tắc đặc biệt hoạt động cùng nhau.","Understand image inputs alongside text":"Hiểu hình ảnh cùng với văn bản","Unexpected release payload":"Dữ liệu phiên bản không mong đợi","Unified API Gateway for":"Cổng API thống nhất cho","Unique identifier for this group.":"Mã định danh duy nhất cho nhóm này.","Unit price (local currency / USD)":"Đơn giá (tiền tệ địa phương / USD)","Unit price (USD)":"Đơn giá (USD)","Unit price must be greater than 0":"Đơn giá phải lớn hÆ¡n 0","Units per USD":"Đơn vị trên USD","Unknown":"Không rõ","Unknown version":"Phiên bản không xác định","Unlimited":"Không giới hạn","Unlimited Quota":"Hạn mức không giới hạn","Unsaved changes":"Thay đổi chưa được lưu","Unset price":"Chưa đặt giá","Until":"Cho đến","Untitled":"Không có tiêu đề","Untrusted upstream data:":"Dữ liệu nguồn không đáng tin cậy:","Unused":"Chưa sá»­ dụng","Up to 4 strings that stop generation":"Tối đa 4 chuỗi để dừng sinh","Update":"Cập nhật","Update All Balances":"Cập nhật tất cả số dư","Update API Key":"Cập nhật Khóa API","Update Balance":"Cập nhật số dư","Update balance for:":"Cập nhật số dư cho:","Update Channel":"Cập nhật kênh","Update channel configuration and click save when you\'re done.":"Cập nhật cấu hình kênh và nhấp lưu khi bạn hoàn tất.","Update configuration":"Cập nhật cấu hình","Update failed":"Cập nhật thất bại","Update Model":"Cập nhật mô hình","Update model configuration and click save when you\'re done.":"Cập nhật cấu hình mô hình và nhấp lưu khi bạn hoàn tất.","Update plan info":"Cập nhật thông tin gói","Update Provider":"Cập nhật Nhà cung cấp","Update Redemption Code":"Cập nhật mã đổi thưởng","Update succeeded":"Cập nhật thành công","Update the API key by providing necessary info.":"Cập nhật khóa API bằng cách cung cấp thông tin cần thiết.","Update the configuration for this custom OAuth provider.":"Cập nhật cấu hình cho nhà cung cấp OAuth tùy chỉnh này.","Update the redemption code by providing necessary info.":"Cập nhật mã đổi thưởng bằng cách cung cấp thông tin cần thiết.","Update the reusable bundle below.":"Cập nhật gói có thể tái sá»­ dụng bên dưới.","Update the user by providing necessary info.":"Cập nhật cho người dùng bằng cách cung cấp thông tin cần thiết.","Update vendor information for {{name}}":"Cập nhật thông tin nhà cung cấp cho {{name}}","Update your password for account:":"Cập nhật mật khẩu cá»§a bạn cho tài khoản:","Update your password to keep your account secure":"Cập nhật mật khẩu cá»§a bạn để bảo mật tài khoản.","Updated":"Đã cập nhật","Updated a custom OAuth provider":"Đã cập nhật nhà cung cấp OAuth tùy chỉnh","Updated a deployment":"Đã cập nhật một triển khai","Updated a model":"Đã cập nhật một mô hình","Updated a prefill group":"Đã cập nhật một nhóm điền sẵn","Updated a redemption code":"Đã cập nhật một mã đổi thưởng","Updated a subscription plan":"Đã cập nhật một gói đăng ký","Updated a vendor":"Đã cập nhật một nhà cung cấp","Updated channel {{name}} (ID: {{id}})":"Đã cập nhật kênh {{name}} (ID: {{id}})","Updated daily":"Cập nhật hàng ngày","Updated successfully":"Cập nhật thành công","Updated system setting {{key}}":"Đã cập nhật cài đặt hệ thống {{key}}","Updated user {{username}} (ID: {{id}})":"Đã cập nhật người dùng {{username}} (ID: {{id}})","Updating all channel balances. This may take a while. Please refresh to see results.":"Đang cập nhật tất cả số dư kênh. Quá trình này có thể mất một chút thời gian. Vui lòng làm mới để xem kết quả.","Upgrade Group":"Nhóm nâng cấp","Upload":"Tải lên","Upload a single service account JSON file":"Tải lên một tệp JSON tài khoản dịch vụ","Upload file":"Tải tệp lÃ
107ªn","Upload files":"Tải tệp lên","Upload multiple JSON files in batch modes":"Tải lên nhiều tệp JSON trong chế độ hàng loạt","Upload or reference a local configuration file.":"Tải lên hoặc tham chiếu tệp cấu hình cục bộ.","Upload photo":"Tải ảnh lên","Upscale":"Phóng to","Upstream":"Thượng nguồn","Upstream Model Detection Settings":"Cài đặt phát hiện mô hình nguồn","Upstream Model Update Check":"Kiểm tra cập nhật mô hình nguồn","Upstream Model Updates":"Cập nhật mô hình upstream","Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models":"Đã áp dụng cập nhật mô hình upstream: {{added}} đã thêm, {{removed}} đã xóa, {{ignored}} bỏ qua lần này, {{totalIgnored}} tổng mô hình đã bỏ qua","Upstream price sync":"Đồng bộ giá thượng nguồn","Upstream prices fetched successfully":"Lấy giá upstream thành công","Upstream ratios fetched successfully":"Đã lấy tá»· lệ upstream thành công","Upstream Request ID":"ID yêu cầu thượng nguồn","Upstream Response":"Upstream feedback","upstream services integrated":"dịch vụ thượng nguồn tích hợp","Upstream Updates":"Cập nhật nguồn","uptime":"thời gian hoạt động","Uptime":"Thời gian hoạt động","Uptime (30d)":"Thời gian hoạt động (30 ngày)","Uptime (last 30 days)":"Thời gian hoạt động (30 ngày qua)","Uptime Kuma":"Uptime Kuma","Uptime Kuma groups saved successfully":"Đã lưu nhóm Uptime Kuma thành công","Uptime Kuma URL":"URL Uptime Kuma","Uptime since":"Thời gian hoạt động kể từ","URL":"URL","URL is required":"URL là bắt buộc","URL to your logo image (optional)":"URL hình ảnh logo cá»§a bạn (tùy chọn)","Usage":"Sá»­ dụng","Usage at a glance":"Tổng quan mức dùng","Usage guide":"Hướng dẫn sá»­ dụng","Usage logs":"Nhật ký sá»­ dụng","Usage Logs":"Nhật ký sá»­ dụng","Usage mode":"Chế độ sá»­ dụng","Usage-based":"Dá»±a trên sá»­ dụng","USD":"USD","USD Exchange Rate":"Tá»· giá USD","USD price per 1M input tokens.":"Giá USD cho mỗi 1 triệu token đầu vào.","USD price per 1M tokens.":"Giá USD cho mỗi 1 triệu token.","Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.":"Dùng +: để thêm nhóm, -: để xóa nhóm có thể chọn mặc định, hoặc không có tiền tố để nối nhóm.","Use a compatible browser or device with biometric authentication or a security key to register a Passkey.":"Sá»­ dụng trình duyệt hoặc thiết bị tương thích có xác thá»±c sinh trắc học hoặc khóa bảo mật để đăng ký Khóa truy cập.","Use authenticator code":"Sá»­ dụng mã xác thá»±c","Use backup code":"Sá»­ dụng mã dá»± phòng","Use disk cache when request body exceeds this size":"Sá»­ dụng bộ nhớ đệm đĩa khi nội dung yêu cầu vượt quá kích thước này","Use external tools to extend capabilities":"Sá»­ dụng công cụ ngoài để mở rộng khả năng","Use our unified OpenAI-compatible endpoint in your applications":"Sá»­ dụng endpoint thống nhất tương thích OpenAI trong ứng dụng cá»§a bạn","Use Passkey to sign in without entering your password.":"Sá»­ dụng Khóa truy cập để đăng nhập mà không cần nhập mật khẩu cá»§a bạn.","Use presets or upstream discovery to populate the model list faster.":"Dùng mẫu đặt sẵn hoặc phát hiện từ upstream để điền danh sách mô hình nhanh hÆ¡n.","Use secure connection when sending emails":"Sá»­ dụng kết nối an toàn khi gá»­i email","Use sidebar shortcut":"Sá»­ dụng phím tắt thanh bên","Use the full-width table to scan prices, then select a row to edit it here.":"Duyệt giá trong bảng, rồi chọn một hàng để chỉnh sá»­a tại đây.","Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.":"Dùng bảng nhóm định giá để quản lý tá»· lệ và việc nhóm có xuất hiện trong danh sách tạo token hay không.","Use this token for API authentication":"Sá»­ dụng token này để xác thá»±c API","Use your Passkey":"Sá»­ dụng Passkey cá»§a bạn","used":"đã sá»­ dụng, cÅ©","Used":"Đã sá»­ dụng","Used / Remaining":"Đã dùng / Còn lại","Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.":"Được dùng làm SuccessURL trên sản phẩm mới. Bạn sẽ được yêu cầu xác nhận nếu để trống.","Used for load balancing. Higher weight = more requests":"Được sá»­ dụng để cân bằng tải. Trọng số càng cao = càng nhiều yêu cầu","Used in URLs and API routes":"Sá»­ dụng trong URL và các tuyến API","Used Quota":"Hạn mức đã sá»­ dụng","Used to authenticate with io.net deployment API":"Dùng để xác thá»±c với API triển khai io.net","Used to authenticate with the worker. Leave blank to keep the existing secret.":"Dùng để xác thá»±c với worker. Để trống để giữ nguyên secret hiện có.","Used:":"Đã dùng:","User":"Người dùng","User {{id}}":"Người dùng {{id}}","User Agent":"Tác nhân người dùng","User Agreement":"Thỏa thuận người dùng","User Analytics":"Thống kê người dùng","User Consumption Ranking":"Xếp hạng tiêu thụ","User Consumption Trend":"Xu hướng tiêu thụ","User 
107created successfully":"Tạo người dùng thành công","User dashboard and quota controls.":"Bảng điều khiển người dùng và kiểm soát hạn ngạch.","User Exclusive Ratio":"Tỷ lệ riêng","User group":"Nhóm người dùng","User Group":"Nhóm người dùng","User group name":"Tên nhóm người dùng","User Group: {{ratio}}x":"Nhóm người dùng: {{ratio}}x","User groups that can access channels with this tag":"Nhóm người dùng có thể truy cập các kênh với thẻ này","User groups that can access this channel. ":"Các nhóm người dùng có thể truy cập kênh này.","User ID":"ID người dùng","User ID Field":"Trường ID Người dùng","User ID:":"ID người dùng:","User Info Endpoint":"Điểm cuối Thông tin Người dùng","User Info Endpoint (Optional)":"Điểm cuối Thông tin Người dùng (Tùy chọn)","User Information":"Thông tin người dùng","User Menu":"Menu người dùng","User personal functions":"Chức năng cá nhân người dùng","User selectable":"Người dùng có thể chọn","User Subscription Management":"Quản lý đăng ký người dùng","User updated successfully":"Cập nhật người dùng thành công","User Verification":"Xác minh người dùng","User-Agent include (one per line)":"User-Agent include (mỗi dòng một mục)","Username":"Tên người dùng","Username confirmation does not match":"Xác nhận tên người dùng không khớp","Username Field":"Trường Tên người dùng","Username or Email":"Tên đăng nhập hoặc Email","Users":"Người dùng","Users call the model on the left. The platform forwards the request to the upstream model on the right.":"Người dùng gọi mô hình bên trái. Nền tảng chuyển tiếp yêu cầu đến mô hình thượng nguồn bên phải.","Users must wait for a successful drawing before upscales or variations.":"Người dùng phải chờ vẽ thành công trước khi upscale hoặc biến thể.","Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.":"Người dùng chỉ thấy các nhóm được đánh dấu là có thể chọn. Nhóm không thể chọn vẫn có thể do quản trị viên gán.","uses":"sử dụng","Validity":"Hiệu lực","Validity Period":"Thời hạn hiệu lực","Value":"Giá trị","Value (supports JSON or plain text)":"Giá trị (hỗ trợ JSON hoặc văn bản thuần)","Value is required":"Giá trị là bắt buộc","Value must be at least 0":"Giá trị phải ít nhất là 0","Value Regex":"Regex giá trị","variable":"biến","variable) *":"biến) *","Variables":"Biến","Vary":"Biến thể","Vary (Strong)":"Biến thể (mạnh)","Vary (Subtle)":"Biến thể (nhẹ)","Vast Range of AI Models":"Số lượng lớn mô hình AI","Vendor":"Supplier","Vendor deleted successfully":"Đã xóa nhà cung cấp thành công","Vendor Name *":"Tên nhà cung cấp *","Vendor:":"Nhà cung cấp:","Vendors ranked by aggregated token volume":"Nhà cung cấp xếp hạng theo tổng lượng token","Verification code":"Mã xác minh","Verification Code":"Mã xác minh","Verification code must be 6 digits":"Mã xác thực phải có 6 chữ số","Verification code sent! Please check your email.":"Mã xác thực đã được gửi! Vui lòng kiểm tra email của bạn.","Verification code updates every 30 seconds.":"Mã xác minh cập nhật mỗi 30 giây.","Verification email sent":"Email xác thực đã được gửi","Verification failed":"Xác thực thất bại","Verification is not configured properly":"Xác thực chưa được cấu hình đúng cách","Verification required to reveal the saved key.":"Yêu cầu xác minh để tiết lộ khóa đã lưu.","Verify":"Kiểm tra","Verify and Sign In":"Xác minh và Đăng nhập","Verify routing with Playground or your client":"Xác minh định tuyến bằng Playground hoặc client của bạn","Verify Setup":"Xác minh thiết lập","Verify your database connection":"Xác minh kết nối cơ sở dữ liệu của bạn","Verifying credentials and pulling stores from your Pancake account...":"Đang xác minh thông tin xác thực và lấy cửa hàng từ tài khoản Pancake của bạn...","Version Overrides":"Ghi đè phiên bản","Vertex AI":"Vertex AI","Vertex AI API Key mode does not support batch creation":"Chế độ API Key của Vertex AI không hỗ trợ tạo hàng loạt","Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.":"Vertex AI không hỗ trợ functionResponse.id. Bật để tự động loại bỏ trường này.","Vertex AI Key Format":"Định dạng khóa Vertex AI","Vertex AI service account key must be valid JSON":"Khóa tài khoản dịch vụ Vertex AI phải là JSON hợp lệ","Video":"Video","Video length in seconds":"Độ dài video (giây)","Video Remix":"Remix video","Vidu":"Vidu","View":"Xem","View all currently available models":"Xem tất cả mô hình hiện có","Vie
107w detailed information about this user including balance, usage statistics, and invitation details.":"Xem thông tin chi tiết về người dùng này bao gồm số dư, thống kê sử dụng và chi tiết lời mời.","View details":"Xem chi tiết","View document":"Xem tài liệu","View logs":"Xem nhật ký","View mode":"Chế độ xem","View model statistics and charts":"Xem thống kê và biểu đồ mô hình","View Pricing":"View price","View the complete details for this":"Xem chi tiết đầy đủ của","View the complete details for this log entry":"Xem chi tiết đầy đủ cho mục nhật ký này","View the complete error message and details":"Xem toàn bộ thông báo lỗi và chi tiết","View the complete prompt and its English translation":"Xem toàn bộ lời nhắc và bản dịch tiếng Anh","View the generated image":"Xem ảnh đã tạo","View your topup transaction records and payment history":"Xem lịch sử giao dịch nạp tiền và lịch sử thanh toán của bạn","Viewed channel key {{name}} (ID: {{id}})":"Đã xem khóa kênh {{name}} (ID: {{id}})","Violation Code":"Mã vi phạm","Violation deduction amount":"Số tiền trừ vi phạm","Violation Fee":"Phí vi phạm","Violation Marker":"Đánh dấu vi phạm","vip":"vip","VIP users with premium access":"Người dùng VIP với quyền truy cập cao cấp","Vision":"Thị giác","Vision, image / video, document chat":"Thị giác, ảnh / video, hỏi đáp tài liệu","Visit Settings → General and adjust quota options...":"Truy cập Cài đặt → Chung và điều chỉnh tùy chọn hạn mức...","Visitors must authenticate before accessing the pricing directory.":"Khách truy cập phải xác thực trước khi truy cập thư mục giá.","Visitors must authenticate before accessing the rankings page.":"Khách truy cập phải xác thực trước khi truy cập trang bảng xếp hạng.","Visual":"Trực quan","Visual edit":"Chỉnh sửa trực quan","Visual editor":"Trình sửa trực quan","Visual Editor":"Trình soạn thảo trực quan","Visual indicator color for the API card":"Màu sắc chỉ báo trực quan cho thẻ API","Visual Mode":"Chế độ Trực quan","Visual Parameter Override":"Ghi đè tham số trực quan","VolcEngine":"VolcEngine","vs. previous":"so với kỳ trước","Waffo Aggregator Gateway":"Cổng tổng hợp Waffo","Waffo Pancake Dashboard":"Waffo Pancake Dashboard","Waffo Pancake MoR":"Waffo Pancake MoR","Waffo Pancake Payment Gateway":"Cổng thanh toán Waffo Pancake","Waffo Pancake product created":"Đã tạo sản phẩm Waffo Pancake","Waffo Pancake product creation failed":"Tạo sản phẩm Waffo Pancake thất bại","Waffo Pancake save failed":"Lưu Waffo Pancake thất bại","Waffo Pancake settings saved":"Đã lưu cài đặt Waffo Pancake","Waffo Payment":"Thanh toán Waffo","Waffo Payment Gateway":"Cổng thanh toán Waffo","Waffo Public Key (Production)":"Waffo Public Key (Sản xuất)","Waffo Public Key (Sandbox)":"Khóa công khai Waffo (Sandbox)","Waiting":"Đang chờ","Waiting for email...":"Đang chờ email...","Wallet":"Ví","Wallet First":"Ưu tiên ví","Wallet Management":"Quản lý ví","Wallet management and personal preferences.":"Quản lý ví và sở thích cá nhân.","Wallet Only":"Chỉ dùng ví","Warning":"Cảnh báo","Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.":"Cảnh báo: URL cơ sở không nên kết thúc bằng /v1. API mới sẽ xử lý tự động. Điều này có thể gây ra lỗi yêu cầu.","Warning: Disabling 2FA will make your account less secure.":"Cảnh báo: Vô hiệu hóa 2FA sẽ khiến tài khoản của bạn kém an toàn hơn.","Warning: This action is permanent and irreversible!":"Cảnh báo: Hành động này là vĩnh viễn và không thể đảo ngược!","We apologize for the inconvenience.":"Chúng tôi xin lỗi vì sự bất tiện này.","We could not load the setup status.":"Chúng tôi không thể tải trạng thái thiết lập.","We will prompt your device to confirm using biometrics or your hardware key.":"Chúng tôi sẽ yêu cầu thiết bị của bạn xác nhận bằng cách sử dụng sinh trắc học hoặc khóa bảo mật phần cứng của bạn.","We\'ll be back online shortly.":"Chúng tôi sẽ sớm trực tuyến trở lại.","Web search":"Tìm kiếm web","Web Search":"Tìm kiếm web","Webhook Configuration:":"Cấu hình Webhook:","Webhook public key (production)":"Khóa công khai Webhook (production)","Webhook public key (production) is required":"Bắt buộc 
107nhập khóa công khai Webhook (production)","Webhook public key (sandbox)":"Khóa công khai Webhook (sandbox)","Webhook public key (sandbox) is required":"Bắt buộc nhập khóa công khai Webhook (sandbox)","Webhook secret":"Bí mật webhook","Webhook Secret":"Bí mật Webhook","Webhook signing secret (leave blank unless updating)":"Mã bí mật ký webhook (để trống trừ khi cập nhật)","Webhook URL":"URL Webhook","Webhook URL (Production):":"Webhook URL (Production):","Webhook URL (Test):":"Webhook URL (Test):","Webhook URL:":"URL Webhook:","Website is under maintenance!":"Website đang bảo trì!","WeChat":"WeChat","WeChat login QR code":"Mã QR đăng nhập WeChat","WeChat Pay":"WeChat Pay","WeChat QR code will be displayed here":"Mã QR WeChat sẽ được hiển thị tại đây","WeChat sign in":"Đăng nhập WeChat","Week":"Tuần","Weekday":"Thứ trong tuần","Weekly":"Hàng tuần","Weekly token usage by model across the past few weeks":"Sử dụng token hàng tuần của từng mô hình trong vài tuần qua","Weekly token usage by model across the past year":"Sử dụng token theo mô hình hàng tuần trong năm qua","Weekly token usage by model since launch":"Sử dụng token theo mô hình hàng tuần kể từ khi ra mắt","Weekly Window":"Cửa sổ hàng tuần","Weight":"Trọng lượng","Weighted by request count":"Có trọng số theo số yêu cầu","Welcome back!":"Chào mừng trở lại!","Welcome to our New API...":"Chào mừng bạn đến với API mới của chúng tôi...","Well-Known URL":"URL đã biết","Well-Known URL must start with http:// or https://":"URL Well-Known phải bắt đầu bằng http:// hoặc https://","What would you like to know?":"Bạn muốn biết gì?","When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.":"Khi token dùng nhóm auto, hệ thống thử các nhóm từ trên xuống dưới cho đến khi tìm được nhóm khả dụng.","When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.":"Khi thỏa điều kiện, giá cuối nhân với X. Nhiều điều kiện khớp nhân lại với nhau; giá trị < 1 hoạt động như giảm giá.","When enabled, if channels in the current group fail, it will try channels in the next group in order.":"Khi được bật, nếu các kênh trong nhóm hiện tại thất bại, hệ thống sẽ thử các kênh của nhóm tiếp theo theo thứ tự.","When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel.":"Khi bật, giữ mục ưu tiên ngay cả khi kênh ưu tiên bị tắt hoặc không còn dùng được cho nhóm/mô hình hiện tại. Để tắt để xóa mục đó và chọn kênh khác.","When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.":"Khi bật, nội dung yêu cầu lớn sẽ được lưu tạm trên đĩa thay vì bộ nhớ, giảm đáng kể việc sử dụng bộ nhớ. Khuyến nghị dùng SSD.","When enabled, Midjourney callbacks are accepted (reveals server IP).":"Khi được bật, các callback của Midjourney được chấp nhận (lộ IP máy chủ).","When enabled, newly created tokens start in the first auto group.":"Khi được bật, các token mới được tạo sẽ bắt đầu trong nhóm tự động đầu tiên.","When enabled, prompts are scanned before reaching upstream models.":"Khi được bật,","When enabled, the store field will be blocked":"Khi được bật, trường store sẽ bị chặn","When enabled, users can pick this group when creating tokens.":"Khi bật, người dùng có thể chọn nhóm này khi tạo token.","When enabled, violation requests will incur additional charges.":"Khi bật, các yêu cầu vi phạm sẽ phải chịu phí bổ sung.","When enabled, zero-cost models also pre-consume quota before final settlement."
107:"Khi được bật, các mô hình không tốn phí cũng trừ trước hạn mức trước khi quyết toán cuối cùng.","When no conditions are set, the operation always executes.":"Khi không có điều kiện, thao tác luôn được thực thi.","When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.":"Khi giám sát hiệu suất được bật và mức sử dụng tài nguyên vượt quá ngưỡng, các yêu cầu Relay mới sẽ bị từ chối.","When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.":"Khi chạy trong container hoặc môi trường tạm thời, hãy đảm bảo tệp SQLite được ánh xạ vào bộ nhớ lưu trữ bền vững để tránh mất dữ liệu khi khởi động lại.","Whitelist":"Danh sách trắng","Whitelist (Only allow listed domains)":"Danh sách trắng (Chỉ cho phép các tên miền được liệt kê)","Whitelist (Only allow listed IPs)":"Danh sách trắng (Chỉ cho phép các IP đã liệt kê)","whsec_xxx":"whsec_xxx","Why only one store + product?":"Tại sao chỉ một cửa hàng + sản phẩm?","Window:":"Cửa sổ:","Wire encoding for the embedding vectors":"Định dạng truyền cho vector embedding","with conflicts":"với các xung đột","with the API key from your token settings.":"bằng API key từ trang Tokens của bạn.","Without additional conditions, only the type above is used for pruning.":"Không có điều kiện bổ sung, chỉ type ở trên được sử dụng để dọn dẹp.","Worker Access Key":"Khóa truy cập nhân viên","Worker Proxy":"Proxy Nhân viên","Worker URL":"URL của Worker","Workspaces":"Không gian làm việc","Write value to the target field":"Ghi giá trị vào trường đích","x":"x","xAI":"xAI","Xinference":"Xinference","Xunfei":"Xunfei","Year":"Năm","years":"năm","Yes":"Có","You are about to delete {{count}} API key(s).":"Bạn sắp xóa {{count}} khóa API.","You are running the latest version ({{version}}).":"Bạn đang sử dụng phiên bản mới nhất ({{version}}).","You can close this tab once the binding completes or a success message appears in the original window.":"Bạn có thể đóng tab này sau khi quá trình liên kết hoàn tất hoặc thông báo thành công xuất hiện trong cửa sổ gốc.","You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.":"Bạn có thể thêm chúng theo cách thủ công trong \\"Tên mô hình tùy chỉnh\\", nhấp vào \\"Điền\\" rồi gửi, hoặc sử dụng các thao tác bên dưới để xử lý tự động.","You can only check in once per day":"Bạn chỉ có thể điểm danh một lần mỗi ngày","You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.":"Bạn cam kết không sử dụng hệ thống này để thực hiện, hỗ trợ hoặc gián tiếp thực hiện các hành vi vi phạm luật và quy định hiện hành, yêu cầu quản lý, quy tắc nền tảng, lợi ích công cộng hoặc quyền và lợi ích hợp pháp của bên thứ ba.","You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.":"Bạn cam kết chỉ sử dụng API upstream, tài khoản, khóa, hạn mức và năng lực dịch vụ trong phạm vi ủy quyền hợp pháp nhận được từ nhà cung cấp dịch vụ upstream, nhà cung cấp mô hình hoặc chủ thể quyền liên quan, và sẽ không thực hiện bán lại, giao dịch, phân phối trái phép hoặc thương mại hóa không tuân thủ khác.","You don\'t have necessary permission":"Bạn không có quyền cần thiết","You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.":"Bạn đã nhận được ủy quyền hợp pháp cho API mô hình, tài khoản, khóa và hạn mức được kết nối.","You have unsaved changes":"Bạn có thay đổi chưa được lưu","You have unsaved changes. Are you sure you want to leave?":"Bạn có thay đổi chưa được lưu. Bạn có chắc chắn muốn rời đi không?","You Pay":"Bạn thanh toán","You save":"Bạn tiết kiệm","You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.":"Bạn hiểu và tự chịu trách nhiệm pháp lý phát sinh từ việc triển khai, vận hành và thu phí.","You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.":"Bạn hiểu rằng nhắc nhở tuân thủ này chỉ là thông báo rủi ro, không cấu thành tư vấn pháp lý, kết luận rà soát tuân thủ hoặc bảo đảm tính hợp pháp của việc sử dụng hệ thống; bạn nên tham khảo cố vấn pháp lý hoặc tuân thủ chuyên nghiệp dựa trên tình huống kinh doanh thực tế.","You will be redirected to Telegram to complete the binding process.":"Bạn sẽ được chuyển hướng đến Telegram để hoàn tất quá trình liên kết.","You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.":"Bạn sẽ được chuyển hướng tự động. Bạn có thể quay lại trang trước nếu không có gì xảy ra sau vài giây.","your AI integration?":"tích hợp AI của bạn?","Your Azure OpenAI endpoint URL":"URL điểm cuối Azure OpenAI của bạn","Your Bot Name":"Tên Bot của bạn","Your Cloudflare Account ID":"ID tài khoản Cloudflare của bạn","Your Discord OAuth Client ID":"Discord OAuth Client ID của bạn","Your Discord OAuth Client Secret":"Discord OAuth Client Secret 
107của bạn","Your GitHub OAuth Client ID":"Client ID OAuth GitHub của bạn","Your GitHub OAuth Client Secret":"Bí mật ứng dụng OAuth của GitHub của bạn","Your new backup codes are ready":"Mã dự phòng mới của bạn đã sẵn sàng","Your Referral Link":"Liên kết giới thiệu của bạn","Your setup guide is collapsed so usage stays in focus.":"Hướng dẫn thiết lập đã thu gọn để giữ phần sử dụng ở vị trí nổi bật.","Your system access token for API authentication. Keep it secure and don\'t share it with others.":"Mã truy cập hệ thống của bạn để xác thực API. Hãy giữ nó an toàn và đừng chia sẻ nó với người khác.","Your Telegram Bot Token":"Mã thông báo bot Telegram của bạn","Your transaction history will appear here":"Lịch sử giao dịch của bạn sẽ xuất hiện ở đây","Your Turnstile secret key":"Khóa bí mật Turnstile của bạn","Your Turnstile site key":"Khóa site Turnstile của bạn","Zero retention":"Không lưu dữ liệu","Zhipu":"Zhipu","Zhipu V4":"Zhipu V4","Zoom":"Zoom"}}'),L=JSON.parse('{"translation":{"360":"360","1000":"1000","10000":"10000","_copy":"_复制",",":",",", and":",和",",and ":",","、":"、","? This action cannot be undone.":"?此操作无法撤销。",". Please fix the JSON before saving.":"。请在保存前修复 JSON。",". This action cannot be undone.":"。此操作无法撤销。","...":"...","\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"":"\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"","({{total}} total, {{omit}} omitted)":"(共 {{total}} 个,省略 {{omit}} 个)","(Leave empty to dissolve tag)":"(留空以删除标签)","(Optional: redirect model names)":"(可选:重定向模型名称)","(Override all channels\' groups)":"覆盖所有渠道的分组","(Override all channels\' models)":"覆盖所有渠道的模型","[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]":"[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]":"[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]","{\\"original-model\\": \\"replacement-model\\"}":"{\\"original-model\\": \\"replacement-model\\"}","{{category}} Models":"{{category}} 模型","{{count}} channel(s) deleted":"已删除 {{count}} 个渠道","{{count}} channel(s) disabled":"已禁用 {{count}} 个渠道","{{count}} channel(s) enabled":"已启用 {{count}} 个渠道","{{count}} channel(s) failed to disable":"{{count}} 个渠道禁用失败","{{count}} channel(s) failed to enable":"{{count}} 个渠道启用失败","{{count}} days ago":"{{count}} 天前","{{count}} days remaining":"剩余 {{count}} 天","{{count}} disabled channel(s) deleted":"已删除 {{count}} 个已禁用的渠道","{{count}} hours ago":"{{count}} 小时前","{{count}} incidents":"{{count}} 起事件","{{count}} incidents in the last 24 hours":"最近 24 小时 {{count}} 个异常桶","{{count}} incidents in the last 30 days":"最近 30 天 {{count}} 起事件","{{count}} IP(s)":"{{count}} 个 IP","{{count}} log entries removed.":"已删除 {{count}} 条日志。","{{count}} minutes ago":"{{count}} 分钟前","{{count}} models":"{{count}} 个模型","{{count}} months ago":"{{count}} 个月前","{{count}} override":"{{count}} 个覆盖","{{count}} selected targets available for bulk copy.":"已选择 {{count}} 个目标,可用于批量复制。","{{count}} tiers":"{{count}} 档","{{count}} vendors":"{{count}} 家厂商","{{count}} weeks ago":"{{count}} 周前","{{field}} updated to {{value}}":"{{field}} 已更新为 {{value}}","{{field}} updated to {{value}} for tag: {{tag}}":"标签「{{tag}}」的 {{field}} 已更新为 {{value}}","{{method}} {{route}}":"{{method}} {{route}}","{{modality}} not supported":"不支持 {{modality}}","{{modality}} supported":"支持 {{modality}}","{{n}} model(s) selected":"已选 {{n}} 个模型","{{value}}ms":"{{value}} 毫秒","{{value}}s":"{{value}} 秒","@lobehub/icons key":"@lobehub/icons 键","@lobehub/icons key name":"@lobehub/icons 键名","/status/":"/status/","/your/endpoint":"/your/endpoint","#1 App":"#1 应用","#1 by usage":"使用量第一","#1 Model":"#1 模型","% off":"折","`, and `-nothinking` suffixes while routing to the correct Gemini variant.":"`, 和 `-nothinking` 后缀,同时路由到正确的 Gemini 变体。","© 2025 Your Company. All rights reserved.":"© 2025 您的公司。保留所有权利。","+{{count}} more":"还有 {{count}} 项","| Based on":"| 基于","0 means data is kept permanently":"0 表示永久保留数据","0 means unlimited":"0 表示不限","1 Day":"1 天","1 day ago":"1 天前","1 hour":"1 小时","1 Hour":"1 小时","1 hour ago":"1 小时前","1 minute":"1 分钟","1 minute ago":"1 分钟前","1 Month":"1 个月","1 month ago":"1 个月前","1 week ago":"1 周前","1 year ago":"1 年前","1. Create an application in your Gotify server"
107:"1. 在您的 Gotify 服务器中创建一个应用程序","10 / page":"10 条/页","100 / page":"100 条/页","14 Days":"14 天","192.168.1.1&#10;10.0.0.0/8":"192.168.1.1&#10;10.0.0.0/8","1M":"1 个月","1W":"1 周","2. Copy the application token":"2. 复制应用程序令牌","20 / page":"20 条/页","24 Hours":"24 小时","24 hours ago":"24 小时前","29 Days":"29 天","3. Enter your Gotify server URL and token above":"3. 在上方输入您的 Gotify 服务器 URL 和令牌","30 Days":"30 天","30 days ago":"30 天前","30d change":"30 天变化","5 minutes":"5 分钟","5-Hour Window":"5小时窗口","50 / page":"50 条/页","7 Days":"7 天","7 days ago":"7 天前","80,443,8080":"80,443,8080","A billing multiplier. Lower ratios mean lower API call costs.":"计费乘数,倍率越低,API 调用费用越低。","A focused home for keys, balance, routing, and service health.":"集中展示密钥、余额、路由和服务健康状态。","About":"关于","About {{days}} days left":"约剩 {{days}} 天","Accept Unpriced Models":"接受未定价模型","Accepts a JSON array of model identifiers that support the Imagine API.":"接受支持 Imagine API 的模型标识符的 JSON 数组。","Accepts comma-separated status codes and inclusive ranges.":"接受逗号分隔的状态码和包含性范围。","Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.":"通过统一、标准的接口协议接入海量模型。承载 AI 应用,高效管理数字资产,连接未来。","Access Denied Message":"访问被拒绝消息","Access Forbidden":"禁止访问","Access Policy (JSON)":"访问策略 (JSON)","Access previous conversations and start new ones.":"访问之前的对话并开始新的对话。","Access Token":"访问令牌","AccessKey / SecretAccessKey":"AccessKey / SecretAccessKey","Account Binding Management":"账户绑定管理","Account Bindings":"账户绑定","Account created! Please sign in":"账户已创建!请登录","Account deleted successfully":"账户删除成功","Account ID *":"账户 ID *","Account Info":"账户信息","Account used when authenticating with the SMTP server":"用于与 SMTP 服务器进行身份验证的账户","acknowledge the related legal risks":"确认相关法律风险","Across all groups":"跨所有分组","Action":"操作","Action confirmation":"操作确认","Actions":"操作","active":"活跃","Active":"生效","Active apps":"活跃应用","Active Cache Count":"活跃缓存数","Active Files":"活跃文件","Active models":"活跃模型","active users":"活跃用户","Actual Amount":"实付金额","Actual Model":"实际模型","Actual Model:":"实际模型:","Adapt `-thinking` suffix requests to Anthropic native thinking behavior while keeping billing predictable.":"将带 `-thinking` 后缀的请求适配为 Anthropic 原生思考请求,并保持计费可预测。","Add":"添加","Add \\"{{value}}\\"":"添加 \\"{{value}}\\"","Add {{title}}":"添加{{title}}","Add a group identifier to the auto assignment list.":"将分组标识符添加到自动分配列表。","Add a new API key by providing necessary info.":"通过提供必要信息添加新的 API 密钥。","Add a new channel by providing the necessary information.":"通过提供必要信息添加新的渠道。","Add a new model to the system by providing the necessary information.":"通过提供必要信息向系统添加新模型。","Add a new user by providing necessary info.":"通过提供必要信息来添加新用户。","Add a new vendor to the system":"向系统添加新供应商","Add an extra layer of security to your account":"为您的账户æ
107·»åŠ é¢å¤–çš„å®‰å…¨å±‚","Add and submit":"添加后提交","Add Announcement":"添加公告","Add API":"添加 API","Add API Shortcut":"添加 API 快捷方式","Add auto group":"添加自动分组","Add chat preset":"添加聊天预设","Add condition":"新增条件","Add Condition":"添加条件","Add credits":"添加额度","Add custom model \\"{{value}}\\"":"添加自定义模型“{{value}}”","Add discount tier":"添加折扣等级","Add each model or tag you want to include.":"添加您想要包含的每个模型或标签。","Add FAQ":"添加问答","Add from available models...":"从可用模型中添加...","Add Funds":"添加资金","Add group":"添加分组","Add Group":"添加分组","Add group rate limit":"添加组速率限制","Add group rules":"添加分组规则","Add Mapping":"添加映射","Add method":"添加方法","Add missing models":"添加缺失模型","Add Mode":"添加模式","Add model":"添加模型","Add Model":"添加模型","Add model pricing":"添加模型定价","Add Models":"新增模型","Add new amount":"添加新金额","Add new redemption code(s) by providing necessary info.":"通过提供必要信息添加新的兑换码。","Add OAuth Provider":"添加 OAuth 提供商","Add param/header":"新增参数/Header","Add payment method":"新增支付方式","Add photos or files":"添加照片或文件","Add product":"添加产品","Add Provider":"添加提供商","Add Quota":"添加配额","Add ratio override":"添加倍率覆盖","Add Row":"添加行","Add Rule":"添加规则","Add rule group":"新增规则组","Add selectable group":"添加可选分组","Add subscription":"新增订阅","Add tags...":"添加标签...","Add tier":"新增档位","Add time condition":"新增时间条件","Add time rule group":"新增时间规则组","Add Uptime Kuma Group":"添加 Uptime Kuma 分组","Add User":"添加用户","Add user group":"添加用户分组","Add your API keys, set up channels and configure access permissions":"添加 API 密钥,设置渠道并配置访问权限","Added {{count}} model(s)":"已添加 {{count}} 个模型","Added successfully":"新增成功","Additional Conditions":"附加条件","Additional information":"附加信息","Additional Information":"附加信息","Additional Limit":"附加额度","Additional Limits":"附加额度","Additional metered capability":"附加计费能力","Adjust filters, then search to refresh the logs.":"调整筛选条件,然后搜索以刷新日志。","Adjust Quota":"调整额度","Adjust response formatting, prompt behavior, proxy, and upstream automation.":"调整响应格式、提示词行为、代理和上游自动化。","Adjust the appearance and layout to suit your preferences.":"调整外观和布局以适应您的偏好。","Admin":"管理员","Admin access required":"需要管理员权限","Admin area":"管理员区域","Admin notes (only visible to admins)":"管理员备注(仅管理员可见)","Admin Only":"仅限管理员","Administer user accounts and roles.":"管理用户账户和角色。","Administrator account":"管理员账户","Administrator username":"管理员用户名","Advanced":"高级","Advanced Configuration":"高级配置","Advanced options":"高级选项","Advanced Options":"高级选项","Advanced platform configuration.":"高级平台配置。","Advanced Settings":"高级设置","Advanced text editing":"高级文本编辑","Aesthetic style":"画风","After clicking the button, you\'ll be asked to authorize the bot":"点击按钮后,您将被要求授权机器人","After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?":"禁用后用户端不再展示,但历史订单不受影响。是否继续?","After enabling, the plan will be shown to users. Continue?":"启用后套餐将在用户端展示。是否继续?","After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?":"作废后该订阅将立即失效,历史记录不受影响。是否继续?","After scanning, the binding will complete automatically":"扫描后,绑定将自动完成","Agent ID *":"代理 ID *","Aggregate tokens delivered across the platform":"平台累计输出的 Token 量","Aggregate traffic across every category":"聚合所有分类的整体流量","Aggregated across enabled groups":"已聚合各启用分组","Aggregated across the apps below":"已聚合下方应用","Aggregated traffic by upstream model provider":"按上游模型æ
107ä¾›å•†èšåˆçš„æµé‡","Aggregated usage metrics and trend charts.":"聚合使用指标和趋势图表。","aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.":"聚合 50+ AI 提供商于统一 API 之后。轻松管理访问、追踪成本、弹性扩展。","Aggregation bucket":"聚合时间桶","AGPL v3.0 License":"AGPL v3.0 协议","AI Application Infrastructure Foundation":"人工智能应用基座","AI model testing environment":"AI模型测试环境","AI models":"AI 模型","AI models supported":"支持的 AI 模型","AI Proxy":"AI Proxy","AI Proxy Library":"AI 代理库","AIGC2D":"AIGC2D","AILS":"AILS","AK/SK mode: use AccessKey|SecretAccessKey|Region":"AK/SK 模式:使用 AccessKey|SecretAccessKey|Region","Ali":"阿里","Alipay":"支付宝","All":"全部","All categories":"全部分类","All conditions must match before this tier is used.":"所有条件都匹配后才会使用此阶梯。","All edits are overwrite operations. Leave fields empty to keep current values unchanged.":"所有编辑都是覆盖操作。留空字段将保持当前值不变。","All files exceed the maximum size.":"所有文件都超过最大尺寸。","All Groups":"所有分组","All Models":"所有模型","All models in use are properly configured.":"所有正在使用的模型都已正确配置。","All Must Match (AND)":"全部满足(AND)","All requests must include":"所有请求必须携带","All Status":"所有状态","All Sync Status":"所有同步状态","All systems operational":"所有系统正常运行","All Tags":"所有标签","All Types":"所有类型","All upstream data is trusted":"所有上游数据均受信任","All Vendors":"所有供应商","All-time":"全部时间","Allocated Memory":"已分配内存","Allow accountFilter parameter":"允许 accountFilter 参数","Allow balance redemption":"允许余额兑换","Allow Claude beta query passthrough":"允许 Claude beta 查询透传","Allow clients to query configured ratios via `/api/ratio`.":"允许客户端通过 `/api/ratio` 查询配置的比例。","Allow HTTP image requests":"允许 HTTP 图像请求","Allow include usage obfuscation passthrough":"允许 include 用量混淆透传","Allow inference geography passthrough":"允许推理地理位置透传","Allow inference_geo passthrough":"允许 inference_geo 透传","Allow Insecure Origins":"允许不安全来源","Allow new users to register":"允许新用户注册","Allow Private IPs":"允许私有 IP","Allow registration with password":"允许使用密码注册","Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)":"允许请求私有 IP 范围 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)","Allow Retry":"允许重试","Allow safety_identifier passthrough":"允许透传 safety_identifier","Allow service_tier passthrough":"允许透传 service_tier","Allow speed passthrough":"允许 speed 透传","Allow upstream callbacks":"允许上游回调","Allow users to check in daily for random quota rewards":"允许用户每日签到获取随机额度奖励","Allow users to enter promo codes":"允许用户输入促销代码","Allow users to log in with password":"允许用户使用密码登录","Allow users to register and sign in with Passkey (WebAuthn)":"允许用户使用通行密钥 (WebAuthn) 注册和登录","Allow users to sign in with Discord":"允许用户使用 Discord 登录","Allow users to sign in with GitHub":"允许用户使用 GitHub 登录","Allow users to sign in with LinuxDO":"允许用户使用 LinuxDO 登录","Allow users to sign in with OpenID Connect":"允许用户使用 OpenID Connect 登录","Allow users to sign in with Telegram":"允许用户使用 Telegram 登录","Allow users to sign in with this provider":"允许用户使用此提供商登录","Allow users to sign in with WeChat":"允许用户使用微信登录","Allow using models without price configuration":"允许使用未配置价格的模型","Allowed":"允许","Allowed Origins":"允许的 Origins","Allowed Ports":"允许的端口","Already have an account?":"已有账户?","Always matches (default tier).":"始终匹配(默认档位)。","Amount":"金额","Amount cannot be changed when editing.":"编辑时无法更改数量。","Amount discount":"金额折扣","Amount Due":"应付金额","Amount must be a whole number":"金额必须为整数","Amount must be greater than 0":"金额必须大于 0","Amount of quota to credit to user account.":"添加到用户账户的配额数量。","Amount options must be a JSON array":"金额选项必须是 JSON 数组","Amount to pay:":"待支付金额:","An unexpected error occurred":"发生意外错误","and":"和","Announcement added. Click \\"Save Settings\\" to apply.":"公告已添加。点击 \\"保存设置\\" 以应用。","Announcement content":"公告内容","Announcement deleted. Click \\"Save Settings\\" to apply.":"公告已删除。点击 \\"保存设置\\" 以应用。","Announcement Details":"公告详情","Announcement displayed to users (supports Markdown & HTML)":"向用户显示的公告(支持 Markdown 和 HTML)","Announcement updated. Click \\"Save Settings\\" to apply.":"公告已更新。点击 \\"保存设置\\" 以应用。","Announcements":"公告","Announcements saved successfully":"公告保存成功","Answer":"答案","Answers for common access and billing questions":"访问与计费常见问题解答","Anthropic":"Anthropic","Any Match (OR)":"任一满足(OR)","API":"API","API Access":"API 访问","API Addresses":"API 地址","API Base URL (Important: Not Chat API) *":"API 基础 URL (重要:非聊天 API) *","API Base URL *":"API 基础 URL *","API Endpoints":"API 端点","API Info":"API 信息","API info added. Click \\"Save Settings\\" to apply.":"API 信息已添加。点击 \\"保存设置\\" 以应用。","API info deleted. Click \\"Save Settings\\" to apply.":"API 信息已删除。点击 \\"保存设置\\" 以应用。","API info saved successfully":"API 信息保存成功","API info updated. Click \\"Save Settings\\" to apply.":"API 信息已更新。点击 \\"保存设置\\" 以应用。","API key":"API 密钥","API Key":"API 密钥","API Key (one per line for batch mode)":"API 密钥(批量模式下每行一个)","API Key (Production)":"API 密钥(生产)","API Key (Sandbox)":"API 密钥(沙盒)","API Key *":"API 密钥 *","API Key created successfully":"API 密钥创建成功","API Key deleted successfully":"API 密钥删除成功","API Key disabled successfully":"API 密钥禁用成功","API Key enabled successfully":"API 密钥启用成功","API key from the provider":"来自提供商的 API 密钥","API key is required":"需要 API 密钥","API Key mode (does not support batch creation)":"API Key 模式(不支持批量创建)","API Key mode: use APIKey|Region":"API Key 模式:使用 APIKey|Region","API Key updated successfully":"API 密钥更新成功","API Keys":"API 密钥","API Private Key":"API 私钥","API Requests":"API 请求","API secret":"API 秘钥","API token management":"API令牌管理","API URL":"API URL","API usage records":"API使用记录","API2GPT":"API2GPT","App":"应用","App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.":"此处展示的应用排行为预览模拟数据,待后端对接完成后将替换为真实数据。","Append":"追加","Append mode: New keys will be added to the end of the existing key list":"追加模式:新键将添加到现有键列表的末尾","Append Template":"追加模板","Append to channel":"追加到渠道","Append to End":"追加到末尾","Append to existing keys":"追加到现有密钥","Append value to array / string / object end":"把值追加到数组/字符串/对象末尾","appended":"已追加","Application":"应用","Applied {{name}} pricing to {{count}} models":"已将 {{name}} 的定价应用到 {{count}} 个模型","Applied upstream model changes to {{count}} channels":"对 {{count}} 个渠道应用上游模型变更","Applied upstream model changes to channel (ID: {{id}})":"对渠道(ID: {{id}})应用上游模型变更","Applies to custom completion endpoints. JSON map of model → ratio.":"适用于自定义补全端点。模型 → 比例的 JSON 映射。","Apply All Upstream Updates":"应用所有上游更新","Apply Filters":"应用筛选器","Apply IP Filter to Resolved Domains":"对已解析的域应用 IP 筛选器","Apply Overwrite":"应用覆盖","Apply Sync":"应用同步","Applying...":"正在应用...","Approx.":"约","apps":"个应用","Apps":"应用","apps tracked":"个应用追踪中","Apps using the most tokens through new-api":"通过 new-api 消耗 Token 最多的应用","are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.":"也在此处列出。将它们从模型中移除,以保持 `/v1/models` 响应对用户友好并隐藏供应商特定的名称。","Are you sure you want to delete":"您确定要删除吗","Are you sure you want to delete {{count}} model(s)? This action cannot be undone.":"您确定要删除 {{count}} 个模型吗?此操作无法撤销。","Are you sure you want to delete all auto-disabled keys? This action cannot be undone.":"您确定要删除所有自动禁用的密钥吗?此操作无法撤销。","Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.":"确定要删除部署 \\"{{name}}\\" 吗?此操作不可撤销。","Are you sure you want to delete this key? This action cannot be undone.":"您确定要删除此密钥吗?此操作无法撤销。","Are you sure you want to disable all enabled keys?":"您确定要禁用所有已启用的密钥吗?","Are you sure you want to enable all keys?":"您确定要启用所有密钥吗?","Are you sure you want to manually complete this order? The user will be credited 
107with the corresponding quota.":"您确定要手动完成此订单吗?用户将获得相应的配额。","Are you sure you want to sign out? You will need to sign in again to access your account.":"您确定要退出登录吗?您需要再次登录才能访问您的账户。","Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.":"确定要解绑该用户的 {{provider}} 绑定吗?解绑后该用户将无法通过此方式登录。","Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.":"确定要解绑 {{provider}} 吗?解绑后将无法通过此方式登录。","Are you sure?":"您确定吗?","Area Chart":"面积图","Args (space separated)":"参数 (空格分隔)","Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.":"聊天客户端预设数组。每个项目都是一个对象,包含一个键值对:客户端名称及其 URL。","Asc":"升序","Ask anything":"随便问","Assigned by administrator only":"仅管理员分配","Assigned by administrators and used to represent a user level, such as default or vip.":"由管理员分配,用于表示用户等级,例如 default 或 vip。","Async task refund":"异步任务退款","At least one model regex pattern is required":"至少需要一个模型正则匹配模式","At least one valid key source is required":"至少需要一个有效的密钥来源","Attach":"附加","Audio":"音频","Audio comp.":"音频补全","Audio completion ratio":"音频补全倍率","Audio In":"音频输入","Audio input":"音频输入","Audio Input":"语音输入","Audio input price":"音频输入价格","Audio Input Price":"音频输入价格","Audio Out":"音频输出","Audio output":"音频输出","Audio Output":"语音输出","Audio output price":"音频输出价格","Audio output price requires an audio input price.":"音频输出价格需要先填写音频输入价格。","Audio playback failed":"音频无法播放","Audio Preview":"音乐预览","Audio ratio":"音频倍率","Audio Tokens":"语音 Token","Auth configured":"认证已配置","Auth Style":"认证方式","auth.resetPasswordConfirm.backToLogin":"返回登录","auth.resetPasswordConfirm.confirm":"确认重置密码","auth.resetPasswordConfirm.description":"确认重置请求以生成新密码。","auth.resetPasswordConfirm.retry":"重试 ({{seconds}}s)","auth.resetPasswordConfirm.success":"您的密码已成功重置","Authentication":"身份验证","Authentication Method":"认证方式","Authenticator code":"身份验证器代码","Authorization Endpoint":"授权端点","Authorization Endpoint (Optional)":"授权端点(可选)","Authorize":"授权","Auto":"自动","Auto (Circuit Breaker)":"自动分组(熔断)","Auto assignment order":"自动分配顺序","Auto Ban":"自动封禁","Auto detect (default)":"自动检测(默认)","Auto Disabled":"自动禁用","Auto group behavior":"自动分组行为","Auto Group Chain":"自动分组链","Auto refresh":"自动刷新","Auto Sync Upstream Models":"自动同步上游模型","Auto-disable status codes":"自动禁用状态码","Auto-discover":"自动发现","Auto-discovers endpoints from the provider":"自动从提供商发现端点","Auto-fill when one field exists and another is missing":"在一个字段有值、另一个缺失时自动补齐","Auto-retry status codes":"自动重试状态码","Automatically disable channel on repeated failures":"重复失败时自动禁用渠道","Automatically disable channels exceeding this response time":"自动禁用超出此响应时间的渠道","Automatically disable channels when tests fail":"当测试失败时自动禁用渠道","Automatically probe all channels in the background":"在后台自动探测所有渠道","Automatically replaces upstream callback URLs with the server address.":"自动将上游回调 URL 替换为服务器地址。","Automatically selects the best available group with circuit breaker mechanism":"自动选择可用分组,失败时触发熔断切换","Automatically sync model list when upstream changes are detected":"检测到上游模型变更时自动同步模型列表","Availability (last 24h)":"可用率(最近 24 小时)","Available":"可用","Available disk space":"可用磁盘空间","Available Models":"可用模型","Available Rewards":"可用奖励","Average latency":"平均延迟","Average latency, TTFT, and success rate by group":"各分组的平均延迟、首 Token 延迟和成功率","Average latency, TTFT, TPS, and success rate":"平均延迟、TTFT、TPS 和成功率","Average RPM":"平均 RPM","Average time-to-first-token (TTFT) by group":"各分组的平均首 Token 延迟(TTFT)","Average tokens per second sustained per group":"各分组持续输出的平均每秒 token 数","Average TPM":"平均 TPM","Average TTFT":"平均首 Token 延迟","AWS":"AWS","AWS Bedrock Claude Compat":"AWS Bedrock Claude 兼容模板","AWS Key Format":"AWS 密钥格式","Azure":"Azure","AZURE_OPENAI_ENDPOINT *":"AZURE_OPENAI_ENDPOINT *","Back":"返回","Back to Dashboard":"返回控制台","Back to Home":"返回主页","Back to login":"返回登录","Back to Models":"返回模型","Backed up":"已备份","Backgroun
107d job tracker for queued work.":"队列工作的后台作业跟踪器。","Backup Code":"备用代码","Backup code must be in format XXXX-XXXX":"备份代码必须为 XXXX-XXXX 格式","Backup codes regenerated successfully":"备份代码重新生成成功","Backup codes remaining: {{count}}":"剩余备份代码:{{count}}","Bad Request":"参数错误","Badge Color":"徽章颜色","Baidu":"百度","Baidu V2":"百度 V2","Balance":"余额","Balance and top-up management":"余额充值管理","Balance depleted":"余额已耗尽","Balance is shown in quota units":"余额以额度单位显示","Balance queried successfully":"余额查询成功","Balance updated successfully":"余额更新成功","Balance updated: {{balance}}":"余额已更新:{{balance}}","Bar Chart":"柱状图","Bark Push URL":"Bark 推送 URL","Base address provided by your Epay service":"您的 Epay 服务提供的基础地址","Base amount. Actual deduction = base amount × system group rate.":"基础金额,实际扣费 = 基础金额 × 系统分组倍率。","Base input and output token prices for this tier.":"此阶梯的基础输入和输出 token 价格。","Base input price only":"仅基础输入价格","Base Limits":"基础额度","Base multipliers applied when users select specific groups.":"当用户选择特定分组时应用的基础乘数。","Base Price":"基础价格","Base rate limit windows for this account.":"当前账号的基础额度窗口。","Base URL":"API 地址","Base URL is required for this channel type":"此渠道类型需要填写 Base URL","Base URL of your Uptime Kuma instance":"您的 Uptime Kuma 实例的基础 URL","Basic Authentication":"基本身份验证","Basic Configuration":"基本配置","Basic Info":"基本信息","Basic Information":"基本信息","Basic Templates":"基础模板","Batch Add (one key per line)":"批量添加(每行一个密钥)","Batch delete failed":"批量删除失败","Batch deleted {{count}} channels":"批量删除 {{count}} 个渠道","Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed":"批量检测完成:渠道 {{channels}} 个,新增 {{add}} 个,删除 {{remove}} 个,失败 {{fails}} 个","Batch detection failed":"批量检测失败","Batch disable failed":"批量禁用失败","Batch Edit":"批量编辑","Batch edit all channels with this tag. Leave fields empty to keep current values.":"批量编辑带有此标签的所有渠道。留空字段以保留当前值。","Batch Edit by Tag":"按标签批量编辑","Batch enable failed":"批量启用失败","Batch processing failed":"批量处理失败","Batch set tag for {{count}} channels":"批量为 {{count}} 个渠道设置标签","Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed":"已批量处理上游模型更新:渠道 {{channels}} 个,加入 {{added}} 个,删除 {{removed}} 个,失败 {{fails}} 个","Best for single-tenant deployments. Pricing and billing options stay hidden.":"适合单用户部署。定价和计费选项将被隐藏。","Best TTFT":"最优 TTFT","Billable input tokens":"计费输入 token","Billable output tokens":"计费输出 token","Billing":"计费","Billing & Payment":"计费与支付","Billing currency":"计费货币","Billing Details":"计费详情","Billing History":"计费历史","Billing Mode":"计费模式","Billing Process":"计费过程","Billing Source":"计费来源","Bind":"绑定","Bind a Pancake store + product":"绑定 Pancake 店铺和产品","Bind an email address to your account.":"将邮箱地址绑定到您的账户。","Bind Email":"绑定邮箱","Bind Telegram Account":"绑定 Telegram 账户","Bind WeChat Account":"绑定微信账户","Binding Information":"绑定信息","Binding successful!":"绑定成功!","Binding your {{provider}} account":"正在绑定您的 {{provider}} 账号","Binding...":"绑定中...","Bindings":"绑定","Blacklist":"黑名单","Blacklist (Block listed domains)":"黑名单(已阻止的域)","Blacklist (Block listed IPs)":"黑名单(已阻止的 IP)","Blank Rule":"空白规则","Blend":"混合","Block email aliases (e.g., [email protected])":"阻止电子邮件别名(例如,[email protected])","Blocked keywords":"已阻止的关键词","Blocks messages when sensitive keywords are detected.":"检测到敏感关键词时阻止消息。","Body param":"请求体参数","Border radius":"圆角","Bot Name":"机器人名称","Bot Protection":"机å
107™¨äººä¿æŠ¤","Bot Token":"机器人令牌","Bot:":"机器人:","Bound":"已绑定","Bound a subscription":"绑定了一个订阅","Bound Channels":"绑定渠道","Bound Only":"仅已绑定","Bound product:":"已绑定产品:","Bound store:":"已绑定店铺:","Bring channels back online after successful checks":"检查成功后使渠道恢复在线","Browse and compare":"浏览和比较","Browse available models and pricing":"浏览可用模型和价格","Browse rankings by category":"按行业浏览排行","Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.":"预算令牌 = 最大令牌数 × 比例。接受 0.002 到 1 之间的十进制数。建议与上游计费保持一致。","Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.":"预算令牌 = 最大令牌数 × 比例。接受 0.1 到 1 之间的十进制数。","Budget Tokens Ratio":"预算令牌比例","Budgets":"预算","Build on your API gateway in minutes":"几分钟内开始使用你的 API 网关","Built for developers,":"为开发者打造,","Built-in":"内置","Built-in Device":"内置设备","Built-in: phone fingerprint/face, or Windows Hello; External: USB security key":"内置:手机指纹/面部,或 Windows Hello;外部:USB 安全密钥","by":"由","By category":"按行业","By model author":"按模型厂商","Cache":"缓存","Cache create (1h) price":"1 小时缓存写入价格","Cache 
107create price":"缓存写入价格","Cache Creation":"缓存创建","Cache Creation (1h)":"缓存创建 (1h)","Cache Creation (5m)":"缓存创建 (5m)","Cache Directory":"缓存目录","Cache Directory Disk Space":"缓存目录磁盘空间","Cache Directory Info":"缓存目录信息","Cache Entries":"缓存条目","Cache mode":"缓存模式","Cache pricing":"缓存定价","Cache ratio":"缓存倍率","Cache Read":"缓存读取","Cache read price":"缓存读取价格","Cache repeated prompt prefixes for cheaper, faster reuse":"缓存重复的提示词前缀,复用更快、更省钱","Cache write":"缓存写入","Cache Write":"缓存写入","Cache Write (1h)":"缓存写入 (1h)","Cache Write (5m)":"缓存写入 (5m)","Cache write price":"缓存写入价格","Cached":"缓存","Cached input":"缓存输入","Calculated price: ${{price}} per 1M tokens":"计算价格:${{price}} / 1M tokens","Calculated ratio: {{ratio}}":"计算倍率:{{ratio}}","Calculating...":"计算中...","Call Count Distribution":"调用次数分布","Call Count Ranking":"调用次数排行","Call Proportion":"调用比例","Call Trend":"调用趋势","Callback address":"回调地址","Callback Caller IP":"回调调用者 IP","Callback notification URL":"回调通知地址","Callback Payment Method":"回调支付方式","Cancel":"取消","Cancelled":"已取消","Cancelled at":"作废于","Capabilities":"能力","Capture a reusable bundle of models, tags, or endpoints.":"捕获可重用的模型、标签或端点捆绑包。","Card view":"卡片视图","Category":"分类","Category Name":"分类名称","Category name is required":"分类名称不能为空","Category name must be less than 50 characters":"分类名称不能超过 50 个字符","Caution":"注意","CC Switch":"CC 切换","Centered":"居中","Chain":"链路","Change":"更改","Change language":"更改语言","Change Password":"更改密码","Change To":"更改为","Changed Fields":"变更字段","Changes are written to the settings draft on save.":"保存后会写入设置草稿。","Changing...":"修改中...","Channel":"渠道","Channel Affinity":"渠道亲和性","Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"渠道亲和性会基于从请求上下文或 JSON Body 提取的 Key,优先复用上一次成功的渠道。","Channel Affinity: Upstream Cache Hit":"渠道亲和性:上游缓存命中","Channel copied successfully":"渠道复制成功","Channel created successfully":"渠道创建成功","Channel deleted successfully":"渠道删除成功","Channel disabled successfully":"渠道禁用成功","Channel enabled successfully":"渠道启用成功","Channel Extra Settings":"渠道额外设置","Channel ID":"渠道 ID","Channel key":"渠道密钥","Channel key unlocked":"渠道密钥已解锁","Channel models":"渠道模型","Channel name is required":"渠道名称是必填的","Channel test completed":"渠道测试完成","Channel type is required":"渠道类型是必填的","Channel updated successfully":"渠道更新成功","Channel-specific settings (JSON format)":"渠道特定设置(JSON 格式)","Channel:":"渠道:","channel(s)? This action cannot be undone.":"渠道?此操作无法撤销。","Channels":"渠道","Channels deleted successfully":"渠道删除成功","Character chat, storytelling, persona":"角色对话、剧情创作、人设扮演","Chart Preferences":"图表偏好设置","Chart Settings":"图表设置","Chat":"聊天","Chat area":"聊天区域","Chat Area":"聊天区域","Chat Client Name":"聊天客户端名称","Chat client name is required":"聊天客户端名称为必填项","Chat configuration JSON":"聊天配置 JSON","Chat preset not found":"未找到聊天预设","Chat Presets":"聊天预设","Chat session management":"聊天会话管理","ChatCompletions -> Responses Compatibility":"ChatCompletions → 响应兼容","Check for updates":"检查更新","Check in daily to receive random quota rewards":"每日签到可获得随机额度奖励","Check in now":"立即签到","Check line {{line}} for a missing comma.":"请检查第 {{line}} 行是否缺少逗号。","Check out the Quick Start":"请查看 新手入门","Check resolved IPs against IP filters even when accessing by domain":"即使通过域名访问,也对照 IP 过滤器检查解析的 IP","Check-in failed":"签到失败","Check-in Rewards":"签到奖励","Check-in Settings":"签到设置","Check-in successful! Received":"签到成功!获得","Checked in":"已签到","Checking connection":"检查连接","Checking name...":"正在检查名称...","Checking updates...":"检查更新中...","checkout.session.completed":"checkout.session.completed","checkout.session.expired":"checkout.session.expired","ChatGPT Subscription (Codex)":"ChatGPT Subscription (Codex)","Chinese":"中文","Choose a username":"选择一个用户名","Choose an amount and payment method":"选择金额和支付方式","Choose between default expanded, compact icon-only, or full layout mode":"选择默认展开、紧凑图标模式或完整布局模式","Choose between inset, floating, or standard sidebar layout":"选择嵌入式、浮动式或标准侧边栏布局","Choose between left-to-right or right-to-left site direction":"选择从左到右或从右到左的站点方向","Choose between system preference, light mode, or dark mode":"选择系统偏好、浅色模式或深色模式","Choose channels to sync upstream ratio configurations from":"选择要同步上游比例配置的渠道","Choose Group":"选择分组","Choose how quota values are shown to users":"选择如何向用户展示配额
107值","Choose how the platform will operate":"选择平台的运行模式","Choose how to filter domains":"选择如何过滤域名","Choose how to filter IP addresses":"选择如何过滤 IP 地址","Choose the bundle type and define the items inside it.":"选择捆绑包类型并定义其中的项目。","Choose the default charts, range, and time granularity for model analytics.":"选择模型调用分析的默认图表、范围和时间粒度。","Choose where to fetch upstream metadata.":"选择从何处获取上游元数据。","Choose which charts are selected by default when opening model analytics.":"选择打开模型调用分析时默认选中的图表。","Classic (Legacy Frontend)":"经典前端","Claude":"Claude","Claude CLI Header Passthrough":"Claude CLI 请求头透传","Clean":"无冲突","Clean history logs":"清理历史日志","Clean logs":"清理日志","Clean up inactive cache":"清理不活跃缓存","Clean Up Log Files":"清理日志文件","Cleaned up {{count}} log files, freed {{size}}":"已清理 {{count}} 个日志文件,释放 {{size}}","Cleaning...":"正在清理...","Cleanup failed":"清理失败","Cleanup Mode":"清理方式","Clear":"清空","Clear all":"清除全部","Clear All":"清除全部","Clear All Cache":"清空全部缓存","Clear all filters":"清除所有筛选","Clear cache for this rule":"清空该规则缓存","Clear filters":"清除筛选器","Clear Mapping":"清除映射","Clear mode flags in prompts":"在提示中清除模式标志","Clear search":"清除搜索","Clear selection":"清除选择","Clear selection (Escape)":"清除选择 (Escape)","Cleared":"已清空","Cleared {{bindingType}} binding for user {{username}}":"清除用户 {{username}} 的 {{bindingType}} 绑定","Cleared all models":"已清除所有模型","Cleared channel affinity cache":"清除渠道亲和缓存","Cleared disk cache":"清除磁盘缓存","Cleared historical logs":"清理历史日志","Cleared log files":"清理日志文件","Click \\"Create Plan\\" to create your first subscription plan":"点击「新建套餐」创建您的第一个订阅套餐","Click \\"Generate\\" to create a token":"点击“生成”以创建令牌","Click any category to drill into its models, apps, and trends":"点击任意分类可下钻查看其模型、应用与趋势","Click for details":"点击查看详情","Click save when you\'re done.":"完成後點擊保存。","Click save when you&apos;re done.":"完成后点击保存。","Click the button below to bind your Telegram account":"点击下方按钮绑定您的 Telegram 账户","Click to open deployment":"点击打开部署","Click to preview audio":"点击预览音乐","Click to preview video":"点击预览视频","Click to update balance":"点击更新余额","Click to view Codex usage":"点击查看 Codex 使用量","Click to view full details":"点击查看详细信息","Click to view full error message":"点击查看完整错误信息","Click to view full prompt":"点击查看完整提示词","Click to view image":"点击查看图片","Client header value":"客户端请求头值","Client ID":"Client ID","Client Secret":"Client Secret","Close":"关闭","Close dialog":"关闭对话框","Close menu":"关闭菜单","Close Today":"今日关闭","Cloudflare":"Cloudflare","CNY":"元","CNY per USD":"人民币兑美元汇率","Code":"代码","Code generation, refactoring, autocomplete":"代码生成、重构、自动补全","Code interpreter":"代码解释器","Code samples":"调用示例","Codes copied!":"代码已复制!","Codex":"Codex","Codex Account & Usage":"Codex 账户和用量","Codex channels do not support batch creation":"Codex 渠道不支持批量创建","Codex channels use an OAuth JSON credential as the key.":"Codex 渠道使用 OAuth JSON 凭据作为密钥。","Codex CLI Header Passthrough":"Codex CLI 请求头透传","Codex credential must be a JSON object with access_token and account_id":"Codex 凭据必须是包含 access_token 和 account_id 的 JSON 对象","Cohere":"Cohere","Collapse":"收起","Collapse All":"全部收起","Collect relay latency and success-rate metrics for the model square.":"收集 Relay 延迟和成功率指标,用于模型广场展示。","Color":"颜色","Color is required":"颜色为必填项","Color preset":"颜色预设","Color:":"颜色:","Comfortable":"宽松","Coming Soon!":"即将推出!","Comma-separated exact model names. Prefix with regex: to ignore by regular expression.":"使用英文逗号分隔精确模型名。以 regex: 开头可使用正则表达式忽略。","Comma-separated list of allowed ports (empty = all ports)":"允许的端口的逗号分隔列表(留空 = 所有端口)","Comma-separated model names (leave empty to keep current)":"逗号分隔的模型名称(留空以保持当前设置)","Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo":"逗号分隔的模型名称,例如 gpt-4,gpt-3.5-turbo","Command":"命令","Common":"通用","Common Keys":"常用 Key","Common Logs":"通用日志","Common ports include 25, 465, and 587":"常用端口包括 25、465 和 587","Common User":"普通用户","Community driven, self
107-hosted, and extensible":"社区驱动、可自托管、易于扩展","Compact":"紧凑","Compare each vendor\'s token share across the past few weeks":"对比过去几周各厂商的 Token 份额","Compare each vendor\'s token share across the past year":"对比过去一年各厂商的 Token 份额","Compare each vendor\'s token share over the past 24 hours":"对比过去 24 小时各厂商的 Token 份额","Compare each vendor\'s token share over the past month":"对比过去一个月各厂商的 Token 份额","Compare each vendor\'s token share since launch":"对比自上线以来各厂商的 Token 份额","Compare the most popular models on the platform":"对比平台上最受欢迎的模型","compatible API routes":"兼容 API 路由","Compatible API routes for common AI application workflows":"兼容常见 AI 应用工作流的 API 路由","Complete API documentation with multi-language SDK support":"完整的 API 文档,支持多语言 SDK","Complete Order":"补单","Complete these steps to finish the initial installation.":"完成这些步骤以完成初始安装。","Completed":"已完成","Completed top-up order for the user":"为用户完成补单","Completion":"补全","Completion price":"补全价格","Completion price ($/1M tokens)":"完成价格(美元/百万令牌)","Completion ratio":"补全倍率","Compliance confirmation required":"需要确认合规条款","Compliance confirmed":"合规已确认","Compliance confirmed successfully":"合规确认成功","Concatenate channel system prompt with user&apos;s prompt":"将渠道系统提示与用户的提示连接起来","Condition Path":"条件路径","Condition Settings":"条件项设置","Condition Value":"条件值","Conditional multipliers":"条件乘数","Conditions":"条件","Conditions (AND)":"条件(AND)","Confidence":"置信度","Configuration":"配置","Configuration File":"配置文件","Configuration for Creem payment integration":"Creem 支付集成的配置","Configuration for Epay payment integration":"Epay 支付集成的配置","Configuration for Stripe payment integration":"Stripe 支付集成的配置","Configuration required":"需要配置","Configure":"配置","Configure a Creem product for user recharge options.":"为用户充值选项配置 Creem 产品。","Configure a custom ratio for when users use a specific token group.":"配置用户使用特定令牌分组时的自定义倍率。","Configure a group that users can select when creating API keys.":"配置用户在创建 API 密钥时可以选择的分组。","Configure a new custom OAuth provider for user authentication.":"配置新的自定义OAuth提供商用于用户认证。","Configure a payment method for user recharge options.":"配置用于用户充值选项的支付方式。","Configure a predefined chat link for end users.":"为终端用户配置预定义的聊天链接。","Configure and deploy a new container instance.":"配置并部署一个新的容器实例。","Configure API documentation links for the dashboard":"配置仪表板的 API 文档链接","Configure at:":"配置位置:","Configure available payment methods. Provide a JSON array.":"配置可用的支付方式。提供一个 JSON 数组。","Configure Creem products. Provide a JSON array.":"配置 Creem 产品。提供 JSON 数组。","Configure discount rates based on recharge amounts":"配置基于充值金额的折扣率","Configure experimental data export for the dashboard":"配置仪表板的实验性数据导出","Configure in your Creem dashboard":"在您的 Creem 仪表板中配置","Configure keyword filtering for prompts and responses.":"配置用于提示和响应的关键词过滤。","Configure model, caching, and group ratios used for billing":"配置用于计费的模型、缓存和分组比例","Configure monitoring status page groups for the dashboard":"配置用于仪表板的监控状态页面分组","Configure per-model ratio for image inputs or outputs.":"配置图像输入或输出的每模型比例。","Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.":"为每个工具配置单价($/1K 次调用)。按请求计费的模型不额外收取工具费用。","Configure pricing ratios for a specific model.":"配置特定模型的定价比例。","Configure rate limiting rules for a specific user group.":"配置特定用户分组的速率限制规则。","Configure the ratio for this group.":"配置此分组的比例。","Configure upstream providers and routing.":"配置上游提供者和路由。","Configure Waffo Pancake hosted checkout integration for USD-priced top-ups":"配置 Waffo Pancake 托管结账,用于美元计价的充值","Configure Waffo payment aggregation platform integration":"配置 Waffo 支付聚合平台集成","Configure your account behavior preferences":"配置您的账户行为偏好","Configure your account preferences and integrations":"配置您的账户偏好和集成","Configured routes and latency checks":"已配置路由和延迟检测","Confirm":"确认","Confirm Action":"确认操作","Confirm and enable":"确认并启用","Confirm Batch Update":"确认批量更新","Confirm Billing Conflicts":"确认账单冲突","Confirm Changes":"确认更改","Confirm Cleanup":"确认清理","Confirm cleanup of inactive disk cache?":"确认清理不活跃的磁盘缓存?","Confirm clearing all channel affinity cache":"确认清空全部渠道亲和性缓存","Confirm clearing cache for this rule":"确认清空该规则缓存","Confirm compliance":"确认合规","Confirm compliance terms":"确认合规条款","Confirm Creem Purchase":"确认 Creem 购买","Confirm delete":"确认删除","Confirm disable":"确认禁用","Confirm enable":"确认启用","Confirm invalidate":"确认作废","Confirm log cleanup":"确认日志清理","Confirm log file cleanup?":"确认清理日志文件?","Confirm New Password":"确认新密码","Confirm password":"确认密码","Confirm Payment":"确认付款","Confirm Selection":"确认选择","Confirm settings and finish setup":"确认设置并完成安装","confirm that I bear legal responsibility arising from deployment":"确认我承担因部署产生的法律责任","Confirm Unbind":"确认解绑","Confirm your identity before removing this Passkey from your account.":"在解绑当前账号的 Passkey 前请确认你的身份。","Confirm your identity with Two-factor Authentication before registering a Passkey.":"在注册 Passkey 前请使用两步验证确认你的身份。","Confirmed at {{time}} by user #{{userId}}":"用户 #{{userId}} 于 {{time}} 确认","Confirmed payment compliance":"确认支付合规","Conflict":"矛盾","Connect":"连接","Connect through OpenAI, Claude, Gemini, and other compatible API routes":"通过 OpenAI、Claude、Gemini 以及其他兼容 API 路由接入","Connected to io.net service normally.":"已正常连接 io.net 服务。","Connection error":"连接错误","Connection failed":"连接失败","Connection successful":"连接成功","Console":"控制台","Console area":"控制台区域","Console Area":"控制台区域","Console Content":"控制台内容","Consume":"消耗","Consumed 
107in the last 24 hours":"近 24 小时消耗量","Container":"容器","Container name":"容器名称","Containers":"容器","Contains":"包含","Contains Match":"包含匹配","Content":"内容","Content displayed on the home page (supports Markdown)":"主页上显示的内容(支持 Markdown)","Content not found.":"内容未找到。","Content not modified!":"内容未修改!","Content width":"内容宽度","Context":"上下文","Continue":"继续","Continue with {{name}}":"使用 {{name}} 继续","Continue with Discord":"使用 Discord 继续","Continue with GitHub":"使用 GitHub 继续","Continue with LinuxDO":"使用 LinuxDO 继续","Continue with OIDC":"使用 OIDC 继续","Continue with Telegram":"使用 Telegram 继续","Continue with WeChat":"使用 微信 继续","Contract review, compliance, summarisation":"合同审阅、合规与摘要","Control which models are exposed and which groups may use them.":"控制对外暴露的模型,以及哪些分组可以使用它们。","Controls how much the model thinks before answering":"控制模型回答前的推理深度","Controls whether user verification (biometrics/PIN) is required during Passkey flows.":"控制在通行密钥流程中是否需要用户验证(生物识别/PIN)。","Conversion rate from USD to your custom currency":"从美元到您的自定义货币的转换率","Convert reasoning_content to <think> tag in content":"将 reasoning_content 转换为 content 中的 <think> 标签","Convert string to lowercase":"把字符串转成小写","Convert string to uppercase":"把字符串转成大写","Copied":"已复制","Copied {{count}} key(s)":"已复制 {{count}} 个密钥","Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})":"复制渠道(源 ID: {{sourceId}})为 {{name}}(新 ID: {{id}})","Copied to clipboard":"已复制到剪贴板","Copied: {{model}}":"已复制: {{model}}","Copied!":"已复制!","Copy":"复制","Copy {{name}} pricing":"复制 {{name}} 定价","Copy a request header":"复制请求头","Copy All":"全部复制","Copy all backup codes":"复制所有备份代码","Copy All Codes":"复制所有代码","Copy API key":"复制 API 密钥","Copy Channel":"复制渠道","Copy code":"复制代码","Copy Connection Info":"复制连接信息","Copy failed":"复制失败","Copy Field":"复制字段","Copy Header":"复制请求头","Copy Key":"复制密钥","Copy Link":"复制链接","Copy model name":"复制模型名称","Copy model names":"复制模型名称列表","Copy prompt":"复制提示词","Copy ready-to-run curl":"复制可直接运行的 curl","Copy redemption code":"复制兑换码","Copy referral link":"复制推荐链接","Copy Request Header":"复制请求头","Copy secret key":"复制密钥","Copy selected codes":"复制选定的代码","Copy selected keys":"复制选定的密钥","Copy source field to target field":"把来源字段复制到目标字段","Copy the key and paste it here":"复制密钥并粘贴到这里","Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.":"复制以下提示词发送给 LLM(如 ChatGPT / Claude),让它帮你设计计费表达式","Copy to clipboard":"复制到剪贴板","Copy token":"复制令牌","Copy URL":"复制 URL","Copying...":"正在复制...","Copywriting, ad creative, SEO":"文案、广告创意、SEO","Core concepts":"核心概念","Core Configuration":"核心配置","Core Features":"核心功能","Core pricing":"核心定价","Cost":"费用","Cost in USD per request, regardless of tokens used.":"每请求的美元费用,不考虑使用的令牌数。","Cost Tracking":"成本跟踪","Count must be between {{min}} and {{max}}":"计数必须介于{{min}}和{{max}}
107之间","Coze":"Coze","CPU Threshold (%)":"CPU 阈值 (%)","Create":"新建","Create a copy of:":"创建副本:","Create a key for your app or service":"为你的应用或服务创建密钥","Create a new user group to configure ratio overrides for.":"创建一个新的用户分组来配置比例覆盖。","Create account":"创建账户","Create an account":"创建一个账户","Create an API key to unlock the real request":"创建 API 密钥以解锁真实请求","Create and review invite or credit codes.":"创建和审查邀请或信用代码。","Create API Key":"创建 API 密钥","Create cache":"创建缓存","Create cache ratio":"创建缓存倍率","Create Channel":"创建渠道","Create Code":"创建代码","Create credentials for the root user":"为管理员创建登录凭据","Create deployment":"创建部署","Create Model":"创建模型","Create multiple API keys at once (random suffix will be added to names)":"一次性创建多个 API 密钥(名称将添加随机后缀)","Create multiple channels from multiple keys":"从多个密钥创建多个渠道","Create multiple redemption codes at once (1-100)":"一次创建多个兑换码 (1-100)","Create new subscription plan":"创建新的订阅套餐","Create or update frequently asked questions for users":"创建或更新用户的常见问题","Create or update system announcements for the dashboard":"创建或更新仪表板的系统公告","Create Plan":"新建套餐","Create Prefill Group":"创建预填充组","Create Provider":"创建提供商","Create Redemption Code":"创建兑换码","Create request parameter override rules with a visual editor or raw JSON.":"使用可视化编辑器或原始 JSON 创建请求参数覆盖规则。","Create request parameter override rules without editing raw JSON.":"无需编辑原始 JSON 即可创建请求参数覆盖规则。","Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.":"创建模型、标签、端点和用户分组的可重用捆绑包,以加快控制台中其他地方的配置速度。","Create succeeded":"创建成功","Create Vendor":"创建供应商","Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.":"创建您的第一个分组,以便在仪表板的任何位置重用模型、标签或端点选择。","Create, revoke, and audit API tokens.":"创建、撤销和审计 API 令牌。","Created":"创建时间","Created {{count}} redemption codes named {{name}} ({{quota}} each)":"创建 {{count}} 个兑换码 {{name}}(每个 {{quota}})","Created a custom OAuth provider":"创建了一个自定义 OAuth 提供方","Created a deployment":"创建了一个部署","Created a model":"创建了一个模型","Created a prefill group":"创建了一个预填组","Created a subscription plan":"创建了一个订阅计划","Created a vendor":"创建了一个供应商","Created At":"创建时间","Created channel {{name}} (type {{type}}, count {{count}})":"创建渠道 {{name}}(类型 {{type}},数量 {{count}})","Created user {{username}} (role {{role}})":"创建用户 {{username}}(角色 {{role}})","Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.":"使用此套餐的标题和价格,在已保存的店铺中创建 Pancake 产品。需要先在支付设置中完整配置 Waffo Pancake。","Creating...":"创建中...","Creation failed":"创建失败","Credential refreshed":"凭据已刷新","Credentials":"凭证","Credentials verification failed":"凭证验证失败","Credentials verification failed — double-check Merchant ID and API private key.":"凭证验证失败,请检查 Merchant ID 和 API 私钥。","Credit remaining":"剩余额度","Creem API key (leave blank unless updating)":"Creem API 密钥(除非更新,否则留空)","Creem Gateway":"Creem 网关","Creem Payment":"Creem 支付","Creem product ID from your Creem dashboard.":"从您的 Creem 仪表板获取 Creem 产品 ID。","Creem products must be a JSON array":"Creem 产品必须是 JSON 数组","Cross-group":"跨分组","Cross-group retry":"跨分组重试","Currency":"货币","Currency & Display":"货币与展示","Current Balance":"当前余额","Current Billing":"当前计费","Current Cache Size":"当前缓存大小","Current domain":"当前域名","Current email: {{email}}. Enter a new email to change.":"当前邮箱:{{email}}。输入新邮箱以更改。","Current key":"当前密钥","Current legacy JSON is invali
107d, cannot append":"当前旧格式 JSON 不合法,无法追加模板","Current Level Only":"仅当前层","Current models for the longest channel in this tag. May not include all models from all channels.":"此标签中最长渠道的当前模型。可能不包括所有渠道的所有模型。","Current Password":"当前密码","Current Price":"当前价格","Current quota":"当前额度","Current Value":"当前值","Current version":"当前版本","Current:":"当前:","Custom":"自定义","Custom (seconds)":"自定义(秒)","Custom Amount":"自定义金额","Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.":"自定义 API 基础 URL。对于官方渠道,New API 具有内置地址。仅针对第三方代理站点或特殊端点填写此项。请勿添加 /v1 或尾部斜杠。","Custom API base URL. Leave empty to use provider default.":"自定义 API 基础 URL。留空以使用提供商默认值。","Custom Currency":"自定义货币","Custom Currency Symbol":"自定义货币符号","Custom currency symbol is required":"自定义货币符号为必填项","Custom database driver detected.":"检测到自定义数据库驱动。","Custom Error Response":"自定义错误响应","Custom Home Page":"自定义主页","Custom message shown when access is denied":"访问被拒绝时显示的自定义消息","Custom model (comma-separated)":"自定义模型(逗号分隔)","Custom module":"自定义模块","Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.":"当特定用户分组使用特定令牌分组时的自定义乘数。示例:VIP 用户在使用“edit_this”分组令牌时获得 0.9 倍费率。","Custom OAuth":"自定义 OAuth","Custom OAuth Providers":"自定义OAuth提供商","Custom Seconds":"自定义秒数","Custom sidebar section":"自定义侧边栏部分","Custom Time Range":"自定义时间范围","Custom Zoom":"自定义缩放","Customize sidebar display content":"个性化设置左侧边栏的显示内容","Daily":"每天","Daily Check-in":"每日签到","Daily token usage by model across the past few weeks":"过去几周内按模型分布的每日 Token 使用量","Daily token usage by model across the past month":"过去一个月内各模型的每日 Token 用量","Daily token usage by model over the past month":"过去一个月内按模型分布的每日 Token 使用量","Daily uptime over the last 30 days":"最近 30 天每日可用率","Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes":"每日可用率;{{incidents}} 起事件,总计 {{minutes}} 分钟","Dark":"深色","Dashboard":"数据看板","Dashboard Preferences":"看板偏好设置","Dashboards, tokens, and usage analytics.":"仪表板、令牌和使用分析。","Data Dashboard":"数据仪表板","Data directory:":"数据目录:","Data is stored locally on this device. Use system backups to keep a safe copy.":"数据存储在此设备本地。请使用系统备份来保留安全副本。","Data management and log viewing":"数据管理和日志查看","Data retention":"数据保留","Database":"数据库","Database check":"数据库检查","Date and time when this announcement should be displayed":"此公告应显示的日期和时间","Date Range":"时间范围","Day":"天","Day of month":"日期(日)","days":"天","Days to Retain":"保留天数","Decreased user quota by {{quota}}":"减少用户额度 {{quota}}","Deducted by subscription":"由订阅抵扣","DeepSeek":"DeepSeek","default":"默认","Default":"默认","Default (New Frontend)":"新版前端(默认)","Default / range":"默认值 / 范围","Default API Version *":"默认 API 版本 *","Default API version for this channel":"此渠道的默认 API 版本","Default Collapse Sidebar":"默认折叠侧边栏","Default consumption chart":"默认消耗分布图","Default Max Tokens":"默认最大 Token 数","Default model call chart":"默认模型调用图","Default range":"默认范围","Default Responses API version, if empty, will use the API version above":"默认响应 API 版本,如果为空,将使用上面的 API 版本","Default system prompt for this channel":"此渠道的默认系统提示","Default time granularity":"默认时间粒度","Default to auto groups":"默认使用自动分组","Default TTL (seconds)":"默认 TTL(秒)","Defaults to the wallet page when empty":"为空时默认使用钱包页面","Define API endpoints for this model (JSON format)":"为此模型定义 API 端点(JSON 格式)","Define endpoint mappings for each provider.":"为每个提供商定义端点映射。","Define per-group rules to add, remove, or append selectable groups for specific user groups.":"为特定用户组定义按分组规则,以添加、移除或追加可选分组。","Degraded performance recently":"近期性能有所下降","Delete":"删除","Delete (":"删除 (","Delete {{count}} API key(s)?":"删除 {{count}} 个 API 密钥?","Delete a runtime request header":"删除运行期请求头","Delete Account":"删除账户","Delete All Disabled":"删除所有已禁用","Delete All Disabled Channels?":"删除所有已禁用的渠道?","Delete Auto-Disabled":"删除自动禁用","Delete Channel":"删除渠道","Delete Channels?":"删除渠道?","Delete condition":"删除条件","Delete Condition":"删除条件","Delete failed":"删除失败","Delete Field":"删除字段","Delete group":"删除分组","Delete Header":"删请求头","Delete Invalid":"删除无效","Delete invalid codes":"删除无效代码","Delete invalid codes (used/disabled/expired)":"删除无效代码(已使用/已禁用/已过期)","Delete invalid redemption codes":"删除无效兑换码","Delete Invalid Redemption Codes?":"删除无效的兑换码?","Delete logs":"删除日志","Delete mapping":"删除映射","Delete Model":"删除模型","Delete Models?":"删除模型?","Delete Provider":"删除提供商","Delete Request Header":"删除请求头","Delete selected API keys":"删除选定的 API 密钥","Delete selected channels":"删除所选渠道","Delete selected models":"删除选定的模型","Deleted":"已注销","Deleted a custom OAuth provider":"删除了一个自定义 OAuth 提供方","Deleted a deployment":"删除了一个部署","Deleted a model":"删除了一个模型","Deleted a passkey":"解绑了一个 Passkey","Deleted a prefill group":"删除了一个预填组","Deleted a redemption code":"删除了一个兑换码","Deleted a vendor":"删除了一个供应商","Deleted all disabled channels ({{count}})":"删除全部禁用渠道({{count}})","Deleted channel {{name}} (ID: {{id}})":"删除渠道 {{name}}(ID: {{id}}
107)","Deleted invalid redemption codes":"删除无效兑换码","Deleted successfully":"删除成功","Deleted user {{username}} (ID: {{id}})":"删除用户 {{username}}(ID: {{id}})","Deleting will permanently remove this subscription record (including benefit details). Continue?":"删除会彻底移除该订阅记录(含权益明细)。是否继续?","Deleting...":"删除中...","Demo site":"演示站点","Demo site mode":"演示站点模式","Demo Site Mode":"演示站点模式","Demote":"降级","Density":"密度","Deploy your own gateway and start routing requests through your configured upstream services.":"部署你自己的网关,并通过已配置的上游服务开始转发请求。","Deployment created successfully":"创建部署成功","Deployment details":"部署详情","Deployment ID":"部署 ID","Deployment location":"部署位置","Deployment logs":"部署日志","Deployment Region *":"部署区域 *","Deployment requested":"部署已请求","Deployments":"部署","Desc":"降序","Describe":"图生文","Describe this model...":"描述此模型...","Describe this vendor...":"描述此供应商...","Description":"说明信息","Description is required":"描述为必填项","Designed and Developed by":"设计与开发","designed for scale":"为规模而设计","Destroyed":"已销毁","Detailed request logs for investigations.":"用于调查的详细请求日志。","Details":"详情","Detect All Upstream Updates":"检测所有上游更新","Detected database":"检测到的数据库","Detected high-risk status code redirect rules":"检测到以下高危状态码重定向规则:","Detection complete: {{add}} to add, {{remove}} to remove":"检测完成:新增 {{add}} 个,删除 {{remove}} 个","Detection failed":"检测失败","Determines how this group is applied elsewhere.":"确定此分组在其他地方的应用方式。","Deterministic sampling seed (best-effort)":"尽量保证可复现的采样种子","Developer Friendly":"开发者友好","Device Type Preference":"设备类型偏好","Dify":"Dify","Dify channels only support chatflow and agent, and agent does not support images":"Dify 渠道仅支持 chatflow 和 agent,agent 不支持图像","Digest:":"摘要:","Direction":"方向","Directory File Count":"目录文件数","Directory Total Size":"目录总大小","Disable":"禁用","Disable 2FA":"禁用 2FA","Disable All":"禁用全部","Disable on failure":"失败时禁用","Disable selected channels":"禁用选定的渠道","Disable selected models":"禁用选定的模型","Disable store passthrough":"禁止透传 store","Disable this key?":"禁用此密钥?","Disable threshold (seconds)":"禁用阈值(秒)","Disable Two-Factor Authentication":"禁用双重身份验证","disabled":"已禁用","Disabled":"已禁用","Disabled all channels with tag: {{tag}}":"已禁用标签「{{tag}}」下的所有渠道","Disabled channels with tag {{tag}}":"禁用标签为 {{tag}} 的渠道","Disabled lanes are omitted on save.":"关闭的价格通道保存时会被省略。","Disabled Reason":"禁用原因","Disabled Time":"禁用时间","Disabling...":"禁用中...","Discord":"Discord","Discount":"优惠","Discount map by recharge amount (JSON object)":"按充值金额的折扣映射 (JSON 对象)","Discount Rate":"折扣率","Discount rate must be ≤ 1":"折扣率必须 ≤ 1","Discount rate must be greater than 0":"折扣率必须大于 0","Discount Rate:":"折扣率:","Discount ratio for cache hits.":"缓存命中时的折扣比例。","Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel.":"免责声明:仅限个人使用,请勿分发或共享任何凭证。该渠道存在前置条件与使用门槛,请在充分了解流程与风险后使用,并遵守 OpenAI 的相关条款与政策。相关凭证与配置仅限接入 Codex CLI 使用,不适用于其他客户端、平台或渠道。","Discouraged":"不推荐","Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.":"探索精选 AI 模型,清晰比较价格与能力,为不同场景选择合适的模型。","Discover the leading models in each domain":"发掘各个领域的领先模型","Discover the most-used models and rising vendors on the platform, updated from live usage data.":"探索平台上使用最多的模型和增长中的供应商,数据基于实时用量更新。","Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.":"发掘平台上最受欢迎的模型、热门应用与崛起的厂商——每个分类的数据持续更新。","Discovering...":"发现中...","Disk cache cleared":"磁盘缓存已清理","Disk Cache Settings":"磁盘缓存设置","Disk Cache Threshold (MB)":"磁盘缓存阈值 (MB)","Disk cache, system performance monitoring, and operation statistics":"磁盘缓存、系统性能监控与运维统计","Disk Hits":"磁盘命中","Disk Threshold (%)":"磁盘阈值 (%)","Display in Currency":"以货币显示","Display Mode":"显示模式","Display name":"显示名称","Display Name":"显示名称","Display name and email used in outgoing messages":"用于发送消息的显示名称和电子邮件","Display Name Field":"显示名称字段","Display name for this chat client.":"此聊天客户端的显示名称。","Display name for this monitoring group (max 50 characters)":"此监控分组的显示名称(最多 50 个字符)","Display name for this payment method.":"此支付方式的显示名称。","Display name shown to users.":"显示给用户的名称。","Display Options":"显示选项","Display Token Statistics":"显示 Token 统计信息","Displayed in":"显示单ä
107½","Displays the mobile sidebar.":"显示移动侧边栏。","Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.":"请勿过度信任此功能,IP 可能被伪造,请配合 nginx 和 cdn 等网关使用","Do not repeat check-in; only once per day":"请勿重复签到;每天仅一次","Do regex replacement in the target field":"在目标字段里做正则替换","Do string replacement in the target field":"在目标字段里做字符串替换","Docs":"文档","Documentation Link":"文档链接","Documentation or external knowledge base.":"文档或外部知识库。","does not exist or might have been removed.":"不存在或可能已被移除。","Domain":"域名","Domain Filter Mode":"域名过滤模式","Don\'t have an account?":"没有账号?","Done":"完成","Doubao custom API address editing unlocked":"已解锁豆包自定义 API 地址编辑","DoubaoVideo":"DoubaoVideo","Double check the configuration below. Your system will be locked until initialization is complete.":"仔细检查以下配置。您的系统将在初始化完成前保持锁定状态。","Download":"下载","Draw":"绘图","Drawing":"绘图","Drawing logs":"绘制日志","Drawing Logs":"绘图日志","Drawing task records":"绘图任务记录","Duplicate":"重复","Duplicate group names: {{names}}":"存在重复的分组名称:{{names}}","Duplicate source model mappings are not allowed":"不允许重复的源模型映射","Duplicate source model(s): {{models}}":"重复的源模型:{{models}}","Duration":"耗时","Duration (hours)":"时长 (小时)","Duration Settings":"有效期设置","Duration Unit":"有效期单位","Duration Value":"有效期数值","Dynamic Pricing":"动态计费","e.g. Â¥ or HK$":"例如,¥ 或 HK$","e.g. 401, 403, 429, 500-599":"例如 401、403、429、500-599","e.g. 8 means 1 USD = 8 units":"例如,8 表示 1 美元 = 8 单位","e.g. Basic Plan":"例如:基础套餐","e.g. Clean tool parameters to avoid upstream validation errors":"例如:清理工具参数,避免上游校验错误","e.g. example.com":"例如,example.com","e.g. llama3.1:8b":"例如 llama3.1:8b","e.g. My GitLab":"例如:My GitLab","e.g. my-gitlab":"例如:my-gitlab","e.g. New API Console":"例如,New API 控制台","e.g. openid profile email":"例如:openid profile email","e.g. Suitable for light usage":"例如:适合轻度使用","e.g. This request does not meet access policy":"例如:该请求不满足准入策略","e.g., 0.95":"例如,0.95","e.g., 100":"例如,100","e.g., 123456":"例如,123456","e.g., 2025-04-01-preview":"例如,2025-04-01-preview","e.g., 50":"例如,50","e.g., 500000":"例如,500000","e.g., 7342866812345":"例如,7342866812345","e.g., 8 means 8 local currency per USD":"例如,8 表示每美元兑换 8 单位本地货币","e.g., Alipay, WeChat":"例如,支付宝,微信","e.g., Basic Package":"例如,基本套餐","e.g., CN2 GIA":"例如,CN2 GIA","e.g., Core APIs, OpenAI, Claude"
107:"例如,核心 API,OpenAI,Claude","e.g., d6b5da8hk1awo8nap34ube6gh":"例如,d6b5da8hk1awo8nap34ube6gh","e.g., default, vip, premium":"例如,default, vip, premium","e.g., gpt-4, claude-3":"例如:gpt-4、claude-3","e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$":"例如:gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$","e.g., https://api.example.com (path before /suno)":"例如,https://api.example.com (在 /suno 之前的路径)","e.g., https://api.openai.com/v1/chat/completions":"例如,https://api.openai.com/v1/chat/completions","e.g., https://ark.cn-beijing.volces.com":"例如,https://ark.cn-beijing.volces.com","e.g., https://docs-test-001.openai.azure.com":"例如,https://docs-test-001.openai.azure.com","e.g., https://fastgpt.run/api/openapi":"例如,https://fastgpt.run/api/openapi","e.g., OpenAI GPT-4 Production":"例如,OpenAI GPT-4 生产环境","e.g., preview":"例如,preview","e.g., prod_xxx":"例如,prod_xxx","e.g., Recommended for China Mainland Users":"例如,推荐给中国大陆用户","e.g., us-central1 or JSON format for model-specific regions":"例如,us-central1 或模型特定区域的 JSON 格式","e.g., v2.1":"例如,v2.1","Each backup code can only be used once.":"每个备份代码只能使用一次。","Each item must be an object with a single key-value pair.":"每个条目必须是包含单个键值对的对象。","Each item must have exactly one key-value pair.":"每个条目必须恰好包含一个键值对。","Each line represents one keyword. Leave blank to disable the list but keep the switch states.":"每行代表一个关键词。留空以禁用列表,但保留开关状态。","Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.":"每个档位支持 0~2 个条件(针对 len、p、c),最后一档为兜底档无需条件。建议条件使用 len(完整输入长度,含缓存命中),避免缓存命中降低 p 导致档位误判。","Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.":"每个档位最多支持 2 个条件;最后一个档位是不带条件的兜底档。建议使用完整输入长度作为档位条件,避免缓存命中减少计费输入 token 后误判档位。","Each tier supports up to 2 conditions. The last tier without conditions is the fallback.":"每个阶梯最多支持 2 个条件。最后一个无条件阶梯作为兜底。","Earn rewards when your referrals add funds. Transfer accumulated rewards to your balance anytime.":"当您的推荐人充值时即可获得奖励。随时将累计奖励转移到您的余额。","Edit":"编辑","Edit {{title}}":"编辑{{title}}","Edit all channels with tag:":"编辑所有带有标签的渠道:","Edit Announcement":"编辑公告","Edit API Shortcut":"编辑 API 快捷方式","Edit billing ratios and user-selectable groups in one table.":"在一个表格中编辑计费倍率和用户可选分组。","Edit Channel":"编辑渠道","Edit chat preset":"编辑聊天预设","Edit discount tier":"编辑折扣档位","Edit FAQ":"编辑常见问题","Edit group rate limit":"编辑组速率限制","Edit JSON object directly. Suitable for simple parameter overrides.":"直接编辑 JSON 对象。适合简单覆盖参数的场景。","Edit JSON text directly. Format will be validated on save.":"直接编辑 JSON 文本,保存时会校验格式。","Edit model":"编辑模型","Edit Model":"编辑模型","Edit model pricing":"编辑模型定价","Edit OAuth Provider":"编辑 OAuth 提供商","Edit payment method":"编辑支付方式","Edit Prefill Group":"编辑预填充组","Edit product":"编辑产品","Edit ratio override":"编辑倍率覆盖","Edit Rule":"编辑规则","Edit selectable group":"编辑可选分组","Edit Tag":"编辑标签","Edit Tag:":"编辑标签:","Edit Uptime Kuma Group":"编辑 Uptime Kuma 分组","Edit Vendor":"编辑供应商","edit_this":"edit_this","Edited channels with tag {{tag}}":"编辑标签为 {{tag}} 的渠道","Editor mode":"编辑器模式","Education":"教育","Email":"邮箱","Email (required for verification)":"电子邮件(验证必需)","Email Address":"电子邮件地址","Email Alias Restriction":"电子邮件别名限制","Email bound successfully!":"邮箱绑定成功!","Email Domain Restriction":"电子邮件域限制","Email Domain Whitelist":"电子邮件域白名单","Email Field":"邮箱字段","Email Verification":"电子邮件验证","Email, summarisation, knowledge work":"邮件、摘要与知识工作","Embeddings":"嵌入","Empty":"空","Empty value will be saved as {}.":"空值将保存为 {}。","Enable":"启用","Enable 2FA":"启用 2FA","Enable All":"启用全部","Enable check-in feature":"启用签到功能","Enable Data Dashboard":"启用数据仪表板","Enable demo mode with limited functionality":"启用功能受限的演示模式","Enable Discord OAuth":"启用 Discord OAuth","Enable Disk Cache":"启用磁盘缓存","Enable drawing features":"启用绘制功能","Enable filtering":"启用过滤","Enable FunctionCall thoughtSignature Fill":"启用 FunctionCall 思维签名填充","Enable GitHub OAuth":"启用 GitHub OAuth","Enable Groups":"启用分组","Enable if this is an OpenRouter enterprise account with special response format":"如果这是具有特殊响应格式的 OpenRouter 企业账户,则启用","Enable io.net deployments":"启用 io.net 部署","Enable io.net model deployment service in console":"在控制台启用 io.net 模型部署服务","Enable LinuxDO OAuth":"启用 LinuxDO OAuth","Enable model performance metrics":"启用模型性能指标","Enable OIDC":"启用 OIDC","Enable or disable this channel":"启用或禁用此渠道","Enable or disable this model":"启用或禁用此模型","Enable Passkey":"启用 Passkey","Enable Performance Monitoring":"启用性能监控","Enable rate limiting":"启用速率限制","Enable Request Passthrough":"启用请求透传","Enable selected channels":"启用选定的渠道","Enable selected models":"启用选定的模型","Enable SSL/TLS":"启用 SSL/TLS","Enable SSRF Protection":"启用 SSRF 保护","Enable streaming mode for the test request.":"为测试请求启用流式模式。","Enable Telegram OAuth":"启用 Telegram OAuth","Enable test mode for Creem payments":"启用 Creem 支付测试模式","Enable this key?":"启用此密钥?","Enable Turnstile":"启用 Turnstile","Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.":"在您的个人资料中启用双重身份验证或 Passkey 以解锁敏感操作。","Enable unlimited quota for this API key":"为此 API 密钥启用无限配额","Enable violation deduction":"启用违规扣
107费","Enable Waffo":"启用 Waffo","Enable Waffo Pancake":"启用 Waffo Pancake","Enable WeChat Auth":"启用微信授权","Enable when proxying workers that fetch images over HTTP.":"当代理通过 HTTP 获取图像的 worker 时启用。","Enabled":"已启用","Enabled all channels with tag: {{tag}}":"已启用标签「{{tag}}」下的所有渠道","Enabled channels with tag {{tag}}":"启用标签为 {{tag}} 的渠道","Enabled Status":"启用状态","Enabling...":"正在启用...","Encourages introducing new topics":"鼓励引入新话题","End":"结束","End Error":"结束错误","End Reason":"结束原因","End Time":"结束时间","End-user identifier for abuse monitoring":"用于风险审计的终端用户标识","Endpoint":"端点","Endpoint config":"端点配置","Endpoint Configuration":"端点配置","Endpoint Type":"端点类型","Endpoint, provider-specific settings, and credentials.":"接口地址、供应商专属设置和凭据。","Endpoint:":"端点:","Endpoints":"端点","English":"英文","Ensure Prefix":"确保前缀","Ensure Suffix":"确保后缀","Ensure the string has a specified prefix":"确保字符串有指定前缀","Ensure the string has a specified suffix":"确保字符串有指定后缀","Enter 6-digit code":"输入 6 位数字代码","Enter a name":"输入名称","Enter a new name":"输入新名称","Enter a positive or negative amount to adjust the quota":"输入正数或负数以调整配额","Enter a valid email or leave blank":"请输入有效的邮箱地址或留空","Enter a value and press Enter":"输入值并按回车键","Enter amount in {{currency}}":"输入金额({{currency}})","Enter amount in tokens":"输入额度(Token)","Enter announcement content (supports Markdown & HTML)":"输入公告内容(支持 Markdown 和 HTML)","Enter announcement content (supports Markdown/HTML)":"输入公告内容(支持 Markdown/HTML)","Enter API Key":"请输入 API Key","Enter API key for this channel":"输入此渠道的 API 密钥","Enter API Key, format: APIKey|Region":"请输入 API Key,格式:APIKey|Region","Enter API Key, one per line, format: APIKey|Region":"请输入 API Key(每行一个),格式:APIKey|Region","Enter application token":"输入应用程序令牌","Enter authenticator code":"输入身份验证器代码","Enter backup code (e.g., CAWD-OQDV)":"输入备用代码(例如,CAWD-OQDV)","Enter code":"输入代码","Enter code or backup code":"输入代码或备用代码","Enter Completion price to calculate ratio":"输入 Completion 价格来计算比率","Enter Creem API key":"输入 Creem API 密钥","Enter custom API endpoint URL":"输入自定义 API 端点 URL","Enter deployment region or JSON mapping:":"输入部署区域或 JSON 映射:","Enter display name":"输入显示名称","Enter HTML code (e.g., <p>About us...</p>) or a URL (e.g., https://example.com) to embed as iframe":"输入 HTML 代码(例如,<p>关于我们...</p>)或 URL(例如,https://example.com)以作为 iframe 嵌入","Enter Input price to calculate ratio":"输入 Input 价格来计算比率","Enter JSON to override request headers":"输入 JSON 以覆盖请求头","Enter key, format: AccessKey|SecretAccessKey|Region":"请输入密钥,格式:AccessKey|SecretAccessKey|Region","Enter key, one per line, format: AccessKey|SecretAccessKey|Region":"请输入密钥(每行一个),格式:AccessKey|SecretAccessKey|Region","Enter model name":"请输入模型名称","Enter new key to update":"输入新密钥以更新","Enter new key to update, or leave empty to keep current key":"输入新密钥以更新,或留空以保留当前密钥","Enter new tag name (leave empty to disband tag)":"输入新标签名称(留空以解散标签)","Enter new tag name or leave empty":"输入新标签名称或留空","Enter new token to update":"输入新令牌以更新","Enter one API key per line for batch creation":"每行输入一个 API 密钥进行批量创建","Enter one key per line for batch creation":"每行输入一个密钥进行批量创建","Enter one keyword per line":"每行输入一个关键词","Enter password":"输入密码","Enter password (8-20 characters)":"输入密码(8-20 个字符)","Enter password (min 8 characters)":"请输入密码(至少 8 个字符)","Enter quota in {{currency}}":"输入 {{currency}} 额度","Enter quota in tokens":"输入令牌配额","Enter secret key":"输入密钥","Enter system prompt (user prompt takes priority)":"输入系统提示词(用户提示词优先)","Enter tag name (optional)":"输入标签名称(可选)","Enter the 6-digit code from your authenticator app":"输入来自身份验证器应用的 6 位代码","Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.":"输入来自身份验证器应用的 6 位基于时间的单次密码或 8 位备份代码。","Enter the complete URL, supports":"输入完整的 URL,支持","Enter the Coze agent ID":"输入 Coze 代理 ID","Enter the full URL of your Gotify server"
107:"输入您的 Gotify 服务器的完整 URL","Enter the knowledge base ID":"输入知识库 ID","Enter the path before /suno, usually just the domain":"输入 /suno 之前的路径,通常只是域名","Enter the quota amount in {{currency}}":"输入 {{currency}} 的配额数量","Enter the quota amount in tokens":"输入令牌配额数量","Enter the verification code":"输入验证码","Enter threshold":"输入阈值","Enter token counts to preview the estimated cost (excluding group multipliers).":"输入 token 数量以预览预估费用(不含用户组倍率)。","Enter URL...":"输入 URL...","Enter username":"输入用户名","Enter verification code":"输入验证码","Enter webhook secret":"输入 webhook 密钥","Enter your authenticator code or a backup code":"输入您的身份验证器代码或备份代码","Enter your email":"输入您的电子邮件","Enter your redemption code":"输入您的兑换码","Enter your registered email and we will send you a link to reset your password.":"输入您注册的邮箱,我们将向您发送一个重置密码的链接。","Enter your username":"输入您的用户名","Enter your username or email":"输入您的用户名或电子邮件","Enterprise Account":"企业账户","Enterprise-grade security with comprehensive permission management":"企业级安全性,提供全面的权限管理","Entrypoint (space separated)":"入口点 (空格分隔)","Env (J
107SON object)":"环境变量 (JSON 对象)","Environment variables":"环境变量","Environment variables (JSON)":"环境变量 (JSON)","Epay endpoint":"Epay 端点","Epay Gateway":"Epay 网关","Epay merchant ID":"易支付商户 ID","Epay secret key":"Epay 密钥","Equals":"等于","Error":"错误","Error Code (optional)":"错误代码(可选)","Error Message":"错误消息","Error Message (required)":"错误消息(必填)","Error Type (optional)":"错误类型(可选)","Estimated cost":"预计成本","Estimated quota cost":"估算配额费用","Exact":"精确","Exact Match":"完全匹配","Example":"示例","Example (all channels):":"示例(全部渠道):","Example (specific channels):":"示例(指定渠道):","Example:":"示例:","example.com&#10;blocked-site.com":"example.com&#10;blocked-site.com","example.com&#10;company.com":"example.com&#10;company.com","Excellent":"优秀","Exchange rate is required":"汇率为必填项","Exchange rate must be greater than 0":"汇率必须大于 0","Execute code in a sandbox during the response":"在响应过程中沙箱执行代码","Exhausted":"已耗尽","Existing account will be reused":"将使用现有账户","Existing Models ({{count}})":"现有模型 ({{count}})","Exists":"存在","Expand":"展开","Expand All":"全部展开","Expected a JSON array of group identifiers":"应为分组标识符的 JSON 数组","Expected a JSON array.":"应为 JSON 数组。","Experiment with prompts and models in real time.":"实时实验提示词和模型。","Expiration Time":"过期时间","expired":"已过期","Expired":"已过期","Expired at":"过期于","Expired time cannot be earlier than current time":"过期时间不能早于当前时间","Expires":"过期","Expose ratio API":"暴露倍率接口","Exposes the pricing/models catalog in the top navigation.":"在顶部导航中显示定价/模型目录。","Expression":"表达式","Expression based":"基于表达式","Expression billing":"表达式计费","Expression editor":"表达式编辑器","Expression error":"表达式错误","Expression pricing":"表达式计费","Extend":"延长","Extend deployment":"延长部署","Extend failed":"延长失败","Extended successfully":"延长成功","External Device":"外部设备","External link for users to purchase quota":"供用户购买配额的外部链接","External operations":"对外运营","External operations mode":"对外运营模式","External Speed Test":"外部速度测试","Extra":"额外","Extra Notes (Optional)":"额外备注(可选)","extras":"额外项","Fail Reason":"失败原因","Fail Reason Details":"失败原因详情","Failed":"失败","Failed to {{action}} user":"{{action}}用户失败","Failed to adjust quota":"调整额度失败","Failed to apply overwrite.":"应用覆盖失败。","Failed to bind email":"绑定邮箱失败","Failed to change password":"修改密码失败","Failed to check for updates":"检查更新失败","Failed to clean logs":"清理日志失败","Failed to complete order":"完成订单失败","Failed to complete Passkey login":"无法完成 Passkey 登录","Failed to confirm compliance":"确认合规失败","Failed to contact GitHub releases API":"无法连接 GitHub Releases API","Failed to copy":"复制失败","Failed to copy channel":"复制渠道失败","Failed to copy keys":"复制密钥失败","Failed to copy model names":"复制模型名称失败","Failed to copy to clipboard":"复制到剪贴板失败","Failed to create API key":"创建API密钥失败","Failed to create channel":"创建渠道失败","Failed to create deployment":"创建部署失败","Failed to create provider":"创建提供商失败","Failed to create redemption code":"创建兑换码失败","Failed to create user":"创建用户失败","Failed to delete {{count}} model(s)":"删除 {{count}} 个模型失败","Failed to delete account":"删除账号失败","Failed to delete API key":"删除API密钥失败","Failed to delete API keys":"删除API密钥失败","Failed to delete channel":"删除渠道失败","Failed to delete disabled channels":"删除已禁用渠道失败","Failed to delete invalid redemption codes":"删除无效兑换码失败","Failed to delete model":"删除模型失败","Failed to delete provider":"删除提供商失败","Failed to delete redemption code":"删除兑换码失败","Failed to delete user":"删除用户失败","Failed to delete vendor":"删除供应商失败","Failed to disable {{count}} model(s)":"禁用 {{count}} 个模型失败","Failed to disable 2FA":"禁用 2FA 失败","Failed to disable channels":"禁用渠道失败","Failed to disable model":"禁用模型失败","Failed to disable tag channels":"禁用标签渠道失败","Failed to discover OIDC endpoints":"发现 OIDC 端点失败","Failed to enable {{count}} model(s)":"启用 {{count}} 个模型失败","Failed to enable 2FA":"启用 2FA 失败","Failed to enable channels":"启用渠道失败","Failed to enable model":"启用模型失败","Failed to enable tag channels":"启用标签渠道失败","Failed to fetch channel key":"获取渠道密钥失败","Failed to fetch checkin status":"获取签到状态失败","Failed to fetch deployment details":"获取部署详情失败","Failed to fetch models":"获取模型失败","Failed to fetch OIDC configuration. Please check the URL and network status":"获取 OIDC 配置失败。请检查 URL 和网络状态","Failed to fetch upstream prices":"获取上游价格失败","Failed to fetch upstream ratios":"获取上游比率失败","Failed to fetch usage":"获取用量失败","Failed to fetch user information":"获取用户信息失败","Failed to fix abilities":"修复能力失败","Failed to generate token":"生成令牌失败","Failed to initialize OAuth":"初始化 OAuth 失败","Failed to initialize system":"系统初始化失败","Failed to load":"加载失败","Failed to load API keys":"加载 API 密钥失败","Failed to load billing history":"加载计费历史失败","Failed to load home page content":"加载首页内容失败","Failed to load image":"无法加载图像","Failed to load key status":"加载密钥状态失败","Failed to load logs":"加载日志失败","Failed to load Passkey status":"加载 Passkey 状态失败","Failed to load profile":"加载个人资料失败","Failed to load redemption codes":"加载兑换码失败","Failed to load setup data":"无法加载设置数据","Failed to load setup status":"无法加载设置状态","Failed to load tag data":"加载标签数据失败","Failed to load users":"加载用户失败","Failed to parse group items":"解析组项目失败","Failed to parse JSON file: {{name}}":"解析 JSON 文件失败:{{name}}","Failed to query balance":"查询余额失败","Failed to refresh cache stats":"刷新缓存统计失败","Failed to refresh credential":"刷新凭证失败","Failed to regenerate backup codes":"重新生成备份代码失败","Failed to register Passkey":"注册 Passkey 失败","Failed to remove Passkey":"移除 Passkey 失败","Failed to reset 2FA":"重置 2FA 失败","Failed to reset model ratios":"重置模型比率失败","Failed to reset Passkey":"重置 Passkey 失败","Failed to save":"保存失败","Failed to save announcements":"保存公告失败","Failed to save API info":"保存 API 信息失败","Failed to save FAQ":"保存 FAQ 失败","Failed to save Uptime Kuma groups":"保存 Uptime Kuma 组失败","Failed to search API keys":"搜索 API 密钥失败","Failed to search redemption codes":"搜索兑换码失败","Failed to search users":"搜索用户失败","Failed to send verification code":"发送验证码失败","Failed to set tag":"设置标签失败","Failed to setup 2FA":"设置 2FA 失败","Failed to start {{provider}} login":"启动 {{provider}} 登录失败","Failed to start Discord login":"启动 Discord 登录失败","Failed to start GitHub login":"启动 GitHub 登录失败","Failed to start LinuxDO login":"启动 LinuxDO 登录失败","Failed to start OIDC login":"启动 OIDC 登录失败","Failed to start Passkey login":"无法启动 Passkey 登录","Failed to start Passkey registration":"启动 Passkey 注册失败","Failed to start testing all channels":"无法开始测试所有渠道","Failed to sync prices":"同步价格失败","Failed to sync ratios":"同步比率失败","Failed to test all channels":"无法测试所有渠道","Failed to test channel":"测试渠道失败","Failed to update all balances":"无法更新所有余额","Failed to update API key":"更新 API 密钥失败","Failed to update API key status":"更新 API 密钥状态失败","Failed to update balance":"无法更新余额","Failed to update channel":"更新渠道失败","Failed to update models":"更新模型失败","Failed to update profile":"无法更新个人资料","Failed to update provider":"更新提供商失败","Failed to update redemption code":"更新兑换码失败","Failed to update redemption code status":"更新兑换码状态失败","Failed to update setting":"更新设置
107失败","Failed to update settings":"无法更新设置","Failed to update tag":"更新标签失败","Failed to update user":"更新用户失败","Failure keywords":"失败关键词","Fair":"公平","Fallback tier":"兜底阶梯","FAQ":"常见问答","FAQ added. Click \\"Save Settings\\" to apply.":"FAQ 已添加。点击 \\"保存设置\\" 以应用。","FAQ deleted. Click \\"Save Settings\\" to apply.":"FAQ 已删除。点击 \\"保存设置\\" 以应用。","FAQ saved successfully":"FAQ 保存成功","FAQ updated. Click \\"Save Settings\\" to apply.":"FAQ 已更新。点击 \\"保存设置\\" 以应用。","FastGPT":"FastGPT","Feature in development":"功能开发中","Fee":"扣费","Fee Amount":"扣费金额","Fetch available models for:":"获取可用模型:","Fetch from Upstream":"从上游获取","Fetch Models":"获取模型","Fetched {{count}} model(s) from upstream":"从上游获取了 {{count}} 个模型","Fetched {{count}} models":"已获取 {{count}} 个模型","Fetching prefill groups...":"正在获取预填充分组...","Fetching upstream prices...":"正在获取上游价格...","Fetching upstream ratios...":"正在获取上游比例...","field":"字段","Field Mapping":"字段映射","Field passthrough controls":"字段透传控制","Field Path":"字段路径","File":"文件","File Search":"文件搜索","Files to Retain":"保留文件数","Fill All Models":"填充所有模型","Fill Codex CLI / Claude CLI Templates":"填充 Codex CLI / Claude CLI 模板","Fill example (all channels)":"填充示例(全部渠道)","Fill example (specific channels)":"填充示例(指定渠道)","Fill in both Merchant ID and API Private Key before creating.":"创建前请填写 Merchant ID 和 API 私钥。","Fill in the credentials above to begin.":"请先填写上方凭证。","Fill in the following info to create a new subscription plan":"填写以下信息创建新的订阅套餐","Fill Related Models":"填入相关模型","Fill Template":"填入模板","Fill Templates":"填充模板","Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format":"仅为使用 OpenAI 格式的 Gemini/Vertex 渠道填充 thoughtSignature","Filled {{count}} model(s)":"已填充 {{count}} 个模型","Filled {{count}} related model(s)":"已填充 {{count}} 个关联模型","Filter":"筛选","Filter by API key...":"按 API 密钥筛选...","Filter by channel ID":"按渠道 ID 筛选","Filter by group":"按分组筛选","Filter by Midjourney task ID":"按 Midjourney 任务 ID 筛选","Filter by model name...":"按模型名称筛选...","Filter by model...":"按模型筛选...","Filter by name or ID...":"按名称或 ID 筛选...","Filter by name, ID, or key...":"按名称、ID 或密钥筛选...","Filter by name...":"按名称筛选...","Filter by price field":"按价格字段筛选","Filter by ratio type":"按倍率类型筛选","Filter by request ID":"按请求 ID 筛选","Filter by task ID":"按任务 ID 筛选","Filter by token name":"按 Token 名称筛选","Filter by username":"按用户名筛选","Filter by username, name or email...":"按用户名、姓名或邮箱筛选...","Filter Dashboard Models":"筛选仪表板模型","Filter models by provider, group, type, endpoint, and tags.":"按供应商、分组、类型、端点和标签筛选模型。","Filter models by type, endpoint, vendor, group and tags":"按类型、端点、供应商、分组和标签筛选模型","Filter models...":"筛选模型...","Filter the model analytics view by time range and user.":"按时间范围和用户筛选模型分析视图。","Filter...":"筛选...","Filters":"筛选器","Filters active":"筛选已启用","Final Consumed":"最终消耗","Final cost = base × multiplier when conditions match":"匹配条件时,最终费用 = 基础费用 × 倍率","Final price multiplier (0.95 = 5% discount":"最终价格乘数 (0.95 = 5% 折扣","Finance":"金融","Finish Time":"完成时间","First API request":"首个 API 请求","First/Last Frame to Video":"首尾生视频","Fix Abilities":"修复能力","Fixed abilities: {{success}} succeeded, {{fails}} failed":"修复能力:{{success}} 个成功,{{fails}} 个失败","Fixed price":"固定价格","Fixed price (USD)":"固定价格 (USD)","Fixed request price":"固定按次价格","Floating":"浮动","FluentRead extension not detected. Please ensure it is installed and active.":"未检测到 FluentRead 扩展。请确保已安装并激活。","Flush interval (minutes)":"刷库间隔(分钟)","Follow the guided steps to prepare your workspace before the first login.":"请按照引导步骤在首次登录前准备您的工作区ã€
107‚","Font":"字体","Footer":"页脚","Footer text displayed at the bottom of pages":"显示在页面底部的页脚文本","footer.columns.about.links.aboutProject":"关于项目","footer.columns.about.links.contact":"联系我们","footer.columns.about.links.features":"功能","footer.columns.about.title":"关于我们","footer.columns.docs.links.apiDocs":"API 文档","footer.columns.docs.links.installation":"安装指南","footer.columns.docs.links.quickStart":"快速入门","footer.columns.docs.title":"文档","footer.columns.related.links.midjourney":"Midjourney-Proxy","footer.columns.related.links.newApiKeyTool":"new-api-key-tool","footer.columns.related.links.oneApi":"One API","footer.columns.related.title":"相关项目","footer.defaultCopyright":"版权所有。","footer.newapi.projectAttributionSuffix":"版权所有,由项目贡献者设计与开发。","For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment":"对于 2025 å¹´ 5 月 10 日之后添加的渠道,在部署时无需从模型名称中移除 \\".\\"","For private deployments, format: https://fastgpt.run/api/openapi":"对于私有部署,格式为:https://fastgpt.run/api/openapi","Force a syntactically valid JSON response":"强制返回语法合法的 JSON","Force AUTH LOGIN":"强制 AUTH LOGIN","Force Format":"强制格式化","Force format response to OpenAI standard (OpenAI channel only)":"强制将响应格式化为 OpenAI 标准(仅限 OpenAI 渠道)","Force JSON object or schema-conforming output":"强制输出 JSON 对象或符合 Schema 的结果","Force SMTP authentication using AUTH LOGIN method":"强制使用 AUTH LOGIN 方法进行 SMTP 认证","Force-disabled two-factor authentication for the user":"强制关闭了用户的两步验证","Forest Whisper":"森林低语","Forgot password":"忘记密码","Forgot password?":"忘记密码?","Form reset to saved values":"表单已重置为保存的值","Format":"格式","Format JSON":"格式化 JSON","Format:":"格式:","Format: Access Key ID|Secret Access Key":"格式:Access Key ID|Secret Access Key","Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)":"格式:AccessKey|SecretKey(如果上游是 New API,则只需 ApiKey)","Format: Ak|Sk|Region":"格式:Ak|Sk|Region","Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041":"格式:APIKey-AppId,例如:fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041","Format: APIKey|SecretKey":"格式:APIKey|SecretKey","Format: APPID|APISecret|APIKey":"格式:APPID|APISecret|APIKey","Format: AppId|SecretId|SecretKey":"格式:AppId|SecretId|SecretKey","Forward requests directly to upstream providers without any post-processing.":"将请求直接转发给上游提供商,不进行任何后处理。","Frames per second":"帧率","Free: {{free}} / Total: {{total}}":"可用空间: {{free}} / 总空间: {{total}}","Friendly name to identify this channel":"用于识别此渠道的友好名称","From Address":"发件地址","From IO.NET deployment":"来自 IO.NET 部署","From model redirect, not yet added to models list":"来自模型重定向,尚未加入模型列表","Frontend Theme":"前端主题","Full API Key":"完整 API 密钥","Full Base URL (supports":"完整基础 URL (支持","Full Code":"完整代码","Full input length":"完整输入长度","Full layout":"全屏布局","Full width":"全宽","Function calling":"函数调用","Functions":"函数","GC Count":"GC 次数","GC executed":"GC 已执行","GC execution failed":"GC 执行失败","Gemini":"Gemini","Gemini Image 4K":"Gemini 图片 4K","Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.":"即使禁用适配器,Gemini 也会继续自动检测思维模式。仅当您需要对定价和预算进行更精细的控制时才启用此选项。","General":"常规","General Settings":"通用设置","Generate and manage your API access token":"生成和管理您的 API 访问令牌","Generate Lyrics":"生成歌词","Generate Music":"生成音乐","Generate new backup codes for account recovery":"生成新的备份代码用于账户恢复","Generate New Codes":"生成新代码","Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.":"在「令牌」页面生成 API Key,可以按模型、分组、IP、速率等维度精细化授权。","Generated image":"生成的图像","Generating new codes will invalidate all existing backup codes.":"生成新代码将使所有现有备份代码失效。","Generating...":"生成中...","Generation quality preset":"生成质量预设","Generic cache":"通用缓存","Get notified when balance falls below this value":"当余额低于此值时接收通知","Get one here":"点此获取","Get started":"开始使用","Get Started":"开始使用","GitHub":"GitHub","Give the group a recognizable name and optional description.":"为该分组提供一个可识别的名称和可选的描述。","Give this group a recognizable name.":"为此分组提供一个可识别的名称。","Global configuration and administrative tools.":"全局配置和管理工具。","Global Coverage":"全球覆盖","Global Model Configuration":"全局模型配置","Global throughput":"全局吞吐量","Go Back":"返回","Go back and edit":"返回修改","Go to Dashboard":"前往仪表板","Go to first page":"前往首页","Go to home":"返回主页","Go to io.net API Keys":"前往 io.net API 密钥","Go to last page":"前往末页","Go to 
107next page":"前往下一页","Go to page {{page}}":"前往第 {{page}} 页","Go to previous page":"前往上一页","Go to settings":"前往设置","Go to Settings":"前往设置","Good":"良好","Gotify Application Token":"Gotify 应用令牌","Gotify Documentation":"Gotify 文档","Gotify Server URL":"Gotify 服务器 URL","gpt-3.5-turbo":"gpt-3.5-turbo","gpt-3.5-turbo-0125":"gpt-3.5-turbo-0125","gpt-4":"gpt-4","gpt-4, claude-3-opus, etc.":"gpt-4, claude-3-opus, 等","GPU count":"GPU 数量","Greater than":"大于","Greater Than":"大于","Greater than or equal":"大于等于","Greater Than or Equal":"大于等于","Grok":"Grok","Grok Settings":"Grok 设置","Group":"分组","Group & Quota":"分组与配额","Group added. Click \\"Save Settings\\" to apply.":"组已添加。点击 \\"保存设置\\" 以应用。","Group channels by tag for batch operations":"按标签对渠道进行分组以进行批量操作","Group config overrides global limits, shares the same period":"分组配置覆盖全局限制,共享同一周期","Group deleted. Click \\"Save Settings\\" to apply.":"组已删除。点击 \\"保存设置\\" 以应用。","Group description":"分组描述","Group details":"分组详情","Group identifier":"分组标识符","Group is required":"组是必需的","Group name":"分组名称","Group Name":"分组名称","Group name cannot be changed when editing.":"编辑时无法更改组名称。","Group prices cannot be expanded because this expression is not a standard tiered pricing expression.":"该表达式不是标准分档计费表达式,无法展开分组价格。","Group Pricing":"分组定价","Group pricing usage guide":"分组定价使用教程","group ratio":"分组倍率","Group Ratio":"分组倍率","Group ratios":"分组比例","Group updated. Click \\"Save Settings\\" to apply.":"组已更新。点击 \\"保存设置\\" 以应用。","Group-based rate limits":"基于分组的速率限制","Group:":"分组:","Group: {{ratio}}x":"分组:{{ratio}}x","Grouped monitor status from Uptime Kuma":"来自 Uptime Kuma 的分组监控状态","Groups":"分组","Groups *":"分组 *","Groups that users can select when creating API keys.":"用户在创建 API 密钥时可以选择的分组。","Growth":"增长","Guardrails":"安全护栏","Guest":"访客","h":"小时","Haiku Model":"Haiku 模型","Hang tight while we finish connecting your account.":"请稍等,我们正在完成连接您的账户。","Hang tight while we securely link this account to your profile.":"请稍等,我们正在安全地将此账户链接到您的个人资料。","Hardware":"硬件","Hardware type":"硬件类型","Has been disabled":"已禁用","Has been enabled":"已启用","Has been invalidated":"已作废","Have a Code?":"有兑换码吗?","Header":"请求头","header instead.":" 请求头。","Header Name":"请求头名称","Header navigation":"顶部导航","Header Override":"标头覆盖","Header Passthrough (X-Request-Id)":"请求头透传(X-Request-Id)","Header Value (supports string or JSON mapping)":"请求头值(支持字符串或 JSON 映射)","header. Anthropic-formatted endpoints accept the":" 请求头。Anthropic 格式的端点也接受","Health":"健康","Healthy":"正常","Hidden — verify to reveal":"隐藏 — 验证以显示","Hide":"隐藏","Hide API key":"隐藏 API 密钥","Hide setup guide":"隐藏设置引导","High Performance":"高性能","High-risk operation confirmation":"高危操作确认","High-risk status code retry confirmation text":"我确认","High-risk status code retry input mismatch":"输入的文本不匹配,请重试。","High-risk status code retry input placeholder":"请输入上方确认文本","High-risk status code retry risk check 1":"我了解在这些状态码上重试可能导致上游供应商正常扣费,且该费用无法追回。","High-risk status code retry risk check 2":"我了解这些状态码通常表示请求已被上游供应商成功处理,重试可能导致重复计费。","High-risk status code retry risk check 3":"我承认这些配置可能导致重大经济损失,并接受所有相关风险。","High-risk status code retry risk check 4":"我已仔细核查以上状态码重定向规则,并确认配置正确。","High-risk status code retry risk disclaimer":"以下状态码重定向规则包含高风险配置。在这些状态码上重试可能导致上游正常扣费且无法追回。请仔细核实这些配置。","Higher priority channels are selected first":"优先级更高的渠道优先被选中","Historical Usage":"历史使用情况","History of Midjourney-style image tasks.":"Midjourney 风格图像任务历史。","Hit criteria: If cached tokens exist in usage, it counts as a hit.":"命中判定:usage 中存在 cached tokens 即视为命中。","Hit Rate":"命中率","Hit tier":"命中档位","Home":"主页","Home Page Content":"首页内容","Hostname or IP of your SMTP provider":"您的 SMTP 提供商的主机名或 IP","Hour":"小时","Hour of day":"小时","Hourly token usage by model across the last 24 hours":"过去 24 小时内各模型的逐小时 Token 用量","Hourly token usage by model over the past 24 hours":"过去 24 小时内按模型分布的小时级 Token 使用量","hours":"小时","How client credentials are sent to the token endpoint":"客户端凭据如何发送至令牌端点","How frequently the system tests all channels":"系统测试所有渠道的频率","How It Works":"工作流程","How model mapping works":"模型映射如何工作","How much to charge for each US dollar of balance (Epay)":"每美元余额(Epay)的收费金额","How this model name should match requests":"此模型名称应如何匹配请求","How to deliver the resulting image":"图像结果的返回方式","How to get an io.net API Key":"如何获取 io.net API 密钥","How to reset my quota?":"如何重置我的配额?","How to select keys: random or sequential polling":"密钥选择方式:随机或顺序轮询","How will you use the platform?":"您将如何使用本平台?","https://api.day.app/yourke
107y/{{title}}/{{content}}":"https://api.day.app/yourkey/{{title}}/{{content}}","https://api.example.com":"https://api.example.com","https://ark.ap-southeast.bytepluses.com":"https://ark.ap-southeast.bytepluses.com","https://ark.cn-beijing.volces.com":"https://ark.cn-beijing.volces.com","https://cloud.siliconflow.cn/i/hij0YNTZ":"https://cloud.siliconflow.cn/i/hij0YNTZ","https://docs.example.com":"https://docs.example.com","https://example.com":"https://example.com","https://example.com/logo.png":"https://example.com/logo.png","https://example.com/qr-code.png":"https://example.com/qr-code.png","https://example.com/topup":"https://example.com/topup","https://example.com/webhook":"https://example.com/webhook","https://gateway.example.com":"https://gateway.example.com","https://github.com/QuantumNous/new-api":"https://github.com/QuantumNous/new-api","https://gotify.example.com":"https://gotify.example.com","https://pay.example.com":"https://pay.example.com","https://provider.com/.well-known/openid-configuration":"https://provider.com/.well-known/openid-configuration","https://status.example.com":"https://status.example.com","https://wechat-server.example.com":"https://wechat-server.example.com","https://worker.example.workers.dev":"https://worker.example.workers.dev","https://your-server.example.com":"https://your-server.example.com","Human-readable name shown to users during Passkey prompts.":"在 Passkey 提示期间向用户显示的人类可读名称。","I confirm enabling high-risk retry":"我确认开启高危重试","I have read and agree to the":"我已阅读并同意","I have read and understood the above compliance reminder":"我已阅读并理解上述合规提醒","I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.":"我已阅读并理解上述合规提醒,确认相关法律风险,并确认承担因部署、运营和收费行为产生的法律责任。","I understand that disabling 2FA will remove all protection and backup codes":"我理解禁用 2FA 将移除所有保护和备份代码","Icon":"图标","Icon file must be 100 KB or smaller":"图标文件必须小于等于 100 KB","Icon identifier (e.g. github, gitlab)":"图标标识符(例如 github、gitlab)","ID":"ID","If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.":"如果上游错误包含以下任何关键字(不区分大小写),渠道将自动禁用。","If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.":"授权成功后,生成的 JSON 将插入密钥字段。您仍需保存渠道以持久化。","If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know what you are doing":"如果连接上游 One API 或 New API 中继项目,除非您知道自己在做什么,否则请使用 OpenAI 类型","If default auto group is enabled, newly created tokens start with auto instead of an empty group.":"如果启用默认 auto 分组,新建令牌会默认使用 auto,而不是空分组。","If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.":"如果亲和到的渠道失败,重试到其他渠道成功后,将亲和更新到成功的渠道。","If this keeps happening, please report it on GitHub Issues.":"如果问题持续出现,请到 GitHub Issues 反馈。","If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.":"如果你在中国大陆向公众提供生成式人工智能服务,你将履行备案、安全评估、内容安全、投诉处理、生成内容标识、日志留存和个人信息保护等法律义务。","Ignored upstream models":"已忽略上游模型","Image":"图片","Image Generation":"图片生成","Image In":"图像输入","Image input":"图片输入","Image input price":"图像输入价格","Image Out":"图像输出","Image output price":"图像输出价格","Image Preview":"图片预览","Image ratio":"图片倍率","Image to Video":"图生视频","Image Tokens":"图像 Token","Import to CC Switch":"填入 CC Switch","In Progress":"进行中","In:":"入:","incident":"次故障","incidents":"次故障","Incidents":"事件","Include Group":"包含分组","Include Model":"包含模型","Include Rule Name":"包含规则名","Includes request rules":"包含请求规则","Including failed requests, 0 = unlimited":"包括失败的请求,0 = 无限制","Increased user quota by {{quota}}":"增加用户额度 {{quota}}","Index":"索引","Initial quota given to new users":"授予新用户的初始配额","Initialization failed, please try again.":"初始化失败,请重试。","Initialize":"初始化","Initialize system":"初始化系统","Initializing…":"正在初始化…","Inpaint":"局部重绘","Input":"输入","Input mode":"输入模式","Input price":"输入价格","Input price is required before saving dependent prices.":"保存依赖价格前必须先填写输入价格。","Input tokens":"输入 token","Input Tokens":"输入 Token","Inset":"内嵌","Inspect requests, errors, and billing details":"查看请求、错误和计费详情","Inspect user prompts":"检查用户提示","Instance":"实例","Insufficient balance":"余额不足","Integrations":"集成","Inter-group overrides":"分组间覆盖","Inter-group ratio overrides":"分组间比例覆盖","Interface Language":"界面语言","Internal Notes":"内部备注","Internal notes (not shown to users)":"内部备注(不显示给用户)","Internal Server Error!":"内部服务器错误!","Invalid chat link. Please contact the administrator.":"无效的聊天链接。请联系管理员。","Invalid chat link. Please contact your administrator.":"无效的聊天链接。请联系您的管理员。","Invalid code":"无效代码","Invalid JSON":"JSON 无效","Invalid JSON format":"无效的 JSON 格式","Invalid JSON format or values out of allowed range":"无效的 JSON 格式或值超出允许范围","Invalid JSON in parameter override template":"参数覆盖模板中的 JSON 格式无效","Invalid JSON string.":"无效的 JSON 字符串。","Invalid model mapping format":"无效的模型映射格式","Invalid Passkey registration response":"无效的 Passkey 注册响应","Invalid Passkey response":"无效的 Passkey 响应","Invalid payment redirect URL":"无效的支付跳转链接","Invalid reset link, please request a new password reset":"无效的重置链接,请请求新的密码重置","Invalid reset link, please request a new password reset.":"无效的重置链接,请请求新的密码重置。","Invalid rules JSON format":"规则 JSON 格式不正确","Invalid status code mapping entr
107ies: {{entries}}":"无效的状态码映射条目:{{entries}}","Invalidate":"作废","Invalidated":"已作废","Invert match":"反向匹配","Invitation Code":"邀请码","Invitation Quota":"邀请额度","Invite Info":"邀请信息","Invited":"已邀请","Invited by user ID":"由用户 ID 邀请","Invited Users":"受邀用户","Invitee Reward":"受邀者奖励","Inviter":"邀请人","Inviter Reward":"邀请者奖励","Invites":"邀请","Invoke developer-defined functions with structured arguments":"使用结构化参数调用开发者定义的函数","io.net API Key":"io.net API 密钥","io.net Deployments":"io.net 部署","IP":"IP","IP Address":"IP 地址","IP Filter Mode":"IP 过滤模式","IP Restriction":"IP 限制","IP Whitelist (supports CIDR)":"IP 白名单(支持 CIDR 表达式)","is less than the configured maximum cache size":"小于配置的最大缓存大小","is the default price; ":"为默认价格;","It seems like the page you\'re looking for":"您要查找的页面似乎","Items":"条目","Japanese":"日语","Jimeng":"Jimeng","Jina":"Jina","JSON":"JSON","JSON array of group identifiers. When enabled below, new tokens rotate through this list.":"分组标识符的 JSON 数组。在下方启用时,新令牌将在此列表中轮换。","JSON Editor":"JSON 编辑","JSON format error":"JSON 格式错误","JSON format supports service account JSON files":"JSON 格式支持服务账户 JSON 文件","JSON is invali
107d at line {{line}}, column {{column}}.":"JSON 在第 {{line}} 行、第 {{column}} 列无效。","JSON is invalid at position {{position}}.":"JSON 在位置 {{position}} 无效。","JSON is invalid. Please check the syntax.":"JSON 无效,请检查语法。","JSON map of group → description exposed when users create API keys.":"分组 → 描述的 JSON 映射,在用户创建 API 密钥时公开。","JSON map of group → ratio applied when the user selects the group explicitly.":"分组 → 比率的 JSON 映射,当用户明确选择该分组时应用此比率。","JSON map of model → multiplier applied to quota billing.":"模型 → 应用于配额计费的乘数的 JSON 映射。","JSON map of model → USD cost per request. Takes precedence over ratio based billing.":"模型 → 每请求美元成本的 JSON 映射。优先于基于比率的计费。","JSON mode":"JSON 模式","JSON Mode":"JSON 模式","JSON must be an object":"JSON 必须是对象","JSON object:":"JSON 对象:","JSON structure is invalid":"JSON 结构无效","JSON Text":"JSON 文本","JSON-based access control rules. Leave empty to allow all users.":"基于 JSON 的访问控制规则。留空以允许所有用户。","Just now":"刚刚","JustSong":"JustSong","K":"K","Keep affinity when channel is disabled":"渠道禁用后保留亲和","Keep enabled if you need to proxy requests for different upstream accounts.":"如果需要为不同上游账户代理请求,请保持启用。","Keep enough balance before production traffic":"生产流量前保持充足余
107额","Keep original value":"保留原值","Keep original value (skip if target exists)":"保留原值(目标已有值时不覆盖)","Keep the platform ready":"保持平台就绪","Keep this above 1 minute to avoid heavy database load":"保持此值大于 1 分钟以避免数据库负载过重","Keep-alive Ping":"保持连接心跳","Key":"密钥","Key Fingerprint":"Key 指纹","Key Sources":"Key 来源","Key Summary":"Key 摘要","Key Update Mode":"密钥更新模式","Keys, OAuth credentials, and multi-key update behavior.":"管理密钥、OAuth 凭据和多密钥更新行为。","Kling":"Kling","Knowledge Base ID *":"知识库 ID *","Knowledge cutoff":"知识截止","Lake View":"湖光","Landing page with system overview.":"带有系统概览的登陆页面。","Language preference saved":"语言偏好已保存","Language Preferences":"语言偏好","Language preferences sync across your signed-in devices and affect API error messages.":"语言偏好会同步到您登录的所有设备,并影响 API 错误消息语言。","Last 24h usage":"近 24 小时消耗","Last 30 days uptime":"近 30 天可用率","Last check time":"上次检测时间","Last detected addable models":"上次检测到可加入模型","Last Login":"最后登录","Last Seen":"最近一次","Last Tested":"上次测试时间","Last updated:":"上次更新时间:","Last Used":"最后使用时间","Last used:":"上次使用时间:","Latency":"延迟","Latency check":"延迟检测","Latency short":"延迟","Latency trend (last 24h)":"延迟趋势(最近 24 小时)","Latest platform updates and notices":"最新平台更新和通知","Lavender Dream":"薰衣草梦","Layout":"布局","lead":"领头","Leaderboards":"排行榜","Learn more":"了解更多","Learn more:":"了解更多:","Leave":"离开","Leave blank to keep the existing credential":"留空以保留现有凭证","Leave blank to keep the existing key":"留空以保留现有密钥","Leave blank unless rotating the secret":"除非正在轮换密钥,否则留空","Leave empty for never expires":"留空表示永不失效","Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.":"留空以禁用协议要求。支持 Markdown、HTML 或用于重定向用户的完整 URL。","Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.":"留空以禁用隐私政策要求。支持 Markdown、HTML 或用于重定向用户的完整 URL。","Leave empty to disband the tag":"留空以解散标签","Leave empty to keep existing key":"留空以保留现有密钥","Leave empty to keep unchanged":"留空以保持不变","Leave empty to use account email":"留空以使用账户邮箱","Leave empty to use default":"留空使用默认","Leave empty to use system temp directory":"留空使用系统临时目录","Leave empty to use username":"留空以使用用户名","Left to Right":"从左到右","Legacy Format (JSON Object)":"旧格式(JSON 对象)","Legacy format must be a JSON object":"旧格式必须是 JSON 对象","Legacy Format Template":"旧格式模板","Legal":"法律","Less":"更少","Less than":"小于","Less Than":"小于","Less than 1 day left":"剩余不足 1 天","Less than or equal":"小于等于","Less Than or Equal":"小于等于","License":"许可证","Light":"浅色","Lightning Fast":"极速","Limit period":"限制周期","Limit Reached":"已达上限","Limit which models can be used with this key":"限制此密钥可使用的模型","Limited":"受限","LingYiWanWu":"LingYiWanWu","Link to your documentation site":"您的文档站点链接","LinuxDO":"LinuxDO","LinuxDO Client ID":"LinuxDO 客户端 ID","LinuxDO Client Secret":"LinuxDO 客户端密钥","List of models supported by this channel. Use comma to separate multiple models.":"此渠道支持的模型列表。使用逗号分隔多个模型。","List of origins (one per line) allowed for Passkey registration and authentication.":"允许用于 Passkey 注册和身份验证的来源列表(每行一个)。","List view":"列表视图","LLM Leaderboard":"LLM 排行榜","LLM prompt helper":"LLM 辅助设计提示词","Load Balancing":"负载均衡","Load template...":"加载模板...","Loader":"加载器","Loading":"加载中","Loading channel details":"æ­£å
107œ¨åŠ è½½æ¸ é“è¯¦æƒ…","Loading configuration":"正在加载配置","Loading content settings...":"正在加载内容设置...","Loading current models...":"正在加载当前模型...","Loading failed":"加载失败","Loading maintenance settings...":"正在加载维护设置...","Loading settings...":"正在加载设置...","Loading setup status…":"正在加载设置状态…","Loading...":"加载中...","Local":"本地","Local Billing":"本地计费","Local models":"本地模型","Locations":"位置","Locked":"锁定","log":"日志的完整详情","Log Details":"日志详情","Log Directory":"日志目录","Log File Count":"日志文件数","Log files older than {{value}} days will be deleted.":"将删除 {{value}} 天前的日志文件。","Log IP address for usage and error logs":"记录用于使用和错误日志的 IP 地址","Log Maintenance":"日志维护","Log Type":"日志类型","Logged in successfully via {{method}}":"登录成功(通过 {{method}})","Logic":"逻辑","Login":"登录","Login failed":"登录失败","Login Info":"登录信息","Login Method":"登录方式","Logo":"徽标","Logo URL":"徽标 URL","Logs":"日志","Low balance":"余额偏低","Lowest median first-token latency":"最低首 token 延迟中位数","m":"分钟","Maintenance":"维护","Make it easier for teammates to pick the right group.":"让队友更容易选择正确的分组。","Manage":"管理","Manage account bindings for this user":"管理此用户的账户绑定","Manage Bindings":"管理绑定","Manage catalog visibility and pricing.":"管理目录可见性和定价。","Manage custom OAuth providers for user authentication":"管理用于用户认证的自定义 OAuth 提供商","Manage Keys":"管理密钥","Manage local models for:":"管理本地模型:","Manage multi-key status and configuration for this channel":"管理此渠道的多密钥状态和配置","Manage Ollama Models":"管理 Ollama 模型","Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.":"管理服务器运行日志文件。日志文件会随运行时间不断累积,建议定期清理以释放磁盘空间。","Manage subscription plans and pricing.":"管理订阅计划和定价。","Manage Subscriptions":"管理订阅","Manage Vendors":"管理供应商","Manage your security settings and account access":"管理您的安全设置和账户访问","Manual Disabled":"手动禁用","Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).":"将用户信息响应中的字段映射到本地用户属性。支持嵌套路径(例如 ocs.data.id)。","Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.":"将模型标识符映射到 Gemini API 版本。当未找到特定匹配项时,将应用 `default` 条目。","Map request model names to actual provider model names (JSON format)":"将请求模型名称映射到实际提供商模型名称 (JSON 格式)","Map response status codes (JSON format)":"映射响应状态码(JSON 格式)","Map upstream status codes to different codes":"将上游状态码映射到不同的代码","Market Share":"市场份额","Marketing":"市场营销","Match All (AND)":"必须全部满足(AND)","Match Any (OR)":"满足任一条件(OR)","Match Mode":"匹配方式","Match model name exactly":"完全匹配模型名称","Match models containing this name":"匹配包含此名称的模型","Match models ending with this name":"匹配以此名称结尾的模型","Match models starting with this name":"匹配以此名称开头的模型","Match Text":"匹配文本","Match Type":"匹配类型","Match Value":"匹配值","Match Value (optional)":"匹配值(可选)","Matched":"已命中","Matched Tier":"命中阶梯","Matching Rules":"匹配规则","Max Disk Cache Size (MB)":"磁盘缓存最大总量 (MB)","Max Entries":"最大条目数","Max output":"最大输出","Max Requests (incl. failures)":"最大请求数(包括失败)","Max Requests (including failures)":"最大请求数(包括失败)","Max requests per period":"每周期最大请求数","Max Success":"最大成功数","Max successful requests":"最大成功请求数","Max Successful Requests":"最大成功请求数","Maximum 1000 characters. Supports Markdown and HTML.":"最多 1000 个字符。支持 Markdown 和 HTML。","Maximum 200 characters":"最多 200 个字符","Maximum 500 characters. Supports Markdown and HTML.":"最多 500 个字符。支持 Markdown 和 HTML。","Maximum check-in quota":"签到最大额度","Maximum input window":"最大输入窗口","Maximum number of tokens in the response":"响应中最大 token 数","Maximum quota amount awarded for check-in":"签到奖励的最大额度","Maximum tokens including hidden reasoning tokens":"最大 token 数(含隐藏的推理 token)","Maximum tokens per response":"单次响应最大 token 数","maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647":"maxRequests ≥ 0, maxSuccess ≥ 1,两者均 ≤ 2,147,483,647","May be used for training by upstream provider":"可能被上游提供商用于训练","Media pricing":"媒体定价","Median time-to-first-token (TTFT) sampled hourly per group":"按小时采样的各分组首 token 延迟(TTFT)中位数","Medical Q&A, mental health support":"医疗问答与心理健康支持","Memory Hits":"内存命中","Memory Threshold (%)":"内存阈值 (%)","Merchant ID":"商户 ID","Merchant ID is required":"商户 ID 为必填项","Message Priority":"消息优先级","Metadata":"元信息","Midjourney":"Midjourney","MidjourneyPlus":"MidjourneyPlus","min downtime":"分钟停机","Min Top-up":"最低充值","Min Top-up:":"最低充值:","MiniMax":"MiniMax","Minimum check-in quota":"签到最小额度","Minimum LinuxDO trust level required":"所需的最低 LinuxDO 信任级别","Minimum quota amount awarded for check-in":"签到奖励的最小额度","Minimum recharge amount in USD":"最低充值金额(美元)","Minimum recharge amount to qualify for this discount.":"符合此折扣的最低充值金额。","Minimum top-up (optional)":"最低充值(可选)","Minimum top-up (USD)":"最低充值(美元)","Minimum top-up amount must be at least 1":"最低充值金额至少为 1","Minimum top-up quantity":"最低充值数量","Minimum topup amount: {{amount}}":"最低充值金额:{{amount}}","Minimum Trust Level":"最低信任级别","Minimum:":"最低:","Minor blips in the last 30 days":"近 30 天内有轻微抖动","Mint a fresh pair below — or pick an existing one further down. Click Save when ready.":"在下方创建新的配对,或继续向下选择已有配对。准备好后点击保存。","Minute":"分钟","minutes":"分钟","Missing code":"缺少代ç 
107","Missing Models":"缺失的模型","Missing user data from Passkey login response":"Passkey 登录响应中缺少用户数据","Mistral":"Mistral","Modalities":"模态","Modality":"模态","Mode":"模式","model":"模型","Model":"模型","Model Access":"模型访问","Model Analytics":"模型数据分析","Model Analytics Defaults":"模型分析默认设置","Model Analytics Filters":"模型分析筛选","model billing support":"模型计费支持","Model Call Analytics":"模型调用分析","Model context usage":"模型上下文用量","Model deleted":"模型已删除","Model deleted successfully":"模型删除成功","Model Deployment":"模型部署","Model deployment service is disabled":"模型部署服务未启用","Model Description":"模型描述","Model details":"模型详情","Model disabled successfully":"模型禁用成功","Model enabled successfully":"模型启用成功","Model fixed pricing":"模型固定定价","Model Group":"模型分组","Model Limits":"模型限制","Model Mapping":"模型映射","Model Mapping (JSON)":"模型映射 (JSON)","Model Mapping must be a JSON object like":"模型映射必须是如下所示的 JSON 对象","Model mapping must be a JSON object with string values":"模型映射必须是值为字符串的 JSON 对象","Model mapping must be valid JSON":"模型映射必须是有效的 JSON","Model mapping values must be strings":"模型映射的值必须是字符串","Model name":"模型名称","Model Name":"模型名称","Model Name *":"模型名称 *","Model name is required":"模型名称为必填项","Model names copied to clipboard":"模型名称已复制到剪贴板","Model not found":"模型未找到","Model performance metrics":"模型性能指标","Model Price":"模型价格","Model price is not configured. Please complete model pricing in settings.":"模型价格未配置,请前往设置补充模型价格。","Model Price Not Configured":"模型价格未配置","Model prices":"模型价格","Model prices reset successfully":"模型价格重置成功","Model Pricing":"模型定价","Model pull failed: {{msg}}":"模型拉取失败:{{msg}}","Model ratio":"模型倍率","Model ratios":"模型比例","Model ratios reset successfully":"模型比例重置成功","Model Regex":"模型正则","Model Regex (one per line)":"模型正则(每行一个)","Model selected":"已选择模型","Model Square":"模型广场","Model Tags":"模型标签","Model to use for testing":"用于测试的模型","Model to use when testing channel connectivity":"测试渠道连接时使用的模型","Model Version *":"模型版本 *","model(s) selected out of":"已选模型(共)","model(s)? This action cannot be undone.":"模型?此操作无法撤销。","models":"个模型","Models":"模型","Models *":"模型 *","Models & Groups":"模型与分组","Models & Routing":"模型与路由","Models appended successfully":"模型已追加成功","Models are required":"需要模型","Models climbing the leaderboard":"正在攀升的模型","Models climbing the leaderboard fastest":"排行榜上升最快的模型","Models directory":"模型目录","Models Directory":"模型目录","Models fetched successfully":"模型获取成功","Models filled to form":"模型已填充到表单","Models listed here will not automatically append or remove -thinking / -nothinking suffixes.":"此处列出的模型不会自动添加或移除 -thinking / -nothinking 后缀。","Models losing positions":"排名下滑的模型","Models losing the most positions":"名次下滑最多的模型","Models not in list, may fail to invoke":"模型未加入列表,可能无法调用","Models that are being used but not configured in the system":"正在使用但未在系统中配置的模型","Models that skip thinking suffix processing":"不自动处理思考后缀的模型","Models updated successfully":"模型更新成功","Modify existing subscription plan configuration":"修改现有订阅套餐的配置","Module availability":"模块可用性","MokaAI":"MokaAI","Monitor":"监控","Monitor balance, usage, and request volume":"监控ä½
107™é¢ã€ç”¨é‡å’Œè¯·æ±‚量","Monitored relay requests":"已监控的中继请求","Monitoring & Alerts":"监控与警报","Month":"本月","Month number":"月份","Monthly":"每月","Monthly tokens":"每月 token","months":"个月","Moonshot":"Moonshot","More":"更多","More Apps":"更多","more mapping":"更多映射","More templates...":"更多模板...","More than 999 days left":"剩余超过 999 天","More...":"更多...","Most-used models in the selected period and category":"所选时间范围与分类下使用率最高的模型","Move":"移动","Move a request header":"移动请求头","Move affiliate rewards to your main balance":"将推广奖励转移到您的主余额","Move Field":"移动字段","Move Header":"移动请求头","Move Request Header":"移动请求头","Move source field to target field":"把来源字段移动到目标字段","ms":"毫秒","Multi-key channel: Keys will be":"多密钥渠道:密钥将","Multi-Key Management":"多密钥管理","Multi-key management {{action}} on channel (ID: {{id}})":"对渠道(ID: {{id}})执行多密钥管理操作 {{action}}","Multi-Key Mode (multiple keys, one channel)":"多密钥模式(多个密钥,一个渠道)","Multi-Key Strategy":"多密钥策略","Multi-key: Polling rotation":"多密钥:轮询","Multi-key: Random rotation":"多密钥:随机","Multi-protocol Compatible":"兼容多协议","Multi-region deployment for stable global access":"多区域部署,实现稳定的全球访问","Multi-step thinking before final answer":"在给出最终答案前进行多步推理","Multi-user management with flexible permission allocation":"多用户管理,灵活分配权限","Multilingual translation and localisation":"多语种翻译与本地化","Multimodal":"多模态","Multiplier":"倍率","Multiplier applied when":"倍率应用于当","Multiplier applied when {{userGroup}} uses {{targetGroup}}":"当{{userGroup}}使用{{targetGroup}}时应用的倍率","Multiplier for audio inputs.":"音频输入的倍率。","Multiplier for audio outputs.":"音频输出的倍率。","Multiplier for completion tokens.":"补全令牌的倍数。","Multiplier for image processing.":"图像处理的倍率。","Multiplier for prompt tokens.":"提示令牌的倍数。","Multipliers for recharge pricing based on user groups.":"基于用户分组的充值定价倍率。","Must be a valid URL":"必须是有效的 URL","Must be at least 8 characters":"必须至少 8 个字符","My Subscriptions":"我的订阅","my-status":"我的状态","MySQL detected":"检测到 MySQL","MySQL is a production-ready relational database. Keep your credentials secure.":"MySQL 是生产就绪的关系数据库。请确保凭据安全。","MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.":"MySQL 已准备好投入生äº
107§çŽ¯å¢ƒã€‚è¯·ç¡®ä¿é…ç½®äº†è‡ªåŠ¨å¤‡ä»½ä»¥åŠå…·æœ‰æœ€ä½Žæ‰€éœ€æƒé™çš„ä¸“ç”¨ç”¨æˆ·ã€‚","N/A":"不适用","Name":"名称","Name *":"名称 *","Name for this redemption code (1-20 characters)":"此兑换码的名称(1-20 个字符)","Name is available":"名称可用","Name is not available":"名称不可用","Name must be between {{min}} and {{max}} characters":"名称必须介于 {{min}} 到 {{max}} 个字符之间","Name Rule":"名称规则","Name Suffix":"名称后缀","Name the channel and choose the upstream provider.":"命名渠道并选择上游供应商。","Name the channel, choose the provider, configure API access, and set credentials.":"命名渠道、选择供应商、配置 API 访问并设置凭据。","Name, provider type, and availability.":"名称、供应商类型和可用状态。","[email protected]":"[email protected]","Native format":"原生格式","Need a redemption code?":"需要兑换码?","Needs API key":"需要 API 密钥","Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.":"嵌套 JSON,定义按分组添加(+:)、移除(-:)或追加可用分组的规则。","Nested JSON: source group →":"嵌套 JSON:源分组 â
107†’","Network proxy for this channel (supports socks5 protocol)":"此渠道的网络代理(支持 socks5 协议)","Never":"永不","Never expires":"永不过期","Never used an API Gateway?":"从未使用过 API 网关/中转 API?","NEW":"新","New API":"New API","New API &lt;[email protected]&gt;":"New API &lt;[email protected]&gt;","New API Project Repository:":"New API 项目仓库:","New Format Template":"新格式模板","New Group":"新建分组","New model":"新模型","New Models ({{count}})":"新模型 ({{count}})","New name will be:":"新名称将是:","New password":"新密码","New Password":"新密码","New password must be different from current password":"新密码必须与当前密码不同","New User Quota":"新用户配额","New version available: {{version}}":"有新版本可用:{{version}}","NewAPI":"NewAPI","Newly released":"最新发布","Next":"下一步","Next branch":"下一个分支","Next page":"下一页","Next reset":"下一次重置","No":"否","No About Content Set":"未设置关于内容","No Active":"无生效","No additional type-specific settings for this channel type.":"此渠道类型没有额外的特定类型设置。","No amount options configured. Add amounts below to get started.":"未配置金额选项。在下方添加金额即可开始使用。","No announcements at this time":"目前暂无公告","No announcements yet. Click \\"Add Announcement\\" to create one.":"暂无公告。点击“添加公告”来创建一个。","No API Domains yet. Click \\"Add API\\" to create one.":"暂无 API 域。点击“添加 API”创建一个。","No API key yet":"暂无 API 密钥","No API keys available. Create your first API key to get started.":"没有可用的 API 密钥。创建您的第一个 API 密钥即可开始使用。","No API Keys Found":"未找到 API 密钥","No API routes configured":"未配置 API 路由","No app usage data available for this model.":"该模型暂无应用使用数据。","No apps match the selected filters":"没有匹配筛选条件的应用","No available models":"没有可用模型","No available Web chat links":"没有可用的 Web 聊天链接","No backup":"无备份","No base input price":"未设置基础输入价格","No billing records found":"未找到账单记录","No capabilities reported for this model.":"该模型暂未报告任何能力。","No Change":"无变化","No changes":"没有变更","No changes made":"未进行任何更改","No changes to save":"没有需要保存的更改","No channel selected":"未选择渠道","No channel type found.":"未找到渠道类型。","No channels available. Create your first channel to get started.":"没有可用的渠道。创建您的第一个渠道即可开始使用。","No channels found":"未找到渠道","No Channels Found":"未找到渠道","No channels selected":"未选择渠道","No chat presets configured. Click \\"Add chat preset\\" to get started.":"未配置聊天预设。点击\\"添加聊天预设\\"开始。","No chat presets match your search":"没有匹配的聊天预设","No conflict entries available.":"没有可用的冲突条目。","No conflicts match your search.":"没有冲突匹配您的搜索。","No console output":"无控制台输出","No containers":"无容器","No custom OAuth providers configured yet.":"尚未配置自定义 OAuth 提供商。","No data":"暂无数据","No Data":"无数据","No data available":"暂无数据","No deployments available. Create one to get started.":"没有可用的部署。创建一个开始吧。","No Deployments Found":"未找到部署","No description available.":"暂无描述。","No discount tiers configured. Click \\"Add discount tier\\" to get started.":"未配置折扣等级。点击“添加折扣等级”即可开始使用。","No duplicate keys found":"未发现重复密钥","No enabled tokens available":"当前没有可用的启用令牌","No endpoints configured. Switch to JSON mode or add rows to define endpoints.":"未配置端点。切换到 JSON 模式或添加行来定义端点。","No FAQ entries available":"暂无 FAQ 条目","No FAQ entries yet. Click \\"Add FAQ\\" to create one.":"暂无常见问题条目。点击“添加常见问题”来创建一个。","No files match the accepted types.":"没有文件匹配接受的类型。","No group found.":"未找到分组。","No group-based rate limits configured. Click \\"Add group\\" to get started.":"未配置基于组的速率限制。点击“添加组”开始使用。","N
107o groups match your search":"没有组匹配您的搜索","No groups yet. Add a group to get started.":"暂无分组,添加一个分组开始配置。","No header overrides configured.":"未配置标头覆盖。","No history data available":"暂无历史数据","No incidents in the last 24 hours":"最近 24 小时无异常","No incidents in the last 30 days":"最近 30 天无事件","No Inviter":"无邀请人","No keys found":"未找到密钥","No latency data available":"暂无延迟数据","No log entries matched the selected time.":"没有日志条目匹配所选时间。","No logs":"暂无日志","No Logs Found":"未找到日志","No mappings configured. Click \\"Add Row\\" to get started.":"未配置映射。点击 \\"添加行\\" 开始。","No matches found":"未找到匹配项","No matching items":"没有匹配项","No matching results":"无匹配结果","No matching rules":"没有匹配的规则","No messages yet":"暂无消息","No missing models found.":"未找到缺失的模型。","No model found.":"未找到模型。","No model mappings configured. Click \\"Add Mapping\\" to get started.":"未配置模型映射。点击“添加映射”即可开始使用。","No models available":"没有可用的模型","No models available in this category":"该分类下没有可用模型","No models available. Create your first model to get started.":"没有可用的模型。创建您的第一个模型即可开始使用。","No models configured. Use Add model to get started.":"暂无模型配置。使用添加模型开始配置。","No models fetched from upstream":"未从上游获取模型","No models fetched yet.":"尚未获取模型。","No models found":"未找到模型","No Models Found":"未找到模型","No models found.":"未找到模型。","No models match the selected filters":"没有匹配筛选条件的模型","No models match your current filters.":"没有模型匹配您当前的筛选条件。","No models match your search":"没有匹配的模型","No models selected":"未选择模型","No models to add":"无待新增模型","No models to copy":"没有模型可复制","No models to remove":"无待删除模型","No new models to add":"没有新模型可添加","No new models yet":"暂无新模型","No notable climbers right now":"当前没有显著上升的模型","No notable drops right now":"当前没有显著下降的模型","No parameter overrides configured.":"未配置参数覆盖。","No payment methods available. Please contact administrator.":"没有可用的支付方式。请联系管理员。","No payment methods configured":"暂无支付方式","No payment methods configured. Click \\"Add method\\" or use templates to get started.":"未配置支付方式。点击\\"添加方式\\"或使用模板开始。","No payment methods match your search":"没有匹配的支付方式","No performance data available":"暂无性能数据","No plans available":"暂无可购买套餐","No preference":"无偏好","No prefill groups yet":"暂无预填充分组","No price differences found":"未发现价格差异","No processable upstream model updates for this channel":"该渠道暂无可处理的上游模型更新","No products configured. Click \\"Add product\\" to get started.":"未配置产品。点击 \\"添加产品\\" 开始。","No products match your search":"没有产品匹配您的搜索","No providers available":"暂无可用提供商","No Quota":"无余额","No ratio differences found":"未发现比率差异","No recent usage":"暂无使用记录","No records found. Try adjusting your filters.":"未找到记录。尝试调整您的筛选条件。","No redemption codes available. Create your first redemption code to get started.":"没有可用的兑换码。创建您的第一个兑换码即可开始使用。","No Redemption Codes Found":"未找到兑换码","No related models available for this channel type":"此渠道类型没有相关模型可用","No release notes provided.":"未提供发布说明。","No Reset":"不重置","No restriction":"无限制","No results for \\"{{query}}\\". Try adjusting your search or filters.":"未找到 \\"{{query}}\\" 的结果。请尝试调整搜索或筛选条件。","No results found":"搜索无结果","N
107o results found.":"未找到结果。","No Retry":"不重试","No rules yet":"暂无规则","No rules yet. Add a group below to get started.":"暂无规则。请在下方添加分组以开始。","No separate media pricing configured.":"未配置单独的媒体定价。","No status code mappings configured.":"未配置状态码映射。","No stores on this merchant yet. Set a return URL and click Create to mint your first pair.":"此商户暂无店铺。设置返回 URL 后点击创建来生成第一组配对。","No subscription plans yet":"暂无订阅套餐","No subscription records":"暂无订阅记录","No Sync":"不同步","No system announcements":"暂无系统公告","No token found.":"未找到令牌。","No tools configured":"未配置工具","No Upgrade":"不升级","No upstream price differences found":"未发现上游价格差异","No upstream ratio differences found":"未找到上游比例差异","No uptime data available":"暂无可用率数据","No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.":"暂无 Uptime Kuma 分组。点击“添加分组”来创建一个。","No uptime monitoring configured":"未配置正常运行时间监控","No usage logs available. Logs will appear here once API calls are made.":"暂无使用日志。发起 API 调用后日志将显示在此处。","No user information available":"暂无用户信息","No user selected":"未选择用户","No users available. Try adjusting your search or filters.":"没有可用的用户。请尝试调整您的搜索或筛选条件。","No Users Found":"未找到用户","No vendor data available":"暂无厂商数据","No X Found":"未找到 X","Node Name":"节点名称","Non-stream":"非流式","Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.":"非零邀请奖励需要先在支付网关设置中确认合规条款。","None":"无","[email protected]":"[email protected]","Normalized:":"已归一化:","Not available":"不可用","Not backed up":"未备份","Not bound":"未绑定","Not Equals":"不等于","Not Set":"未设置","Not set yet":"尚未设置","Not Started":"未开始","Not Submitted":"未提交","Not tested":"未测试","Not used for upstream training by default":"默认不会用于上游训练","Not used yet":"暂未使用","Notice":"通知","Notification Email":"通知邮箱","Notification Method":"通知方式","Notifications":"通知","Nucleus sampling probability mass":"核采样累计概率","Number of codes to create":"要创建的代码数量","Number of completions to generate":"生成的候选条数","Number of images to generate":"生成的图像数量","Number of keys to create":"要创建的密钥数量","Number of times to retry failed requests (0-10)":"失败请求的重试次数 (0-10)","Number of tokens per unit quota":"每单位配额的令牌数","Number of top log probabilities returned per token":"每个 token 返回的 top 概率数量","Number of users invited":"已邀请的用户数量","OAuth Client ID":"OAuth 客户端 ID","OAuth Client Secret":"OAuth 客户端密钥","OAuth failed":"OAuth 失败","OAuth Integrations":"OAuth 集成","Object Prune Rules":"对象清理规则","Observability":"可观测性","Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.":"请在 Waffo 后台获取 API 密钥、商户 ID 以及 RSA 密钥对,并配置回调地址。","Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: <ServerAddress>/api/waffo-pancake/webhook":"请在 Waffo 后台获取商户、店铺、商品与签名密钥。Webhook 地址:<ServerAddress>/api/waffo-pancake/webhook","Ocean Breeze":"海风","of":"条,共","of 3:":"共 3 个:","off":"关闭","Official":"官方","Official documentation":"官方说明","Official Repository":"官方仓库","Official Sync":"官方同步","OhMyGPT":"OhMyGPT","OIDC":"OIDC","OIDC Client ID":"OIDC 客户端 ID","OIDC Client Secret":"OIDC 客户端密钥","OIDC configuration fetched successfully":"OIDC 配置获取成功","OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.":"OIDC 发现 URL。点击\\"自动发现\\"以自动获取端点。","OIDC endpoints discovered successfully":"OIDC 端点发现成功","Old Format Template":"旧格式模板","Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.":"旧格式:直接覆盖。新格式:支持条件判断和自定义 JSON 操作。","Ollama":"Ollama","Ollama Models":"Ollama 模型","One API":"One API","One domain per line":"每行一个域名","One domain per line (only used when domain restriction is enabled)":"每行一个域名 (仅在启用域名限制时使用)","One IP or CIDR range per line":"每行一个 IP 或 C
107IDR 范围","One IP per line (empty for no restriction)":"每行一个 IP (留空表示无限制)","one keyword per line":"每行一个关键词","Online":"在线","Online payment is not enabled. Please contact the administrator.":"管理员未开启在线支付功能,请联系管理员配置。","Online topup is not enabled. Please use redemption code or contact administrator.":"尚未启用在线充值。请使用兑换码或联系管理员。","Only allow specific email domains":"仅允许特定的电子邮件域名","Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.":"仅管理员可用。启用后,当定时模型检查检测到上游模型变更或检查失败时,您将通过所选方式收到汇总通知。","Only configured combinations are overridden. All other calls keep the token group base ratio.":"只有已配置的组合会被覆盖,其他调用仍使用令牌分组的基础倍率。","Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear."
107:"仅选定的字段将被覆盖。如果出现新的冲突,您可以重新运行同步向导。","Only successful requests":"仅成功的请求","Only successful requests count toward this limit.":"仅成功的请求计入此限制。","Only the last {{value}} log files will be retained; the rest will be deleted.":"将只保留最近 {{value}} 个日志文件,其余将被删除。","Oops! Page Not Found!":"糟糕!页面未找到!","Oops! Something went wrong":"糟糕!出错了","Open":"打开","Open a source model first":"请先打开一个源模型","Open CC Switch":"打开 CC Switch","Open in chat":"在聊天中打开","Open in new tab":"在新标签页中打开","Open in New Tab":"在新标签页中打开","Open menu":"打开菜单","Open release":"打开版本","Open source":"开源","Open Source":"开源项目","Open the io.net console API Keys page":"打开 io.net 控制台 API 密钥页面","Open theme settings":"打开主题设置","Open weights":"开放权重","OpenAI":"OpenAI","OpenAI Compatible":"兼容 OpenAI","OpenAI Organization":"OpenAI 组织","OpenAI Organization ID (optional)":"OpenAI 组织 ID(可选)","OpenAI, Anthropic, etc.":"OpenAI、Anthropic 等","OpenAI, Anthropic, Google, etc.":"OpenAI、Anthropic、Google 等","OpenAIMax":"OpenAIMax","OpenRouter":"OpenRouter","opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.":"在外部客户端中打开。从侧边栏或 API 密钥操作中触发,以启动配置的应用。","Operation":"操作","operation and charging behavior":"运营和收费行为","Operation Audit Info":"操作审计信息","Operation failed":"操作失败","Operation successful":"操作成功","Operation Type":"操作类型","Operations":"运维","Operator Admin":"操作管理员","Optimize system for self-hosted single-user usage":"优化系统以适应自托管单用户使用","Optimized network architecture ensures millisecond response times":"优化的网络架构,确保毫秒级响应时间","Optional callback override. Leave blank to use server address":"可选的回调覆盖。留空以使用服务器地址","Optional icon identifier for the login button":"登录按钮的可选图标标识符","Optional JSON policy to restrict access based on user info fields":"可选的 JSON 策略,用于基于用户信息字段限制访问","Optional minimum recharge amount for this method.":"此方法的可选最低充值金额。","Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as":"计算充值定价时使用的每个用户分组可选乘数。请提供一个 JSON 对象,例如","Optional notes about this channel":"关于此渠道的可选备注","Optional notes about when to use this group":"关于何时使用此分组的可选说明","Optional ratio used when upstream cache hits occur.":"上游缓存命中时使用的可选比率。","Optional rule description":"可选规则说明","Optional settings for advanced container configuration.":"高级容器配置的可选设置。","Optional supplementary information (max 100 characters)":"可选补充信息 (最多 100 个字符)","Optional tag for grouping channels":"用于分组渠道的可选标签","Opus Model":"Opus 模型","Or continue with":"或继续使用","Or enter this key manually:":"或手动输入此密钥:","or pick existing":"或选择已有项","Order completed successfully":"订单已成功完成","Order History":"订单历史","Order Payment Method":"订单支付方式","org-...":"org-...","Original Model":"原始模型","Other":"其他","Outage":"中断","Output":"输出","Output aspect ratio":"输出宽高比","Output image size":"输出图像尺寸","Output price":"输出价格","Output token price for generated tokens.":"生成内容的输出 token 价格。","Output tokens":"输出 token","Output Tokens":"输出 Token","overall":"总体","Overnight range":"跨日范围","override":"覆盖","Override":"覆盖","Override auto-discovered endpoint":"覆盖自动发现的端点","Override request headers":"覆盖请求标头","Override request headers (JSON format)":"覆盖请求头(JSON 格式)","Override request parameters":"覆盖请求参数","Override request parameters (JSON format)":"覆盖请求参数 (JSON 格式)","Override request parameters. Cannot override":"覆盖请求参数。无法覆盖","Override request parameters. Cannot override stream parameter.":"覆盖请求参数。无法覆盖 stream 参数。","Override Rules":"覆盖规则","Override the endpoint used for testing. Leave empty to auto detect.":"覆盖用于测试的端点。留空以自动检测。","overrides for matching model prefix.":"为匹配模型前缀的覆盖价。","Overrode user quota from {{from}} to {{to}}":"覆盖用户额度,从 {{from}} 改为 {{to}}","Overview":"概览","Overwritten":"已覆盖","Page":"页面","Page {{current}} of {{total}}":"第 {{current}} 页,共 {{total}} 页","PaLM":"PaLM","Pan":"平移","Pancake":"煎饼","Param Override":"参数覆盖","Parameter":"参数","Parameter configuration error":"参数配置有误","Parameter Override":"参数覆盖","Parameter override must be a valid JSON object":"参数覆盖必须是合法的 JSON 对象","Parameter override must be valid JSON format":"参数覆盖必须是合法的 JSON 格式","Parameter Override Template (JSON)":"参数覆盖模板 (JSON)","Parameter override template must be a JSON object":"参数覆盖模板必须是 JSON 对象","parameter.":"参数。","Parameters":"参数","Parsed {{count}} service account file(s)":"已解析 {{count}} 个服务账号文件","Partial Submission":"部分提交确认","Pass Headers":"透传请求头","Pass request body directly to upstream":"将请求体直接传递给上游","Pass specified request headers to upstream":"把指定请求头透传到上游请求","Pass Through Body":"透传请求体","Pass Through Headers":"请求头透传","Pass through the anthropic-beta header for beta features":"透传 anthropic-beta 头部以使用 beta 功能","Pass through the include field for usage obfuscation":"透传 include 字段以用于用量混淆","Pass through the inference_geo field for Claude data residency region control":"透传 inference_geo 字段用于控制 Claude 数据驻留推理区域","Pass through the inference_geo field for geographic routing":"透传 inference_geo 字段以用于地理路由","Pass through the safety_identifier field":"将 safety_identifier 字段透传到上游","Pass through the service_tier field":"将 service_tier 字段透传到上游","Pass through the speed field for Claude inference speed mode control":"透传 speed 字段用于控制 Claude 推理速度模式","Pass when key is missing":"字段缺失时通过","Pass-Through":"透传","Pass-through Headers (comma-separated or JSON array)":"透传请求头(逗号分隔或 JSON 数组)","Passkey":"Passkey","Passkey Authentication":"通行密钥认证","Passkey is not available in this browser":"此浏览器中不支持 Passkey","Passkey is not supported in this environment":"此环境中不支持 Passkey","Passkey is not supported on this device":"此设备不支持 Passkey","Passkey is not supported on this device.":"此设备不支持通行密钥。","Passkey Login":"Passkey 登录","Passkey login failed":"Passkey 登录失败","Passkey login was cancelled":"Passkey 登录已取消","Passkey login was cancelled or timed out":"Passkey 登录已取消或超时","Passkey not supported on this device":"此设备不支持通行密钥","Passkey registered successfully":"Passkey 注册成功","Passkey registration was cancelled":"通行密钥注册已取消","Passkey removed successfully":"通行密钥已成功移除","Passkey reset successfully":"通行密钥已成功重置","Passthrough Template":"透传模板","Password":"密码","Password / A
107ccess Token":"密码 / 访问令牌","Password changed successfully":"密码更改成功","Password copied to clipboard: {{password}}":"密码已复制到剪贴板:{{password}}","Password has been copied to clipboard":"密码已复制到剪贴板","Password Login":"密码登录","Password must be at least 8 characters":"密码必须至少 8 个字符","Password must be at least 8 characters long":"密码必须至少 8 个字符长","Password Registration":"密码注册","Password reset and copied to clipboard: {{password}}":"密码已重置并复制到剪贴板:{{password}}","Password reset: {{password}}":"密码已重置:{{password}}","Passwords do not match":"密码不匹配","Path":"路径","Path not set":"未设置路径","Path Regex (one per line)":"路径正则(每行一个)","Path:":"路径:","Pay":"支付","Pay with Balance":"使用余额支付","Pay-as-you-go with real-time usage monitoring":"按量付费,实时监控使用情况","Payment":"支付","Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.":"支付聚合模式:使用你自己的注册公司(离岸实体)入驻。面向企业场景构建。","Payment Channel":"支付渠道","Payment Gateway":"支付网关","Payment initiated":"已发起支付","Payment Method":"付款方式","Payment method name":"支付方式名称","Payment method name is required":"支付方式名称不能为空","Payment method type":"支付方式类型","Payment method type is required":"支付方式类型为必填项","Payment methods":"付款方式","Payment Methods":"支付方式","Payment page opened":"已打开支付页面","Payment request failed":"支付请求失败","Payment return URL":"支付返回地址","Payment return URL is empty. Create the product without a SuccessURL redirect?":"支付返回 URL 为空。是否在没有 SuccessURL 跳转的情况下创建产品?","Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.":"在根管理员确认合规条款之前,支付、兑换码、订阅套餐和邀请奖励功能将保持锁定。","Peak":"峰值","Peak throughput":"峰值吞吐","Penalises repetition of frequent tokens":"惩罚高频 token 的重复出现","Pending":"待确认","per":"每","Per 1K tokens":"每 1K tokens","Per 1M tokens":"每 1M tokens","per request":"每次请求","Per request":"每次请求","Per Request":"按请求","Per-call":"每次调用","Per-feature metered windows split by model or capability.":"按模型或能力拆分的附加计费能力窗口。","Per-group performance":"各分组性能","Per-request":"按次","Per-request (fixed price)":"按请求计费(固定价格)","Per-token":"按 Token","Per-token (ratio based)":"按令牌计费(基于比例)","Per-token logit bias map":"按 token 的 logit 偏置映射","Percentage:":"百分比:","Performance":"性能","Performance data is not yet available for this model.":"该模型暂无性能数据。","Performance health":"性能健康","Performance metrics for the last 24 hours":"最近 24 小时的性能指标","Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.":"此处展示的性能指标为预览模拟数据,待后端对接完成后将替换为真实可观测数据。","Performance Monitor":"性能监控","Performance Settings":"性能设置","Performed {{action}} on user {{username}} (ID: {{id}})":"对用户 {{username}}(ID: {{id}})执行 {{action}}","Period":"时间范围","Periodically check for upstream model changes":"定期检查上游模型是否有变更","Periodically send ping frames to keep streaming connections active.":"定期发送 ping 帧以保持流连接处于活动状态。","Permanently delete your account and all data":"永久删除您的帐户和所有数据","Permit Passkey registration on non-HTTPS origins (only recommended for development)":"允许在非 HTTPS 源上注册通行密钥(仅建议用于开发)","Perplexity":"Perplexity","Persist your data file":"持久化您的数据文件","Personal":"个人","Personal area":"个人中心","Personal Center Area":"个人中心区域","Personal info settings":"个人信息设置","Personal Settings":"个人设置","Personal settings and profile management."
107:"个人设置和个人资料管理。","Personal use":"个人使用","Personal use mode":"个人使用模式","Pick a date":"选择日期","Pick or create both a store and a product before saving.":"保存前请同时选择或创建店铺和产品。","Ping Interval (seconds)":"Ping 间隔(秒)","Plan":"套餐","Plan Name":"套餐名称","Plan price must be greater than zero":"套餐价格必须大于 0","Plan Subtitle":"套餐副标题","Plan Title":"套餐标题","Plan title is required":"套餐标题为必填项","Planned maintenance on Friday at 22:00 UTC...":"计划于周五 22:00 UTC 进行维护...","Platform":"平台","Playground":"游乐场","Playground and chat functions":"操练场和聊天功能","Playground experiments and live conversations.":"Playground 实验和实时对话。","Please agree to the legal terms first":"请先同意法律条款","Please complete the security check to continue.":"请完成安全验证以继续。","Please confirm that you understand the consequences":"请确认您了解后果","Please enable io.net model deployment service and configure an API key in System Settings.":"请先在系统设置中启用 io.net 模型部署服务,并配置 API Key。","Please enable Two-factor Authentication or Passkey before proceeding":"请先启用双因素认证或通行密钥","Please enter a name":"请输入名称","Please enter a new password":"请输入新密码","Please enter a redemption code":"请输入兑换码","Please enter a valid duration":"请输入有效持续时间","Please enter a valid email address":"请输入有效的电子邮件地址","Please enter a valid number":"请输入有效的数值","Please enter a Well-Known URL first":"请先输入 Well-Known URL","Please enter amount":"请输入金额","Please enter an administrator username":"请输入管理员用户名","Please enter API key first":"请先输入 API 密钥","Please enter chat client name":"请输入聊天客户端名称","Please enter email and verification code":"请输入邮箱和验证码","Please enter keys first":"请先输入密钥","Please enter model name":"请输入模型名称","Please enter plan title":"请输入套餐标题","Please enter the authentication code.":"请输入验证码。","Please enter the URL":"请输入 URL","Please enter the verification code":"请输入验证码","Please enter your current password":"请输入当前密码","Please enter your email":"请输入您的电子邮件","Please enter your email first":"请先输入您的邮箱","Please enter your verification code":"请输入您的验证码","Please enter your verification code or backup code":"请输入您的验证码或备用码","Please fix JSON errors before saving":"请先修复 JSON 错误再保存","Please fix the highlighted fields before saving":"请先修复高亮字段后再保存","Please log in with the appropriate credentials":"请使用适当的凭据登录","Please select a container":"请选择一个容器","Please select a payment method":"请选择支付方式","Please select a primary model":"请选择主模型","Please select a subscription plan":"请选择订阅套餐","Please select at least one channel":"请选择至少一个渠道","Please select at least one model":"请选择至少一个模型","Please select items to delete":"请选择要删除的项目","Please Select user groups that can access this channel.":"请选择可以访问此渠道的用户组。","Please set Ollama API Base URL first":"请先设置 Ollama API Base URL","Please sign in to view {{module}}.":"请登录后查看 {{module}}。","Please try again later.":"请稍后再试。","Please type the following text to confirm:":"请输入以下文本进行确认:","Please upload key file(s)":"请上传密钥文件","Please wait a moment before trying again.":"请稍候再试。","Please wait a moment, human check is initializing...":"请稍等,人机验证正在初始化...","Please wait before editing to avoid overwriting saved values.":"请等待加载完成后再编辑,以免覆盖已保存的值。","Policy JSON":"策略 JSON","Polling":"轮询","Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded":"轮询模式需要 Redis 和内存缓存,否则性能将显著下降","Poor":"å·®","Port":"端口","Port must be a positive integer":"端口必须为正整数","Post Delta":"结算差额","PostgreSQL detected":"检测到 PostgreSQL","PostgreSQL offers advanced reliability and data integrity for production workloads.":"PostgreSQL 为生产工作负载提供高级可靠性和数据完整性。","PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.":"PostgreSQL 提供强大的可靠性保证。在上线之前,请仔细检查您的维护窗口和保留策略。","Power AI applications, manage digital assets, connect the Future":"承载 AI 应用,管理数字资产,连接未来","Powerful API Management Platform":"强大的 API 管理平台","Pre-Consume for Free Models":"免费模型预消耗","Pre-consumed":"预扣费","Pre-Consumed Quota":"预消耗配额","Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.":"已保存偏好为{{pref}},当前无生效订阅,将自动使用钱包","Preferences":"偏好设置","Prefill Group Management":"预填充分组管理","Prefill Groups":"预填充分组","Prefill groups help you keep complex configurations in sync.":"预填充分组可帮助您保持复杂配置的同步。","Prefix":"前缀","Prefix Match":"前缀匹配","Prefix used when displaying prices":"显示价格时使用的前缀","Prefix/Suffix Text":"前后缀文本","Premium chat models":"高级聊天模型","Premium plan, half price":"高级套餐,半价优惠","Preparing chat keys…":"正在准备聊天密钥…","Preparing your chat link, please try again in a moment.":"正在准备您的聊天链接ï¼
107Œè¯·ç¨åŽå†è¯•。","Preparing your chat link…":"正在准备您的聊天链接...","Prepend":"前置追加","Prepend to Start":"追加到开头","Prepend value to array / string / object start":"把值追加到数组/字符串/对象开头","Preserve the original field when applying this rule":"应用此规则时保留原始字段","Preset groups":"预设分组","Preset recharge amounts (JSON array)":"预设充值金额(JSON 数组)","Preset recharge amounts displayed to users":"向用户显示的预设充值金额","Preset Template":"预设模板","Preset templates":"预设模板","preset.anthropic":"Anthropic","preset.default":"默认","preset.forest-whisper":"森林低语","preset.lake-view":"湖光","preset.lavender-dream":"薰衣草梦","preset.ocean-breeze":"海风","preset.rose-garden":"玫瑰花园","preset.simple-large":"超大字体简易","preset.sunset-glow":"日落霞光","preset.underground":"暗夜","Press Enter or comma to add tags":"按 Enter 或逗号添加标签","Press Enter to use \\"{{value}}\\"":"按 Enter 使用「{{value}}」","Prevent server-side request forgery attacks":"防止服务器端请求伪造攻击","Preview":"预览","Previous":"上一步","Previous branch":"上一分支","Previous page":"上一页","Price":"ä»·æ ¼","Price ($/1K calls)":"价格($/1K 次)","Price (local currency / USD)":"价格(本地货币/美元)","Price display":"价格显示","Price display mode":"价格显示模式","Price estimation":"价格预估","Price estimation description":"完成硬件类型、部署位置、副本数量等设置后,价格将自动计算。","Price ID":"ä»·æ ¼ ID","Price mode (USD per 1M tokens)":"价格模式(每 100 万个 token 的美元价格)","Price summary":"价格摘要","price_xxx":"price_xxx","Price:":"价格:","Price: High to Low":"价格:从高到低","Price: Low to High":"价格:从低到高","Prices shown per":"价格显示单位","Prices synced successfully":"价格同步成功","Prices vary by usage tier and request conditions":"价格根据用量档位和请求条件动态调整","Pricing":"定价","Pricing & Display":"定价与显示","Pricing by Group":"按分组定价","Pricing Configuration":"定价配置","Pricing group example":"定价分组示例","Pricing groups":"定价分组","Pricing mode":"定价模式","Pricing Ratios":"定价比例","Pricing Type":"定价类型","Primary Model":"主模型","Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)":"基于请求上下文提取的 Key,优先复用上一次成功的渠道(粘滞选路)","Priority":"优先级","Priority (Default)":"优先级(默认)","Priority level from 0 (lowest) to 10 (highest), default is 5":"优先级,从 0(最低)到 10(最高),默认为 5","Priority order for automatic group assignment. New tokens rotate through this list.":"自动分组分配的优先级顺序。新 token 将按此列表轮换。","Privacy Policy":"隐私政策","Private Deployment URL":"私有部署 URL","Processing OAuth response...":"正在处理 OAuth 响应...","Processing...":"处理中...","Product":"产品","Product ID":"产品 ID","Product ID is required":"产品 ID 为必填项","Product Name":"产品名称","Productivity":"效率工具","Products":"产品","Professional team providing 24/7 technical support":"专业团队提供 24/7 技术支持","Profile":"个人资料","Profile updated successfully":"个人资料更新成功","Programming":"编程","Progress":"进度","Project":"项目","Promote":"提升","Promotion codes":"促销代码","Prompt":"提示","Prompt (EN)":"提示词 (英文)","Prompt cache ratio":"提示缓存倍率","Prompt caching":"提示词缓存","Prompt Caching":"提示词缓存","Prompt Details":"提示词详情","Prompt price ($/1M tokens)":"提示词价格(美元/100 万 token)","Proprietary":"商业闭源","Provide a JSON object where each key maps to an endpoint definition.":"提供一个 JSON 对象,其中每个键映射到一个端点定义。","Provide a valid URL starting with http:// or https://":"请提供以 http:// 或 https:// 开头的有效 URL","Provide Markdown, HTML, or an external URL for the privacy policy":"提供 Markdown、HTML 或外部 URL 作为隐私政策","Provide Markdown, HTML, or an external URL for the user agreement":"提供 Markdown、HTML 或外部 URL 作为用户协议","Provide per
107-category safety overrides as JSON. Use `default` for fallback values.":"以 JSON 格式提供按类别划分的安全覆盖。使用 `default` 作为回退值。","Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.":"以 JSON 格式提供按模型划分的标头覆盖。可用于启用测试功能,例如扩展上下文窗口。","Provider":"提供商","Provider & data privacy":"厂商与数据隐私","Provider created successfully":"提供商创建成功","Provider deleted successfully":"提供商删除成功","Provider Name":"提供商名称","Provider type (OpenAI, Anthropic, etc.)":"提供商类型 (OpenAI、Anthropic 等)","Provider updated successfully":"提供商更新成功","Provider-specific endpoint, account, and compatibility settings.":"配置供应商专属的端点、账户和兼容性选项。","Proxy Address":"代理地址","Prune Object Items":"清理对象项","Prune object items by conditions":"按条件清理对象中的子项","Prune Rule (string or JSON object)":"清理规则(字符串或 JSON 对象)","Public model catalog and pricing page.":"公开模型目录和价格页面。","Public rankings page based on live usage data.":"基于真实用量数据的公开排行榜页面。","Publish Date":"发布日期","Published":"已发布","Published models, groups, and model remapping rules.":"已发布的模型、分组和模型重映射规则。","Published:":"已发布:","Pull":"拉取","Pull model":"拉取模型","Pulling...":"拉取中...","Purchase Limit":"限购","Purchase limit reached":"已达到购买上限","Purchase Subscription":"购买订阅套餐","QR Code Image URL":"二维码图片 URL","QR code is not configured. Please contact support.":"二维码未配置。请联系支持人员。","Quantity":"数量","QuantumNous":"QuantumNous","Query Balance":"查询余额","Query Param":"请求参数","Querying...":"正在查询...","Question":"问题","Queued":"排队中","Quick actions":"快捷操作","Quick insert common payment methods":"快速插入常用支付方式","Quick Range":"快速范围","Quick Setup from Preset":"从预设快速设置","Quota":"额度","Quota ({{currency}})":"额度 ({{currency}})","Quota adjusted successfully":"调整额度成功","Quota consumed before charging users":"向用户收费前消耗的配额","Quota Distribution":"消耗分布","Quota given to invited users":"授予被邀请用户的配额","Quota given to users who invite others":"授予邀请其他用户的配额","Quota must be a positive number":"配额必须是正数","Quota must be zero or greater":"额度不能为负数","Quota Per Unit":"每单位配额","Quota reminder (tokens)":"配额提醒(token)","Quota Reset":"额度重置","Quota Settings":"额度设置","Quota Types":"配额类型","Quota Warning Threshold":"配额警告阈值","Quota:":"Quota:","Radius":"圆角","Random":"随机","Randomly select a key from the pool for each request":"每次请求从池中随机选择一个密钥","Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.":"当前排行榜数据为预览用模拟数据,后端集成完成后将替换为真实分析数据。","Rankings":"排行榜","Rate Limit Windows":"速率限制窗口","Rate Limited":"限流","Rate Limiting":"速率限制","Rate limits":"速率限制","Ratio":"倍率","Ratio applied to audio completions for streaming models.":"应用于流式模型音频完成的比例。","Ratio applied to audio inputs where supported by the upstream model.":"应用于上游模型支持的音频输入的比例。","Ratio applied when creating cache entries for supported models.":"为支持的模型创建缓存条目时应用的倍率。","Ratio mode":"比例模式","Ratio Type":"比率类型","Ratio: {{value}}":"倍率:{{value}}","Ratios synced successfully":"比率同步成功","Raw expression":"原始表达式","Raw JSON":"原始 JSON","Raw Quota":"原生额度","Re-enable on success":"成功后重新启用","Re-login":"重新登录","Ready":"就绪","Ready to initialize":"准备初始化","Ready to simplify":"准备好简化","Real exchange rate between USD and your payment gateway currency":"美元与您的支付网关货币之间的实际汇率","Reason":"原因","Reason:":"原因:","Reasoning":"推理","Reasoning Effort":"推理强度","Receive Upstream Model Update Notifications":"接收上游模型更新通知","Received":"获得","Recently launched models":"近期发布的模型","Recently launched models gaining traction":"近期发布并快速增长的模型","Recharge":"充值","Recharge Amount":"充值金额","Recharge Amount (USD)":"充值金额 (USD)","Recommended":"推荐","Recommended actions":"推荐操作","Recommended to keep this high to avoid upstream throttling.":"建议保持此值较高,以避免上游限流。","Record IP Address":"记录 IP 地址","Record quota usage":"记录配额使用量","Recursion Strategy":"递归策略","Recursive":"递归","Redeem":"兑换额度","Redeem codes":"兑换码","Redeemed By":"兑换人","Redeemed:":"已兑换:","Received amount":"已收额度","redemption code":"兑换码","Redemption Code":"兑换码","Redemption code deleted successfully":"兑换码删除成功","Redemption code disabled successfully":"兑换码已禁用","Redemption code enabled successfully":"兑换码已启用","Redemption code updated successfully":"兑换码更新成功","Redemption code(s) created successfully":"兑换码创建成功","Redemption Codes":"兑换码","Redemption codes are disabled until the administrator confirms compliance terms.":"管理员确认合规条款之前,兑换码功能不可用。","redemption codes.":"兑换码。","Redemption failed":"兑换失败","Redemption successful! Added: {{quota}}":"兑换成功!已添加:{{quota}}","Redirecting to chat page...":"正在跳转到聊天页面...","Redirecting to Creem checkout...":"正在重定向到 Creem 结账...","Redirecting to GitHub...":"正在跳转 GitHub...","Redirecting to payment page...":"正在重定向到支付页面...","Redirecting to sign in in {{seconds}} seconds.":"将在 {{seconds}} 秒后跳转到登录页。","Reference Video":"参照生视频","Referral link:":"推荐链接:","Referral Program":"推荐计划","Referral reward transfer is disabled until the administrator confirms compliance terms.":"管理员确认合规条款之前,邀请奖励转移功能不可用。","Refine models by provider, group, type, and tags.":"按供应商、分组、类型和标签细化模型。","Refresh":"刷新","Refresh Cache":"刷新缓存","Refresh credential":"刷新凭据","Refresh failed":"刷新失败","Refresh interval (minutes)":"刷新间隔 (分钟)","Refresh Stats":"刷新统计","Refreshing...":"刷新中...","Refund":"退款","Refund Details":"退款详情","Regenerate":"重新生成","Regenerate Backup Codes":"重新生成备用代码","Regex":"正则","Regex Pattern":"正则表达式","Regex Replace":"正则替换","Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.":"请在 Pancake 控制台中将每个 URL 注册到对应的测试模式/生产模式 webhook 槽位。分离端点可以避免测试流量误入生äº
107§è´¦æˆ·ã€‚","Register Passkey":"注册 Passkey","Registered a passkey":"注册了一个 Passkey","Registration Enabled":"注册已启用","Registry (optional)":"注册表 (可选)","Registry secret":"注册表密钥","Registry username":"注册表用户名","Reject Reason":"拒绝原因","Release details":"版本详情","Released":"发布于","Relying Party Display Name":"依赖方显示名称","Relying Party ID":"依赖方 ID","Remaining":"剩余","Remaining quota":"剩余配额","Remaining Quota ({{currency}})":"剩余额度 ({{currency}})","Remaining quota units":"剩余配额单位","Remaining:":"剩余:","Remark":"备注","Remove":"移除","Remove {{value}}":"移除 {{value}}","Remove ${{amount}}":"移除 ${{amount}}","Remove all log entries created before the selected timestamp.":"移除所选时间戳之前创建的所有日志条目。","Remove attachment":"移除附件","Remove condition":"移除条件","Remove Duplicates":"移除重复项","Remove filter":"移除筛选","Remove functionResponse.id field":"移除 functionResponse.id 字段","Remove mapped targets":"移除映射目标","Remove Models":"删除模型","Remove Passkey":"解绑 Passkey","Remove Passkey?":"移除通行密钥?","Remove rule group":"移除规则组","Remove string prefix":"去掉字符串前缀","Remove string suffix":"去掉字符串后缀","Remove the target field":"删除目标字段","Remove tier":"移除档位","Removed":"已移除","Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}":"已移除 {{removed}} 个重复密钥。移除前:{{before}},移除后:{{after}}","Removed an OAuth binding for the user":"解除了用户的一个 OAuth 绑定","Removed Models ({{count}})":"已移除模型 ({{count}})","Removes Midjourney flags such as --fast, --relax, and --turbo from user prompts.":"从用户提示中移除 Midjourney 参数,如 --fast、--relax 和 --turbo。","Removing Passkey will require you to sign in with your password next time. You can re-register anytime.":"移除通行密钥后,您下次将需要使用密码登录。您可以随时重新注册。","Rename":"重命名","Rename deployment":"重命名部署","Rename failed":"重命名失败","Renamed successfully":"重命名成功","Repeat the administrator password":"重复输入管理员密码","Replace":"替换","Replace all existing keys":"替换所有现有密钥","Replace channel models":"覆盖渠道模型","Replace mode: Will completely replace all existing keys":"替换模式:将完全替换所有现有键","Replace With":"替换为","replaced":"已替换","Replacement Model":"替换模型","Replica count":"副本数","Replicate":"Replicate","Report an issue":"反馈问题","request":"请求","Request":"请求","Request Body Disk Cache":"请求体磁盘缓存","Request Body Field":"请求体字段","Request Body Memory Cache":"请求体内存缓存","Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.":"请求体透传已启用。请求体将直接发送到上游,不进行任何转换。","Request conversion":"请求转换","Request Conversion":"请求转换","Request Count":"请求计数","Request failed":"请求失败","Request flow":"请求流","Request Header Field":"请求头字段","Request Header Override":"请求头覆盖","Request Header Overrides":"请求头覆盖","Request ID":"请求 ID","Request Limits":"请求限制","Request Model":"请求模型","Request Model:":"请求模型:","Request overrides, routing behavior, and upstream model automation":"请求覆盖、路由行为和上游模型自动化","Request rule pricing":"请求规则计费","Request success rate sampled over the last 24 hours":"最近 24 小时按时间桶采样的请求成功率","Request success rate; {{incidents}} incident buckets in the last 24 hours":"请求成功率;最近 24 小时 {{incidents}} 个异常桶","Request timed out, please refresh and restart GitHub login":"请求超时,请刷新页面后重新发起 GitHub 登录","Request-based":"含请求条件","Requests (24h)":"请求数(24 小时)","Requests / 24h":"请求 / 24 小时","Requests per minute":"每分钟请求数","requests served":"服务请求数","Requests will be forwarded to this worker. Trailing slashes are removed automatically.":"请求将被转发到此 Worker。末尾的斜杠会自动移除。","Requests:":"请求:","Require email verification for new accounts":"要求新账户验证邮箱","Require job success before follow-up actions":"在后续操作前要求任务成功","Require login to view models":"要求登录才能查看模型","Require login to view rankings":"要求登录才能查看排行榜","required":"必填","Required":"必需","Required events:":"必需事件:","Required provider, authentication, model, and group settings":"必填的供应商、鉴权、模型和分组设置","Required to expose Midjourney-style image generation to end users.":"需要向终端用户开放 Midjourney 风格的图像生成。","Rerank":"重新排序","Reroll":"重绘","Research, analysis, scientific reasoning":"研究、分析与科学推理","Resend ({{seconds}}s)":"重新发送 ({{seconds}}
107s)","Reset":"重置","Reset 2FA":"重置 2FA","Reset all model prices?":"重置所有模型价格吗?","Reset all model ratios?":"重置所有模型比例吗?","Reset all settings to default values":"将所有设置重置为默认值","Reset at:":"重置于:","Reset balance and used quota":"重置余额和已用配额","Reset Cycle":"重置周期","Reset email sent, please check your inbox":"重置邮件已发送,请检查您的收件箱","Reset failed":"重置失败","Reset model ratios":"重置模型倍率","Reset Passkey":"重置 Passkey","Reset password":"重置密码","Reset Period":"重置周期","Reset prices":"重置价格","Reset ratios":"重置比例","Reset Stats":"重置统计","Reset the user passkey":"重置了用户的通行密钥","Reset to default":"重置为默认","Reset to Default":"重置为默认","Reset to default configuration":"已重置为默认配置","Reset Two-Factor Authentication":"重置 2FA","Resets in:":"将于以下时间重置:","Resolve Conflicts":"解决冲突","Resource Configuration":"资源配置","Response":"响应","Response Time":"响应时间","Responses API Version":"响应 API 版本","Restore defaults":"恢复默认","Restrict user model request frequency (may impact high concurrency performance)":"限制用户模型请求频率(可能会影响高并发性能)","Result":"结果","Retain last N days":"保留最近N天","Retain last N files":"保留最近 N 个文件","Retention days":"保留天数","Retry":"重试","Retry Chain":"重试链路","Retry Suggestion":"重试建议","Retry Times":"重试次数","Return a custom error immediately":"立即返回自定义错误","Return Custom Error":"返回自定义错误","Return data conforming to a JSON schema":"返回符合 JSON Schema 的数据","Return Error":"返回错误","Return per-token log probabilities":"返回每个 token 的对数概率","Return to dashboard":"返回仪表盘","Return vector embeddings for inputs":"为输入返回向量嵌入","Reveal API key":"显示 API 密钥","Reveal key":"显示密钥","Revenue":"收入","Review & initialize":"审核并初始化","Review model rates before scaling traffic":"扩展流量前查看模型费率","Review your payment details":"查看您的付款详情","Review your purchase details before proceeding.":"在继续之前,请审阅您的购买详情。","Rewards will be added directly to your balance":"奖励将直接添加到您的余额","Rewrite callback URLs to the local server":"将回调 URL 重写到本地服务器","Right to Left":"从右到左","Role":"角色","Roleplay":"角色扮演","Root":"根","Rose Garden":"玫瑰花园","Route":"路由","Route active":"路由已启用","Route Description":"路由描述","Route is required":"路由为必填项","Route, auth, and balance check in one place":"路由、认证和余额检查集中展示","Routing & Overrides":"路由与覆盖","Routing Strategy":"路由策略","Rows per page":"每页行数","RPM":"RPM","RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.":"RPM = 每分钟请求数,TPM = 每分钟 token 数,RPD = 每日请求数。限制按令牌分组生效。","RSA Private Key (Production)":"RSA 私钥(生产)","RSA Private Key (Sandbox)":"RSA 私钥(沙盒)","Rule":"规则","Rule {{line}} is missing source field":"第 {{line}} 条操作缺少来源字段","Rule {{line}} is missing target field":"第 {{line}} 条操作缺少目标字段","Rule {{line}} is missing target path":"第 {{line}} 条操作缺少目标路径","Rule {{line}} is missing value":"第 {{line}} 条操作缺少值","Rule {{line}} pass_headers format is invalid":"第 {{line}} 条请求头透传格式无效","Rule {{line}} pass_headers is missing header names":"第 {{line}} 条请求头透传缺少请求头名称","Rule {{line}} prune_objects is missing conditions":"第 {{line}} 条 prune_objects 缺少条件","Rule {{line}} return_error requires a message field":"第 {{line}} 条 return_error 需要 message 字段","Rule Description (optional)":"规则描述(可选)","Rule group":"规则组","rules":"规则","Rules":"规则","Rules JSON":"规则 JSON","Rules JSON must be an array":"规则 JSON 必须是数组","Run GC":"执行 GC","Run tests for the selected models":"运行所选模型的测试","Running":"运行中","Runway":"可用时长","s":"秒","Safety Settings":"安全设置","Same as Local":"与本地相同","Sampling temperature; lower is more deterministic":"采样温度;越低越稳定","Sandbox mode":"沙盒模式","Save":"保存","Save all settings":"保存所有设置","Save Backup Codes":"保存备份代码","S
107ave changes":"保存更改","Save Changes":"保存更改","Save chat settings":"保存聊天设置","Save check-in settings":"保存签到设置","Save Creem settings":"保存 Creem 设置","Save drawing settings":"保存绘图设置","Save Epay settings":"保存 Epay 设置","Save failed":"保存失败","Save failed, please retry":"保存失败,请重试","Save general settings":"保存通用设置","Save group ratios":"保存分组比率","Save io.net settings":"保存 io.net 设置","Save log settings":"保存日志设置","Save model prices":"保存模型价格","Save model ratios":"保存模型比率","Save Models":"保存模型","Save monitoring rules":"保存监控规则","Save navigation":"保存导航","Save notice":"保存通知","Save Preferences":"保存偏好设置","Save preview":"保存预览","Save rate limits":"保存速率限制","Save sensitive words":"保存敏感词","Save Settings":"保存设置","Save sidebar modules":"保存侧边栏模块","Save SMTP settings":"保存 SMTP 设置","Save SSRF settings":"保存 SSRF 设置","Save Stripe settings":"保存 Stripe 设置","Save these backup codes in a safe place. Each code can only be used once.":"将这些备份代码保存在安全的地方。每个代码只能使用一次。","Save these codes in a safe place. Each code can only be used once.":"将这些代码保存在安全的地方。每个代码只能使用一次。","Save tool prices":"保存工具价格","Save Waffo Pancake settings":"保存 Waffo Pancake 设置","Save Worker settings":"保存 Worker 设置","Saved successfully":"保存成功","Saving...":"正在保存...","Scan QR Code":"扫描二维码","Scan the QR code to follow the official account and reply with “验证码” to receive your verification code.":"扫描二维码关注官方账号,回复“验证码”以接收您的验证码。","Scan the QR code with WeChat to bind your account":"使用微信扫描二维码绑定您的账户","Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)":"使用您的身份验证器应用(Google Authenticator、Microsoft Authenticator 等)扫描此二维码","Scenario Templates":"场景模板","Scheduled channel tests":"定期渠道测试","scheduling controls":"调度控制能力","Science":"科研","Scope":"作用域","Scopes":"作用域","Search":"搜索","Search by name or URL...":"按名称或 URL 搜索...","Search by order number...":"按订单号搜索...","Search channel type...":"搜索渠道类型...","Search chat presets...":"搜索聊天预设...","Search colors...":"搜索颜色...","Search conflicting models or fields":"搜索冲突的模型或字段","Search deployments...":"搜索部署...","Search feature in development":"搜索功能开发中","Search group names...":"搜索分组名称...","Search groups...":"搜索分组...","Search missing models":"搜索缺失的模型","Search model name, provider, endpoint, or tag...":"搜索模型名称、供应商、端点或标签...","Search model name...":"搜索模型名称...","Search models":"搜索模型","Search models or fields...":"搜索模型或字段...","Search models...":"搜索模型...","Search payment methods...":"搜索付款方式...","Search payment types...":"搜索支付类型...","Search products...":"搜索产品...","Search rules...":"搜索规则…","Search tags...":"搜索标签...","Search the public web at inference time":"推理时检索公开互联网","Search vendors...":"搜索供应商...","Search...":"搜索...","seconds":"秒","Secret env (JSON object)":"密钥环境 (JSON 对象)","Secret environment variables (JSON)":"密钥环境变量 (JSON)","Secret Key":"密钥","Secure & Reliable":"安全可靠","Secured":"已保护","Security":"安全","Security & Limits":"安全与限制","Security Check":"安全验证","Security verification":"安全验证","Select":"选择","Select a color":"选择颜色","Select a group":"选择一个分组","Select a group type":"选择分组类型","Select a model to edit pricing":"选择一个模型编辑定价","Select a preset...":"选择一个预设...","Select a product":"选择产品","Select a role":"选择角色","Select a rule to edit.":"请选择一条规则进行编辑。","Select a store":"选择店铺","Select a timestamp before clearing logs.":"清é
107™¤æ—¥å¿—前请选择一个时间戳。","Select a usage mode to continue":"选择使用模式以继续","Select a verification method first":"请先选择验证方式","Select all":"全选","Select all (filtered)":"全选(筛选结果)","Select all models":"选择所有模型","Select All Visible":"全选当前","Select an operation mode and enter the amount":"选择操作模式并输入金额","Select announcement type":"选择公告类型","Select at least one field to overwrite.":"请选择至少一个要覆盖的字段。","Select at least one target model":"请至少选择一个目标模型","Select body font":"选择正文字体","Select border radius":"选择圆角大小","Select channel type":"选择渠道类型","Select color preset":"选择颜色预设","Select content width":"选择内容宽度","Select corner radius":"选择圆角大小","Select currency":"选择货币","Select date":"选择日期","Select default chart":"选择默认图表","Select default range":"选择默认范围","Select display mode":"选择显示模式","Select end time":"选择结束时间","Select from presets or type custom identifier.":"从预设中选择或输入自定义标识符。","Select granularity":"选择粒度","Select groups (leave empty to keep current)":"选择分组(留空以保持当前设置)","Select interface density":"选择界面密度","Select items...":"选择项目...","Select key format":"请选择密钥格式","Select language":"选择语言","Select Language":"选择语言","Select layout style":"选择布局样式","Select locations":"选择位置","Select Model":"选择模型","Select model {{model}}":"选择模型 {{model}}","Select models (empty for allow all)":"选择模型(留空表示允许所有)","Select models and apply to channel models list.":"选择模型并应用到渠道模型列表。","Select models or add custom ones":"选择模型或添加自定义模型","Select models to process. Unselected \\"add\\" models will be ignored.":"勾选要处理的模型,未勾选的「新增」模型将作为忽略处理。","Select models to run batch tests.":"选择要运行批量测试的模型。","Select or enter color value":"选择或输入颜色值","Select or enter model name":"选择或输入模型名称","Select or enter payment type":"选择或输入支付类型","Select payment method":"选择支付方式","Select preset or enter custom CSS color value.":"选择预设或输入自定义 CSS 颜色值。","Select publish date":"选择发布日期","Select requirement":"选择要求","Select row":"选择行","Select sidebar style":"选择侧边栏样式","Select site direction":"选择站点方向","Select start time":"选择开始时间","Select subscription plan":"选择订阅套餐","Select Sync Channels":"选择同步渠道","Select sync channels to compare prices":"选择同步渠道以对比价格","Select sync channels to compare ratios":"选择同步渠道以比较比率","Select Sync Source":"选择同步源","Select the API endpoint region":"选择 API 终端节点区域","Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.":"选择要使用上游数据覆盖的字段。未选择的字段将保留其本地值。","Select theme preference":"选择主题偏好","Select theme preset":"选择主题预设","Select time granularity":"选择时间粒度","Select vendor":"选择供应商","Selectable groups":"可选分组","selected":"已选择","Selected {{count}}":"已选 {{count}} 个","selected channel(s). Leave empty to remove tag.":"选定的渠道。留空以移除标签。","Selected conflicts were overwritten successfully.":"选中的冲突已成功覆盖。","Selected when creating a token and used as the default billing group for API calls.":"创建令牌时选择,用作 API 调用的默认计费分组。","Self-Use Mode":"自用模式","Send":"发送","Send a request":"发送请求","Send code":"发送验证码","Send email alerts when a user falls below this quota":"当用户低于此配额时发送电子邮件警报","Sending...":"发送中...","Sensitive Words":"敏感词","Sent the API key to FluentRead.":"API 密钥已发送至 FluentRead。","Separate image/audio prices are enabled.":"已启用图像/音频单独定价。","Serve multiple users or teams with billing and quota control.":"为多个用户或团队提供计费和配额管理服务。","Server Address":"服务器地址","Server IP":"服务器 IP","Server Log Management":"服务器日志管理","Server logging is not enabled (log directory not configured)":"服务器日志功能未启用(未配置日志目录)","Server Token":"服务器 Token","Service account JSON file(s)":"服务账号 JSON 文件","Session expired!":"会话已过期!","Session expired?":"会话已过期?","Set":"设置","Set a discount rate for a specific recharge amount threshold.":"为特定的充值金额阈值设置折扣率。","Set a secure password (min. 8 characters)":"设置
107安全密码(最少 8 个字符)","Set a tag for":"设置标签为","Set API key access restrictions":"设置令牌的访问限制","Set API key basic information":"设置令牌的基本信息","Set default ranges and charts for model analytics.":"设置模型分析的默认时间范围和图表。","Set Field":"设置字段","Set filters to customize your dashboard statistics and charts.":"设置筛选器以自定义您的仪表板统计数据和图表。","Set filters to narrow down your log search results.":"设置筛选器以缩小日志搜索结果范围。","Set Header":"设请求头","Set Project to io.cloud when creating/selecting key":"创建/选择密钥时将项目设置为 io.cloud","Set quota amount and limits":"设置令牌可用额度和数量","Set Request Header":"设置请求头","Set runtime request header: override entire value, or manipulate comma-separated tokens":"设置运行期请求头:可直接覆盖整条值,也可对逗号分隔的 token 做处理","Set separate prices for cache reads and writes.":"为缓存读取和写入设置单独价格。","Set Tag":"设置标签","Set tag for selected channels":"为选定的渠道设置标签","Set the language used across the interface":"设置界面显示语言","Set the user\'s role (cannot be Root)":"设置用户角色(不能是 Root)","Setting Key":"配置项","Setting saved":"设置已保存","Setting up 2FA...":"正在设置 2FA...","Setting updated successfully":"设置更新成功","Settings":"设置","Settings & Preferences":"设置与偏好","Settings updated successfully":"设置更新成功","Session":"会话","Setup guide":"设置引导","Setup guide complete":"设置引导已完成","Setup guide is collapsed. Expand it anytime.":"设置引导已收起,可随时展开。","Setup Instructions":"设置说明","Setup progress: {{completed}}/{{total}}":"设置进度:{{completed}}/{{total}}","Setup Two-Factor Authentication":"设置双重身份验证","Share":"占比","Share your link and earn rewards":"分享您的链接并赚取奖励","Shared configuration for all payment gateways":"所有支付网关的共享配置","Shorten":"缩词","Show":"显示","Show All":"显示全部","Show all providers including unbound":"显示所有提供商(包括未绑定)","Show only bound providers":"仅显示已绑定的提供商","Show prices in currency instead of quota.":"以货币而非配额显示价格。","Show setup guide":"显示设置引导","Show token usage statistics in the UI":"在用户界面中显示令牌使用统计信息","Showcase core capabilities with demo credentials and limited access.":"使用演示凭据和有限访问权限展示核心功能。","Showing":"显示第","showing •":"显示 •","Sidebar":"侧边栏","Sidebar collapsed by default for new users":"默认情况下为新用户折叠侧边栏","Sidebar modules":"侧边栏模块","Sidebar Personal Settings":"左侧边栏个人设置","Sign in":"登录","Sign In":"登录","Sign in now":"立即登录","Sign in required":"需要登录","Sign in with Passkey":"使用 Passkey 登录","Sign out":"登出","Sign up":"注册","Signed in":"已登录","Signed in successfully!":"登录成功!","Signed in via WeChat":"通过微信登录","Signed in with Passkey":"使用 Passkey 登录","Signed out":"已登出","Significant outages detected":"检测到较为严重的故障","Signing you in with {{provider}}":"正在使用 {{provider}} 登录","SiliconFlow":"SiliconFlow","Simple":"简洁","Simple mode only returns message; status code and error type use system defaults.":"简洁模式仅返回 message;状态码和错误类型将使用系统默认值。","Simple mode: prune objects by type, e.g. redacted_thinking.":"简洁模式:按 type 全量清理对象,例如 redacted_thinking。","Single Key":"单密钥","Site & Branding":"站点与品牌","Site Key":"站点密钥","Size:":"大小:","sk_xxx or rk_xxx":"sk_xxx 或 rk_xxx","Skip retry on failure":"失败后不重试","Skip to Main":"跳到主内容","Slug":"标识符","Slug can only contain letters, numbers, hyphens, and underscores":"Slug 只能包含字母、数字、连字符和下划线","Slug is required":"Slug 不能为空","Slug must be less than 100 characters":"Slug 不能超过 100 个字符","Smallest USD amount users can recharge (Epay)":"用户可以充值的最小美元金额 (Epay)","SMTP Email"
107:"SMTP 邮箱","SMTP Host":"SMTP 主机","smtp.example.com":"smtp.example.com","socks5://user:pass@host:port":"socks5://user:pass@host:port","Soft Errors":"软错误","Some channels failed: {{errorMsg}}":"部分渠道失败:{{errorMsg}}","Something went wrong!":"出现错误!","Sonnet Model":"Sonnet 模型","Sora":"Sora","Sort":"排序","Sort by ID":"使用 ID 排序","Sort Order":"排序","Source":"来源","Source Endpoint":"来源端点","Source Field":"来源字段","Source Header":"来源请求头","sources":"来源","Space-separated OAuth scopes":"以空格分隔的OAuth作用域","Spark model version, e.g., v2.1 (version number in API URL)":"Spark 模型版本,例如 v2.1(API URL 中的版本号)","Special billing expression":"特殊计费表达式","Special group":"特殊分组","Special ratio rules":"特殊倍率规则","Special ratios override the token group ratio for specific user group and token group combinations.":"特殊倍率会针对特定用户分组和令牌分组组合覆盖令牌分组倍率。","Special usable group rules":"特殊可用分组规则","Special usable group rules can add, remove, or append selectable token groups for a specific user group.":"特殊可用分组规则可以为特定用户分组添加、移除或追加可选令牌分组。","SQLite stores all data in a single file. Make sure that file is persisted 
107when running in containers.":"SQLite 将所有数据存储在单个文件中。在容器中运行时请确保该文件已持久化。","SSRF Protection":"SSRF 保护","Standard":"标准","Standard price":"标准价格","Start":"开始","Start a conversation to see messages here":"开始对话以在此处查看消息","Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.":"无需注册公司即可开始全球收款。面向独立开发者、OPC 个体经营者和初创团队构建。Waffo Pancake 作为你的登记商户(Merchant of Record),承担全球收款相关的合规负担,包括消费税、开票、订阅管理、退款和拒付。个人开发者可以快速上线,专注产品而不是合规事务。几分钟即可完成入驻,从一个提示词到完整集成。","Start for free with generous limits. No credit card required.":"免费开始使用,额度充足,无需绑定信用卡。","Start Time":"起始时间","Static page describing the platform.":"描述平台的静态页面。","Statistical count":"统计计数","Statistical quota":"统计配额","Statistical tokens":"统计 Token 数","Statistics reset":"统计已重置","Status":"状态","Status & Sync":"状态与同步","Status Code":"状态码","Status Code Mapping":"状态码映射","Status code mapping must use valid HTTP status codes":"状态码映射必须使用有效的 HTTP 状态码","Status Page Slug":"状态页面 Slug","Status short":"状态","Status:":"状态:","Stay":"留下来","Stay tuned though!":"敬请期待!","Steer behaviour with a system instruction":"通过系统指令引导模型行为","Step":"步骤","Stop":"停止","Stop Retry":"停止重试","Store":"店铺","Store + product created":"店铺和产品已创建","Store ID":"商店 ID","Store ID is required":"商店 ID 为必填项","Stored value is not echoed back for security":"出于安全考虑,已存储的值不会回显","stream":"流","Stream":"流","Stream Mode":"流式模式","Stream Status":"流状态","Stream tokens incrementally as they are generated":"在生成过程中按 token 逐步流式返回","Stream tokens via Server-Sent Events":"通过 SSE 流式返回 token","Streaming":"流式输出","String Replace":"字符串替换","Stripe":"Stripe","Stripe API key (leave blank unless updating)":"Stripe API 密钥(除非更新,否则留空)","Stripe Dashboard":"Stripe 控制面板","Stripe Gateway":"Stripe 网关","Stripe product price ID":"Stripe 产品价格 ID","Stripe/Creem requires creating products on the third-party platform and entering the ID":"Stripe/Creem 需在第三方平台创建商品并填入 ID","Structured output":"结构化输出","Submit":"提交","Submit directly":"直接提交","Submit Result":"提交结果","Submit Time":"提交时间","Submitted":"已提交","Submitting":"提交中","Submitting...":"提交中...","Submodel":"Submodel","Subscribe Now":"立即订阅","Subscribe to a plan for model access":"订阅套餐以获取模型访问权限","Subscription":"订阅","Subscription Billing":"订阅计费","Subscription First":"优先订阅","Subscription Management":"订阅管理","Subscription Only":"仅用订阅","Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.":"管理员在支付网关设置中确认合规条款之前,订阅套餐的创建和修改会被锁定。","Subscription Plans":"订阅套餐","Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).":"订阅套餐不会使用已绑定的产品。每个套餐都有独立的 Pancake 产品,可在订阅管理中设置,或通过其中的“+ 创建”按钮自动生成。","Subscription purchased 
107successfully":"订阅购买成功","Subtract":"减少","Success":"成功","Success rate":"成功率","Successfully created {{count}} API Key(s)":"成功创建了 {{count}} 个 API 密钥","Successfully created {{count}} redemption codes":"成功创建了 {{count}} 个兑换码","Successfully deleted {{count}} API key(s)":"成功删除了 {{count}} 个 API 密钥","Successfully deleted {{count}} invalid redemption codes":"已成功删除 {{count}} 个无效兑换码","Successfully deleted {{count}} model(s)":"成功删除 {{count}} 个模型","Successfully disabled {{count}} model(s)":"成功禁用 {{count}} 个模型","Successfully enabled {{count}} model(s)":"成功启用 {{count}} 个模型","Suffix":"后缀","Suffix Match":"后缀匹配","SunoAPI":"SunoAPI","Sunset Glow":"日落霞光","Super Admin":"超级管理员","Super Large":"超大","Support for high concurrency with automatic load balancing":"支持高并发和自动负载均衡","Supported Applications":"常用应用支持","Supported Imagine Models":"支持的 Imagine 模型","Supported modalities":"支持的模态","Supported parameters":"支持的参数","Supported variables":"支持变量","Supports `-thinking`, `-thinking-":"支持 `-thinking`、`-thinking-`","Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.":"支持 HTML 标记或 iframe 嵌入。直接输入 HTML 代码,或提供完整的 URL 以将其自动嵌入为 iframe。","Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.":"支持一键配置并完美适配 NewAPI 多协议配置","Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.":"支持 PNG、JPG、SVG 或 WebP,建议尺寸不超过 128×128。","Sustained tokens per second":"持续每秒 Token 数","Swap Face":"换脸","Switch affinity on success":"成功后切换亲和","Switch between the new frontend and the classic frontend. Changes take effect after page reload.":"切换新版前端和经典前端,保存后刷新页面生效。","Switch to JSON":"切换到 JSON","Switch to Visual":"切换到可视化","Sync Endpoint":"同步端点","Sync Endpoints":"同步端点","Sync Fields":"字段同步","Sync from the public upstream metadata repository.":"从公共上游元数据仓库同步。","Sync Now":"立即同步","Sync this model with official upstream":"将此模型与官方上游同步","Sync Upstream":"同步上游","Sync Upstream Models":"同步上游模型","Synced upstream models":"同步上游模型","Synchronize models and vendors from an upstream source":"从上游源同步模型和供应商","Syncing prices, please wait...":"正在同步价格,请稍候...","Syncing...":"同步中...","System":"系统","System Administration":"系统管理","System Announcements":"系统公告","System Behavior":"系统行为","System data statistics":"系统数据统计","System default":"系统默认","System Information":"系统信息","System initialized successfully! Redirecting…":"系统初始化成功!正在重定向…","System logo":"系统徽标","System maintenance":"系统维护","System Memory":"系统内存","System Memory Stats":"系统内存统计","System Name":"系统名称","System name is required":"系统名称为必填项","System Notice":"系统公告","System Performance Monitoring":"系统性能监控","System prompt":"系统提示词","System Prompt":"系统提示词","System Prompt Concatenation":"系统提示词连接","System Prompt Override":"系统提示覆盖","System settings":"系统设置","System Settings":"系统设置","System setup wizard":"系统设置向导","System task records":"系统任务记录","System Version":"系统版本","Table view":"表格视图","Tag":"标签","Tag Aggregate":"标签聚合","Tag Mode":"标签模式","Tag Name":"标签名称","Tag set successfully":"标签设置成功","Tag updated successfully":"标签更新成功","Tag:":"标签:","Tags":"标签","Take photo":"拍照","Take screenshot":"截图","Target Endpoint":"目标端点","Target Field":"目标字段","Target Field Path":"目标字段路径","Target group":"目标分组","Target Header":"目标请求头","Target Path (optional)":"目标路径(可选)","Target User":"目标用户","Task":"任务","Task ID":"任务 ID","Task ID:":"任务 ID:","Task logs":"任务日志","Task Logs":"任务日志","Team Collaboration":"团队协作","Technical Support":"技术支持","Telegram":"Telegram","Telegram login requires widget integration; coming soon":"Telegram 登录需要小部件集成;即将推出","Telegram Login Widget":"Telegram 登录小部件","Template":"模板","Template variables:":"模板变量:","Templates":"模板","Templates appended":"模板已追加","Tencent":"腾讯","Termination requested":"终止请求","Test":"测试","Test {{count}} selected":"测试 {{count}} 个已选择项","Test All Channels":"测试所有渠道","Test Channel Connection":"测试渠道连接","Test Connection":"测试连接","Test connectivity for:":"测试连接性:","Test failed":"测试失败","Test interval (minutes)":"测试间隔 (分钟)","Test Latency":"测试延迟","Test Mode":"测试模式","Test Model":"测试模型","Test models and prompts from the browser":"在浏览器中测试模型和提示词","Test selected models":"测试所选模型","Testing all enabled channels started. Please refresh to see results.":"测试所有启用的渠道已开始。请刷新以查看结果。","Testing...":"测试中...","Text":"文本","Text description of the desired image":"想要生成图像的文字描述","Text description of the desired video":"想要生成视频的文字描述","Text Input":"文字输入","Text or array of texts to embed":"需要向量化的文本或文本数组","Text Output":"文字输出","Text to Video":"文生视频","The administrator account is already initialized. You can keep your existing credentials and continue to the next step.":"管理员账户已初始化。您可以保留现有凭据并继续下一步。","The administrator configured an external link for this document.":"管理员为此文档配置了外部链接。","The administrator has not configured a privacy policy yet.":"管理员尚未配置隐私政策。","The administrator has not configured a user agreement yet.":"管理员尚未配置用户协议。","The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.":"管理员尚未配置任何关于内容。您可以在设置页面中进行设置,支持 HTML 或 URL。","The binding will complete automatically after authorization":"授权后绑定将自动完成","The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.":"已绑定产品用于钱包充值:当用户输入任意金额时,new-api 会基于这个单一 Pancake 产品发起结账,并按会话覆盖价格,无需预先创建 $1 / $5 / $10 的 SKU。","The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.":"已绑定店铺是 new-api 从此管理端创建的所有 Pancake 产品的父容器,包括钱包充值产品和订阅套餐产品。一个店铺通常足够;只有在确实运营多个 Pancake 目录时才需要绑定不同店铺。","The effective domain for Passkey registration. Must match the current domain or be its parent domain.":"用于 Passkey 注册的有效域。必须与当前域匹配或为其父域。","The entered text does not match the required text.":"输入文本与要求文本不匹配。","The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.":"环境(测试或生产)由你在此粘贴的密钥决定。集成期间使用测试密钥,上线时再切换为生产密钥。","The exact model identifier as used in API requests.":"API 请求中使用的确切模型标识符。","The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.":"以下模型存在计费类型冲突(固定价格 vs 比例计费)。确认以继续更改。","The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:":"模型重定向里的下列模型尚未添加到\\"模型\\"列表,调用时会因为缺少可用模型而失败:","The mapped upstream model(s)":"映射的上游模型","The model you\'re looking for doesn\'t exist.":"您查找的模型不存在。","The name displayed across the application":"在整个应用程序中显示的名称","The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations":"服务器的公开URL,用于OAuth回调、Webhook和其他外部集成","The requested chat preset does not exist or has been removed.":"请求的聊天预设不存在或已被删除。","The setup wizard will use this database during initialization.":"设置
107向导将在初始化过程中使用此数据库。","The site is not available at the moment.":"该站点目前不可用。","The slug is appended to the URL:":"别名将附加到 URL:","The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.":"同步将从选定的源获取缺失的模型和供应商。仅在您批准冲突时才会更新现有记录。","The token group that will have a custom ratio":"将具有自定义比例的令牌分组","The unique identifier for this model":"此模型的唯一标识符","The unique name for this vendor":"此供应商的唯一名称","The URL for this chat client.":"此聊天客户端的 URL。","Theme":"主题","Theme preset":"主题预设","Theme Settings":"主题设置","There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?":"当前有新增和删除两类待处理模型,但您只勾选了其中一类。确认仅提交已勾选的部分吗?","These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.":"这些模型仍然在您的勾选列表中,但上游已不再返回该名称;仅作为 model_mapping 来源键而不会出现在 upstream 列表的别名已从本视图排除,请在保存前调整勾选。","These toggles affect whether certain request fields are passed through to the upstream provider.":"这些开关控制某些请求字段是否透传到上游服务。","Thinking Suffix Adapter":"思考后缀适配器","Thinking to Content":"思维到内容","Third-party account bindings (read-only, managed by user in profile settings)":"第三方账户绑定(只读,由用户在个人资料设置中管理)","Third-party Payment Config":"第三方支付配置","This action cannot be undone.":"此操作无法撤消。","This action cannot be undone. This will permanently delete your account and remove all your data from our servers.":"此操作无法撤消。这将永久删除您的账户并从我们的服务器中移除您的所有数据。","This action will permanently remove 2FA protection from your account.":"此操作将永久移除您账户的 2FA 保护。","This channel is not an Ollama channel.":"该渠道不是 Ollama 渠道。","This channel type does not support fetching models":"此渠道类型不支持获取模型","This channel type requires additional configuration":"此渠道类型需要填写额外配置","This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.":"此确认会解锁支付、兑换码、订阅套餐和邀请奖励功能。请仔细阅读相关声明。","This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.":"此处仅控制模型请求速率限制。Web/API 路由限流由环境变量配置,仍可能返回 429。","This data may be unreliable, use with caution":"此数据可能不可靠,请谨慎使用","This device does not support Passkey":"此设备不支持 Passkey","This device does not support Passkey verification.":"此设备不支持 Passkey 验证。","This expression is too complex for the visual editor. Please switch to expression mode to edit.":"此表达式对可视化编辑器过于复杂,请切换到表达式模式进行编辑。","This feature is experimental. Configuration format and behavior may change.":"此功能为实验性功能。配置格式和行为可能会发生变化。","This feature requires server-side WeChat configuration":"此功能需要服务器端微信配置","This may cause cache failures.":"这可能导致缓存故障。","This may take a few moments while we validate the request and update your session.":"这可能需要一些时间,因为我们正在验证请求并更新您的会话。","This model has both fixed price and ratio billing conflicts":"此模型同时存在固定价格和比例计费冲突","This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.":"该模型同时存在固定价格和比例设置。保存当前模式会重写冲突字段。","This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.":"该模型同时存在固定价格和按 token 价格设置。保存当前模式会重写冲突字段。","This model is not available in any group, or no group pricing information is configured.":"此模型在任何分组中均不可用,或未配置分组定价信息。","This month":"本月获得","This page has not been created yet.":"此页面尚未创建。","This plan does not allow balance redemption":"该套餐不允许使用余额兑换","This project must be used in compliance with the":"此项目的使用必须遵守","This record was written by a pre-upgrade instance and lacks audit info. Upgrade the instance to record server IP, callback IP, payment method and system version.":"该记录由旧版本实例写入,缺少审计信息,建议将实例升级至最新版本以便记录服务器 IP、回调 IP、支付方式与系统版本等审计字段。","This site currently has {{count}} models enabled":"本站当前已启用模型,总计 {{count}} 个","This tier catches any request that did not match earlier tiers.":"此阶梯会兜底处理未匹配前面阶梯的请求。","this token group":"此令牌分组","this user group":"此用户分组","This user has no bindings":"该用户无任何绑定","This week":"本周","This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.":"这将在现有规则列表中追加 2 条模板规则(Codex CLI 和 Claude CLI)。","This will clear custom pricing ratios and revert to upstream defaults.":"这将清除自定义定价比例并恢复到上游默认值。","This will delete all":"这将删除所有","This will delete all channel affinity cache entries still in memory.":"这将删除内存中所有的渠道亲和性缓存条目。","This will delete temporary cache files that have not been used for more than 10 minutes":"这将删除超过 10 分钟未使用的临时缓存文件","This will extend the deployment by the specified hours.":"这将通过指定的小时数延长部署。","This will permanently delete API key":"这将永久删除 API 密钥","This will permanently delete redemption code":"这将永久删除兑换码","This will permanently delete user":"这将永久删除用户","This will permanently remove all log entries created before {{date}}.":"这将永久删除 {{date}} 之前创建的所有日志条目。","This will permanently remove log entries before the selected timestamp.":"这将永久删除所选时间戳之前的日志条目。","This year":"本年","Three steps to get started":"三步快速上手","Throughput":"吞吐量","Throughput by group":"各分组吞吐量","Throughput short":"吞吐","Throughput trend":"吞吐量趋势","Tier":"档位","Tier conditions":"阶梯条件","Tier name":"档位名称","Tiered":"阶梯","Tiered (billing expression)":"阶梯计费(计费表达式)","Tiered price table":"分档价格表","Tiered pricing":"阶梯计费","tiers":"档","Time":"时间","Time Granularity":"时间粒度","Time remaining":"剩余时间","Time window for rate limiting":"速率限制的时间窗口","Time-based":"含时间条件","Time-sliced cache (Claude)":"分时缓存(Claude)","Time:":"时间:","Timeline":"时间线","times":"次","Timing":"耗时","to access this resource.":"访问此资源。","to confirm":"以确认","To Lower":"转小写","To Lowercase":"转小写","to override billing when a user in one group uses a token of another group.":"当一个分组中的用户使用另一个分组的令牌时,用于覆盖计费。","to the Models list so users can use them before the mapping sends traffic upstream.":"到模型列表,以便用户在映射将流量发送到上游之前可以使用它们。","To Upper":"转大写","To Uppercase":"转大写","to view this resource.":"查看此资源。","Today":"今天","Toggle columns":"切换列","Toggle navigation menu":"切换导航菜单","Toggle plan":"切换计划","Toggle theme":"切换主题","Token":"令牌","Token Breakdown":"Token 明细","Token Endpoint":"令牌端点","Token Endpoint (Optional)":"Token 端点(可选)","Token estimator":"Token 估算器","Token group":"令牌分组","Token management":"令牌管理","Token Management":"令牌管理","Token Mgmt":"令牌管理","Token Name":"令牌名称","Token obtained from your Gotify application":"从您的 Gotify 应用程序获取的 Token","Token price for audio input.":"音频输入 token 价格。","Token price for audio output.":"音频输出 token 价格。","Token price for cache reads.":"缓存读取 token 价格。","Token price for creating cache entries.":"创建缓存条目的 token 价格。","Token price for image input.":"图像输入 token 价格。","Token prices":"Token 价格","Token regenerated and copied to clipboard":"令牌已重新生成并复制到剪贴板","Token share by model author across the last 24 hours":"过去 24 小时内各厂商的 Token 占比","Token share by model author across the past few weeks":"最近几周内各厂商的 Token 占比","Token share by model author across the past month":"过去一个月内各厂商的 Token 占比","Token share by model author across the past year":"过去一年内各厂商的 Token 占比","Token share by model author since launch":"自上线以来各厂商的 Token 占比","Token unit":"Token 单位","Token usage by model since launch":"自上线以来各模型的 Token 用量","Token-based":"按量计费","Tokenizer":"分词器","tokens":"Token","Tokens":"Token","tokens / mo":"token / 月","Tokens by category":"分类 Token 占比","Tokens Only":"仅限 Token","Tokens per minute":"每分钟 Token 数","Tokens since launch":"发布以来累计 Token","Tokens-only mode will show raw quota values regardless of this toggle.":"Tokens-only 模式将无视此开关显示原始配额值。","Too many files. Some were not added.":"文件过多。部分未添加。","Too many requests":"请求过于频繁","Tool / function declarations the model may call":"模型可调用的工具 / 函数声明","Tool identifier":"工具标识","Tool price settings":"工具价格设置","Tool prices":"工具价格","Tool-choice policy or specific tool name":"工具选择策略或具体工具名","Tools":"工具","Top {{count}}":"前 {{count}}","Top app":"领头应用","Top apps":"热门应用","Top Apps":"热门应用","Top integrations using this model":"使用此模型的主要集成","Top model":"领头模型","Top models":"热门模型","Top Models":"热门模型","Top models by traffic":"流量最高的模型","Top up balance and view billing history.":"充值余额并查看账单历史。","Top Users":"热门用户","Top vend
107ors":"热门厂商","Top-up":"充值","Top-up amount options":"充值金额选项","Top-up Audit Info":"充值审计信息","Top-up group ratios":"充值分组比例","Top-Up Link":"充值链接","top-up ratio":"充值倍率","Topup Amount":"充值金额","Total":"总计","Total Allocated":"总分配","Total check-ins":"累计签到","Total consumed":"总消耗","Total consumed quota":"总消耗额度","Total cost":"总成本","Total Cost":"总费用","Total Count":"总数","Total earned":"累计获得","Total Earned":"总收入","Total GPUs":"总 GPU","Total invitation revenue":"总邀请收入","Total Log Size":"日志总大小","Total Quota":"总额度","Total requests allowed per period. 0 = unlimited.":"每周期允许的总请求数。0 = 无限制。","Total requests made":"总请求数","Total tokens":"总 Token","Total Tokens":"总 Token 数","Total Usage":"总用量","Total:":"总计:","TPM":"TPM","Track per-request consumption to power usage analytics. Keeping this on increases database writes.":"跟踪每个请求的消耗,以支持使用情况分析。保持开启会增加数据库写入。","Track usage, costs and performance with real-time analytics":"通过实时分析跟踪用量、成本和性能","Tracked apps":"已跟踪的应用","Tracks current account base limits and additional metered usage on Codex upstream.":"跟踪当前账号在 Codex 上游的基础限额与附加计费用量。","Trading insights, accounting, advisory":"交易洞察、记账与财务建议","Transfer":"转移","Transfer Amount":"转移金额","Transfer failed":"转账失败","Transfer Rewards":"转移奖励","Transfer successful":"转账成功","Transfer to Balance":"转移到余额","Translation":"翻译","Transparent Billing":"透明计费","Trend":"趋势","Trending down":"下降趋势","Trending up":"上升趋势","Triggered garbage collection":"触发垃圾回收","Trim leading/trailing whitespace":"去掉字符串头尾空白","Trim Prefix":"裁剪前缀","Trim Space":"去掉空白","Trim Suffix":"裁剪后缀","Truncate embeddings to this many dimensions":"将向量截断到指定维度","Trusted":"受信任","Try adjusting your search":"请尝试调整搜索条件","Try adjusting your search to locate a missing model.":"尝试调整您的搜索以找到缺失的模型。","TTFT P50":"TTFT P50","TTFT P95":"TTFT P95","TTFT P99":"TTFT P99","TTFT percentiles, throughput, and 30-day uptime by group":"各分组的 TTFT 分位数、吞吐量与 30 天可用率","TTL":"TTL","TTL (seconds, 0 = default)":"TTL(秒,0 表示默认)","TTL (seconds)":"TTL(秒)","Tune selection priority, testing, status handling, and request overrides.":"调整选择优先级、测试、状态处理和请求覆盖。","Turnstile is enabled but site key is empty.":"Turnstile 已启用但站点密钥为空。","Tutoring, learning aids, assessment":"辅导、学习辅助与测评","Two-factor Authentication":"双重身份验证","Two-Factor Authentication":"两步验证","Two-factor authentication disabled":"两因素认证已禁用","Two-factor authentication enabled successfully!":"两步验证已成功启用!","Two-factor authentication reset":"两因素认证已重置","Two-Step Verification":"两步验证","Type":"类型","Type (common)":"类型(常用)","Type *":"类型 *","Type a command or search...":"输入命令或搜索...","Type the confirmation text here":"在此输入确认文本","Type-Specific Settings":"特定类型设置","Type:":"类型:","UI granularity only &mdash; data is still aggregated hourly":"仅 UI 粒度 &mdash; 数据仍按小时汇总","Unable to estimate price for this deployment.":"无法为该部署估算价格。","Unable to generate chat link. Please contact your administrator.":"无法生成聊天链接。请联系您的管理员。","Unable to load groups":"无法加载分组","Unable to load rankings":"无法加载排行榜","Unable to load rankings data":"无法加载排行榜数据","Unable to open chat":"无法打开聊天","Unable to parse structured pricing":"无法解析为结构化价格","Unable to prepare chat link. Please ensure you have an enabled API key.":"无法准备聊天链接。请确保您有一个已启用的 API 密钥。","Unauthorized":"未授权","Unauthorized Access":"未经授权的访问","Unbind":"解绑","Unbind failed":"解绑失败","Unbound {{provider}}":"已解绑 {{provider}}","Underground":"暗夜","Understand how user groups, token groups, ratios, and special rules work together.":"了解用户分组、令牌分组、倍率和特殊规则如何共同生效。","Understand image inputs alongside text":"在文本之外理解图像输入","Unexpected release payload":"意外的版本数据格式","Unified API Gateway for":"统一 API 网关,服务于","Unique identifier for this group.":"此组的唯一标识符。","Unit price (local currency / USD)":"单价(本地货币 / USD)","Unit price (USD)":"单价 (USD)","Unit price must be greater than 0":"单价必须大于 0","Units per USD":"每 USD 单位数","Unknown":"未知","Unknown version":"未知版本","Unlimited":"无限制","Unlimited Quota":"无限配额","Unsaved changes":"未保存的更改","Unset price":"未设置价格","Until":"至","Untitled":"未命名","Untrusted upstream data:":"不受信任的上游数据:","Unused":"未使用","Up to 4 strings that stop generation":"最多 4 个停止生成的字符串","Update":"更新","Update All Balances":"更新所有余额","Update API Key":"更新 API 密钥","Update Balance":"更新余额","Update balance for:":"更新余额:","Update Channel":"更新渠道","Update channel configuration and click save when you\'re done.":"更新渠道配置,完成后点击保存。","Update configuration":"更新配置","Update failed":"更新失败","Update Model":"更新模型","Update model configuration and click save when you\'re done.":"更新模型配置,完成后点击保存。","Update plan info":"更新套餐信息","Update Provider":"更新提供商","Update Redemption Code":"更新兑换码","Update succeeded":"更新成功","Update the API key by providing necessary info.":"通过提供必要信息更新 New API 密钥。","Update the configuration for this custom OAuth provider.":"更新此自定义OAuth提供商的配置。","Update the redemption code by providing necessary info.":"通过提供必要信息更新兑换码。","Update the reusable bundle below.":"更新下面的可重用捆绑包。","Update the user by providing necessary info.":"通过提供必要信息更新用户。","Update vendor information for {{name}}":"更新 {{name}} 的供应商信息","Update your password for account:":"更新账户密码:","Update your password to keep your account secure":"更新您的密码以确保账户安全","Updated":"更新时间","Updated a custom OAuth provider":"更新了一个自定义 OAuth 提供方","Updated a deployment":"更新了一个部署","Updated a model":"更新了一个模型","Updated a prefill group":"更新了一个预填组","Updated a redemption code":"更新了一个兑换码","Updated a subscription plan":"更新了一个订阅计划","Updated a vendor":"更新了一个供应商","Updated channel {{name}} (ID: {{id}})":"更新渠道 {{name}}(ID: {{id}})","Updated daily":"每日更新","Updated successfully":"更新成功","Updated system setting {{key}}":"修改系统设置 {{key}}","Updated user {{username}} (ID: {{id}})":"更新用户 {{username}}(ID: {{id}})","Updating all channel balances. This may take a while. Please refresh to see results.":"正在更新所有渠道余额。这可能需要一段æ—
107¶é—´ã€‚请刷新以查看结果。","Upgrade Group":"升级分组","Upload":"上传","Upload a single service account JSON file":"上传单个服务账号 JSON 文件","Upload file":"上传文件","Upload files":"上传文件","Upload multiple JSON files in batch modes":"批量模式下可上传多个 JSON 文件","Upload or reference a local configuration file.":"上传或引用本地配置文件。","Upload photo":"上传照片","Upscale":"放大","Upstream":"上游","Upstream Model Detection Settings":"检测上游模型设置","Upstream Model Update Check":"上游模型更新检查","Upstream Model Updates":"上游模型更新","Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models":"已处理上游模型更新:加入 {{added}} 个,删除 {{removed}} 个,本次忽略 {{ignored}} 个,当前已忽略模型 {{totalIgnored}} 个","Upstream price sync":"上游价格同步","Upstream prices fetched successfully":"已成功获取上游价格","Upstream ratios fetched successfully":"上游比率获取成功","Upstream Request ID":"上游请求 ID","Upstream Response":"上游返回","upstream services integrated":"上游服务适配","Upstream Updates":"上游更新","uptime":"正常运行时间","Uptime":"运行时间","Uptime (30d)":"可用率 (30 天)","Uptime (last 30 days)":"可用率(最近 30 天)","Uptime Kuma":"Uptime Kuma","Uptime Kuma groups saved successfully":"Uptime Kuma 组保存成功","Uptime Kuma URL":"Uptime Kuma URL","Uptime since":"运行时间始于","URL":"URL","URL is required":"URL 为必填项","URL to your logo image (optional)":"您的徽标图片 URL(可选)","Usage":"用量","Usage at a glance":"用量概览","Usage guide":"使用教程","Usage logs":"使用日志","Usage Logs":"使用日志","Usage mode":"使用模式","Usage-based":"基于使用量","USD":"USD","USD Exchange Rate":"美元汇率","USD price per 1M input tokens.":"每 100 万输入 token 的美元价格。","USD price per 1M tokens.":"每 100 万 token 的美元价格。","Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.":"使用 +: 添加分组,使用 -: 移除默认可选分组,不加前缀则追加分组。","Use a compatible browser or device with biometric authentication or a security key to register a Passkey.":"请使用支持生物识别认证或安全密钥的兼容浏览器或设备来注册通行密钥。","Use authenticator code":"使用验证器代码","Use backup code":"使用备用代码","Use disk cache when request body exceeds this size":"请求体超过此大小时使用磁盘缓存","Use external tools to extend capabilities":"通过外部工具扩展能力","Use our unified OpenAI-compatible endpoint in your applications":"在应用中使用我们兼容 OpenAI 的统一接口","Use Passkey to sign in without entering your password.":"使用通行密钥登录,无需输入密码。","Use presets or upstream discovery to populate the model list faster.":"使用预设或上游发现来更快填充模型列表。","Use secure connection when sending emails":"发送电子邮件时使用安全连接","Use sidebar shortcut":"使用侧边栏快捷方式","Use the full-width table to scan prices, then select a row to edit it here.":"先在表格中快速浏览价格,然后选择一行在这里编辑。","Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.":"使用定价分组表管理倍率,以及该分组是否出现在创建令牌的下拉框中。","Use this token for API authentication":"使用此令牌进行 API 身份验证","Use your Passkey":"使用您的通行密钥","used":"已使用","Used":"已使用","Used / Remaining":"已使用 / 剩余","Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.":"用作新产品的 SuccessURL。若留空,系统会要求你确认。","Used for load balancing. Higher weight = more requests":"用于负载均衡。权重越高 = 请求越多","Used in URLs and API routes":"用于URL和API路由","Used Quota":"消耗额度","Used to authenticate with io.net deployment API":"用于 io.net 部署 API 鉴权","Used to authenticate with the worker. Leave blank to keep the existing secret.":"用于与 Worker 进行身份验证。留空以保留现有密钥。","Used:":"已使用:","User":"用户","User {{id}}":"用户 {{id}}","User Agent":"用户代理","User Agreement":"用户协议","User Analytics":"用户统计","User Consumption Ranking":"用户消耗排行","User Consumption Trend":"用户消耗趋势","User created successfully":"用户创建成功","User dashboard and quota controls.":"用户仪表板和配额控制。","User Exclusive Ratio":"专属倍率","User group":"用户分组","User Group":"用户分组","User group name":"用户分组名称","User Group: {{ratio}}x":"用户分组:{{ratio}}x","User groups that can access channels with this tag":"可以访问带有此标签的渠道的用户分组","User groups that can access this channel. ":"可以访问此渠道的用户组。","User ID":"用户 ID","User ID Field":"用户ID字段","User ID:":"用户 ID:","User Info Endpoint":"用户信息端点","User Info Endpoint (Optional)":"用户信息端点(可选)","User Information":"用户信息","User Menu":"用户菜单","User personal functions":"用户个人功能","User selectable":"用户可选","User Subscription Management":"用户订阅管理","User updated successfully":"用户更新成功","User Verification":"用户验证","User-Agent include (one per line)":"User-Agent include(每行一个)","Username":"用户名","Username confirmation does not match":"用户名确认不匹配","Username Field":"用户名字段","Username or Email":"用户名或电子邮件","Users":"用户","Users call the model on the left. The platform forwards the request to the upstream model on the right.":"用户调用左侧的模型。平台将请求转发给右侧的上游模型。","Users must wait for a successful drawing before upscales or variations.":"用户必须等待成功的绘图完成,才能进行放大或变体。","Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.":"用户只能看到标记为用户可选的分组。不可选分组仍可由管理员分配。","uses":"使用次数","Validity":"有效期","Validity Period":"有效期","Value":"值","Value (supports JSON or plain text)":"值(支持 JSON 或普通文本)","Value is required":"值为必填项","Value must be at least 0":"值必须至少为 0","Value Regex":"Value 正则","variable":"变量","variable) *":"变量) *","Variables":"变量","Vary":"变换","Vary (Strong)":"强变换","Vary (Subtle)":"弱变换","Vast Range of AI Models":"海量 AI 模型","Vendor":"供应商","Vendor deleted successfully":"供应商删除成功","Vendor Name *":"供应商名称 *","Vendor:":"供应商:","Vendors ranked by aggregated token volume":"厂商按聚合 Token 用量排序","Verification code":"验证码","Verification Code":"验证码","Verification code must be 6 digits":"验证码必须是 6 位数字","Verification code sent! Please check your email.":"验证码已发送!请检查您的电子邮件。","Verification code updates every 30 seconds.":"验证码每 30 秒更新一次。","Verification email sent":"验证邮件已发送","Verification failed":"验证失败","Verification is not configured properly":"验证未正确配置","Verification required to reveal the saved key.":"需要é
107ªŒè¯æ‰èƒ½æ˜¾ç¤ºå·²ä¿å­˜çš„密钥。","Verify":"验证","Verify and Sign In":"验证并登录","Verify routing with Playground or your client":"使用 Playground 或你的客户端验证路由","Verify Setup":"验证设置","Verify your database connection":"验证数据库连接","Verifying credentials and pulling stores from your Pancake account...":"正在验证凭证并从你的 Pancake 账户拉取店铺...","Version Overrides":"版本覆盖","Vertex AI":"Vertex AI","Vertex AI API Key mode does not support batch creation":"Vertex AI API Key 模式不支持批量创建","Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.":"Vertex AI 不支持 functionResponse.id 字段,开启后将自动移除该字段","Vertex AI Key Format":"Vertex AI 密钥格式","Vertex AI service account key must be valid JSON":"Vertex AI 服务账号密钥必须是有效 JSON","Video":"视频","Video length in seconds":"视频时长(秒)","Video Remix":"视频 Remix","Vidu":"Vidu","View":"查看","View all currently available models":"查看当前可用的所有模型","View detailed information about this user including balance, usage statistics, and invitation details.":"查看此用户的详细信息,包括余额、使用统计和邀请详情。","View details":"查看详情","View document":"查看文档","View logs":"查看日志","View mode":"视图模式","View model statistics and charts":"查看模型统计和图表","View Pricing":"查看定价","View the complete details for this":"查看此条","View the complete details for this log entry":"查看此日志条目的完整详情","View the complete error message and details":"查看完整错误信息与详情","View the complete prompt and its English translation":"查看完整提示词及其英文翻译","View the generated image":"查看生成的图片","View your topup transaction records and payment history":"查看您的充值交易记录和付款历史","Viewed channel key {{name}} (ID: {{id}})":"查看渠道密钥 {{name}}(ID: {{id}})","Violation Code":"违规代码","Violation deduction amount":"违规扣费金额","Violation Fee":"违规扣费","Violation Marker":"违规标记","vip":"vip","VIP users with premium access":"拥有高级访问权限的 VIP 用户","Vision":"视觉","Vision, image / video, document chat":"视觉理解、图像 / 视频、文档对话","Visit Settings → General and adjust quota options...":"访问设置 → 通用并调整配额选项...","Visitors must authenticate before accessing the pricing directory.":"访客必须先进行身份验证才能访问定价目录。","Visitors must authenticate before accessing the rankings page.":"访客必须先进行身份验证才能访问排行榜页面。","Visual":"可视化","Visual edit":"可视化编辑","Visual editor":"可视化编辑器","Visual Editor":"可视编辑器","Visual indicator color for the API card":"API 卡的可视指示器颜色","Visual Mode":"可视模式","Visual Parameter Override":"可视化参数覆盖","VolcEngine":"字节火山方舟、豆包通用","vs. previous":"相较上期","Waffo Aggregator Gateway":"Waffo 聚合网关","Waffo Pancake Dashboard":"Waffo Pancake 控制台","Waffo Pancake MoR":"Waffo Pancake MoR","Waffo Pancake Payment Gateway":"Waffo Pancake 支付网关","Waffo Pancake product created":"Waffo Pancake 产品已创建","Waffo Pancake product creation failed":"Waffo Pancake 产品创建失败","Waffo Pancake save failed":"Waffo Pancake 保存失败","Waffo Pancake settings saved":"Waffo Pancake 设置已保存","Waffo Payment":"Waffo 支付","Waffo Payment Gateway":"Waffo 支付网关","Waffo Public Key (Production)":"Waffo 公钥(生产)","Waffo Public Key (Sandbox)":"Waffo 公钥(沙盒)","Waiting":"等待中","Waiting for email...":"等待电子邮件...","Wallet":"钱包","Wallet First":"优先钱包","Wallet Management":"钱包管理","Wallet management and personal preferences.":"钱包管理和个人偏好设置。","Wallet Only":"仅用钱包","Warning":"警告","Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.":"警告:基础 URL 不应以 /v1 结尾。New API 将自动处理它。这可能会导致请求失败。","Warning: Disabling 2FA will make your account less secure.":"警告:禁用双重身份验证将使您的账户安全性降低。","Warning: This action is permanent and irreversible!":"警告:此操作是永久且不可逆的!","We apologize for the inconvenience.":"对于由此造成的不便,我们深表歉意。","We could not load the setup status.":"我们无法加载设置状态。","We will prompt your device to confirm using biometrics or your hardware key.":"我们将提示您的设备使用生物识别或硬件密钥进行确认。","We\'ll be back online shortly.":"我们将很快恢复在线。","Web search":"网络搜索","Web Search":"网页搜索","Webhook Configuration:":"Webhook 配置:","Webhook public key (production)":"Webhook 公钥(生产)","Webhook public key (production) is required":"Webhook 公钥(生产)为必填项","Webhook public key (sandbox)":"Webhook 公钥(沙盒)","Webhook public key (sandbox) is required":"Webhook 公钥(沙盒)为必填项","Webhook secret":"Webhook 密钥","Webhook Secret":"Webhook 密钥","Webhook signing secret (leave blank unless updating)":"Webhook 签名密钥(除非更新,否则留空)","Webhook URL":"Webhook å
107œ°å€","Webhook URL (Production):":"Webhook URL(生产):","Webhook URL (Test):":"Webhook URL(测试):","Webhook URL:":"Webhook URL:","Website is under maintenance!":"网站正在维护中!","WeChat":"微信","WeChat login QR code":"微信登录二维码","WeChat Pay":"微信支付","WeChat QR code will be displayed here":"微信二维码将显示在此处","WeChat sign in":"微信登录","Week":"本周","Weekday":"星期","Weekly":"每周","Weekly token usage by model across the past few weeks":"最近几周内各模型的每周 Token 用量","Weekly token usage by model across the past year":"过去一年内按模型分布的每周 Token 使用量","Weekly token usage by model since launch":"自上线以来按模型分布的每周 Token 使用量","Weekly Window":"每周窗口","Weight":"权重","Weighted by request count":"按请求数加权","Welcome back!":"欢迎回来!","Welcome to our New API...":"欢迎使用我们的 New API...","Well-Known URL":"Well-Known URL","Well-Known URL must start with http:// or https://":"知名 URL 必须以 http:// 或 https:// 开头","What would you like to know?":"您想了解什么?","When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.":"当令牌使用 auto 分组时,系统会按从上到下的顺序尝试,直到找到可用分组。","When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.":"条件满足时,最终价格乘以 X;多条命中的倍率会相乘;小于 1 的值为折扣。","When enabled, if channels in the current group fail, it will try channels in the next group in order.":"开启后,当前分组渠道失败时会按顺序尝试下一个分组的渠道。","When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel.":"开启后,亲和到的渠道被禁用,或不再适用于当前分组/模型时,仍保留这条亲和;关闭时会删除并重新选择渠道。","When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.":"启用磁盘缓存后,大请求体将临时存储到磁盘而非内存,可显著降低内存占用。建议在 SSD 环境下使用。","When enabled, Midjourney callbacks are accepted (reveals server IP).":"启用时,接受 Midjourney 回调 (会泄露服务器 IP)。","When enabled, newly created tokens start in the first auto group.":"启用后,新创建的令牌将从第一个自动分组开始。","When enabled, prompts are scanned before reaching upstream models.":"启用后,提示将在到达上游模型之前被扫描。","When enabled, the store field will be blocked":"开启后将阻止 store 字段透传","When enabled, users can pick this group when creating tokens.":"启用后,用户创建令牌时可以选择该分组。","When enabled, violation requests will incur additional charges.":"开启后,违规请求将额外扣费。","When enabled, zero-cost models also pre-consume quota before final settlement.":"启用后,零成本模型也会在最终结算前预先消耗配额。","When no conditions are set, the operation always executes.":"没有条件时,默认总是执行该操作。","When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.":"启用性能监控后,当系统资源使用率超过设定阈值时,将拒绝新的 Relay 请求。","When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.":"在容器或临时环境中运行时,请确保 SQLite 文件映射到持久存储,以避免重启时数据丢失。","Whitelist":"白名单","Whitelist (Only allow listed domains)":"白名单(仅允许列出的域)","Whitelist (Only allow listed IPs)":"白名单(仅允许列出的 IP)","whsec_xxx":"whsec_xxx","Why only one store + product?":"为什么只需要一个店铺和产品?","Window:":"窗口:","Wire encoding for the embedding vectors":"向量传输的编码格式","with conflicts":"有冲突","with the API key from your token settings.":"替换为令ç‰
107Œè®¾ç½®ä¸­çš„ API Key。","Without additional conditions, only the type above is used for pruning.":"未添加附加条件时,仅使用上方 type 进行清理。","Worker Access Key":"Worker 访问密钥","Worker Proxy":"Worker 代理","Worker URL":"Worker URL","Workspaces":"工作区","Write value to the target field":"把值写入目标字段","x":"x","xAI":"xAI","Xinference":"Xinference","Xunfei":"讯飞","Year":"今年","years":"å¹´","Yes":"是","You are about to delete {{count}} API key(s).":"您即将删除 {{count}} 个 API 密钥。","You are running the latest version ({{version}}).":"您正在运行最新版本 ({{version}})。","You can close this tab once the binding completes or a success message appears in the original window.":"绑定完成后或原窗口出现成功消息后,您可以关闭此标签页。","You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.":"你可以在\\"自定义模型名称\\"处手动添加它们,然后点击\\"填入\\"后再提交,或者直接使用下方操作自动处理。","You can only check in once per day":"每日仅可签到一次,请勿重复签到","You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.":"你承诺不会使用本系统实施、协助实施或间接实施违反适用法律法规、监管要求、平台规则、公共利益或第三方合法权益的行为。","You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.":"你承诺仅在从上游服务提供商、模型服务提供商或相关权利人处获得合法授权的范围内使用上游 API、账户、密钥、额度和服务能力,并不会进行未经授权的转售、倒卖、分发或其他不合规商业化行为。","You don\'t have necessary permission":"您没有必要的权限","You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.":"你已合法取得所连接模型 API、账户、密钥和额度的授权。","You have unsaved changes":"您有未保存的更改","You have unsaved changes. Are you sure you want to leave?":"您有未保存的更改。确定要离开吗?","You Pay":"您支付","You save":"您节省","You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.":"你理解并独立承担因部署、运营和收费行为产生的法律责任。","You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.":"你理解此合规提醒仅用于风险提示,不构成法律意见、合规审查结论或对你使用本系统合法性的保证;你应结合实际业务场景咨询专业法律或合规顾问。","You will be redirected to Telegram to complete the binding process.":"您将被重定向到 Telegram 以完成绑定过程。","You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.":"您将被自动重定向。如果几秒钟后无反应,您可以返回上一页。","your AI integration?":"你的 AI 集成了吗?","Your Azure OpenAI endpoint URL":"您的 Azure OpenAI 端点 URL","Your Bot Name":"您的机器人名称","Your Cloudflare Account ID":"您的 Cloudflare 账户 ID","Your Discord OAuth Client ID":"您的 Discord OAuth 客户端 ID","Your Discord OAuth Client Secret":"您的 Discord OAuth 客户端密钥","Your GitHub OAuth Client ID":"您的 GitHub OAuth 客户端 ID","Your GitHub OAuth Client Secret":"您的 GitHub OAuth 客户端密钥","Your new backup codes are ready":"您的新备份代码已准备就绪","Your Referral Link":"您的推荐链接","Your setup guide is collapsed 
107so usage stays in focus.":"设置引导已收起,让用量信息保持在焦点位置。","Your system access token for API authentication. Keep it secure and don\'t share it with others.":"您的系统访问令牌,用于 API 认证。请妥善保管,不要与他人分享。","Your Telegram Bot Token":"您的 Telegram 机器人令牌","Your transaction history will appear here":"您的交易历史会显示在这里","Your Turnstile secret key":"您的 Turnstile 密钥","Your Turnstile site key":"您的 Turnstile 站点密钥","Zero retention":"零数据保留","Zhipu":"智谱","Zhipu V4":"智谱 V4","Zoom":"缩放"}}');h.Ay.use(N.A).use(I.r9).init({resources:{en:R,zh:L,fr:T,ru:D,ja:M,vi:O},fallbackLng:"en",supportedLngs:["en","zh","fr","ru","ja","vi"],load:"languageOnly",nsSeparator:!1,debug:!1,interpolation:{escapeValue:!1},detection:{order:["localStorage","navigator"],caches:["localStorage"]}});var E=n(30403),U=n(97738),q=n(78157),F=n(50067),_=n(21325),B=n(15691),G=n(71817);let z=e=>{let{resolvedTheme:t}=(0,j.D)();return(0,a.jsx)(p.l$,{theme:t,className:"toaster group",icons:{success:(0,a.jsx)(G.n,{icon:B.XL2z,strokeWidth:2,className:"size-4"}),info:(0,a.jsx)(G.n,{icon:B.KSgY,strokeWidth:2,className:"size-4"}),warning:(0,a.jsx)(G.n,{icon:B.afW,strokeWidth:2,className:"size-4"}),error:(0,a.jsx)(G.n,{icon:B.NBke,strokeWidth:2,className:"size-4"}),loading:(0,a.jsx)(G.n,{icon:B.Nzk2,strokeWidth:2,className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--success-bg":"color-mix(in oklch, var(--success) 16%, var(--popover))","--success-border":"color-mix(in oklch, var(--success) 35%, var(--border))","--success-text":"var(--success)","--info-bg":"color-mix(in oklch, var(--info) 16%, var(--popover))","--info-border":"color-mix(in oklch, var(--info) 35%, var(--border))","--info-text":"var(--info)","--warning-bg":"color-mix(in oklch, var(--warning) 18%, var(--popover))","--warning-border":"color-mix(in oklch, var(--warning) 38%, var(--border))","--warning-text":"var(--warning)","--error-bg":"color-mix(in oklch, var(--destructive) 16%, var(--popover))","--error-border":"color-mix(in oklch, var(--destructive) 35%, var(--border))","--error-text":"var(--destructive)","--border-radius":"var(--radius)"},...e})};var K=n(14676),W=n(33906);function J(){let e=(0,i.useRef)(null),t=(0,K.k)();return(0,i.useEffect)(()=>{"pending"===t.status?e.current?.continuousStart():e.current?.complete()},[t.status]),(0,a.jsx)(W.Ay,{color:"var(--muted-foreground)",ref:e,shadow:!0,height:2})}var V=n(66970),H=n(12447),$=n(66563),Q=n(94730);let Y="setup_status_checked",X=function(){try{if("u">typeof window)return"true"===window.localStorage.getItem(Y)}catch{}return!1}(),Z=(0,U.hy)()({beforeLoad:async e=>{let{location:t}=e,n=t?.pathname||"";if(!X&&!n.startsWith("/setup")){let e=await (0,Q.YA)().catch(e=>null);if(e?.success&&e.data&&!e.data.status)throw(0,q.V2)({to:"/setup"});X=!0;try{"u">typeof window&&window.localStorage.setItem(Y,"true")}catch{}}},component:function(){return(0,_.R)({autoLoad:!0}),(0,i.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get("aff")?.trim();e&&(0,V.Es)(e)},[]),(0,a.jsxs)(F._,{children:[(0,a.jsx)(J,{}),(0,a.jsx)(E.s,{}),(0,a.jsx)(z,{closeButton:!0,duration:5e3,position:"top-center",richColors:!0}),!1]})},notFoundComponent:$.m,errorComponent:H.$});var ee=n(221),et=n(23200);let en=(0,et.WK)("/user-agreement")({component:(0,ee.Z)(()=>n.e(3597).then(n.bind(n,27020)),"component")}),ea=(0,et.WK)("/privacy-policy")({component:(0,ee.Z)(()=>n.e(5774).then(n.bind(n,44397)),"component")}),ei=!1,eo=(0,et.WK)("/_authenticated")({beforeLoad:async e=>{let{location:t}=e,{auth:n}=m.n.getState();if(!n.user)throw(0,q.V2)({to:"/sign-in",search:{redirect:t.href}});if(!ei){let e=await (0,g.Ng)().catch(()=>null);if(e?.success&&e.data)n.setUser(e.data),ei=!0;else throw n.reset(),(0,q.V2)({to:"/sign-in",search:{redirect:t.href}})}},component:(0,ee.Z)(()=>n.e(5185).then(n.bind(n,4296)),"component")}),er=(0,et.WK)("/(auth)")({}),es=(0,et.WK)("/")({component:(0,ee.Z)(()=>Promise.all([n.e(5272),n.e(7646)]).then(n.bind(n,61405)),"component")}),el=(0,et.WK)("/setup/")({beforeLoad:async()=>{let e=await (0,Q.YA)().catch(e=>null);if(e?.success&&e.data?.status)throw(0,q.V2)({to:"/"})},component:(0,ee.Z)(()=>
107Promise.all([n.e(8984),n.e(7393)]).then(n.bind(n,47720)),"component")});var ec=n(66586),ed=n(50659);let eu=ec.Ik({period:ec.k5(["today","week","month","year","all"]).optional().catch(void 0)}),eh=(0,et.WK)("/rankings/")({validateSearch:eu,beforeLoad:async e=>{let{location:t}=e,n=await (0,ed.PI)("rankings");if(!n.enabled)throw(0,q.V2)({to:"/"});if(n.requireAuth){let{auth:e}=m.n.getState();if(!e.user)throw(0,q.V2)({to:"/sign-in",search:{redirect:t.href}})}},component:(0,ee.Z)(()=>Promise.all([n.e(5272),n.e(310),n.e(9582),n.e(8994)]).then(n.bind(n,49228)),"component")}),ep=ec.Ik({search:ec.Yj().optional(),sort:ec.Yj().optional(),vendor:ec.Yj().optional(),group:ec.Yj().optional(),quotaType:ec.Yj().optional(),endpointType:ec.Yj().optional(),tag:ec.Yj().optional(),tokenUnit:ec.k5(["M","K"]).optional(),view:ec.k5(["card","table"]).optional().catch(void 0),rechargePrice:ec.zM().optional()}),em=(0,et.WK)("/pricing/")({validateSearch:ep,beforeLoad:async e=>{let{location:t}=e,n=await (0,ed.PI)("pricing");if(!n.enabled)throw(0,q.V2)({to:"/"});if(n.requireAuth){let{auth:e}=m.n.getState();if(!e.user)throw(0,q.V2)({to:"/sign-in",search:{redirect:t.href}})}},component:(0,ee.Z)(()=>Promise.all([n.e(5272),n.e(310),n.e(9582),n.e(7717),n.e(2748),n.e(1603),n.e(7294)]).then(n.bind(n,14605)),"component")}),eg=(0,et.WK)("/about/")({component:(0,ee.Z)(()=>n.e(1704).then(n.bind(n,77883)),"component")}),ef=(0,et.WK)("/oauth/$provider")({component:(0,ee.Z)(()=>Promise.all([n.e(5530),n.e(705)]).then(n.bind(n,49672)),"component")}),ey=ec.g1(ec.Yj(),ec.L5()).catch({}),eb=(0,et.WK)("/console/topup")({validateSearch:ey,beforeLoad:e=>{let{search:t}=e;throw(0,q.V2)({to:"/wallet",search:{show_history:!0,...t}})}}),ev=(0,et.WK)("/console/log")({beforeLoad:()=>{throw(0,q.V2)({to:"/usage-logs"})}}),ex=(0,et.WK)("/_authenticated/chat2link")({component:(0,ee.Z)(()=>n.e(9180).then(n.bind(n,37431)),"component")}),ek=(0,et.WK)("/(errors)/503")({component:(0,ee.Z)(()=>n.e(4132).then(n.bind(n,12239)),"component")}),eC=(0,et.WK)("/(errors)/500")({component:(0,ee.Z)(()=>n.e(7793).then(n.bind(n,53224)),"component")}),eS=(0,et.WK)("/(errors)/404")({component:(0,ee.Z)(()=>n.e(3494).then(n.bind(n,89045)),"component")}),ew=(0,et.WK)("/(errors)/403")({component:(0,ee.Z)(()=>n.e(1443).then(n.bind(n,74734)),"component")}),eA=(0,et.WK)("/(errors)/401")({component:(0,ee.Z)(()=>n.e(8233).then(n.bind(n,95728)),"component")}),eP=(0,et.WK)("/(auth)/sign-up")({component:(0,ee.Z)(()=>Promise.all([n.e(4708),n.e(4148),n.e(1633)]).then(n.bind(n,94347)),"component")}),ej=ec.Ik({redirect:ec.Yj().optional()}),eN=(0,et.WK)("/(auth)/sign-in")({component:(0,ee.Z)(()=>Promise.all([n.e(4708),n.e(4148),n.e(7890)]).then(n.bind(n,15225)),"component"),validateSearch:ej,beforeLoad:async e=>{let{search:t}=e,{auth:n}=m.n.getState();if(n.user)throw(0,q.V2)({to:t?.redirect||"/dashboard"})}}),eI=(0,et.WK)("/(auth)/reset")({component:(0,ee.Z)(()=>n.e(5046).then(n.bind(n,36261)),"component")}),eR=(0,et.WK)("/(auth)/register")({beforeLoad:e=>{let{location:t}=e;throw(0,q.V2)({to:"/sign-up",search:t.search,replace:!0})}}),eT=(0,et.WK)("/(auth)/otp")({component:(0,ee.Z)(()=>n.e(1556).then(n.bind(n,79135)),"component")}),eM=(0,et.WK)("/(auth)/oauth")({component:(0,ee.Z)(()=>n.e(7086).then(n.bind(n,48557)),"component")}),eD=(0,et.WK)("/(auth)/forgot-password")({component:(0,ee.Z)(()=>n.e(482).then(n.bind(n,28089)),"component")});var eO=n(93919);let eL=(0,et.WK)("/_authenticated/system-settings")({beforeLoad:()=>{let{auth:e}=m.n.getState();if(e.user?.role!==eO.z7.SUPER_ADMIN)throw(0,q.V2)({to:"/403"})},component:(0,ee.Z)(()=>n.e(5782).then(n.bind(n,38357)),"component")}),eE=ec.Ik({search:ec.Yj().optional(),sort:ec.Yj().optional(),vendor:ec.Yj().optional(),group:ec.Yj().optional(),quotaType:ec.Yj().optional(),endpointType:ec.Yj().optional(),tag:ec.Yj().optional(),tokenUnit:ec.k5(["M","K"]).optional(),view:ec.k5(["card","table"]).optional().catch(void 0),rechargePrice:ec.zM().optional()}),eU=(0,et.WK)("/pricing/$modelId/")({validateSearch:eE,beforeLoad:async e=>{let{location:t}=e,n=await (0,ed.PI)("pricing");if(!n.enabled)throw(0,q.V2)({to:"/"});if(n.requireAuth){let{auth:e}=m.n.getState();if(!e.user)throw(0,q.V2)({to:"/sign-in",search:{redirect:t.href}})}},component:(0,ee.Z)(()=>Promise.all([n.e(5272),n.e(310),n.e(9582),n.e(7717),n.e(2748),n.e(1603),n.e(5923)]).then(n.bind(n,17006)),"component")});var eq=n(55286);let eF=ec.Ik({page:ec.ai().optional().catch(1),pageSize:ec.ai().optional().catch(void 0),filter:ec.Yj().optional().catch(""),status:ec.YO(ec.k5(["-1","1","2"])).optional().catch([]),role:ec.YO(ec.k5(["1","10","100"])).optional().catch([]),group:ec.Yj().optional().catch("")}),e_=(0,et.WK)("/_authenticated/users/")({beforeLoad:()=>{let{auth:e}=m.n.getState();if(!e.user||e.user.role<eO.z7.ADMIN)throw(0,q.V2)({to:"/403"})},validateSearch:eF,component:(0,ee.Z)(()=>Promise.all([n.e(5530),n.e(1306)]).then(n.bind(n,43377)),"component")});var eB=n(44625);let eG=(0,et.WK)("/_authenticated/usage-logs/")({beforeLoad:()=>{throw(0,q.V2)({to:"/usage-logs/$section",params:{section:eB.Ck}})}}),ez=(0,et.WK)("/_authenticated/system-settings/")({beforeLoad:()=>{throw(0,q.V2)({to:"/system-settings/site"})}}),eK=(0,et.WK)("/_authenticated/subscriptions/")({beforeLoad:()=>{let{auth:e}=m.n.getState();if(!e.user||e.user.role<eO.z7.ADMIN)throw(0,q.V2)({to:"/403"})},component:(0,ee.Z)(()=>n.e(890).then(n.bind(n,88065)),"component")});var eW=n(64294);let eJ=ec.Ik({page:ec.ai().optional().catch(1),pageSize:ec.ai().optional().catch(10),filter:ec.Yj().optional().catch(""),status:ec.YO(ec.k5(eW.Ox)).optional().catch([])}),eV=(0,et.WK)("/_authenticated/redemption-codes/")({beforeLoad:()=>{let{auth:e}=m.n.getState();if(!e.user||e.user.role<eO.z7.ADMIN)throw(0,q.V2)({to:"/403"})},validateSearch:eJ,component:(0,ee.Z)(()=>n.e(2976).then(n.bind(n,33763)),"component")}),eH=(0,et.WK)("/_authenticated/profile/")({component:(0,ee.Z)(()=>Promise.all([n.e(8984),n.e(5530),n.e(7675),n.e(4708),n.e(5575),n.e(6247)]).then(n.bind(n,89018)),"component")}),e$=(0,et.WK)("/_authenticated/playground/")({beforeLoad:()=>
107{if(!(0,ed.QT)("chat","playground"))throw(0,q.V2)({to:"/dashboard"})},component:(0,ee.Z)(()=>Promise.all([n.e(9364),n.e(3153),n.e(677)]).then(n.bind(n,96548)),"component")});var eQ=n(32714);let eY=(0,et.WK)("/_authenticated/models/")({beforeLoad:()=>{let{auth:e}=m.n.getState();if(!e.user||e.user.role<eO.z7.ADMIN)throw(0,q.V2)({to:"/403"});throw(0,q.V2)({to:"/models/$section",params:{section:eQ.Fi}})}});var eX=n(55936);let eZ=ec.Ik({page:ec.ai().optional().catch(1),pageSize:ec.ai().optional().catch(void 0),status:ec.YO(ec.k5(eX.F7.map(e=>e.value))).optional().catch([]),filter:ec.Yj().optional().catch(""),token:ec.Yj().optional().catch("")}),e0=(0,et.WK)("/_authenticated/keys/")({validateSearch:eZ,component:(0,ee.Z)(()=>Promise.all([n.e(8984),n.e(5260),n.e(8830)]).then(n.bind(n,40269)),"component")});var e1=n(88646);let e2=(0,et.WK)("/_authenticated/dashboard/")({beforeLoad:()=>{throw(0,q.V2)({to:"/dashboard/$section",params:{section:e1.$F}})}}),e5=ec.Ik({page:ec.ai().optional().catch(1),pageSize:ec.ai().optional().catch(void 0),filter:ec.Yj().optional().catch(""),status:ec.YO(ec.Yj()).optional().catch([]),type:ec.YO(ec.Yj()).optional().catch([]),group:ec.YO(ec.Yj()).optional().catch([]),model:ec.Yj().optional().catch("")}),e4=(0,et.WK)("/_authenticated/channels/")({beforeLoad:()=>{let{auth:e}=m.n.getState();if(!e.user||e.user.role<eO.z7.ADMIN)throw(0,q.V2)({to:"/403"})},validateSearch:e5,component:(0,ee.Z)(()=>Promise.all([n.e(5272),n.e(310),n.e(5260),n.e(5575),n.e(218),n.e(2223)]).then(n.bind(n,38540)),"component")}),e3=ec.vk(e=>{if(null!=e&&""!==e)return Array.isArray(e)?e:[e]},ec.YO(ec.k5(["0","1","2","3","4","5","6"])).optional()).catch([]),e6=ec.Ik({page:ec.ai().optional().catch(1),pageSize:ec.ai().optional().catch(void 0),type:e3.optional(),filter:ec.Yj().optional().catch(""),model:ec.Yj().optional().catch(""),token:ec.Yj().optional().catch(""),channel:ec.Yj().optional().catch(""),group:ec.Yj().optional().catch(""),username:ec.Yj().optional().catch(""),requestId:ec.Yj().optional().catch(""),upstreamRequestId:ec.Yj().optional().catch(""),startTime:ec.ai().optional(),endTime:ec.ai().optional()}),e8=(0,et.WK)("/_authenticated/usage-logs/$section")({beforeLoad:e=>{let{params:t,search:n}=e;if(!(0,eB.Dk)(t.section))throw(0,q.V2)({to:"/usage-logs/$section",params:{section:eB.Ck}});let a=Array.isArray(n?.type)?n.type.length>0:n?.type!=null&&""!==n.type;if("common"!==t.section&&a)throw(0,q.V2)({to:"/usage-logs/$section",params:{section:t.section},search:{...n,type:void 0},replace:!0})},validateSearch:e6,component:(0,ee.Z)(()=>Promise.all([n.e(9110),n.e(5272),n.e(310),n.e(9364),n.e(2748),n.e(8368)]).then(n.bind(n,87545)),"component")}),e7=ec.Ik({page:ec.ai().optional().catch(1),pageSize:ec.ai().optional().catch(10),filter:ec.Yj().optional().catch(""),vendor:ec.YO(ec.Yj()).optional().catch([]),status:ec.YO(ec.Yj()).optional().catch([]),sync:ec.YO(ec.Yj()).optional().catch([]),dPage:ec.ai().optional().catch(1),dPageSize:ec.ai().optional().catch(10),dFilter:ec.Yj().optional().catch(""),dStatus:ec.YO(ec.Yj()).optional().catch([])}),e9=(0,et.WK)("/_authenticated/models/$section")({beforeLoad:e=>{let{params:t}=e,{auth:n}=m.n.getState();if(!n.user||n.user.role<eO.z7.ADMIN)throw(0,q.V2)({to:"/403"});if(!eQ.ev.includes(t.section))throw(0,q.V2)({to:"/models/$section",params:{section:eQ.Fi}})},validateSearch:e7,component:(0,ee.Z)(()=>Promise.all([n.e(8984),n.e(5272),n.e(310),n.e(5260),n.e(218),n.e(2884)]).then(n.bind(n,69007)),"component")});var te=n(20628);let tt=(0,et.WK)("/_authenticated/dashboard/$section")({beforeLoad:e=>{let{params:t}=e;if(!e1.qB.includes(t.section))throw(0,q.V2)({to:"/dashboard/$section",params:{section:e1.$F}})},component:(0,ee.Z)(()=>n.e(8345).then(n.bind(n,17568)),"component")});var tn=n(93074);let ta=(0,et.WK)("/(auth)/user/reset")({component:(0,ee.Z)(()=>n.e(722).then(n.bind(n,22585)),"component")});var ti=n(63317);let to=(0,et.WK)("/_authenticated/system-settings/site/")({beforeLoad:()=>{throw(0,q.V2)({to:"/system-settings/site/$section",params:{section:ti.O0}})}});var tr=n(22722);let ts=(0,et.WK)("/_authenticated/system-settings/security/")({beforeLoad:()=>{throw(0,q.V2)({to:"/system-settings/security/$section",params:{section:tr.r1}})}});var tl=n(13830);let tc=(0,et.WK)("/_authenticated/system-settings/operations/")({beforeLoad:()=>{throw(0,q.V2)({to:"/system-settings/operations/$section",params:{section:tl.Tn}})}});var td=n(60414);let tu=(0,et.WK)("/_authenticated/system-settings/models/")({beforeLoad:()=>{throw(0,q.V2)({to:"/system-settings/models/$section",params:{section:td.Fi}})}});var th=n(8876);let tp=(0,et.WK)("/_authenticated/system-settings/content/")({beforeLoad:()=>{throw(0,q.V2)({to:"/system-settings/content/$section",params:{section:th.Ku}})}});var tm=n(92625);let tg=(0,et.WK)("/_authenticated/system-settings/billing/")({beforeLoad:()=>{throw(0,q.V2)({to:"/system-settings/billing/$section",params:{section:tm.Is}})}});var tf=n(20176);let ty=(0,et.WK)("/_authenticated/system-settings/auth/")({beforeLoad:()=>{throw(0,q.V2)({to:"/system-settings/auth/$section",params:{section:tf.t0}})}}),tb=(0,et.WK)("/_authenticated/system-settings/site/$section")({beforeLoad:e=>{let{params:t}=e;if(!ti.$K.includes(t.section))throw(0,q.V2)({to:"/system-settings/site/$section",params:{section:ti.O0}})},component:(0,ee.Z)(()=>n.e(5665).then(n.bind(n,76424)),"component")}),tv=(0,et.WK)("/_authenticated/system-settings/security/$section")({beforeLoad:e=>{let{params:t}=e;if(!tr._f.includes(t.section))throw(0,q.V2)({to:"/system-settings/security/$section",params:{section:tr.r1}})},component:(0,ee.Z)(()=>n.e(9219).then(n.bind(n,87982)),"component")}),tx=(0,et.WK)("/_authenticated/system-settings/operations/$section")({beforeLoad:e=>{let{params:t}=e;if(!tl.UK.includes(t.section))throw(0,q.V2)({to:"/system-settings/operations/$section",params:{section:tl.Tn}})},component:(0,ee.Z)(()=>n.e(2036).then(n.bind(n,77423)),"component")}),tk=(0,et.WK)("/_authenticated/system-settings/models/$section")({beforeLoad:e=>{let{params:t}=e;if(!td.ev.includes(t.section))throw(0,q.V2)({to:"/system-settings/models/$section",params:{section:td.Fi}})},component:(0,ee.Z)(()=>n.e(4438).then(n.bind(n,75413)),"component")}),tC=(0,et.WK)("/_authenticated/system-settings/content/$section")({beforeLoad:e=>{let{params:t}=e;if(!th.PS.includes(t.section))throw(0,q.V2)({to:"/system-settings/content/$section",params:{section:th.Ku}})},component:(0,ee.Z)(()=>n.e(3059).then(n.bind(n,90398)),"component")}),tS=(0,et.WK)("/_authenticated/system-settings/billing/$section")({beforeLoad:e=>{let{params:t}=e;if(!tm.dK.includes(t.section))throw(0,q.V2)({to:"/system-settings/billing/$section",params:{section:tm.Is}})},component:(0,ee.Z)(()=>
107n.e(4141).then(n.bind(n,6460)),"component")}),tw=(0,et.WK)("/_authenticated/system-settings/auth/$section")({beforeLoad:e=>{let{params:t}=e;if(!tf.aj.includes(t.section))throw(0,q.V2)({to:"/system-settings/auth/$section",params:{section:tf.t0}})},component:(0,ee.Z)(()=>n.e(3595).then(n.bind(n,26486)),"component")}),tA=en.update({id:"/user-agreement",path:"/user-agreement",getParentRoute:()=>Z}),tP=ea.update({id:"/privacy-policy",path:"/privacy-policy",getParentRoute:()=>Z}),tj=eo.update({id:"/_authenticated",getParentRoute:()=>Z}),tN=er.update({id:"/(auth)",getParentRoute:()=>Z}),tI=es.update({id:"/",path:"/",getParentRoute:()=>Z}),tR=el.update({id:"/setup/",path:"/setup/",getParentRoute:()=>Z}),tT=eh.update({id:"/rankings/",path:"/rankings/",getParentRoute:()=>Z}),tM=em.update({id:"/pricing/",path:"/pricing/",getParentRoute:()=>Z}),tD=eg.update({id:"/about/",path:"/about/",getParentRoute:()=>Z}),tO=ef.update({id:"/oauth/$provider",path:"/oauth/$provider",getParentRoute:()=>Z}),tL=eb.update({id:"/console/topup",path:"/console/topup",getParentRoute:()=>Z}),tE=ev.update({id:"/console/log",path:"/console/log",getParentRoute:()=>Z}),tU=ex.update({id:"/chat2link",path:"/chat2link",getParentRoute:()=>tj}),tq=ek.update({id:"/(errors)/503",path:"/503",getParentRoute:()=>Z}),tF=eC.update({id:"/(errors)/500",path:"/500",getParentRoute:()=>Z}),t_=eS.update({id:"/(errors)/404",path:"/404",getParentRoute:()=>Z}),tB=ew.update({id:"/(errors)/403",path:"/403",getParentRoute:()=>Z}),tG=eA.update({id:"/(errors)/401",path:"/401",getParentRoute:()=>Z}),tz=eP.update({id:"/sign-up",path:"/sign-up",getParentRoute:()=>tN}),tK=eN.update({id:"/sign-in",path:"/sign-in",getParentRoute:()=>tN}),tW=eI.update({id:"/reset",path:"/reset",getParentRoute:()=>tN}),tJ=eR.update({id:"/register",path:"/register",getParentRoute:()=>tN}),tV=eT.update({id:"/otp",path:"/otp",getParentRoute:()=>tN}),tH=eM.update({id:"/oauth",path:"/oauth",getParentRoute:()=>tN}),t$=eD.update({id:"/forgot-password",path:"/forgot-password",getParentRoute:()=>tN}),tQ=eL.update({id:"/system-settings",path:"/system-settings",getParentRoute:()=>tj}),tY=eU.update({id:"/pricing/$modelId/",path:"/pricing/$modelId/",getParentRoute:()=>Z}),tX=eq.q.update({id:"/wallet/",path:"/wallet/",getParentRoute:()=>tj}),tZ=e_.update({id:"/users/",path:"/users/",getParentRoute:()=>tj}),t0=eG.update({id:"/usage-logs/",path:"/usage-logs/",getParentRoute:()=>tj}),t1=ez.update({id:"/",path:"/",getParentRoute:()=>tQ}),t2=eK.update({id:"/subscriptions/",path:"/subscriptions/",getParentRoute:()=>tj}),t5=eV.update({id:"/redemption-codes/",path:"/redemption-codes/",getParentRoute:()=>tj}),t4=eH.update({id:"/profile/",path:"/profile/",getParentRoute:()=>tj}),t3=e$.update({id:"/playground/",path:"/playground/",getParentRoute:()=>tj}),t6=eY.update({id:"/models/",path:"/models/",getParentRoute:()=>tj}),t8=e0.update({id:"/keys/",path:"/keys/",getParentRoute:()=>tj}),t7=e2.update({id:"/dashboard/",path:"/dashboard/",getParentRoute:()=>tj}),t9=e4.update({id:"/channels/",path:"/channels/",getParentRoute:()=>tj}),ne=e8.update({id:"/usage-logs/$section",path:"/usage-logs/$section",getParentRoute:()=>tj}),nt=e9.update({id:"/models/$section",path:"/models/$section",getParentRoute:()=>tj}),nn=te.q.update({id:"/errors/$error",path:"/errors/$error",getParentRoute:()=>tj}),na=tt.update({id:"/dashboard/$section",path:"/dashboard/$section",getParentRoute:()=>tj}),ni=tn.q.update({id:"/chat/$chatId",path:"/chat/$chatId",getParentRoute:()=>tj}),no=ta.update({id:"/user/reset",path:"/user/reset",getParentRoute:()=>tN}),nr=to.update({id:"/site/",path:"/site/",getParentRoute:()=>tQ}),ns=ts.update({id:"/security/",path:"/security/",getParentRoute:()=>tQ}),nl=tc.update({id:"/operations/",path:"/operations/",getParentRoute:()=>tQ}),nc=tu.update({id:"/models/",path:"/models/",getParentRoute:()=>tQ}),nd=tp.update({id:"/content/",path:"/content/",getParentRoute:()=>tQ}),nu=tg.update({id:"/billing/",path:"/billing/",getParentRoute:()=>tQ}),nh=ty.update({id:"/auth/",path:"/auth/",getParentRoute:()=>tQ}),np=tb.update({id:"/site/$section",path:"/site/$section",getParentRoute:()=>tQ}),nm=tv.update({id:"/security/$section",path:"/security/$section",getParentRoute:()=>tQ}),ng=tx.update({id:"/operations/$section",path:"/operations/$section",getParentRoute:()=>tQ}),nf=tk.update({id:"/models/$section",path:"/models/$section",getParentRoute:()=>tQ}
107),ny=tC.update({id:"/content/$section",path:"/content/$section",getParentRoute:()=>tQ}),nb=tS.update({id:"/billing/$section",path:"/billing/$section",getParentRoute:()=>tQ}),nv=tw.update({id:"/auth/$section",path:"/auth/$section",getParentRoute:()=>tQ}),nx=tN._addFileChildren({authForgotPasswordRoute:t$,authOauthRoute:tH,authOtpRoute:tV,authRegisterRoute:tJ,authResetRoute:tW,authSignInRoute:tK,authSignUpRoute:tz,authUserResetRoute:no}),nk=tQ._addFileChildren({AuthenticatedSystemSettingsIndexRoute:t1,AuthenticatedSystemSettingsAuthSectionRoute:nv,AuthenticatedSystemSettingsBillingSectionRoute:nb,AuthenticatedSystemSettingsContentSectionRoute:ny,AuthenticatedSystemSettingsModelsSectionRoute:nf,AuthenticatedSystemSettingsOperationsSectionRoute:ng,AuthenticatedSystemSettingsSecuritySectionRoute:nm,AuthenticatedSystemSettingsSiteSectionRoute:np,AuthenticatedSystemSettingsAuthIndexRoute:nh,AuthenticatedSystemSettingsBillingIndexRoute:nu,AuthenticatedSystemSettingsContentIndexRoute:nd,AuthenticatedSystemSettingsModelsIndexRoute:nc,AuthenticatedSystemSettingsOperationsIndexRoute:nl,AuthenticatedSystemSettingsSecurityIndexRoute:ns,AuthenticatedSystemSettingsSiteIndexRoute:nr}),nC=tj._addFileChildren({AuthenticatedSystemSettingsRouteRoute:nk,AuthenticatedChat2linkRoute:tU,AuthenticatedChatChatIdRoute:ni,AuthenticatedDashboardSectionRoute:na,AuthenticatedErrorsErrorRoute:nn,AuthenticatedModelsSectionRoute:nt,AuthenticatedUsageLogsSectionRoute:ne,AuthenticatedChannelsIndexRoute:t9,AuthenticatedDashboardIndexRoute:t7,AuthenticatedKeysIndexRoute:t8,AuthenticatedModelsIndexRoute:t6,AuthenticatedPlaygroundIndexRoute:t3,AuthenticatedProfileIndexRoute:t4,AuthenticatedRedemptionCodesIndexRoute:t5,AuthenticatedSubscriptionsIndexRoute:t2,AuthenticatedUsageLogsIndexRoute:t0,AuthenticatedUsersIndexRoute:tZ,AuthenticatedWalletIndexRoute:tX}),nS=Z._addFileChildren({IndexRoute:tI,authRouteRoute:nx,AuthenticatedRouteRoute:nC,PrivacyPolicyRoute:tP,UserAgreementRoute:tA,errors401Route:tG,errors403Route:tB,errors404Route:t_,errors500Route:tF,errors503Route:tq,ConsoleLogRoute:tE,ConsoleTopupRoute:tL,OauthProviderRoute:tO,AboutIndexRoute:tD,PricingIndexRoute:tM,RankingsIndexRoute:tT,SetupIndexRoute:tR,PricingModelIdIndexRoute:tY})._addFileTypes();!function(){if("u">typeof window)try{if(window.localStorage.getItem(x)===v)return;(function(){let e=[];for(let t=0;t<window.localStorage.length;t+=1){let n=window.localStorage.key(t);n&&!k.has(n)&&e.push(n)}e.forEach(e=>window.localStorage.removeItem(e))})(),window.localStorage.setItem(x,v)}catch{}}(),function(){let e,t;if(y||"u"<typeof window||"u"<typeof document)return;y=!0;let n=(t=(e=function(){try{let e;if("string"==typeof e&&e.length>0)return e}catch{}}())&&e.length>0?e:"0000",`rv.${t}.${f}`),a=Object.freeze({rev:n,ch:f,at:Date.now()});try{Object.defineProperty(window,"__APP_BUILD__",{value:a,writable:!1,configurable:!1,enumerable:!1})}catch{}try{let e=document.documentElement;e.hasAttribute("data-build-rev")||e.setAttribute("data-build-rev",n),e.hasAttribute("data-app-channel")||e.setAttribute("data-app-channel",f)}catch{}try{document.documentElement.style.setProperty("--app-build-rev",`'${n}'`)}catch{}try{let e=document.querySelector('meta[name="build-id"]');e||((e=document.createElement("meta")).setAttribute("name","build-id"),document.head.appendChild(e)),e.setAttribute("content",n)}catch{}try{window.localStorage.setItem("app:rev",n)}catch{}try{console.debug("[build] %s",n)}catch{}}();let nw=new s.E({defaultOptions:{queries:{retry:(e,t)=>!(e>3)&&!(t instanceof r.pe&&[401,403].includes(t.response?.status??0)),refetchOnWindowFocus:!0,staleTime:1e4},mutations:{onError:e=>{let t;t=h.Ay.t("Something went wrong!"),e&&"object"==typeof e&&"status"in e&&204===Number(e.status)&&(t=h.Ay.t("Content not found.")),e instanceof r.pe&&(t=e.response?.data.title),p.oR.error(t),e instanceof r.pe&&e.response?.status===304&&p.oR.error(h.Ay.t("Content not modified!"))}}},queryCache:new l.$({onError:e=>{if(e instanceof r.pe){if(e.response?.status===401){p.oR.error(h.Ay.t("Session expired!")),m.n.getState().auth.reset();let e=`${nA.history.location.href}`;nA.navigate({to:"/sign-in",search:{redirect:e}})}e.response?.status===500&&(p.oR.error(h.Ay.t("Internal Server Error!")),nA.navigate({to:"/500"}))}}})}),nA=(0,d.a)({routeTree:nS,context:{queryClient:nw},defaultPreload:"intent",defaultPreloadStaleTime:0}),nP=document.getElementById("root");!function(){try{if("u"<typeof window||"u"<typeof document)return;let e=e=>{document.title=e;let t=document.querySelector('meta[name="title"]');t&&t.setAttribute("content",e)};try{let t=localStorage.getItem("status");if(t){let n=JSON.parse(t);n?.system_name&&e(n.system_name),n?.logo&&(0,b.K)(n.logo)}}catch{}(0,g.BS)().then(t=>{if(t?.system_name){e(t.system_name);try{localStorage.setItem("status",JSON.stringify(t))}catch{}}t?.logo&&(0,b.K)(t.logo)}).catch(()=>{})}catch{}}
107(),nP.innerHTML||o.createRoot(nP).render((0,a.jsx)(i.StrictMode,{children:(0,a.jsx)(c.Ht,{client:nw,children:(0,a.jsx)(j.N,{children:(0,a.jsx)(function(e){let{children:t}=e,[n,o]=(0,i.useState)(()=>{let e=(0,w.Ri)(A);return S.includes(e)?e:S["0"]});return(0,i.useEffect)(()=>{let e;(e=document.documentElement).classList.forEach(t=>{t.startsWith("font-")&&e.classList.remove(t)}),e.classList.add(`font-${n}`)},[n]),(0,a.jsx)(P,{value:{font:n,setFont:e=>{(0,w.TV)(A,e,31536e3),o(e)},resetFont:()=>{(0,w.zs)(A),o(S["0"])}},children:t})},{children:(0,a.jsx)(C.F,{children:(0,a.jsx)(u.p,{router:nA})})})})})}))},93074(e,t,n){var a=n(221),i=n(23200),o=n(78157);let r=(0,i.WK)("/_authenticated/chat/$chatId")({loader:async e=>{let{params:t}=e;if(!Number.isInteger(Number(t.chatId)))throw(0,o.V2)({to:"/dashboard"})},component:(0,a.Z)(()=>n.e(7505).then(n.bind(n,18184)),"component")});n.d(t,{},{q:r})},20628(e,t,n){var a=n(221);let i=(0,n(23200).WK)("/_authenticated/errors/$error")({component:(0,a.Z)(()=>n.e(8034).then(n.bind(n,67801)),"component")});n.d(t,{},{q:i})},55286(e,t,n){var a=n(221),i=n(66586),o=n(23200);let r=i.Ik({show_history:i.zM().optional()}),s=(0,o.WK)("/_authenticated/wallet/")({component:(0,a.Z)(()=>Promise.all([n.e(5530),n.e(9125)]).then(n.bind(n,47444)),"component"),validateSearch:r});n.d(t,{},{q:s})},1855(e,t,n){let a=(0,n(20428).v)()(e=>({auth:{user:(()=>{try{if("u">typeof window){let e=window.localStorage.getItem("user");return e?JSON.parse(e):null}}catch{"u">typeof window&&window.localStorage.removeItem("user")}return null})(),setUser:t=>e(e=>("u">typeof window&&(t?window.localStorage.setItem("user",JSON.stringify(t)):window.localStorage.removeItem("user")),{...e,auth:{...e.auth,user:t}})),reset:()=>e(e=>("u">typeof window&&window.localStorage.removeItem("user"),{...e,auth:{...e.auth,user:null}}))}}));n.d(t,{},{n:a})},89131(e,t,n){var a=n(20428),i=n(96573),o=n(7411);let r={displayInCurrency:!0,quotaDisplayType:"USD",quotaPerUnit:5e5,usdExchangeRate:1,customCurrencySymbol:"¤",customCurrencyExchangeRate:1},s=(0,a.v)()((0,i.Zr)(e=>({config:{systemName:o.It,logo:o.Gs,currency:{...r}},loading:!0,loadedLogoUrl:o.Gs,setConfig:t=>e(e=>({config:{...e.config,...t,currency:{...e.config.currency,...t.currency??{}}}})),setLoadedLogoUrl:t=>e({loadedLogoUrl:t}),setLoading:t=>e({loading:t})}),{name:"system-config-storage",partialize:e=>({config:e.config,loadedLogoUrl:e.loadedLogoUrl})}));n.d(t,{},{Eh:s,tV:r})}},l={};function c(e){var t=l[e];if(void 0!==t)return t.exports;var n=l[e]={exports:{}};return s[e].call(n.exports,n,n.exports,c),n.exports}c.m=s,c.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return c.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,c.t=function(n,a){if(1&a&&(n=this(n)),8&a||"object"==typeof n&&n&&(4&a&&n.__esModule||16&a&&"function"==typeof n.then))return n;var i=Object.create(null);c.r(i);var o={};e=e||[null,t({}),t([]),t(t)];for(var r=2&a&&n;("object"==typeof r||"function"==typeof r)&&!~e.indexOf(r);r=t(r))Object.getOwnPropertyNames(r).forEach(e=>{o[e]=()=>n[e]});return o.default=()=>n,c.d(i,o),i},c.d=(e,t,n)=>{var a=(t,n)=>{for(var a in t)c.o(t,a)&&!c.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,[n]:t[a]})};a(t,"get"),a(n,"value")},c.f={},c.e=e=>Promise.all(Object.keys(c.f).reduce((t,n)=>(c.f[n](e,t),t),[])),c.u=e=>"static/js/async/"+e+"."+({1015:"07715b0dc2",1200:"553cb3e3e0",1306:"dae0aae81c",1309:"55326bc460",1420:"faffce013b",1432:"c9e0cb865a",1443:"6a634650ed",1468:"70b4d59e94",1556:"89c3de4549",1565:"07eb12269d",1603:"ee7a602087",1633:"c93db186f7",169:"ed614b1af2",1696:"8cc6e1b3b9",1704:"27c8c1e589",1810:"4c347af313",1824:"32df69f18a",2036:"42e7569946",2044:"59040d6498",2094:"6a3cb806c1",2139:"32c15accaf",218:"4f694129c5",2223:"ffc8cfdafe",2228:"d4913f274f",2238:"2e4ffa1e8b",2384:"ea92c5ebc8",2472:"cf7930d0ee",254:"720f8f1922",2590:"5732bfd600",2613:"c3dfecc300",2674:"d7db1c61df",2692:"aa992e01b4",2707:"0ac34c1f85",2734:"e4457d701e",2748:"f36bc5f21c",2877:"451350cd51",2884:"fc8797100a",2976:"812c5d7719",3013:"dfc4019557",3059:"697f00405e",310:"a68cb883f1",3136:"f0fe104c00",3153:"d52e8492a2",3258:"f6404f2d8d",3494:"6d8b190a60",3524:"5b7c9fea21",3551:"f61e9afca5",3582:"4c3c65df0f",3595:"5d35e8bde7",3597:"1f0a32d10c",3683:"206468f6b6",3755:"c35b6c6c12",3854:"bbea3a0519",3870:"bade8a2e57",3911:"801bb0beca",3995:"077b7b8f70",4001:"3d30a204a2",4124:"204e72aebd",4132:"e4146ad80d",4141:"4bfc5523c8",4148:"bf7b0cd862",417:"dfb515ae9d",4206:"0d714ef552",4347:"fc331ee24e",4357:"df3a878211",4438:"3324ad8277",4441:"604ccb0f5e",445:"9c3aed59e8",4474:"6f2e8ce028",4476:"edfb3abf84",4501:"3f117372af",4708:"cb66658061",4727:"11e6830c04",482:"d6c60ad533",4854:"44a1a19677",5046:"98c03f668d",5067:"9eb82c2b39",5143:"4289678e9c",5160:"f92960afc7",5185:"b7ba5ce9a9",5189:"62d2f7ee65",5231:"60b1b8855f",5260:"64cfe15fd5",5272:"7fb987a674",537:"f9c5758028",5394:"3d7839ccbd",5430:"5de536f053",5530:"5996f5ecd9",5536:"1928c4d9ec",5
107575:"ca2ce86d4a",5605:"f5f2a9231f",5609:"d4264a51dd",5662:"d9e52dd48f",5665:"0b1a9345ab",5711:"ccede1b127",5716:"41149c6ea4",5774:"4570100fce",5782:"09814b2f5c",5904:"9f3d663643",5923:"b2cb9d3627",5989:"aa97b95ab6",599:"958255b06e",6023:"018901ca94",6124:"ac297ddcbd",6138:"0b0dc00cdc",6156:"49fdb0f109",62:"d65655ebd8",6225:"0496fd690a",6226:"ca776670f6",6247:"f8c598260d",6273:"fa19adbbd2",6371:"f08dd0d605",6410:"e2d6149761",6517:"22810e6de0",6531:"2e623e111d",6562:"f30a5108fb",6563:"a08c52dc0a",6713:"a0ace6784e",6717:"3a7e6b1ab1",677:"2b8ae3765f",6807:"d16210cd0f",6813:"fd38234a57",7015:"7ca7cd8abe",7047:"8804b60d1c",705:"e1e7457779",7086:"ff325562de",7122:"c30fda0e93",7128:"bd02a1ace9",7159:"315bdaa429",7163:"802a7674ad",722:"675ee2cb03",725:"aff535e2d2",7288:"75afc6d92a",7294:"57f41235dc",7393:"e1b0da7abe",7505:"dccb2dc6ed",7570:"6d949b92d3",763:"b900003bdd",7646:"a30662804b",7659:"433ac387bc",7664:"d17850341d",7675:"e7ed75dc12",7717:"873eafc26a",7758:"c97575d600",7767:"73f173e51c",7793:"c256f992e1",7836:"d6019c99f5",7890:"f558a81cfa",7990:"c4127e3961",8018:"a99f7dd030",8034:"06cf93aa3e",8078:"fa3257699f",8088:"636936c57b",81:"c92d404e4c",8233:"35d01db544",8235:"0f60b3cedb",8236:"83373d1976",8248:"567a226d9c",8272:"f603746c3a",8345:"9d8c657606",8368:"1df59bbb29",8458:"0e6eef2b04",8513:"6732a1d7ac",8624:"2f39ba94ff",8704:"15c5c2d96f",8753:"d696204736",8830:"19fc176384",8840:"b530933471",890:"5db72150df",8947:"849193493e",8994:"1217d3c84d",9016:"59a0f256d0",9059:"e4adc7ccfe",9115:"722bd97022",9118:"5c74903cea",9125:"ac462b4878",9180:"4d4c9bb0e9",9188:"18aa4c25d1",9219:"f4a14284a1",9364:"da6e0f2e1b",9379:"8c5d5ee34d",9475:"739cf27304",9582:"65fc86f0e6",9668:"9cb478f566",9707:"fca537bb10",9775:"a45aba7098",9847:"1d925e995b",9948:"7ea1756244"})[e]+".js",c.miniCssF=e=>""+e+".css",c.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}})(),c.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},c.l=function(e,t,a,i){if(n[e])return void n[e].push(t);if(void 0!==a)for(var o,r,s=document.getElementsByTagName("script"),l=0;l<s.length;l++){var d=s[l];if(d.getAttribute("src")==e||d.getAttribute("data-rspack")=="newapi-web:"+a){o=d;break}}o||(r=!0,(o=document.createElement("script")).timeout=120,c.nc&&o.setAttribute("nonce",c.nc),o.setAttribute("data-rspack","newapi-web:"+a),o.src=e),n[e]=[t];var u=function(t,a){o.onerror=o.onload=null,clearTimeout(h);var i=n[e];if(delete n[e],o.parentNode&&o.parentNode.removeChild(o),i&&i.forEach(function(e){return e(a)}),t)return t(a)},h=setTimeout(u.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=u.bind(null,o.onerror),o.onload=u.bind(null,o.onload),r&&document.head.appendChild(o)},c.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.nc=void 0,a=[],c.O=(e,t,n,i)=>{if(t){i=i||0;for(var o=a.length;o>0&&a[o-1][2]>i;o--)a[o]=a[o-1];a[o]=[t,n,i];return}for(var r=1/0,o=0;o<a.length;o++){for(var[t,n,i]=a[o],s=!0,l=0;l<t.length;l++)(!1&i||r>=i)&&Object.keys(c.O).every(e=>c.O[e](t[l]))?t.splice(l--,1):(s=!1,i<r&&(r=i));if(s){a.splice(o--,1);var d=n();void 0!==d&&(e=d)}}return e},c.p="/",i={8410:0},c.f.j=function(e,t){var n=c.o(i,e)?i[e]:void 0;if(0!==n)if(n)t.push(n[2]);else{var a=new Promise((t,a)=>n=i[e]=[t,a]);t.push(n[2]=a);var o=c.p+c.u(e),r=Error();c.l(o,function(t){if(c.o(i,e)&&(0!==(n=i[e])&&(i[e]=void 0),n)){var a=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;r.message="Loading chunk "+e+" failed.\n("+a+": "+o+")",r.name="ChunkLoadError",r.type=a,r.request=o,n[1](r)}},"chunk-"+e,e)}},c.O.j=e=>0===i[e],o=(e,t)=>{var n,a,[o,r,s]=t,l=0;if(o.some(e=>0!==i[e])){for(n in r)c.o(r,n)&&(c.m[n]=r[n]);if(s)var d=s(c)}for(e&&e(t);l<o.length;l++)a=o[l],c.o(i,a)&&i[a]&&i[a][0](),i[a]=0;return c.O(d)},(r=self.rspackChunknewapi_web=self.rspackChunknewapi_web||[]).forEach(o.bind(null,0)),r.push=o.bind(null,r.push.bind(r));var d=c.O(void 0,["8984","9110","9783","558"],()=>c(87432));d=c.O(d)})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.