feat(ai): support benchmark report routes and parameter translations (#14210)

This commit is contained in:
ssongliu
2026-10-26 23:33:17 +08:00
committed by GitHub
parent fbf66766c2
commit 7c7fd492c4
16 changed files with 258 additions and 68 deletions
+6 -2
View File
@@ -6,8 +6,10 @@ import (
)
const (
VMNameValidationPattern = `^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$`
VMCommonPattern = `^[a-zA-Z0-9][a-zA-Z0-9._:-]{0,63}$`
TokenizerDownloadNamePattern = `^[A-Za-z0-9][A-Za-z0-9._-]{0,63}-[0-9a-f]{12}$`
ModelDownloaderRepoIDPattern = `^[A-Za-z0-9][A-Za-z0-9._-]*/[A-Za-z0-9][A-Za-z0-9._-]*$`
VMNameValidationPattern = `^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$`
VMCommonPattern = `^[a-zA-Z0-9][a-zA-Z0-9._:-]{0,63}$`
VLLMMetricSamplePattern = `^([a-zA-Z_:][a-zA-Z0-9_:]*)(\{(?:[^"\\]|"(?:\\.|[^"\\])*")*\})?\s+(\S+)(?:\s+.*)?$`
VLLMMetricLabelPattern = `([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*("(?:[^"\\]|\\.)*")`
@@ -66,6 +68,8 @@ var regexMap = make(map[string]*regexp.Regexp)
func Init() {
patterns := []string{
TokenizerDownloadNamePattern,
ModelDownloaderRepoIDPattern,
VMNameValidationPattern,
VMCommonPattern,
+1
View File
@@ -236,6 +236,7 @@ var WebUrlMap = map[string]struct{}{
}
var DynamicRoutes = []string{
`^/ai/benchmark/[0-9]+$`,
`^/containers/composeDetail/[^/]+$`,
`^/databases/mysql/setting/[^/]+/[^/]+$`,
`^/databases/postgresql/setting/[^/]+/[^/]+$`,
+3 -1
View File
@@ -6,13 +6,15 @@ import (
)
const (
OrderByValidationPattern = `^[a-zA-Z_][a-zA-Z0-9_]*$`
TokenizerDisallowedCharsPattern = `[^A-Za-z0-9._-]+`
OrderByValidationPattern = `^[a-zA-Z_][a-zA-Z0-9_]*$`
)
var regexMap = make(map[string]*regexp.Regexp)
func Init() {
patterns := []string{
TokenizerDisallowedCharsPattern,
OrderByValidationPattern,
}
+20 -5
View File
@@ -1905,6 +1905,9 @@ const message = {
statusUnavailable: 'Service status unavailable. Refresh to retry.',
},
benchmarkPlan: {
prefixTokens: 'Prefix tokens',
seed: 'Random seed',
report: 'Report',
prepareTimeoutHelp: 'Preparation time limit, excluded from the overall timeout.',
pointTimeoutHelp:
'Separate timer per point, including startup, warmups and all requests; capped by the remaining overall time.',
@@ -2048,18 +2051,30 @@ const message = {
latency: 'Latency',
usage: 'Requests and usage (valid runs)',
},
modelDownloadExtra: {
downloadModel: 'Download model',
downloadTokenizer: 'Download tokenizer',
onlineDownload: 'Online download',
content: 'Download content',
fullModel: 'Full model',
tokenizerOnly: 'Tokenizer only',
deleteFiles: 'Also delete files',
deleteFilesHelp: 'When selected, the tokenizer directory and all its files will be deleted.',
},
benchmarkTokenizer: {
title: 'Tokenizer management',
local: 'Register local directory',
upload: 'Upload tokenizer package',
uploadHelp:
'Upload a ZIP / tar.gz containing tokenizer files without model weights. Maximum: 128 MiB compressed, 256 MiB extracted.',
source: 'Import method',
deleteLocal: 'Remove the registration for tokenizer “{0}”? The original directory and files will be kept.',
deleteUpload: 'Delete tokenizer “{0}” and its uploaded files? Historical test reports will be kept.',
select: 'Select a tokenizer',
selectHelp:
'For offline testing, select a managed tokenizer. Custom input still accepts a local directory or repository name.',
deleteFilesHelp: 'When selected, directory {0} and all its files will also be permanently deleted.',
deleteNameConfirm: 'Enter the tokenizer name to confirm deletion: ',
deleteDirectoryWarning:
'The displayed directory and all its contents, including model weights, configuration and scripts, will be permanently deleted. This cannot be undone. If the directory is shared with a model, the model may no longer load or run.',
deleteWarning: 'Deleting files may cause tests currently using this tokenizer to fail.',
exists: 'Exists',
missing: 'Missing',
},
container: {
createByCommand: 'Create by command',
+22 -6
View File
@@ -1921,6 +1921,9 @@ const message = {
statusUnavailable: 'Service status unavailable. Refresh to retry.',
},
benchmarkPlan: {
prefixTokens: 'Tokens de prefijo',
seed: 'Semilla aleatoria',
report: 'Informe',
prepareTimeoutHelp: 'Límite de preparación, excluido del tiempo límite total.',
pointTimeoutHelp:
'Tiempo independiente por punto, con inicio, calentamiento y solicitudes; limitado por el tiempo total restante.',
@@ -2066,18 +2069,31 @@ const message = {
latency: 'Latencia',
usage: 'Solicitudes y uso (ejecuciones válidas)',
},
modelDownloadExtra: {
downloadModel: 'Descargar modelo',
downloadTokenizer: 'Descargar tokenizador',
onlineDownload: 'Descarga en línea',
content: 'Contenido de descarga',
fullModel: 'Modelo completo',
tokenizerOnly: 'Solo tokenizador',
deleteFiles: 'Eliminar también los archivos',
deleteFilesHelp:
'Al seleccionar esta opción, se eliminarán el directorio del tokenizador y todos sus archivos.',
},
benchmarkTokenizer: {
title: 'Gestión de tokenizadores',
local: 'Registrar directorio local',
upload: 'Subir paquete de tokenizador',
uploadHelp: 'Suba un ZIP / tar.gz sin pesos del modelo. Máximo: 128 MiB comprimido y 256 MiB extraído.',
source: 'Método de importación',
deleteLocal:
'¿Quitar el registro del tokenizador «{0}»? Se conservarán el directorio y los archivos originales.',
deleteUpload: '¿Eliminar el tokenizador «{0}» y sus archivos subidos? Se conservarán los informes anteriores.',
select: 'Seleccionar un tokenizador',
selectHelp:
'Para pruebas sin conexión, seleccione un tokenizador gestionado. La entrada personalizada admite directorios locales o nombres de repositorios.',
deleteFilesHelp:
'Al seleccionar esta opción, también se eliminarán permanentemente el directorio {0} y todos sus archivos.',
deleteNameConfirm: 'Introduzca el nombre del tokenizador para confirmar la eliminación: ',
deleteDirectoryWarning:
'Se eliminarán permanentemente el directorio mostrado y todo su contenido, incluidos los pesos del modelo, la configuración y los scripts. Esta acción no se puede deshacer. Si el directorio se comparte con un modelo, este podría dejar de cargarse o ejecutarse.',
deleteWarning: 'Eliminar los archivos puede hacer fallar las pruebas que estén usando este tokenizador.',
exists: 'Existe',
missing: 'No existe',
},
container: {
createByCommand: 'Crear por comando',
+20 -5
View File
@@ -1885,6 +1885,9 @@ const message = {
statusUnavailable: 'Service status unavailable. Refresh to retry.',
},
benchmarkPlan: {
prefixTokens: 'تعداد توکن\u200cهای پیشوند',
seed: 'بذر تصادفی',
report: 'گزارش',
prepareTimeoutHelp: 'مهلت آماده‌سازی در مهلت کلی آزمون محاسبه نمی‌شود.',
pointTimeoutHelp:
'زمان‌سنج مستقل هر نقطه، شامل راه‌اندازی، گرم‌کردن و همه درخواست‌ها؛ محدود به زمان کلی باقی‌مانده.',
@@ -2029,16 +2032,28 @@ const message = {
latency: 'تأخیر',
usage: 'درخواست‌ها و مصرف (اجراهای معتبر)',
},
modelDownloadExtra: {
downloadModel: 'دانلود مدل',
downloadTokenizer: 'دانلود توکن‌ساز',
onlineDownload: 'دانلود آنلاین',
content: 'محتوای دانلود',
fullModel: 'مدل کامل',
tokenizerOnly: 'فقط توکن‌ساز',
deleteFiles: 'حذف فایل‌ها نیز انجام شود',
deleteFilesHelp: 'با انتخاب این گزینه، پوشهٔ توکن‌ساز و تمام فایل‌های آن حذف خواهند شد.',
},
benchmarkTokenizer: {
title: 'مدیریت توکن‌ساز',
local: 'ثبت پوشه محلی',
upload: 'بارگذاری بسته توکن‌ساز',
uploadHelp: 'فایل ZIP / tar.gz بدون وزن‌های مدل بارگذاری کنید. حداکثر ۱۲۸ MiB فشرده و ۲۵۶ MiB پس از استخراج.',
source: 'روش ورود',
deleteLocal: 'ثبت توکن‌ساز «{0}» حذف شود؟ پوشه و فایل‌های اصلی حفظ می‌شوند.',
deleteUpload: 'توکن‌ساز «{0}» و فایل‌های بارگذاری‌شده حذف شوند؟ گزارش‌های پیشین حفظ می‌شوند.',
select: 'انتخاب توکنایزر',
selectHelp: 'برای آزمون آفلاین از فهرست مدیریت انتخاب کنید. ورودی سفارشی پوشه محلی یا نام مخزن را می‌پذیرد.',
deleteFilesHelp: 'با انتخاب این گزینه، پوشهٔ {0} و تمام فایل‌های آن نیز برای همیشه حذف می‌شوند.',
deleteNameConfirm: 'برای تأیید حذف، نام توکن‌ساز را وارد کنید: ',
deleteDirectoryWarning:
'پوشهٔ نمایش‌داده‌شده و تمام محتوای آن، از جمله وزن‌های مدل، تنظیمات و اسکریپت‌ها، برای همیشه حذف خواهند شد. این کار قابل بازگشت نیست. اگر پوشه با یک مدل مشترک باشد، ممکن است مدل دیگر بارگذاری یا اجرا نشود.',
deleteWarning: 'حذف فایل‌ها ممکن است باعث شکست آزمون‌هایی شود که هم‌اکنون از این توکن‌ساز استفاده می‌کنند.',
exists: 'موجود',
missing: 'ناموجود',
},
container: {
createByCommand: 'ایجاد با دستور',
+20 -5
View File
@@ -1890,6 +1890,9 @@ const message = {
statusUnavailable: 'Service status unavailable. Refresh to retry.',
},
benchmarkPlan: {
prefixTokens: 'プレフィックストークン数',
seed: '乱数シード',
report: 'レポート',
prepareTimeoutHelp: '準備時間の上限です。テスト全体のタイムアウトには含みません。',
pointTimeoutHelp:
'各測定点で個別に計時し、起動、ウォームアップ、全リクエストを含みます。全体の残り時間にも制限されます。',
@@ -2032,18 +2035,30 @@ const message = {
latency: 'レイテンシ',
usage: 'リクエストと使用量(有効な実行)',
},
modelDownloadExtra: {
downloadModel: 'モデルをダウンロード',
downloadTokenizer: 'トークナイザーをダウンロード',
onlineDownload: 'オンラインダウンロード',
content: 'ダウンロード内容',
fullModel: 'モデル全体',
tokenizerOnly: 'トークナイザーのみ',
deleteFiles: 'ファイルも削除する',
deleteFilesHelp: '選択すると、トークナイザーのディレクトリとすべてのファイルが削除されます。',
},
benchmarkTokenizer: {
title: 'トークナイザー管理',
local: 'ローカルディレクトリを登録',
upload: 'トークナイザーをアップロード',
uploadHelp:
'モデルの重みを含まない ZIP / tar.gz をアップロードしてください。圧縮時 128 MiB、展開後 256 MiB まで。',
source: 'インポート方法',
deleteLocal: '「{0}」の登録を解除しますか?元のディレクトリとファイルは保持されます。',
deleteUpload: '「{0}」とアップロード済みファイルを削除しますか?過去のテストレポートは保持されます。',
select: 'トークナイザーを選択',
selectHelp:
'オフラインでは管理リストから選択してください。カスタム入力ではローカルパスやリポジトリ名も使えます。',
deleteFilesHelp: '選択すると、ディレクトリ {0} とその中のすべてのファイルも完全に削除されます。',
deleteNameConfirm: '削除を確認するには、トークナイザー名を入力してください:',
deleteDirectoryWarning:
'表示されたディレクトリと、その中のモデルの重み、設定、スクリプトを含むすべての内容が完全に削除されます。この操作は取り消せません。モデルとディレクトリを共有している場合、モデルを読み込んだり実行したりできなくなる可能性があります。',
deleteWarning: 'ファイルを削除すると、このトークナイザーを使用中のテストが失敗する可能性があります。',
exists: '存在する',
missing: '存在しない',
},
container: {
createByCommand: 'コマンドで作成',
+20 -5
View File
@@ -1870,6 +1870,9 @@ const message = {
statusUnavailable: 'Service status unavailable. Refresh to retry.',
},
benchmarkPlan: {
prefixTokens: '접두사 토큰 수',
seed: '난수 시드',
report: '보고서',
prepareTimeoutHelp: '준비 시간 제한이며 전체 시간 제한에서 제외됩니다.',
pointTimeoutHelp: '측정점별로 시작, 워밍업 및 모든 요청 시간을 측정하며, 남은 전체 시간의 제한도 받습니다.',
totalTimeoutHelp: '준비 후 시작하며 모든 측정점과 대기 시간을 포함합니다. 시간 초과 시 테스트를 중단합니다.',
@@ -2008,18 +2011,30 @@ const message = {
latency: '지연',
usage: '요청 및 사용량(유효한 실행)',
},
modelDownloadExtra: {
downloadModel: '모델 다운로드',
downloadTokenizer: '토크나이저 다운로드',
onlineDownload: '온라인 다운로드',
content: '다운로드 내용',
fullModel: '전체 모델',
tokenizerOnly: '토크나이저만',
deleteFiles: '파일도 삭제',
deleteFilesHelp: '선택하면 토크나이저 디렉터리와 모든 파일이 삭제됩니다.',
},
benchmarkTokenizer: {
title: '토크나이저 관리',
local: '로컬 디렉터리 등록',
upload: '토크나이저 패키지 업로드',
uploadHelp:
'모델 가중치가 없는 ZIP / tar.gz 파일을 업로드하세요. 압축 파일은 128 MiB, 압축 해제 후에는 256 MiB까지 가능합니다.',
source: '가져오기 방식',
deleteLocal: '토크나이저 “{0}”의 등록을 삭제할까요? 원본 디렉터리와 파일은 유지됩니다.',
deleteUpload: '토크나이저 “{0}” 및 업로드한 파일을 삭제할까요? 기존 테스트 보고서는 유지됩니다.',
select: '토크나이저 선택',
selectHelp:
'오프라인 환경에서는 관리 목록에서 선택하세요. 사용자 지정 입력은 로컬 디렉터리나 저장소 이름도 지원합니다.',
deleteFilesHelp: '선택하면 디렉터리 {0} 및 그 안의 모든 파일도 영구적으로 삭제됩니다.',
deleteNameConfirm: '삭제를 확인하려면 토크나이저 이름을 입력하세요: ',
deleteDirectoryWarning:
'표시된 디렉터리와 모델 가중치, 설정, 스크립트를 포함한 모든 내용이 영구적으로 삭제되며 복구할 수 없습니다. 모델과 디렉터리를 공유하는 경우 모델을 로드하거나 실행하지 못할 수 있습니다.',
deleteWarning: '파일을 삭제하면 현재 이 토크나이저를 사용 중인 테스트가 실패할 수 있습니다.',
exists: '존재함',
missing: '없음',
},
container: {
createByCommand: '명령으로 생성',
+20 -5
View File
@@ -1860,6 +1860,9 @@ const message = {
statusUnavailable: 'Service status unavailable. Refresh to retry.',
},
benchmarkPlan: {
prefixTokens: 'ຈຳນວນ Token ຄຳນຳໜ້າ',
seed: 'ຄ່າເລີ່ມຕົ້ນການສຸ່ມ',
report: 'ລາຍງານ',
prepareTimeoutHelp: 'ເວລາຈຳກັດການກຽມການ ບໍ່ນັບໃນເວລາທັງຮອບ.',
pointTimeoutHelp: 'ຈັບເວລາແຍກຕໍ່ຈຸດ ລວມການເລີ່ມ, ອຸ່ນເຄື່ອງ ແລະ ທຸກຄຳຮ້ອງຂໍ; ຈຳກັດດ້ວຍເວລາທັງຮອບທີ່ເຫຼືອ.',
totalTimeoutHelp: 'ເລີ່ມຫຼັງກຽມການ ລວມທຸກຈຸດແລະໄລຍະຫ່າງ. ຢຸດທົດສອບເມື່ອໝົດເວລາ.',
@@ -1997,16 +2000,28 @@ const message = {
latency: 'ຄວາມຊັກຊ້າ',
usage: 'ຄຳຂໍ ແລະ ການໃຊ້ງານ (ການແລ່ນທີ່ໃຊ້ໄດ້)',
},
modelDownloadExtra: {
downloadModel: 'ດາວໂຫຼດໂມເດວ',
downloadTokenizer: 'ດາວໂຫຼດຕົວແບ່ງຄຳ',
onlineDownload: 'ດາວໂຫຼດອອນລາຍ',
content: 'ເນື້ອຫາດາວໂຫຼດ',
fullModel: 'ໂມເດລທັງໝົດ',
tokenizerOnly: 'ສະເພາະຕົວແຍກໂທເຄັນ',
deleteFiles: 'ລຶບໄຟລ໌ພ້ອມກັນ',
deleteFilesHelp: 'ເມື່ອເລືອກ ໂຟນເດີ tokenizer ແລະໄຟລ໌ທັງໝົດຂອງມັນຈະຖືກລຶບ.',
},
benchmarkTokenizer: {
title: 'ຈັດການຕົວແຍກໂທເຄັນ',
local: 'ລົງທະບຽນໂຟນເດີໃນເຄື່ອງ',
upload: 'ອັບໂຫຼດຊຸດຕົວແຍກໂທເຄັນ',
uploadHelp: 'ອັບໂຫຼດ ZIP / tar.gz ທີ່ບໍ່ມີນ້ຳໜັກໂມເດລ. ສູງສຸດ 128 MiB ກ່ອນແຕກ ແລະ 256 MiB ຫຼັງແຕກ.',
source: 'ວິທີນຳເຂົ້າ',
deleteLocal: 'ລຶບການລົງທະບຽນ «{0}» ບໍ? ໂຟນເດີ ແລະ ໄຟລ໌ຕົ້ນສະບັບຈະຖືກເກັບໄວ້.',
deleteUpload: 'ລຶບ «{0}» ແລະ ໄຟລ໌ທີ່ອັບໂຫຼດບໍ? ລາຍງານທົດສອບເກົ່າຈະຖືກເກັບໄວ້.',
select: 'ເລືອກຕົວແບ່ງໂທເຄັນ',
selectHelp: 'ສຳລັບອອບລາຍ ໃຫ້ເລືອກຈາກລາຍການ. ການປ້ອນເອງຮອງຮັບໂຟນເດີ ຫຼື ຊື່ຄັງ.',
deleteFilesHelp: 'ເມື່ອເລືອກ ໂຟນເດີ {0} ແລະໄຟລ໌ທັງໝົດຂອງມັນຈະຖືກລຶບຖາວອນພ້ອມກັນ.',
deleteNameConfirm: 'ປ້ອນຊື່ tokenizer ເພື່ອຢືນຢັນການລຶບ: ',
deleteDirectoryWarning:
'ໂຟນເດີທີ່ສະແດງ ແລະເນື້ອຫາທັງໝົດ ລວມທັງນ້ຳໜັກໂມເດວ, ການຕັ້ງຄ່າ ແລະສະຄຣິບ ຈະຖືກລຶບຖາວອນ ແລະບໍ່ສາມາດກູ້ຄືນໄດ້. ຖ້າໃຊ້ໂຟນເດີຮ່ວມກັບໂມເດວ, ໂມເດວອາດບໍ່ສາມາດໂຫຼດ ຫຼືເຮັດວຽກໄດ້.',
deleteWarning: 'ການລຶບໄຟລ໌ອາດເຮັດໃຫ້ການທົດສອບທີ່ກຳລັງໃຊ້ tokenizer ນີ້ລົ້ມເຫຼວ.',
exists: 'ມີຢູ່',
missing: 'ບໍ່ມີ',
},
container: {
createByCommand: 'ສ້າງດ້ວຍຄຳສັ່ງ',
+20 -5
View File
@@ -1918,6 +1918,9 @@ const message = {
statusUnavailable: 'Service status unavailable. Refresh to retry.',
},
benchmarkPlan: {
prefixTokens: 'Token awalan',
seed: 'Benih rawak',
report: 'Laporan',
prepareTimeoutHelp: 'Had masa persediaan, tidak termasuk had masa keseluruhan.',
pointTimeoutHelp:
'Pemasa berasingan setiap titik, termasuk permulaan, pemanasan dan semua permintaan; dihadkan oleh baki masa keseluruhan.',
@@ -2065,17 +2068,29 @@ const message = {
latency: 'Kependaman',
usage: 'Permintaan dan penggunaan (pelaksanaan sah)',
},
modelDownloadExtra: {
downloadModel: 'Muat turun model',
downloadTokenizer: 'Muat turun tokenizer',
onlineDownload: 'Muat turun dalam talian',
content: 'Kandungan muat turun',
fullModel: 'Model penuh',
tokenizerOnly: 'Tokenizer sahaja',
deleteFiles: 'Padam fail juga',
deleteFilesHelp: 'Jika ditandakan, direktori tokenizer dan semua failnya akan dipadam.',
},
benchmarkTokenizer: {
title: 'Pengurusan tokenizer',
local: 'Daftar direktori setempat',
upload: 'Muat naik pakej tokenizer',
uploadHelp: 'Muat naik ZIP / tar.gz tanpa pemberat model. Had: 128 MiB dimampatkan, 256 MiB selepas diekstrak.',
source: 'Kaedah import',
deleteLocal: 'Alih keluar pendaftaran tokenizer “{0}”? Direktori dan fail asal akan dikekalkan.',
deleteUpload: 'Padam tokenizer “{0}” serta fail yang dimuat naik? Laporan ujian terdahulu akan dikekalkan.',
select: 'Pilih tokenizer',
selectHelp:
'Untuk ujian luar talian, pilih tokenizer terurus. Input tersuai menerima direktori setempat atau nama repositori.',
deleteFilesHelp: 'Jika ditandakan, direktori {0} dan semua failnya juga akan dipadam secara kekal.',
deleteNameConfirm: 'Masukkan nama tokenizer untuk mengesahkan pemadaman: ',
deleteDirectoryWarning:
'Direktori yang dipaparkan dan semua kandungannya, termasuk pemberat model, konfigurasi dan skrip, akan dipadam secara kekal. Tindakan ini tidak boleh dibatalkan. Jika direktori dikongsi dengan model, model mungkin tidak lagi dapat dimuatkan atau dijalankan.',
deleteWarning: 'Memadam fail boleh menyebabkan ujian yang sedang menggunakan tokenizer ini gagal.',
exists: 'Wujud',
missing: 'Tiada',
},
container: {
createByCommand: 'Cipta melalui perintah',
+22 -5
View File
@@ -1920,6 +1920,9 @@ const message = {
statusUnavailable: 'Service status unavailable. Refresh to retry.',
},
benchmarkPlan: {
prefixTokens: 'Tokens de prefixo',
seed: 'Semente aleatória',
report: 'Relatório',
prepareTimeoutHelp: 'Limite da preparação, excluído do tempo limite total.',
pointTimeoutHelp:
'Tempo separado por ponto, incluindo início, aquecimento e solicitações; limitado pelo tempo total restante.',
@@ -2065,17 +2068,31 @@ const message = {
latency: 'Latência',
usage: 'Requisições e uso (execuções válidas)',
},
modelDownloadExtra: {
downloadModel: 'Baixar modelo',
downloadTokenizer: 'Baixar tokenizador',
onlineDownload: 'Download online',
content: 'Conteúdo do download',
fullModel: 'Modelo completo',
tokenizerOnly: 'Apenas tokenizador',
deleteFiles: 'Excluir também os arquivos',
deleteFilesHelp:
'Ao selecionar esta opção, o diretório do tokenizador e todos os seus arquivos serão excluídos.',
},
benchmarkTokenizer: {
title: 'Gerenciamento de tokenizadores',
local: 'Registrar diretório local',
upload: 'Enviar pacote de tokenizador',
uploadHelp: 'Envie um ZIP / tar.gz sem os pesos do modelo. Máximo: 128 MiB compactado e 256 MiB extraído.',
source: 'Método de importação',
deleteLocal: 'Remover o registro do tokenizador “{0}”? O diretório e os arquivos originais serão mantidos.',
deleteUpload: 'Excluir o tokenizador “{0}” e seus arquivos enviados? Os relatórios anteriores serão mantidos.',
select: 'Selecionar um tokenizador',
selectHelp:
'Para testes offline, selecione um tokenizador gerenciado. A entrada personalizada aceita diretórios locais ou nomes de repositórios.',
deleteFilesHelp:
'Ao selecionar esta opção, o diretório {0} e todos os seus arquivos também serão excluídos permanentemente.',
deleteNameConfirm: 'Digite o nome do tokenizador para confirmar a exclusão: ',
deleteDirectoryWarning:
'O diretório exibido e todo o seu conteúdo, incluindo pesos do modelo, configurações e scripts, serão excluídos permanentemente. Esta ação não pode ser desfeita. Se o diretório for compartilhado com um modelo, ele poderá deixar de carregar ou executar.',
deleteWarning: 'Excluir os arquivos pode causar falhas nos testes que estão usando este tokenizador.',
exists: 'Existe',
missing: 'Não existe',
},
container: {
createByCommand: 'Criar por comando',
+21 -5
View File
@@ -1909,6 +1909,9 @@ const message = {
statusUnavailable: 'Service status unavailable. Refresh to retry.',
},
benchmarkPlan: {
prefixTokens: 'Токены префикса',
seed: 'Начальное значение генератора случайных чисел',
report: 'Отчёт',
prepareTimeoutHelp: 'Лимит подготовки, не входит в общий тайм-аут.',
pointTimeoutHelp:
'Отдельный отсчёт для каждой точки, включая запуск, прогрев и запросы; ограничен оставшимся общим временем.',
@@ -2059,17 +2062,30 @@ const message = {
latency: 'Задержка',
usage: 'Запросы и использование (достоверные запуски)',
},
modelDownloadExtra: {
downloadModel: 'Скачать модель',
downloadTokenizer: 'Скачать токенизатор',
onlineDownload: 'Скачать онлайн',
content: 'Содержимое загрузки',
fullModel: 'Полная модель',
tokenizerOnly: 'Только токенизатор',
deleteFiles: 'Также удалить файлы',
deleteFilesHelp: 'Если флажок установлен, каталог токенизатора и все его файлы будут удалены.',
},
benchmarkTokenizer: {
title: 'Управление токенизаторами',
local: 'Зарегистрировать локальный каталог',
upload: 'Загрузить архив токенизатора',
uploadHelp: 'Загрузите ZIP / tar.gz без весов модели. Максимум: 128 МиБ в архиве и 256 МиБ после распаковки.',
source: 'Способ импорта',
deleteLocal: 'Удалить регистрацию токенизатора «{0}»? Исходный каталог и файлы будут сохранены.',
deleteUpload: 'Удалить токенизатор «{0}» и загруженные файлы? Предыдущие отчёты сохранятся.',
select: 'Выберите токенизатор',
selectHelp:
'Для автономных тестов выберите токенизатор из списка. Ручной ввод поддерживает локальный каталог или имя репозитория.',
deleteFilesHelp:
'Если флажок установлен, каталог {0} и все его файлы также будут удалены без возможности восстановления.',
deleteNameConfirm: 'Введите имя токенизатора, чтобы подтвердить удаление: ',
deleteDirectoryWarning:
'Указанный каталог и всё его содержимое, включая веса модели, конфигурацию и скрипты, будут удалены без возможности восстановления. Если каталог используется совместно с моделью, модель может перестать загружаться или запускаться.',
deleteWarning: 'Удаление файлов может привести к сбою тестов, которые сейчас используют этот токенизатор.',
exists: 'Существует',
missing: 'Отсутствует',
},
container: {
createByCommand: 'Создать с помощью команды',
+21 -5
View File
@@ -1917,6 +1917,9 @@ const message = {
statusUnavailable: 'Service status unavailable. Refresh to retry.',
},
benchmarkPlan: {
prefixTokens: 'Önek token sayısı',
seed: 'Rastgelelik tohumu',
report: 'Rapor',
prepareTimeoutHelp: 'Hazırlık süresi sınırıdır; toplam zaman aşımına dahil değildir.',
pointTimeoutHelp:
'Her nokta ayrı ölçülür; başlangıç, ısınma ve tüm istekler dahildir. Kalan toplam süreyle sınırlıdır.',
@@ -2064,17 +2067,30 @@ const message = {
latency: 'Gecikme',
usage: 'İstekler ve kullanım (geçerli çalıştırmalar)',
},
modelDownloadExtra: {
downloadModel: 'Modeli indir',
downloadTokenizer: 'Tokenleştiriciyi indir',
onlineDownload: 'Çevrimiçi indir',
content: 'İndirme içeriği',
fullModel: 'Tam model',
tokenizerOnly: 'Yalnızca tokenizer',
deleteFiles: 'Dosyaları da sil',
deleteFilesHelp: 'İşaretlendiğinde tokenlaştırıcı dizini ve içindeki tüm dosyalar silinecektir.',
},
benchmarkTokenizer: {
title: 'Tokenizer yönetimi',
local: 'Yerel dizini kaydet',
upload: 'Tokenizer paketini yükle',
uploadHelp: 'Model ağırlıkları içermeyen ZIP / tar.gz yükleyin. Sınır: sıkıştırılmış 128 MiB, açılmış 256 MiB.',
source: 'İçe aktarma yöntemi',
deleteLocal: '“{0}” tokenizer kaydı kaldırılsın mı? Özgün dizin ve dosyalar korunur.',
deleteUpload: '“{0}” tokenizer ve yüklenen dosyaları silinsin mi? Geçmiş test raporları korunur.',
select: 'Bir tokenizer seçin',
selectHelp:
'Çevrimdışı test için yönetilen bir tokenizer seçin. Özel giriş yerel dizin veya depo adını destekler.',
deleteFilesHelp: 'İşaretlendiğinde {0} dizini ve içindeki tüm dosyalar da kalıcı olarak silinecektir.',
deleteNameConfirm: 'Silmeyi onaylamak için tokenlaştırıcının adını girin: ',
deleteDirectoryWarning:
'Gösterilen dizin ve model ağırlıkları, yapılandırma ve betikler dahil tüm içeriği kalıcı olarak silinecektir. Bu işlem geri alınamaz. Dizin bir modelle paylaşılıyorsa model artık yüklenemeyebilir veya çalışmayabilir.',
deleteWarning:
'Dosyaların silinmesi, şu anda bu tokenizer kullanan testlerin başarısız olmasına neden olabilir.',
exists: 'Mevcut',
missing: 'Mevcut değil',
},
container: {
createByCommand: 'Komutla oluştur',
+20 -5
View File
@@ -1806,6 +1806,9 @@ const message = {
statusUnavailable: '無法取得服務狀態,請重新整理後重試。',
},
benchmarkPlan: {
prefixTokens: '前綴 Token 數',
seed: '隨機種子',
report: '報告',
prepareTimeoutHelp: '準備階段的時間上限,不計入整輪逾時。',
pointTimeoutHelp: '每個測點獨立計時,含啟動、預熱和全部請求,受整輪剩餘時間限制。',
totalTimeoutHelp: '準備完成後計時,涵蓋所有測點及間隔,逾時後停止。',
@@ -1936,16 +1939,28 @@ const message = {
latency: '延遲指標',
usage: '請求與用量(有效測試)',
},
modelDownloadExtra: {
downloadModel: '下載模型',
downloadTokenizer: '下載分詞器',
onlineDownload: '線上下載',
content: '下載內容',
fullModel: '完整模型',
tokenizerOnly: '僅分詞器',
deleteFiles: '同時刪除檔案',
deleteFilesHelp: '勾選後將刪除分詞器目錄及全部檔案。',
},
benchmarkTokenizer: {
title: '分詞器管理',
local: '登記本機目錄',
upload: '上傳分詞器套件',
uploadHelp: '上傳不含模型權重的 ZIP / tar.gz 分詞器套件。壓縮檔上限 128 MiB,解壓縮後上限 256 MiB。',
source: '匯入方式',
deleteLocal: '移除分詞器「{0}」的登記紀錄?原始目錄與檔案將保留。',
deleteUpload: '刪除分詞器「{0}」及其上傳檔案?歷史測試報告將保留。',
select: '選擇分詞器',
selectHelp: '離線環境建議從管理清單選擇;自訂輸入仍支援本機目錄或儲存庫名稱。',
deleteFilesHelp: '勾選後將同時永久刪除目錄 {0} 及其全部檔案。',
deleteNameConfirm: '請輸入分詞器名稱以確認刪除:',
deleteDirectoryWarning:
'將永久刪除所示目錄及其全部內容,包括其中的模型權重、設定和指令碼,且無法復原。若與模型共用目錄,模型可能無法載入或執行。',
deleteWarning: '刪除檔案可能導致正在使用該分詞器的測試失敗。',
exists: '存在',
missing: '不存在',
},
container: {
createByCommand: '指令建立',
+20 -5
View File
@@ -1815,6 +1815,9 @@ const message = {
statusUnavailable: '无法获取服务状态,请刷新重试。',
},
benchmarkPlan: {
prefixTokens: '前缀 Token 数',
seed: '随机种子',
report: '报告',
prepareTimeoutHelp: '准备阶段的时间上限,不计入整轮超时。',
pointTimeoutHelp: '每个测点独立计时,含启动、预热和全部请求,受整轮剩余时间限制。',
totalTimeoutHelp: '准备完成后计时,覆盖所有测点及间隔,超时后停止。',
@@ -1945,16 +1948,28 @@ const message = {
latency: '延迟指标',
usage: '请求与用量(有效测试)',
},
modelDownloadExtra: {
downloadModel: '下载模型',
downloadTokenizer: '下载分词器',
onlineDownload: '在线下载',
content: '下载内容',
fullModel: '完整模型',
tokenizerOnly: '仅分词器',
deleteFiles: '同时删除文件',
deleteFilesHelp: '勾选后将删除分词器目录及全部文件。',
},
benchmarkTokenizer: {
title: '分词器管理',
local: '登记本地目录',
upload: '上传分词器包',
uploadHelp: '上传 ZIP / tar.gz 分词器包,不含模型权重。压缩包最大 128 MiB,解压后最大 256 MiB。',
source: '导入方式',
deleteLocal: '移除分词器「{0}」的登记记录?原目录和文件将保留。',
deleteUpload: '删除分词器「{0}」及其上传文件?历史测试报告将保留。',
select: '选择分词器',
selectHelp: '离线环境推荐从管理列表选择;自定义输入仍支持本地目录或仓库名称。',
deleteFilesHelp: '勾选后将同时永久删除目录 {0} 及其全部文件。',
deleteNameConfirm: '请输入分词器名称以确认删除:',
deleteDirectoryWarning:
'将永久删除所示目录及其全部内容,包括其中的模型权重、配置和脚本,且无法恢复。若与模型共用目录,模型可能无法加载或运行。',
deleteWarning: '删除文件可能导致正在使用该分词器的测试失败。',
exists: '存在',
missing: '不存在',
},
container: {
createByCommand: '命令创建',
+2 -4
View File
@@ -135,8 +135,7 @@
<span class="cell-ellipsis" :title="model.id">{{ model.id }}</span>
<el-button
v-if="index === 1 && row.models.length > 2"
link
type="primary"
size="small"
class="model-more"
@click="poolRef.open(row)"
>
@@ -215,8 +214,7 @@
<span class="cell-ellipsis" :title="model">{{ model }}</span>
<el-button
v-if="row.engine === 'ollama' && index === 1 && row.models.length > 2"
link
type="primary"
size="small"
class="model-more"
@click="manageDeployment(row)"
>