From b3c7f1f8ccbf118aa3db278c2f71b61f6442e588 Mon Sep 17 00:00:00 2001 From: zhengkunwang223 <1paneldev@sina.com> Date: Tue, 11 Aug 2026 13:53:41 +0800 Subject: [PATCH] chore: Update dependencies --- agent/app/service/app_upgrade.go | 1 - agent/go.mod | 4 +- agent/go.sum | 8 ++-- core/constant/common.go | 1 + core/go.mod | 2 +- core/go.sum | 4 +- frontend/package-lock.json | 66 ++++++++++++++-------------- frontend/package.json | 8 ++-- frontend/src/lang/modules/en.ts | 31 ++++++++----- frontend/src/lang/modules/es-es.ts | 32 +++++++++----- frontend/src/lang/modules/fa.ts | 30 ++++++++----- frontend/src/lang/modules/ja.ts | 30 ++++++++----- frontend/src/lang/modules/ko.ts | 30 ++++++++----- frontend/src/lang/modules/lo.ts | 29 +++++++----- frontend/src/lang/modules/ms.ts | 30 ++++++++----- frontend/src/lang/modules/pt-br.ts | 31 ++++++++----- frontend/src/lang/modules/ru.ts | 31 ++++++++----- frontend/src/lang/modules/tr.ts | 30 ++++++++----- frontend/src/lang/modules/zh-Hant.ts | 28 ++++++++---- frontend/src/lang/modules/zh.ts | 28 ++++++++---- 20 files changed, 280 insertions(+), 174 deletions(-) diff --git a/agent/app/service/app_upgrade.go b/agent/app/service/app_upgrade.go index 08e9a0aaced1..9046d0acb879 100644 --- a/agent/app/service/app_upgrade.go +++ b/agent/app/service/app_upgrade.go @@ -513,7 +513,6 @@ func (u *appUpgradeContext) applyStagedFiles() error { nginxModuleBuildDir, nginxModuleModulesDir, path.Join(nginxModuleConfDir, nginxModuleEnabledConfDir), - path.Join(nginxModuleConfDir, "nginx.conf"), } { if err := replaceUpgradePath(u.stageDir, u.original.GetPath(), relativePath); err != nil { return err diff --git a/agent/go.mod b/agent/go.mod index 6733e3aafd51..8ccf8e742f50 100644 --- a/agent/go.mod +++ b/agent/go.mod @@ -10,7 +10,7 @@ require ( github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible github.com/compose-spec/compose-go/v2 v2.14.0 github.com/creack/pty v1.1.24 - github.com/docker/cli v29.7.1+incompatible + github.com/docker/cli v29.7.2+incompatible github.com/docker/docker v28.5.2+incompatible github.com/docker/go-connections v0.8.1 github.com/fsnotify/fsnotify v1.10.1 @@ -28,7 +28,7 @@ require ( github.com/jackc/pgx/v5 v5.10.0 github.com/jinzhu/copier v0.4.0 github.com/joho/godotenv v1.5.1 - github.com/klauspost/compress v1.19.1 + github.com/klauspost/compress v1.19.2 github.com/mattn/go-shellwords v1.0.14 github.com/mholt/archiver/v4 v4.0.0-alpha.8 github.com/miekg/dns v1.1.72 diff --git a/agent/go.sum b/agent/go.sum index d340d6a2a337..4ec9a3d31f0e 100644 --- a/agent/go.sum +++ b/agent/go.sum @@ -228,8 +228,8 @@ github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5Qvfr github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/dlclark/regexp2 v1.12.0 h1:0j4c5qQmnC6XOWNjP3PIXURXN2gWx76rd3KvgdPkCz8= github.com/dlclark/regexp2 v1.12.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= -github.com/docker/cli v29.7.1+incompatible h1:ILZpP6B7fedIr6ANy824QkDp1WMJuouIq0O2SrBkB2w= -github.com/docker/cli v29.7.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v29.7.2+incompatible h1:dlkwallR8XqfeVnA2ELEhdwvb4lsSwuB4IgsG8Q9cLY= +github.com/docker/cli v29.7.2+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM= github.com/docker/docker v28.5.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.9.5 h1:EFNN8DHvaiK8zVqFA2DT6BjXE0GzfLOZ38ggPTKePkY= @@ -523,8 +523,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.19.1 h1:VsB4HPswih7mmZ8WleSFQ75c/Ui1M4trX5oAsJnhSlk= -github.com/klauspost/compress v1.19.1/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/klauspost/compress v1.19.2 h1:hMRETovs/pu/dVWN7zIT1PGG8t509MwT6bO7XSi26R8= +github.com/klauspost/compress v1.19.2/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= diff --git a/core/constant/common.go b/core/constant/common.go index 168215c5756e..7385960dc7e3 100644 --- a/core/constant/common.go +++ b/core/constant/common.go @@ -59,6 +59,7 @@ var WebUrlMap = map[string]struct{}{ "/ai": {}, "/ai/ai-proxy": {}, + "/ai/ai-proxy/overview": {}, "/ai/ai-proxy/model-pool": {}, "/ai/ai-proxy/api-keys": {}, "/ai/ai-proxy/groups": {}, diff --git a/core/go.mod b/core/go.mod index 1dc17157e8aa..def5dc59f22c 100644 --- a/core/go.mod +++ b/core/go.mod @@ -29,7 +29,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/pkg/sftp v1.13.11 github.com/robfig/cron/v3 v3.0.1 - github.com/russellhaering/goxmldsig v1.6.0 + github.com/russellhaering/goxmldsig v1.6.1 github.com/shirou/gopsutil/v4 v4.26.7 github.com/sirupsen/logrus v1.9.4 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e diff --git a/core/go.sum b/core/go.sum index 0173d84e9551..accf948bad6e 100644 --- a/core/go.sum +++ b/core/go.sum @@ -234,8 +234,8 @@ github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= -github.com/russellhaering/goxmldsig v1.6.0 h1:8fdWXEPh2k/NZNQBPFNoVfS3JmzS4ZprY/sAOpKQLks= -github.com/russellhaering/goxmldsig v1.6.0/go.mod h1:TrnaquDcYxWXfJrOjeMBTX4mLBeYAqaHEyUeWPxZlBM= +github.com/russellhaering/goxmldsig v1.6.1 h1:SB7R5ttvrGIDB2juJAK/i7DQ2Ivr7agG+ohfNJjwyYU= +github.com/russellhaering/goxmldsig v1.6.1/go.mod h1:haZkRcLs9W/Xp989fIjP3BrTdbFQveRF0QNZSYoH09w= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= github.com/sagikazarmark/locafero v0.12.0 h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88eegjfxfHb4= diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 61ffe7a844f6..62c7a747620c 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -27,11 +27,11 @@ "crypto-js": "^4.2.0", "dompurify": "^3.4.12", "echarts": "^6.1.0", - "element-plus": "2.14.0", + "element-plus": "2.14.3", "js-base64": "^3.9.1", "jsencrypt": "^3.3.2", "lodash-es": "^4.18.1", - "md-editor-v3": "^6.5.4", + "md-editor-v3": "^6.5.5", "monaco-editor": "^0.56.0", "nprogress": "^0.2.0", "pinia": "^3.0.4", @@ -50,7 +50,7 @@ }, "devDependencies": { "@tailwindcss/postcss": "^4.3.3", - "@types/node": "^26.1.1", + "@types/node": "^26.1.2", "@types/uuid": "^11.0.0", "@typescript-eslint/eslint-plugin": "^8.65.0", "@typescript-eslint/parser": "^8.65.0", @@ -68,7 +68,7 @@ "postcss-html": "^2.0.0", "prettier": "^3.9.6", "rollup-plugin-visualizer": "^7.0.1", - "sass": "^1.101.3", + "sass": "^1.102.0", "standard-version": "^9.5.0", "tailwindcss": "^4.3.3", "typescript": "^6.0.3", @@ -1583,28 +1583,28 @@ } }, "node_modules/@floating-ui/core": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", - "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.8.0.tgz", + "integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==", "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.10" + "@floating-ui/utils": "^0.2.12" } }, "node_modules/@floating-ui/dom": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", - "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.8.0.tgz", + "integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==", "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.3", - "@floating-ui/utils": "^0.2.10" + "@floating-ui/core": "^1.8.0", + "@floating-ui/utils": "^0.2.12" } }, "node_modules/@floating-ui/utils": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", - "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.12.tgz", + "integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==", "license": "MIT" }, "node_modules/@humanfs/core": { @@ -3006,9 +3006,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "26.1.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.1.tgz", - "integrity": "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==", + "version": "26.1.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz", + "integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==", "dev": true, "license": "MIT", "peer": true, @@ -5457,14 +5457,14 @@ "license": "ISC" }, "node_modules/element-plus": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.14.0.tgz", - "integrity": "sha512-POgH+TtoreaEKWqYYAVQyE6i8rQMEFqAEublyF29dBA5yASWPLKY6EzfeqBTr2Uv26mPss4vSrMrNPyaK7LX5w==", + "version": "2.14.3", + "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.14.3.tgz", + "integrity": "sha512-pJcvxcpZjYruNzuJhAeVwnbYjfNgzBKnWHwSVEhwzM2/kcLI3brzmtIBxtPqd4hQWJfD1PRnjoc1WipLw2eBGg==", "license": "MIT", "dependencies": { "@ctrl/tinycolor": "^4.2.0", "@element-plus/icons-vue": "^2.3.2", - "@floating-ui/dom": "^1.0.1", + "@floating-ui/dom": "^1.7.6", "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.8", "@types/lodash": "^4.17.24", "@types/lodash-es": "^4.17.12", @@ -5476,7 +5476,7 @@ "lodash-unified": "^1.0.3", "memoize-one": "^6.0.0", "normalize-wheel-es": "^1.2.0", - "vue-component-type-helpers": "^3.2.8" + "vue-component-type-helpers": "^3.3.5" }, "peerDependencies": { "vue": "^3.3.7" @@ -7865,9 +7865,9 @@ } }, "node_modules/md-editor-v3": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/md-editor-v3/-/md-editor-v3-6.5.4.tgz", - "integrity": "sha512-oemxSjh4Da+rFseLYWBlknSfe60eHjHUybj548BZwQZysgtA1u9g+i1drQdbuvEStTN9qZv5rgyEQH71MH/PjA==", + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/md-editor-v3/-/md-editor-v3-6.5.5.tgz", + "integrity": "sha512-XXw3TwLFL9C8f1n9z39dZ7T2aYkHA5Vi7IEB3sbkn+9BSi7xohEcHYMD1zV86fLH2KGKStA453jUZcEmZR3XSg==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.18.7", @@ -9242,9 +9242,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.101.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.101.3.tgz", - "integrity": "sha512-Z1lLHhtAII+dyLNIQB6JQTZMy7sDxk3f5NzbINRc9ks1P0HCGvSuKev0wUhULFpLSaHBIMZrcTs9WDQUZerrgA==", + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.102.0.tgz", + "integrity": "sha512-NSOyTnaQF7rTAEOtI2fwb386vL+akyiQLBZu8Na7hXCb+umJy0GAqlcMIaqACZ6Z1VgTBS4K9PG6B3IdjHGJsw==", "dev": true, "license": "MIT", "peer": true, @@ -10968,9 +10968,9 @@ } }, "node_modules/vue-component-type-helpers": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-3.2.8.tgz", - "integrity": "sha512-9689efAXhN/EV86plgkL/XFiJSXhGtWPG6JDboZ+QnjlUWUUQrQ0ILKQtw4iQsuwIwu5k6Aw+JnehDe7161e7A==", + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-3.3.9.tgz", + "integrity": "sha512-3c/UfMe0SqyEfcGTyH7mfshHagJ9QTCbppCb0/uGpHZpFug7+If3GeGZN7I0YheKEExemx3xldQPoO7PQSOLQg==", "license": "MIT" }, "node_modules/vue-demi": { diff --git a/frontend/package.json b/frontend/package.json index a04c7ee10be6..aa04c3840875 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -38,11 +38,11 @@ "crypto-js": "^4.2.0", "dompurify": "^3.4.12", "echarts": "^6.1.0", - "element-plus": "2.14.0", + "element-plus": "2.14.3", "js-base64": "^3.9.1", "jsencrypt": "^3.3.2", "lodash-es": "^4.18.1", - "md-editor-v3": "^6.5.4", + "md-editor-v3": "^6.5.5", "monaco-editor": "^0.56.0", "nprogress": "^0.2.0", "pinia": "^3.0.4", @@ -61,7 +61,7 @@ }, "devDependencies": { "@tailwindcss/postcss": "^4.3.3", - "@types/node": "^26.1.1", + "@types/node": "^26.1.2", "@types/uuid": "^11.0.0", "@typescript-eslint/eslint-plugin": "^8.65.0", "@typescript-eslint/parser": "^8.65.0", @@ -79,7 +79,7 @@ "postcss-html": "^2.0.0", "prettier": "^3.9.6", "rollup-plugin-visualizer": "^7.0.1", - "sass": "^1.101.3", + "sass": "^1.102.0", "standard-version": "^9.5.0", "tailwindcss": "^4.3.3", "typescript": "^6.0.3", diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 0069310a1dbb..d4d9e5d7bc01 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -1005,7 +1005,6 @@ const message = { failureCount: 'Failures', lastError: 'Last Error', modelMap: 'Model Mapping', - qpsLimit: 'QPS Limit', tokenLimit: 'Token Limit', tokenUsed: 'Used Tokens', tokenRemaining: 'Remaining Tokens', @@ -1030,7 +1029,6 @@ const message = { basicSetting: 'Basic Settings', performanceSetting: 'Performance Settings', logSetting: 'Log Settings', - lbPolicy: 'Load Balancing Policy', protocolConversion: 'Protocol Conversion', protocolConversionDesc: 'Allow supported direct conversion between Chat Completions, Responses, and Anthropic Messages. Native protocols always take priority.', @@ -1049,16 +1047,27 @@ const message = { visionPreprocess: 'Vision Preprocessing', cacheHit: 'Cache Hit', apiType: 'API Type', - lbPolicyRoundRobin: 'Round Robin', - lbPolicyRoundRobinDesc: - 'Select available model accounts in order. Use this when backends have similar capacity.', - lbPolicyWeightedRoundRobin: 'Weighted Round Robin', - lbPolicyWeightedRoundRobinDesc: - 'Distribute requests by model account weight. Higher weight receives more traffic; use this when backend capacity differs.', - lbPolicyFailover: 'Failover', - lbPolicyFailoverDesc: - 'Use the highest-priority model account first, then switch to the next available account after failure or cooldown.', maxConcurrency: 'Max Concurrency', + accountMaxConcurrency: 'Account Max Concurrency', + groupMaxConcurrency: 'User Group Max Concurrency', + apiKeyMaxConcurrency: 'Per-API-Key Max Concurrency', + gatewayConcurrency: 'Gateway Concurrency', + waitingQueue: 'Waiting Queue', + modelAccountConcurrency: 'Model Account Concurrency', + groupConcurrency: 'User Group Concurrency', + apiKeyConcurrency: 'API Key Concurrency', + currentLimit: 'Current / Limit', + utilization: 'Utilization', + autoRefreshSeconds: 'Refreshes every {0}s', + zeroMeansUnlimited: 'Set to 0 for unlimited.', + groupMaxConcurrencyDesc: + 'Limits active requests across all API Keys in this group. Set to 0 for unlimited.', + apiKeyMaxConcurrencyDesc: 'Limits active requests for each API Key in this group. Set to 0 for unlimited.', + schedulingReason: 'Scheduling Reason', + schedulingAffinity: 'Affinity', + schedulingLeastUtilized: 'Least Utilized', + schedulingPriorityFallback: 'Priority Fallback', + schedulingRetry: 'Retry', queueSize: 'Queue Size', queueTimeoutSeconds: 'Queue Wait Timeout (s)', requestTimeoutSeconds: 'Non-stream Request Timeout (s)', diff --git a/frontend/src/lang/modules/es-es.ts b/frontend/src/lang/modules/es-es.ts index e90fb40a2016..6162ba7925bc 100644 --- a/frontend/src/lang/modules/es-es.ts +++ b/frontend/src/lang/modules/es-es.ts @@ -1010,7 +1010,6 @@ const message = { failureCount: 'Fallos', lastError: 'Último error', modelMap: 'Mapeo de modelos', - qpsLimit: 'Límite de QPS', tokenLimit: 'Límite de tokens', tokenUsed: 'Tokens usados', tokenRemaining: 'Tokens restantes', @@ -1034,7 +1033,6 @@ const message = { basicSetting: 'Configuración básica', performanceSetting: 'Configuración de rendimiento', logSetting: 'Configuración de registros', - lbPolicy: 'Estrategia de balanceo', protocolConversion: 'Conversión de protocolo', protocolConversionDesc: 'Permite la conversión directa compatible entre Chat Completions, Responses y Anthropic Messages. Los protocolos nativos siempre tienen prioridad.', @@ -1054,16 +1052,28 @@ const message = { visionPreprocess: 'Preprocesamiento visual', cacheHit: 'Acierto de caché', apiType: 'Tipo de API', - lbPolicyRoundRobin: 'Round Robin', - lbPolicyRoundRobinDesc: - 'Selecciona las cuentas de modelo disponibles en orden. Úselo cuando los backends tengan capacidad similar.', - lbPolicyWeightedRoundRobin: 'Round Robin ponderado', - lbPolicyWeightedRoundRobinDesc: - 'Distribuye solicitudes según el peso de la cuenta de modelo. Un peso mayor recibe más tráfico; úselo cuando la capacidad de los backends sea diferente.', - lbPolicyFailover: 'Conmutación por error', - lbPolicyFailoverDesc: - 'Usa primero la cuenta de modelo con mayor prioridad y cambia a la siguiente disponible tras un fallo o periodo de enfriamiento.', maxConcurrency: 'Concurrencia máxima', + accountMaxConcurrency: 'Concurrencia máxima de la cuenta', + groupMaxConcurrency: 'Concurrencia máxima del grupo de usuarios', + apiKeyMaxConcurrency: 'Concurrencia máxima por API Key', + gatewayConcurrency: 'Concurrencia del gateway', + waitingQueue: 'Cola de espera', + modelAccountConcurrency: 'Concurrencia de cuentas de modelo', + groupConcurrency: 'Concurrencia de grupos de usuarios', + apiKeyConcurrency: 'Concurrencia de API Keys', + currentLimit: 'Actual / Límite', + utilization: 'Utilización', + autoRefreshSeconds: 'Actualización automática cada {0}s', + zeroMeansUnlimited: 'Establezca 0 para no limitar.', + groupMaxConcurrencyDesc: + 'Limita las solicitudes activas de todas las API Keys del grupo. 0 significa sin límite.', + apiKeyMaxConcurrencyDesc: + 'Limita las solicitudes activas de cada API Key del grupo. 0 significa sin límite.', + schedulingReason: 'Motivo de programación', + schedulingAffinity: 'Afinidad', + schedulingLeastUtilized: 'Menor utilización', + schedulingPriorityFallback: 'Fallback de prioridad', + schedulingRetry: 'Reintento', queueSize: 'Tamaño de cola', queueTimeoutSeconds: 'Tiempo de espera en cola (s)', requestTimeoutSeconds: 'Timeout de solicitud no streaming (s)', diff --git a/frontend/src/lang/modules/fa.ts b/frontend/src/lang/modules/fa.ts index c191b326b56c..85a0bd07837c 100644 --- a/frontend/src/lang/modules/fa.ts +++ b/frontend/src/lang/modules/fa.ts @@ -992,7 +992,6 @@ const message = { failureCount: 'تعداد شکست‌ها', lastError: 'آخرین خطا', modelMap: 'نگاشت مدل', - qpsLimit: 'محدودیت QPS', tokenLimit: 'محدودیت توکن', tokenUsed: 'توکن استفاده شده', tokenRemaining: 'توکن باقی‌مانده', @@ -1017,7 +1016,6 @@ const message = { basicSetting: 'تنظیمات پایه', performanceSetting: 'تنظیمات عملکرد', logSetting: 'تنظیمات لاگ', - lbPolicy: 'خط مشی توزیع بار', protocolConversion: 'تبدیل پروتکل', protocolConversionDesc: 'تبدیل مستقیم پشتیبانی‌شده بین Chat Completions، Responses و Anthropic Messages را فعال می‌کند. پروتکل بومی همیشه اولویت دارد.', @@ -1036,16 +1034,26 @@ const message = { visionPreprocess: 'پیش‌پردازش بینایی', cacheHit: 'اصابت حافظه نهان', apiType: 'نوع API', - lbPolicyRoundRobin: 'چرخه‌ای', - lbPolicyRoundRobinDesc: - 'حساب‌های مدل موجود را به ترتیب انتخاب کنید. زمانی استفاده شود که بک‌اندها ظرفیت مشابهی دارند.', - lbPolicyWeightedRoundRobin: 'چرخه‌ای وزنی', - lbPolicyWeightedRoundRobinDesc: - 'درخواست‌ها را بر اساس وزن حساب مدل توزیع کنید. وزن بالاتر ترافیک بیشتری دریافت می‌کند؛ زمانی که ظرفیت بک‌اند متفاوت است استفاده شود.', - lbPolicyFailover: 'خرابی', - lbPolicyFailoverDesc: - 'ابتدا از حساب مدل با بالاترین اولویت استفاده کنید، سپس پس از خرابی یا دوره خنک‌سازی به حساب بعدی موجود تغییر دهید.', maxConcurrency: 'حداکثر هم‌روندی', + accountMaxConcurrency: 'حداکثر هم‌روندی حساب', + groupMaxConcurrency: 'حداکثر هم‌روندی گروه کاربر', + apiKeyMaxConcurrency: 'حداکثر هم‌روندی برای هر API Key', + gatewayConcurrency: 'هم‌روندی دروازه', + waitingQueue: 'صف انتظار', + modelAccountConcurrency: 'هم‌روندی حساب مدل', + groupConcurrency: 'هم‌روندی گروه کاربر', + apiKeyConcurrency: 'هم‌روندی API Key', + currentLimit: 'فعلی / حد', + utilization: 'میزان استفاده', + autoRefreshSeconds: 'به‌روزرسانی خودکار هر {0} ثانیه', + zeroMeansUnlimited: 'برای نامحدود بودن مقدار 0 را تنظیم کنید.', + groupMaxConcurrencyDesc: 'درخواست‌های فعال همه API Keyهای گروه را محدود می‌کند. 0 یعنی نامحدود.', + apiKeyMaxConcurrencyDesc: 'درخواست‌های فعال هر API Key در گروه را محدود می‌کند. 0 یعنی نامحدود.', + schedulingReason: 'دلیل زمان‌بندی', + schedulingAffinity: 'وابستگی', + schedulingLeastUtilized: 'کمترین استفاده', + schedulingPriorityFallback: 'بازگشت اولویت', + schedulingRetry: 'تلاش مجدد', queueSize: 'اندازه صف', queueTimeoutSeconds: 'مهلت انتظار در صف (ثانیه)', requestTimeoutSeconds: 'مهلت درخواست غیر جریانی (ثانیه)', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index db3d6b6d3383..78cc82d4be3e 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -996,7 +996,6 @@ const message = { failureCount: '失敗回数', lastError: '直近のエラー', modelMap: 'モデルマッピング', - qpsLimit: 'QPS 制限', tokenLimit: 'Token 制限', tokenUsed: '使用済み Token', tokenRemaining: '残り Token', @@ -1020,7 +1019,6 @@ const message = { basicSetting: '基本設定', performanceSetting: 'パフォーマンス設定', logSetting: 'ログ設定', - lbPolicy: '負荷分散ポリシー', protocolConversion: 'プロトコル変換', protocolConversionDesc: 'Chat Completions、Responses、Anthropic Messages 間でサポートされる直接変換を有効にします。ネイティブプロトコルが常に優先されます。', @@ -1039,16 +1037,26 @@ const message = { visionPreprocess: '視覚前処理', cacheHit: 'キャッシュヒット', apiType: 'API タイプ', - lbPolicyRoundRobin: 'ラウンドロビン', - lbPolicyRoundRobinDesc: - '利用可能なモデルアカウントを順番に選択します。バックエンドの性能が近い場合に適しています。', - lbPolicyWeightedRoundRobin: '重み付きラウンドロビン', - lbPolicyWeightedRoundRobinDesc: - 'モデルアカウントの重みに応じてリクエストを分配します。重みが大きいほど多くのトラフィックを受けます。', - lbPolicyFailover: 'フェイルオーバー', - lbPolicyFailoverDesc: - '優先度が最も高いモデルアカウントを先に使用し、失敗またはクールダウン後に次の利用可能なアカウントへ切り替えます。', maxConcurrency: '最大同時実行数', + accountMaxConcurrency: 'アカウント最大同時実行数', + groupMaxConcurrency: 'ユーザーグループ最大同時実行数', + apiKeyMaxConcurrency: 'API Key ごとの最大同時実行数', + gatewayConcurrency: 'ゲートウェイ同時実行数', + waitingQueue: '待機キュー', + modelAccountConcurrency: 'モデルアカウント同時実行数', + groupConcurrency: 'ユーザーグループ同時実行数', + apiKeyConcurrency: 'API Key 同時実行数', + currentLimit: '現在 / 上限', + utilization: '使用率', + autoRefreshSeconds: '{0} 秒ごとに自動更新', + zeroMeansUnlimited: '0 に設定すると無制限になります。', + groupMaxConcurrencyDesc: 'グループ内の全 API Key のアクティブリクエスト数を制限します。0 は無制限です。', + apiKeyMaxConcurrencyDesc: 'グループ内の各 API Key のアクティブリクエスト数を制限します。0 は無制限です。', + schedulingReason: 'スケジューリング理由', + schedulingAffinity: 'アフィニティ', + schedulingLeastUtilized: '最低利用率', + schedulingPriorityFallback: '優先度フォールバック', + schedulingRetry: '再試行', queueSize: 'キューサイズ', queueTimeoutSeconds: 'キュー待機タイムアウト(秒)', requestTimeoutSeconds: '非ストリーミングリクエストタイムアウト(秒)', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index e157556f567c..8a07a2cd5321 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -985,7 +985,6 @@ const message = { failureCount: '실패 횟수', lastError: '최근 오류', modelMap: '모델 매핑', - qpsLimit: 'QPS 제한', tokenLimit: 'Token 제한', tokenUsed: '사용한 Token', tokenRemaining: '남은 Token', @@ -1009,7 +1008,6 @@ const message = { basicSetting: '기본 설정', performanceSetting: '성능 설정', logSetting: '로그 설정', - lbPolicy: '부하 분산 정책', protocolConversion: '프로토콜 변환', protocolConversionDesc: 'Chat Completions, Responses 및 Anthropic Messages 간에 지원되는 직접 변환을 허용합니다. 네이티브 프로토콜이 항상 우선합니다.', @@ -1028,16 +1026,26 @@ const message = { visionPreprocess: '비전 전처리', cacheHit: '캐시 적중', apiType: 'API 유형', - lbPolicyRoundRobin: '라운드 로빈', - lbPolicyRoundRobinDesc: - '사용 가능한 모델 계정을 순서대로 선택합니다. 백엔드 성능이 비슷한 경우에 적합합니다.', - lbPolicyWeightedRoundRobin: '가중 라운드 로빈', - lbPolicyWeightedRoundRobinDesc: - '모델 계정의 가중치에 따라 요청을 분배합니다. 가중치가 높을수록 더 많은 트래픽을 받습니다.', - lbPolicyFailover: '장애 조치', - lbPolicyFailoverDesc: - '우선순위가 가장 높은 모델 계정을 먼저 사용하고, 실패 또는 쿨다운 후 다음 사용 가능한 계정으로 전환합니다.', maxConcurrency: '최대 동시성', + accountMaxConcurrency: '계정 최대 동시성', + groupMaxConcurrency: '사용자 그룹 최대 동시성', + apiKeyMaxConcurrency: 'API Key별 최대 동시성', + gatewayConcurrency: '게이트웨이 동시성', + waitingQueue: '대기열', + modelAccountConcurrency: '모델 계정 동시성', + groupConcurrency: '사용자 그룹 동시성', + apiKeyConcurrency: 'API Key 동시성', + currentLimit: '현재 / 한도', + utilization: '사용률', + autoRefreshSeconds: '{0}초마다 자동 새로고침', + zeroMeansUnlimited: '0으로 설정하면 제한이 없습니다.', + groupMaxConcurrencyDesc: '그룹의 모든 API Key 활성 요청 수를 제한합니다. 0은 무제한입니다.', + apiKeyMaxConcurrencyDesc: '그룹 내 각 API Key의 활성 요청 수를 제한합니다. 0은 무제한입니다.', + schedulingReason: '스케줄링 이유', + schedulingAffinity: '선호 계정', + schedulingLeastUtilized: '최저 사용률', + schedulingPriorityFallback: '우선순위 폴백', + schedulingRetry: '재시도', queueSize: '대기열 크기', queueTimeoutSeconds: '대기열 대기 시간 초과(초)', requestTimeoutSeconds: '비스트리밍 요청 시간 초과(초)', diff --git a/frontend/src/lang/modules/lo.ts b/frontend/src/lang/modules/lo.ts index 7bf4d949b3d6..2cec5e8b8ce7 100644 --- a/frontend/src/lang/modules/lo.ts +++ b/frontend/src/lang/modules/lo.ts @@ -985,7 +985,6 @@ const message = { failureCount: 'ການຫຼົ້ມເຫຼວ', lastError: 'ຂໍ້ຜິດພາດລ່າສຸດ', modelMap: 'ການຈັບຄູ່ໂມເດວ (Mapping)', - qpsLimit: 'ຈຳກັດ QPS', tokenLimit: 'ຈຳກັດ Token', tokenUsed: 'Token ທີ່ໃຊ້ແລ້ວ', tokenRemaining: 'Token ທີ່ເຫຼືອ', @@ -1010,7 +1009,6 @@ const message = { basicSetting: 'ຕັ້ງຄ່າພື້ນຖານ', performanceSetting: 'ຕັ້ງຄ່າປະສິດທິພາບ', logSetting: 'ຕັ້ງຄ່າລັອກ', - lbPolicy: 'ນະໂຍບາຍການກະຈາຍພາລະ (Load Balancing)', protocolConversion: 'ການປ່ຽນໂປຣໂຕຄອນ', protocolConversionDesc: 'ອະນຸຍາດການປ່ຽນໂດຍກົງທີ່ຮອງຮັບລະຫວ່າງ Chat Completions, Responses ແລະ Anthropic Messages. ໂປຣໂຕຄອນເດີມຈະຖືກໃຫ້ສິດກ່ອນສະເໝີ.', @@ -1028,15 +1026,26 @@ const message = { visionPreprocess: 'ການປະມວນຜົນພາບລ່ວງໜ້າ', cacheHit: 'ພົບໃນແຄຊ', apiType: 'ປະເພດ API', - lbPolicyRoundRobin: 'Round Robin', - lbPolicyRoundRobinDesc: 'ເລືອກບັນຊີໂມເດວຕາມລຳດັບ. ໃຊ້ເມື່ອລະບົບຫຼັງບ້ານມີຄວາມສາມາດໃກ້ຄຽງກັນ.', - lbPolicyWeightedRoundRobin: 'Round Robin ແບບຖ່ວງນ້ຳໜັກ', - lbPolicyWeightedRoundRobinDesc: - 'ກະຈາຍການຮ້ອງຂໍຕາມນ້ຳໜັກຂອງບັນຊີໂມເດວ. ນ້ຳໜັກສູງກວ່າຈະໄດ້ຮັບ traffic ຫຼາຍກວ່າ.', - lbPolicyFailover: 'Failover', - lbPolicyFailoverDesc: - 'ໃຊ້ບັນຊີໂມເດວທີ່ມີລຳດັບຄວາມສຳຄັນສູງສຸດກ່ອນ, ແລ້ວຈຶ່ງປ່ຽນໄປບັນຊີຖັດໄປເມື່ອເກີດຂໍ້ຜິດພາດ.', maxConcurrency: 'ການເຮັດວຽກພ້ອມກັນສູງສຸດ', + accountMaxConcurrency: 'ຈຳນວນພ້ອມກັນສູງສຸດຂອງບັນຊີ', + groupMaxConcurrency: 'ຈຳນວນພ້ອມກັນສູງສຸດຂອງກຸ່ມຜູ້ໃຊ້', + apiKeyMaxConcurrency: 'ຈຳນວນພ້ອມກັນສູງສຸດຕໍ່ API Key', + gatewayConcurrency: 'ການເຮັດວຽກພ້ອມກັນຂອງເກດເວ', + waitingQueue: 'ຄິວລໍຖ້າ', + modelAccountConcurrency: 'ການເຮັດວຽກພ້ອມກັນຂອງບັນຊີໂມເດວ', + groupConcurrency: 'ການເຮັດວຽກພ້ອມກັນຂອງກຸ່ມຜູ້ໃຊ້', + apiKeyConcurrency: 'ການເຮັດວຽກພ້ອມກັນຂອງ API Key', + currentLimit: 'ປັດຈຸບັນ / ຂີດຈຳກັດ', + utilization: 'ອັດຕາການນຳໃຊ້', + autoRefreshSeconds: 'ໂຫຼດໃໝ່ອັດຕະໂນມັດທຸກ {0} ວິນາທີ', + zeroMeansUnlimited: 'ຕັ້ງເປັນ 0 ເພື່ອບໍ່ຈຳກັດ.', + groupMaxConcurrencyDesc: 'ຈຳກັດຄຳຂໍທີ່ເຮັດວຽກຂອງ API Key ທັງໝົດໃນກຸ່ມ. 0 ແມ່ນບໍ່ຈຳກັດ.', + apiKeyMaxConcurrencyDesc: 'ຈຳກັດຄຳຂໍທີ່ເຮັດວຽກຂອງແຕ່ລະ API Key ໃນກຸ່ມ. 0 ແມ່ນບໍ່ຈຳກັດ.', + schedulingReason: 'ເຫດຜົນການຈັດຕາຕະລາງ', + schedulingAffinity: 'ຄວາມສຳພັນ', + schedulingLeastUtilized: 'ການໃຊ້ງານຕ່ຳສຸດ', + schedulingPriorityFallback: 'ຫຼຸດລະດັບບູລິມະສິດ', + schedulingRetry: 'ລອງໃໝ່', queueSize: 'ຂະໜາດຄິວ', queueTimeoutSeconds: 'ເວລາຖ້າໃນຄິວໝົດເວລາ (ວິນາທີ)', requestTimeoutSeconds: 'ໝົດເວລາການຮ້ອງຂໍແບບບໍ່ແມ່ນ stream (ວິນາທີ)', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index c3fcacdb76c0..b640fbe5c9d7 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -1017,7 +1017,6 @@ const message = { failureCount: 'Bilangan gagal', lastError: 'Ralat terkini', modelMap: 'Pemetaan model', - qpsLimit: 'Had QPS', tokenLimit: 'Had Token', tokenUsed: 'Token digunakan', tokenRemaining: 'Token berbaki', @@ -1041,7 +1040,6 @@ const message = { basicSetting: 'Tetapan Asas', performanceSetting: 'Tetapan Prestasi', logSetting: 'Tetapan Log', - lbPolicy: 'Strategi imbangan beban', protocolConversion: 'Penukaran protokol', protocolConversionDesc: 'Benarkan penukaran terus yang disokong antara Chat Completions, Responses dan Anthropic Messages. Protokol asli sentiasa diutamakan.', @@ -1061,16 +1059,26 @@ const message = { visionPreprocess: 'Prapemprosesan visual', cacheHit: 'Cache ditemui', apiType: 'Jenis API', - lbPolicyRoundRobin: 'Round Robin', - lbPolicyRoundRobinDesc: - 'Pilih akaun model tersedia mengikut turutan. Sesuai apabila kapasiti backend hampir sama.', - lbPolicyWeightedRoundRobin: 'Round Robin berwajaran', - lbPolicyWeightedRoundRobinDesc: - 'Agihkan permintaan mengikut berat akaun model. Berat lebih tinggi menerima lebih banyak trafik.', - lbPolicyFailover: 'Failover', - lbPolicyFailoverDesc: - 'Gunakan akaun model berkeutamaan tertinggi dahulu, kemudian tukar ke akaun tersedia seterusnya selepas gagal atau cooldown.', maxConcurrency: 'Keserentakan maksimum', + accountMaxConcurrency: 'Keserentakan maksimum akaun', + groupMaxConcurrency: 'Keserentakan maksimum kumpulan pengguna', + apiKeyMaxConcurrency: 'Keserentakan maksimum setiap API Key', + gatewayConcurrency: 'Keserentakan gateway', + waitingQueue: 'Baris gilir menunggu', + modelAccountConcurrency: 'Keserentakan akaun model', + groupConcurrency: 'Keserentakan kumpulan pengguna', + apiKeyConcurrency: 'Keserentakan API Key', + currentLimit: 'Semasa / Had', + utilization: 'Penggunaan', + autoRefreshSeconds: 'Muat semula automatik setiap {0} saat', + zeroMeansUnlimited: 'Tetapkan kepada 0 untuk tanpa had.', + groupMaxConcurrencyDesc: 'Hadkan permintaan aktif semua API Key dalam kumpulan. 0 bermaksud tanpa had.', + apiKeyMaxConcurrencyDesc: 'Hadkan permintaan aktif setiap API Key dalam kumpulan. 0 bermaksud tanpa had.', + schedulingReason: 'Sebab penjadualan', + schedulingAffinity: 'Afiniti', + schedulingLeastUtilized: 'Penggunaan terendah', + schedulingPriorityFallback: 'Sandaran keutamaan', + schedulingRetry: 'Cuba semula', queueSize: 'Saiz baris gilir', queueTimeoutSeconds: 'Tamat masa menunggu baris gilir (s)', requestTimeoutSeconds: 'Tamat masa permintaan bukan penstriman (s)', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 98a7dd5a7699..d8471abc2a28 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -1013,7 +1013,6 @@ const message = { failureCount: 'Falhas', lastError: 'Último erro', modelMap: 'Mapeamento de modelos', - qpsLimit: 'Limite de QPS', tokenLimit: 'Limite de tokens', tokenUsed: 'Tokens usados', tokenRemaining: 'Tokens restantes', @@ -1037,7 +1036,6 @@ const message = { basicSetting: 'Configurações básicas', performanceSetting: 'Configurações de desempenho', logSetting: 'Configurações de log', - lbPolicy: 'Política de balanceamento', protocolConversion: 'Conversão de protocolo', protocolConversionDesc: 'Permite conversão direta compatível entre Chat Completions, Responses e Anthropic Messages. Protocolos nativos sempre têm prioridade.', @@ -1057,16 +1055,27 @@ const message = { visionPreprocess: 'Pré-processamento visual', cacheHit: 'Cache encontrado', apiType: 'Tipo de API', - lbPolicyRoundRobin: 'Round Robin', - lbPolicyRoundRobinDesc: - 'Seleciona contas de modelo disponíveis em ordem. Use quando os backends tiverem capacidade semelhante.', - lbPolicyWeightedRoundRobin: 'Round Robin ponderado', - lbPolicyWeightedRoundRobinDesc: - 'Distribui solicitações pelo peso da conta de modelo. Peso maior recebe mais tráfego.', - lbPolicyFailover: 'Failover', - lbPolicyFailoverDesc: - 'Usa primeiro a conta de modelo de maior prioridade e muda para a próxima disponível após falha ou cooldown.', maxConcurrency: 'Concorrência máxima', + accountMaxConcurrency: 'Concorrência máxima da conta', + groupMaxConcurrency: 'Concorrência máxima do grupo de usuários', + apiKeyMaxConcurrency: 'Concorrência máxima por API Key', + gatewayConcurrency: 'Concorrência do gateway', + waitingQueue: 'Fila de espera', + modelAccountConcurrency: 'Concorrência das contas de modelo', + groupConcurrency: 'Concorrência dos grupos de usuários', + apiKeyConcurrency: 'Concorrência das API Keys', + currentLimit: 'Atual / Limite', + utilization: 'Utilização', + autoRefreshSeconds: 'Atualização automática a cada {0}s', + zeroMeansUnlimited: 'Defina como 0 para ilimitado.', + groupMaxConcurrencyDesc: + 'Limita as solicitações ativas de todas as API Keys do grupo. Use 0 para ilimitado.', + apiKeyMaxConcurrencyDesc: 'Limita as solicitações ativas de cada API Key do grupo. Use 0 para ilimitado.', + schedulingReason: 'Motivo do agendamento', + schedulingAffinity: 'Afinidade', + schedulingLeastUtilized: 'Menor utilização', + schedulingPriorityFallback: 'Fallback de prioridade', + schedulingRetry: 'Nova tentativa', queueSize: 'Tamanho da fila', queueTimeoutSeconds: 'Timeout de espera na fila (s)', requestTimeoutSeconds: 'Timeout de requisição sem streaming (s)', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index b6fce0122155..9faa84ba744b 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -1005,7 +1005,6 @@ const message = { failureCount: 'Ошибки', lastError: 'Последняя ошибка', modelMap: 'Сопоставление моделей', - qpsLimit: 'Лимит QPS', tokenLimit: 'Лимит Token', tokenUsed: 'Использовано Token', tokenRemaining: 'Осталось Token', @@ -1029,7 +1028,6 @@ const message = { basicSetting: 'Основные настройки', performanceSetting: 'Настройки производительности', logSetting: 'Настройки журналов', - lbPolicy: 'Политика балансировки', protocolConversion: 'Преобразование протокола', protocolConversionDesc: 'Разрешает поддерживаемое прямое преобразование между Chat Completions, Responses и Anthropic Messages. Нативный протокол всегда имеет приоритет.', @@ -1048,16 +1046,27 @@ const message = { visionPreprocess: 'Визуальная предобработка', cacheHit: 'Попадание в кэш', apiType: 'Тип API', - lbPolicyRoundRobin: 'Round Robin', - lbPolicyRoundRobinDesc: - 'Выбирает доступные аккаунты моделей по очереди. Подходит, когда бэкенды имеют схожую производительность.', - lbPolicyWeightedRoundRobin: 'Взвешенный Round Robin', - lbPolicyWeightedRoundRobinDesc: - 'Распределяет запросы по весу аккаунта модели. Чем выше вес, тем больше трафика он получает.', - lbPolicyFailover: 'Failover', - lbPolicyFailoverDesc: - 'Сначала использует аккаунт модели с наивысшим приоритетом, затем переключается на следующий доступный после ошибки или cooldown.', maxConcurrency: 'Максимальная параллельность', + accountMaxConcurrency: 'Макс. параллельность аккаунта', + groupMaxConcurrency: 'Макс. параллельность группы', + apiKeyMaxConcurrency: 'Макс. параллельность на API Key', + gatewayConcurrency: 'Параллельность шлюза', + waitingQueue: 'Очередь ожидания', + modelAccountConcurrency: 'Параллельность модельных аккаунтов', + groupConcurrency: 'Параллельность групп пользователей', + apiKeyConcurrency: 'Параллельность API Key', + currentLimit: 'Текущее / Лимит', + utilization: 'Загрузка', + autoRefreshSeconds: 'Автообновление каждые {0} сек.', + zeroMeansUnlimited: 'Укажите 0 для отсутствия ограничений.', + groupMaxConcurrencyDesc: 'Ограничивает активные запросы всех API Key группы. 0 означает без ограничений.', + apiKeyMaxConcurrencyDesc: + 'Ограничивает активные запросы каждого API Key группы. 0 означает без ограничений.', + schedulingReason: 'Причина планирования', + schedulingAffinity: 'Привязка', + schedulingLeastUtilized: 'Наименьшая загрузка', + schedulingPriorityFallback: 'Понижение приоритета', + schedulingRetry: 'Повторная попытка', queueSize: 'Размер очереди', queueTimeoutSeconds: 'Тайм-аут ожидания в очереди (с)', requestTimeoutSeconds: 'Тайм-аут non-stream запроса (с)', diff --git a/frontend/src/lang/modules/tr.ts b/frontend/src/lang/modules/tr.ts index 8e7f48905bb9..9d0d544d2902 100644 --- a/frontend/src/lang/modules/tr.ts +++ b/frontend/src/lang/modules/tr.ts @@ -1015,7 +1015,6 @@ const message = { failureCount: 'Hata sayısı', lastError: 'Son hata', modelMap: 'Model eşlemesi', - qpsLimit: 'QPS sınırı', tokenLimit: 'Token sınırı', tokenUsed: 'Kullanılan Token', tokenRemaining: 'Kalan Token', @@ -1039,7 +1038,6 @@ const message = { basicSetting: 'Temel Ayarlar', performanceSetting: 'Performans Ayarları', logSetting: 'Günlük Ayarları', - lbPolicy: 'Yük dengeleme politikası', protocolConversion: 'Protokol dönüştürme', protocolConversionDesc: 'Chat Completions, Responses ve Anthropic Messages arasında desteklenen doğrudan dönüşüme izin verir. Yerel protokol her zaman önceliklidir.', @@ -1058,16 +1056,26 @@ const message = { visionPreprocess: 'Görsel ön işleme', cacheHit: 'Önbellek isabeti', apiType: 'API türü', - lbPolicyRoundRobin: 'Round Robin', - lbPolicyRoundRobinDesc: - 'Kullanılabilir model hesaplarını sırayla seçer. Backend kapasiteleri benzer olduğunda kullanın.', - lbPolicyWeightedRoundRobin: 'Ağırlıklı Round Robin', - lbPolicyWeightedRoundRobinDesc: - 'İstekleri model hesabı ağırlığına göre dağıtır. Daha yüksek ağırlık daha fazla trafik alır.', - lbPolicyFailover: 'Failover', - lbPolicyFailoverDesc: - 'Önce en yüksek öncelikli model hesabını kullanır, hata veya cooldown sonrası bir sonraki kullanılabilir hesaba geçer.', maxConcurrency: 'Maksimum eşzamanlılık', + accountMaxConcurrency: 'Hesap maksimum eşzamanlılığı', + groupMaxConcurrency: 'Kullanıcı grubu maksimum eşzamanlılığı', + apiKeyMaxConcurrency: 'API Key başına maksimum eşzamanlılık', + gatewayConcurrency: 'Ağ geçidi eşzamanlılığı', + waitingQueue: 'Bekleme kuyruğu', + modelAccountConcurrency: 'Model hesabı eşzamanlılığı', + groupConcurrency: 'Kullanıcı grubu eşzamanlılığı', + apiKeyConcurrency: 'API Key eşzamanlılığı', + currentLimit: 'Mevcut / Sınır', + utilization: 'Kullanım', + autoRefreshSeconds: 'Her {0} saniyede otomatik yenilenir', + zeroMeansUnlimited: 'Sınırsız için 0 olarak ayarlayın.', + groupMaxConcurrencyDesc: 'Gruptaki tüm API Key etkin isteklerini sınırlar. 0 sınırsızdır.', + apiKeyMaxConcurrencyDesc: 'Gruptaki her API Key için etkin istekleri sınırlar. 0 sınırsızdır.', + schedulingReason: 'Zamanlama nedeni', + schedulingAffinity: 'Yakınlık', + schedulingLeastUtilized: 'En az kullanılan', + schedulingPriorityFallback: 'Öncelik geri dönüşü', + schedulingRetry: 'Yeniden deneme', queueSize: 'Kuyruk boyutu', queueTimeoutSeconds: 'Kuyruk bekleme zaman aşımı (sn)', requestTimeoutSeconds: 'Akışsız istek zaman aşımı (sn)', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index f5a4088c64ff..fa08678da2aa 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -954,7 +954,6 @@ const message = { failureCount: '失敗次數', lastError: '最近錯誤', modelMap: '模型映射', - qpsLimit: 'QPS 限制', tokenLimit: 'Token 限制', tokenUsed: '已用 Token', tokenRemaining: '剩餘 Token', @@ -978,7 +977,6 @@ const message = { basicSetting: '基礎設定', performanceSetting: '效能設定', logSetting: '日誌設定', - lbPolicy: '負載策略', protocolConversion: '協議轉換', protocolConversionDesc: '啟用後,文字請求可在 Chat Completions、Responses 和 Anthropic Messages 的支援協議間直接轉換,原生協議始終優先。', @@ -995,14 +993,26 @@ const message = { visionPreprocess: '視覺預處理', cacheHit: '快取命中', apiType: 'API 類型', - lbPolicyRoundRobin: '輪詢', - lbPolicyRoundRobinDesc: '按順序依次選擇可用模型帳號,適合後端能力接近的場景。', - lbPolicyWeightedRoundRobin: '加權輪詢', - lbPolicyWeightedRoundRobinDesc: - '根據模型帳號權重分配請求,權重越高承擔的請求越多,適合後端性能不同的場景。', - lbPolicyFailover: '故障轉移', - lbPolicyFailoverDesc: '優先使用優先級最高的模型帳號,失敗或冷卻後再切換到下一個可用帳號。', maxConcurrency: '最大併發', + accountMaxConcurrency: '帳號最大併發', + groupMaxConcurrency: '使用者群組最大併發', + apiKeyMaxConcurrency: '單一 API Key 最大併發', + gatewayConcurrency: '網關併發', + waitingQueue: '等待佇列', + modelAccountConcurrency: '模型帳號併發', + groupConcurrency: '使用者群組併發', + apiKeyConcurrency: 'API Key 併發', + currentLimit: '目前 / 上限', + utilization: '使用率', + autoRefreshSeconds: '每 {0} 秒自動重新整理', + zeroMeansUnlimited: '設為 0 表示不限制。', + groupMaxConcurrencyDesc: '限制此使用者群組所有 API Key 的活躍請求總數,設為 0 表示不限制。', + apiKeyMaxConcurrencyDesc: '限制此使用者群組內每個 API Key 的活躍請求數,設為 0 表示不限制。', + schedulingReason: '調度原因', + schedulingAffinity: '親和命中', + schedulingLeastUtilized: '最低利用率', + schedulingPriorityFallback: '優先級降級', + schedulingRetry: '故障重試', queueSize: '等待佇列大小', queueTimeoutSeconds: '佇列等待逾時(秒)', requestTimeoutSeconds: '非串流請求逾時(秒)', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 7e78c1c57cbe..2afebdfe2f3b 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -967,7 +967,6 @@ const message = { failureCount: '失败次数', lastError: '最近错误', modelMap: '模型映射', - qpsLimit: 'QPS 限制', tokenLimit: 'Token 限制', tokenUsed: '已用 Token', tokenRemaining: '剩余 Token', @@ -992,7 +991,6 @@ const message = { basicSetting: '基础设置', performanceSetting: '性能设置', logSetting: '日志设置', - lbPolicy: '负载策略', protocolConversion: '协议转换', protocolConversionDesc: '开启后,文本请求可在 Chat Completions、Responses 和 Anthropic Messages 的受支持协议间直接转换,原生协议始终优先。', @@ -1009,14 +1007,26 @@ const message = { visionPreprocess: '视觉预处理', cacheHit: '缓存命中', apiType: 'API 类型', - lbPolicyRoundRobin: '轮询', - lbPolicyRoundRobinDesc: '按顺序依次选择可用模型账号,适合后端能力接近的场景。', - lbPolicyWeightedRoundRobin: '加权轮询', - lbPolicyWeightedRoundRobinDesc: - '根据模型账号权重分配请求,权重越高承担的请求越多,适合后端性能不同的场景。', - lbPolicyFailover: '故障转移', - lbPolicyFailoverDesc: '优先使用优先级最高的模型账号,失败或冷却后再切换到下一个可用账号。', maxConcurrency: '最大并发', + accountMaxConcurrency: '账号最大并发', + groupMaxConcurrency: '用户组最大并发', + apiKeyMaxConcurrency: '单 API Key 最大并发', + gatewayConcurrency: '网关并发', + waitingQueue: '等待队列', + modelAccountConcurrency: '模型账号并发', + groupConcurrency: '用户组并发', + apiKeyConcurrency: 'API Key 并发', + currentLimit: '当前 / 上限', + utilization: '利用率', + autoRefreshSeconds: '每 {0} 秒自动刷新', + zeroMeansUnlimited: '设置为 0 表示不限制。', + groupMaxConcurrencyDesc: '限制该用户组所有 API Key 的活跃请求总数,设置为 0 表示不限制。', + apiKeyMaxConcurrencyDesc: '限制该用户组内每个 API Key 的活跃请求数,设置为 0 表示不限制。', + schedulingReason: '调度原因', + schedulingAffinity: '亲和命中', + schedulingLeastUtilized: '最低利用率', + schedulingPriorityFallback: '优先级降级', + schedulingRetry: '故障重试', queueSize: '等待队列大小', queueTimeoutSeconds: '队列等待超时(秒)', requestTimeoutSeconds: '非流式请求超时(秒)',