feat(ai): add benchmark setup guidance and image pull navigation (#14318)

This commit is contained in:
王贺
2026-11-06 15:57:34 +08:00
committed by GitHub
parent 23a54653f8
commit 66e9862cba
13 changed files with 683 additions and 5 deletions
+49
View File
@@ -1636,6 +1636,8 @@ const message = {
},
benchmark: {
title: 'Benchmark',
description:
'Benchmark model services across different request lengths and concurrency settings to evaluate metrics such as throughput, time to first token, and request latency.',
launchCommand: 'Launch Command',
retest: 'Retest',
statusRunning: 'Running',
@@ -2108,6 +2110,9 @@ const message = {
'Multiple scenarios, concurrency levels and repeated runs, including long inputs and shared prefixes.',
customDescription: 'Start with one scenario, set its parameters and add more as needed.',
scenarios: 'Scenarios',
scenarioCount: 'Scenarios ({count} total)',
scenarioHelp:
'Each scenario defines input/output tokens, concurrency levels and request parameters. Concurrency levels are tested in sequence; each level runs for the configured number of trials, and each run creates one test point.',
builtIn: 'Built-in',
builtInHelp: 'Built-in schemes cannot be edited or deleted. Adjust a copy when creating a test.',
modified: 'Modified',
@@ -2147,6 +2152,50 @@ const message = {
resultHelp:
'Only successful runs without request anomalies enter the median and min/max summaries. P99 is the median of per-run P99 values. Cache and external traffic are uncontrolled.',
},
benchmarkSettings: {
settingsHelp: 'Prepare the Benchmark image and a test scheme. You can create a benchmark once both are ready.',
imageAvailable: 'Benchmark image is ready ({image})',
imageUnavailable: 'Benchmark image was not found ({image})',
retestServiceHelp:
'Retests keep the task parameters. Confirm the current model service; credentials are loaded from the selected service.',
prepareHelp: 'Before creating a benchmark, prepare the Benchmark image and test schemes in {settings}.',
image: 'Benchmark image',
ready: 'Ready',
unconfigured: 'Not configured',
checkFailed: 'Check failed',
imageMissing: 'The required image was not found. Pull {image} in image management.',
imageReady: 'The Benchmark image is ready for creating tests.',
imageHelp: 'The Benchmark image runs the load test client and sends requests to the selected model service.',
mainNodeHelp: 'Benchmarks run on the main node. Prepare the image and tokenizer on that node.',
goImages: 'Go to image management',
goModels: 'Go to model downloads',
tokenizerHelp:
'Tokenizers encode test text and count tokens. Select a model with valid tokenizer files from the default model directory.',
tokenizerEmpty: 'No models are available. Download a model containing tokenizer files in model downloads.',
tokenizerEmptyWithDownload:
'No models are available. Open {download} to download a model containing tokenizer files.',
tokenizerInvalid:
'This model has no usable tokenizer. Select another model or prepare its files in model downloads.',
schemeHelp:
'Test schemes define request parameters, concurrency, and execution rules. Prepare at least one available scheme.',
schemeEmpty: 'No test schemes are available. Create a scheme first.',
manageSchemes: 'Manage test schemes',
selectService: 'Select a model service',
serviceHelp:
'Select a model service to benchmark. Requests will be sent to this service; make sure it is reachable.',
noServices: 'No model services are available. Add a model service first.',
goModelServices: 'Go to model services',
unsupportedServices: 'Unsupported services are disabled. Hover over an option for the reason.',
unsupportedProtocol:
'This API protocol is not supported: {0}. Select a model service using OpenAI Chat Completions.',
unsupportedAuth:
'This authentication method is not supported: {0}. Select a service using Bearer authentication.',
serviceModelsMissing: 'This service has no configured models. Add models in model service management.',
prerequisitesTitle: 'Complete benchmark settings first',
prerequisitesMissing: 'The following prerequisites are not ready: {0}. Complete them in settings.',
precheckFailed: 'Could not check benchmark prerequisites. Open settings and check again.',
goSettings: 'Go to settings',
},
benchmarkOverview: {
comparison: 'Scenario and concurrency comparison',
comparisonHelp: 'Click a scenario name to inspect that combination.',
+55
View File
@@ -1645,6 +1645,8 @@ const message = {
},
benchmark: {
title: 'Benchmark',
description:
'Realice pruebas de rendimiento de los servicios de modelos con distintas longitudes de solicitud y configuraciones de concurrencia para medir métricas como el rendimiento, el tiempo hasta el primer token y la latencia de las solicitudes.',
launchCommand: 'Comando de inicio',
retest: 'Volver a probar',
statusRunning: 'En ejecución',
@@ -2129,6 +2131,9 @@ const message = {
'Varios escenarios, niveles de concurrencia y repeticiones, con entradas largas y prefijos compartidos.',
customDescription: 'Empiece con un escenario, configure sus parámetros y añada más según necesite.',
scenarios: 'Escenarios',
scenarioCount: 'Escenarios ({count} en total)',
scenarioHelp:
'Cada escenario define los tokens de entrada/salida, los niveles de concurrencia y los parámetros de las solicitudes. Los niveles se prueban en secuencia; cada nivel se ejecuta según el número de repeticiones configurado y cada ejecución genera un punto de medición.',
builtIn: 'Integrado',
builtInHelp: 'Los esquemas integrados no se pueden editar ni eliminar. Ajuste una copia al crear una prueba.',
modified: 'Modificado',
@@ -2168,6 +2173,56 @@ const message = {
resultHelp:
'La mediana y los mínimos/máximos solo incluyen ejecuciones correctas sin anomalías. P99 es la mediana de los P99 de cada ejecución. La caché y el tráfico externo no están controlados.',
},
benchmarkSettings: {
settingsHelp:
'Prepare la imagen de Benchmark y un plan de prueba. Podrá crear una prueba de rendimiento cuando ambos estén listos.',
imageAvailable: 'La imagen de Benchmark está lista ({image})',
imageUnavailable: 'No se encontró la imagen de Benchmark ({image})',
retestServiceHelp:
'Las nuevas pruebas conservan los parámetros de la tarea. Confirme el servicio de modelos actual; las credenciales se obtienen del servicio seleccionado.',
prepareHelp: 'Antes de crear una prueba, prepare la imagen Benchmark y los planes de prueba en {settings}.',
image: 'Imagen de Benchmark',
ready: 'Listo',
unconfigured: 'Sin configurar',
checkFailed: 'Error de comprobación',
imageMissing: 'No se encontró la imagen requerida. Descargue {image} en la gestión de imágenes.',
imageReady: 'La imagen de Benchmark está lista para crear pruebas.',
imageHelp:
'La imagen de Benchmark ejecuta el cliente de carga y envía solicitudes al servicio de modelos seleccionado.',
mainNodeHelp: 'Las pruebas se ejecutan en el nodo principal. Prepare la imagen y el tokenizador en ese nodo.',
goImages: 'Ir a la gestión de imágenes',
goModels: 'Ir a las descargas de modelos',
tokenizerHelp:
'Los tokenizadores codifican el texto de prueba y cuentan los tokens. Seleccione un modelo con archivos de tokenizador válidos en el directorio de modelos predeterminado.',
tokenizerEmpty:
'No hay modelos disponibles. Descargue un modelo que incluya archivos de tokenizador en las descargas de modelos.',
tokenizerEmptyWithDownload:
'No hay modelos disponibles. Abra {download} para descargar un modelo que incluya archivos de tokenizador.',
tokenizerInvalid:
'Este modelo no tiene un tokenizador utilizable. Seleccione otro modelo o prepare sus archivos en las descargas de modelos.',
schemeHelp:
'Los planes de prueba definen los parámetros de solicitud, la concurrencia y las reglas de ejecución. Prepare al menos un plan disponible.',
schemeEmpty: 'No hay planes de prueba disponibles. Cree uno primero.',
manageSchemes: 'Gestionar planes de prueba',
selectService: 'Seleccione un servicio de modelos',
serviceHelp:
'Seleccione el servicio de modelos que desea probar. Se enviarán solicitudes a este servicio; asegúrese de que sea accesible.',
noServices: 'No hay servicios de modelos disponibles. Añada uno primero.',
goModelServices: 'Ir a los servicios de modelos',
unsupportedServices:
'Los servicios no compatibles están deshabilitados. Pase el cursor sobre una opción para ver el motivo.',
unsupportedProtocol:
'Este protocolo de API no es compatible: {0}. Seleccione un servicio de modelos que use OpenAI Chat Completions.',
unsupportedAuth:
'Este método de autenticación no es compatible: {0}. Seleccione un servicio que use autenticación Bearer.',
serviceModelsMissing:
'Este servicio no tiene modelos configurados. Añada modelos en la gestión de servicios de modelos.',
prerequisitesTitle: 'Complete primero los ajustes de la prueba',
prerequisitesMissing: 'Los siguientes requisitos no están listos: {0}. Complételos en los ajustes.',
precheckFailed:
'No se pudieron comprobar los requisitos de la prueba. Abra los ajustes y vuelva a comprobarlos.',
goSettings: 'Ir a los ajustes',
},
benchmarkOverview: {
comparison: 'Comparación de escenarios y concurrencia',
comparisonHelp: 'Haz clic en un escenario para ver los detalles de esa combinación.',
+50
View File
@@ -1616,6 +1616,8 @@ const message = {
},
benchmark: {
title: 'معیار سنجش',
description:
'عملکرد سرویس\u200cهای مدل را با طول\u200cهای مختلف درخواست و تنظیمات گوناگون هم\u200cزمانی ارزیابی کنید تا معیارهایی مانند توان عملیاتی، زمان رسیدن به اولین توکن و تأخیر درخواست\u200cها اندازه\u200cگیری شود.',
launchCommand: 'دستور راه‌اندازی',
retest: 'آزمایش مجدد',
statusRunning: 'در حال اجرا',
@@ -2087,6 +2089,9 @@ const message = {
customDescription:
'با یک سناریو شروع کنید، پارامترهای آن را تنظیم کنید و در صورت نیاز سناریوهای بیشتری اضافه کنید.',
scenarios: 'سناریوها',
scenarioCount: 'سناریوها (در مجموع {count} مورد)',
scenarioHelp:
'هر سناریو، توکن‌های ورودی/خروجی، سطوح هم‌زمانی و پارامترهای درخواست را مشخص می‌کند. سطوح هم‌زمانی به‌ترتیب آزمایش می‌شوند؛ هر سطح به تعداد تکرارهای تنظیم‌شده اجرا می‌شود و هر اجرا یک نقطهٔ اندازه‌گیری ایجاد می‌کند.',
builtIn: 'داخلی',
builtInHelp: 'طرح‌های داخلی قابل ویرایش یا حذف نیستند. هنگام ایجاد آزمون یک نسخه را تنظیم کنید.',
modified: 'تغییریافته',
@@ -2126,6 +2131,51 @@ const message = {
resultHelp:
'میانه و کمینه/بیشینه فقط از اجراهای موفق بدون ناهنجاری درخواست محاسبه می‌شوند. P99 میانه P99 هر اجرا است. کش و ترافیک بیرونی کنترل نشده‌اند.',
},
benchmarkSettings: {
settingsHelp:
'ابتدا ایمیج Benchmark و یک طرح آزمون را آماده کنید. پس از آماده شدن هر دو، می‌توانید آزمون معیار ایجاد کنید.',
imageAvailable: 'ایمیج Benchmark آماده است ({image})',
imageUnavailable: 'ایمیج Benchmark یافت نشد ({image})',
prepareHelp: 'پیش از ایجاد آزمون معیار، ایمیج Benchmark و طرح‌های آزمون را در {settings} آماده کنید.',
image: 'ایمیج Benchmark',
ready: 'آماده',
unconfigured: 'پیکربندی نشده',
checkFailed: 'بررسی ناموفق',
imageMissing: 'ایمیج موردنیاز یافت نشد. {image} را در بخش مدیریت ایمیج دریافت کنید.',
imageReady: 'ایمیج Benchmark برای ایجاد آزمون آماده است.',
imageHelp:
'ایمیج Benchmark کلاینت آزمون بار را اجرا کرده و درخواست‌ها را به سرویس مدل انتخاب‌شده ارسال می‌کند.',
mainNodeHelp: 'آزمون‌ها روی گره اصلی اجرا می‌شوند. ایمیج و توکن‌ساز را روی همان گره آماده کنید.',
goImages: 'رفتن به مدیریت ایمیج',
goModels: 'رفتن به دانلود مدل',
tokenizerHelp:
'توکن‌ساز متن آزمون را کدگذاری و توکن‌ها را شمارش می‌کند. مدلی با فایل‌های توکن‌ساز معتبر از پوشه پیش‌فرض مدل‌ها انتخاب کنید.',
tokenizerEmpty: 'مدلی در دسترس نیست. مدلی حاوی فایل‌های توکن‌ساز را از صفحه دانلود مدل دریافت کنید.',
tokenizerEmptyWithDownload:
'مدلی در دسترس نیست. صفحه {download} را باز کنید و مدلی حاوی فایل‌های توکن‌ساز دانلود کنید.',
tokenizerInvalid:
'توکن‌ساز این مدل قابل استفاده نیست. مدل دیگری انتخاب کنید یا فایل‌های آن را در صفحه دانلود مدل آماده کنید.',
schemeHelp:
'طرح‌های آزمون، پارامترهای درخواست، هم‌زمانی و قواعد اجرا را تعیین می‌کنند. حداقل یک طرح قابل استفاده آماده کنید.',
schemeEmpty: 'طرح آزمونی موجود نیست. ابتدا یک طرح ایجاد کنید.',
manageSchemes: 'مدیریت طرح‌های آزمون',
selectService: 'یک سرویس مدل انتخاب کنید',
serviceHelp:
'سرویس مدلی را برای آزمون انتخاب کنید. درخواست‌ها به این سرویس ارسال می‌شوند؛ از دسترس‌پذیر بودن آن مطمئن شوید.',
noServices: 'سرویس مدلی موجود نیست. ابتدا یک سرویس مدل اضافه کنید.',
goModelServices: 'رفتن به سرویس‌های مدل',
unsupportedServices: 'سرویس‌های پشتیبانی‌نشده غیرفعال هستند. برای مشاهده دلیل، نشانگر را روی گزینه نگه دارید.',
unsupportedProtocol:
'این پروتکل API پشتیبانی نمی‌شود: {0}. سرویسی با پروتکل OpenAI Chat Completions انتخاب کنید.',
unsupportedAuth: 'این روش احراز هویت پشتیبانی نمی‌شود: {0}. سرویسی با احراز هویت Bearer انتخاب کنید.',
serviceModelsMissing: 'این سرویس هنوز مدلی ندارد. در بخش مدیریت سرویس مدل، مدل اضافه کنید.',
prerequisitesTitle: 'ابتدا تنظیمات آزمون معیار را تکمیل کنید',
prerequisitesMissing: 'پیش‌نیازهای زیر آماده نیستند: {0}. آن‌ها را در تنظیمات تکمیل کنید.',
precheckFailed: 'بررسی پیش‌نیازهای آزمون ممکن نشد. تنظیمات را باز کرده و دوباره بررسی کنید.',
goSettings: 'رفتن به تنظیمات',
retestServiceHelp:
'آزمون مجدد پارامترهای وظیفه را حفظ می‌کند. سرویس مدل فعلی را تأیید کنید؛ اطلاعات احراز هویت از سرویس انتخاب‌شده خوانده می‌شود.',
},
benchmarkOverview: {
comparison: 'مقایسه سناریوها و هم\u200cزمانی',
comparisonHelp: 'برای مشاهده جزئیات هر ترکیب روی نام سناریو کلیک کنید.',
+53
View File
@@ -1624,6 +1624,8 @@ const message = {
},
benchmark: {
title: 'ベンチマーク',
description:
'モデルサービスのベンチマークを実行し、リクエストの長さや同時実行数の設定ごとに、スループット、最初のトークンまでの時間、リクエストの所要時間などの指標を評価します。',
launchCommand: '起動コマンド',
retest: '再テスト',
statusRunning: '実行中',
@@ -2091,6 +2093,9 @@ const message = {
fullDescription: '長い入力と共有プレフィックスを含む、複数シナリオ・同時実行数での反復測定です。',
customDescription: '1つのシナリオから始め、パラメーターを設定し、必要に応じて追加します。',
scenarios: 'シナリオ',
scenarioCount: 'シナリオ(合計 {count} 件)',
scenarioHelp:
'各シナリオでは、入力/出力トークン数、同時実行数の段階、リクエストパラメーターを定義します。各同時実行数を順番にテストし、設定した反復回数だけ実行します。実行ごとに 1 つの測定点が生成されます。',
builtIn: '組み込み',
builtInHelp: '組み込みプランは編集・削除できません。テスト作成時にコピーを調整できます。',
modified: '変更済み',
@@ -2130,6 +2135,54 @@ const message = {
resultHelp:
'要求異常のない成功した試行のみを集計し、中央値と最小・最大値を表示します。P99 は試行ごとの P99 の中央値です。キャッシュと外部トラフィックは制御されません。',
},
benchmarkSettings: {
settingsHelp:
'Benchmark イメージとテストプランを準備してください。両方の準備が完了すると、ベンチマークを作成できます。',
imageAvailable: 'Benchmark イメージは準備済みです({image})',
imageUnavailable: 'Benchmark イメージが見つかりません({image})',
retestServiceHelp:
'再テストではタスクのパラメーターを引き継ぎます。現在のモデルサービスを確認してください。認証情報は選択したサービスから読み込まれます。',
prepareHelp: 'ベンチマークを作成する前に、{settings} で Benchmark イメージとテストプランを準備してください。',
image: 'Benchmark イメージ',
ready: '準備完了',
unconfigured: '未設定',
checkFailed: '確認失敗',
imageMissing: '必要なイメージが見つかりません。イメージ管理で {image} を取得してください。',
imageReady: 'Benchmark イメージの準備ができました。ベンチマークを作成できます。',
imageHelp:
'Benchmark イメージは負荷テストクライアントを実行し、選択したモデルサービスにリクエストを送信します。',
mainNodeHelp:
'ベンチマークはメインノードで実行されます。イメージとトークナイザーをメインノードで準備してください。',
goImages: 'イメージ管理へ',
goModels: 'モデルダウンロードへ',
tokenizerHelp:
'トークナイザーはテストテキストのエンコードとトークン数の計算に使用します。既定のモデルディレクトリから有効なトークナイザーファイルを含むモデルを選択してください。',
tokenizerEmpty:
'利用できるモデルがありません。モデルダウンロードでトークナイザーファイルを含むモデルをダウンロードしてください。',
tokenizerEmptyWithDownload:
'利用できるモデルがありません。{download}ページでトークナイザーファイルを含むモデルをダウンロードしてください。',
tokenizerInvalid:
'このモデルのトークナイザーは使用できません。別のモデルを選択するか、モデルダウンロードでファイルを準備し直してください。',
schemeHelp:
'テストプランはリクエストパラメーター、同時実行数、実行ルールを定義します。利用できるプランを少なくとも 1 つ準備してください。',
schemeEmpty: '利用できるテストプランがありません。先にプランを作成してください。',
manageSchemes: 'テストプランの管理',
selectService: 'モデルサービスを選択',
serviceHelp:
'ベンチマークするモデルサービスを選択してください。このサービスにリクエストが送信されるため、接続可能であることを確認してください。',
noServices: '利用できるモデルサービスがありません。先にモデルサービスを追加してください。',
goModelServices: 'モデルサービスへ',
unsupportedServices: '未対応のサービスは選択できません。選択肢にカーソルを合わせると理由を確認できます。',
unsupportedProtocol:
'この API プロトコルには対応していません: {0}。OpenAI Chat Completions を使用するモデルサービスを選択してください。',
unsupportedAuth: 'この認証方式には対応していません: {0}。Bearer 認証を使用するサービスを選択してください。',
serviceModelsMissing:
'このサービスにはモデルが設定されていません。モデルサービス管理でモデルを追加してください。',
prerequisitesTitle: '先にベンチマーク設定を完了してください',
prerequisitesMissing: '次の準備が完了していません: {0}。設定で準備を完了してください。',
precheckFailed: 'ベンチマークの前提条件を確認できませんでした。設定を開いてもう一度確認してください。',
goSettings: '設定へ',
},
benchmarkOverview: {
comparison: 'シナリオと同時実行数の比較',
comparisonHelp: 'シナリオ名をクリックすると、その組み合わせの詳細を表示します。',
+51
View File
@@ -1608,6 +1608,8 @@ const message = {
},
benchmark: {
title: '벤치마크',
description:
'모델 서비스의 벤치마크를 실행하여 다양한 요청 길이와 동시 실행 설정에서 처리량, 첫 토큰까지 걸리는 시간, 요청 지연 시간 등의 지표를 평가합니다.',
launchCommand: '시작 명령',
retest: '다시 테스트',
statusRunning: '실행 중',
@@ -2070,6 +2072,9 @@ const message = {
fullDescription: '긴 입력과 공유 접두사를 포함하여 여러 시나리오와 동시 요청 수로 반복 측정합니다.',
customDescription: '시나리오 하나로 시작하여 매개변수를 설정하고 필요에 따라 추가합니다.',
scenarios: '시나리오',
scenarioCount: '시나리오(총 {count}개)',
scenarioHelp:
'각 시나리오는 입력/출력 토큰 수, 동시 실행 수준 및 요청 매개변수를 정의합니다. 동시 실행 수준을 순서대로 테스트하고, 각 수준을 설정된 반복 횟수만큼 실행하며, 실행할 때마다 측정점 하나를 생성합니다.',
builtIn: '기본 제공',
builtInHelp: '기본 제공 계획은 수정하거나 삭제할 수 없습니다. 테스트 생성 시 복사본을 조정하세요.',
modified: '수정됨',
@@ -2109,6 +2114,52 @@ const message = {
resultHelp:
'요청 이상이 없는 성공한 실행만 중앙값과 최솟값/최댓값에 포함합니다. P99는 각 실행 P99의 중앙값입니다. 캐시와 외부 트래픽은 통제되지 않습니다.',
},
benchmarkSettings: {
settingsHelp:
'Benchmark 이미지와 테스트 계획을 먼저 준비하세요. 두 항목이 모두 준비되면 벤치마크를 생성할 수 있습니다.',
imageAvailable: 'Benchmark 이미지가 준비되었습니다 ({image})',
imageUnavailable: 'Benchmark 이미지를 찾을 수 없습니다 ({image})',
retestServiceHelp:
'재테스트는 작업 매개변수를 유지합니다. 현재 모델 서비스를 확인하세요. 인증 정보는 선택한 서비스에서 불러옵니다.',
prepareHelp: '벤치마크를 생성하기 전에 {settings}에서 Benchmark 이미지와 테스트 계획을 준비하세요.',
image: 'Benchmark 이미지',
ready: '준비됨',
unconfigured: '미설정',
checkFailed: '확인 실패',
imageMissing: '필요한 이미지를 찾을 수 없습니다. 이미지 관리에서 {image} 이미지를 가져오세요.',
imageReady: 'Benchmark 이미지가 준비되었습니다. 벤치마크를 생성할 수 있습니다.',
imageHelp: 'Benchmark 이미지는 부하 테스트 클라이언트를 실행하고 선택한 모델 서비스에 요청을 보냅니다.',
mainNodeHelp: '벤치마크는 메인 노드에서 실행됩니다. 이미지와 토크나이저를 메인 노드에 준비하세요.',
goImages: '이미지 관리로 이동',
goModels: '모델 다운로드로 이동',
tokenizerHelp:
'토크나이저는 테스트 텍스트를 인코딩하고 토큰 수를 계산합니다. 기본 모델 디렉터리에서 유효한 토크나이저 파일이 포함된 모델을 선택하세요.',
tokenizerEmpty:
'사용 가능한 모델이 없습니다. 모델 다운로드에서 토크나이저 파일이 포함된 모델을 다운로드하세요.',
tokenizerEmptyWithDownload:
'사용 가능한 모델이 없습니다. {download} 페이지에서 토크나이저 파일이 포함된 모델을 다운로드하세요.',
tokenizerInvalid:
'이 모델의 토크나이저를 사용할 수 없습니다. 다른 모델을 선택하거나 모델 다운로드에서 파일을 다시 준비하세요.',
schemeHelp:
'테스트 계획은 요청 매개변수, 동시 실행 수 및 실행 규칙을 정의합니다. 사용 가능한 계획을 하나 이상 준비하세요.',
schemeEmpty: '사용 가능한 테스트 계획이 없습니다. 먼저 계획을 생성하세요.',
manageSchemes: '테스트 계획 관리',
selectService: '모델 서비스 선택',
serviceHelp:
'벤치마크할 모델 서비스를 선택하세요. 해당 서비스에 요청을 보내므로 정상적으로 접근할 수 있는지 확인하세요.',
noServices: '사용 가능한 모델 서비스가 없습니다. 먼저 모델 서비스를 추가하세요.',
goModelServices: '모델 서비스로 이동',
unsupportedServices:
'지원하지 않는 서비스는 선택할 수 없습니다. 항목 위에 마우스를 올리면 이유를 확인할 수 있습니다.',
unsupportedProtocol:
'지원하지 않는 API 프로토콜입니다: {0}. OpenAI Chat Completions를 사용하는 모델 서비스를 선택하세요.',
unsupportedAuth: '지원하지 않는 인증 방식입니다: {0}. Bearer 인증을 사용하는 서비스를 선택하세요.',
serviceModelsMissing: '이 서비스에 설정된 모델이 없습니다. 모델 서비스 관리에서 모델을 추가하세요.',
prerequisitesTitle: '먼저 벤치마크 설정을 완료하세요',
prerequisitesMissing: '다음 항목이 준비되지 않았습니다: {0}. 설정에서 준비를 완료하세요.',
precheckFailed: '벤치마크 사전 조건을 확인하지 못했습니다. 설정을 열고 다시 확인하세요.',
goSettings: '설정으로 이동',
},
benchmarkOverview: {
comparison: '시나리오 및 동시 요청 수 비교',
comparisonHelp: '시나리오 이름을 클릭하면 해당 조합의 상세 지표를 확인할 수 있습니다.',
+44
View File
@@ -1598,6 +1598,8 @@ const message = {
},
benchmark: {
title: 'ທົດສອບປະສິດທິພາບ (Benchmark)',
description:
'ທົດສອບປະສິດທິພາບຂອງບໍລິການໂມເດວດ້ວຍຄວາມຍາວຄຳຮ້ອງຂໍ ແລະ ການຕັ້ງຄ່າການຮ້ອງຂໍພ້ອມກັນທີ່ແຕກຕ່າງກັນ ເພື່ອປະເມີນຕົວຊີ້ວັດ ເຊັ່ນ ອັດຕາການປະມວນຜົນ, ເວລາຈົນຮອດໂທເຄັນທຳອິດ ແລະ ເວລາທີ່ໃຊ້ໃນການຮ້ອງຂໍ.',
launchCommand: 'ຄຳສັ່ງເລີ່ມຕົ້ນ',
retest: 'ທົດສອບໃໝ່',
statusRunning: 'ກຳລັງລັນ',
@@ -2057,6 +2059,9 @@ const message = {
'ຫຼາຍສະຖານະການ, ຫຼາຍລະດັບຄຳຮ້ອງຂໍພ້ອມກັນ ແລະການວັດແທກຊ້ຳ ລວມທັງຂໍ້ມູນເຂົ້າຍາວແລະຄຳນຳໜ້າຮ່ວມກັນ.',
customDescription: 'ເລີ່ມຈາກໜຶ່ງສະຖານະການ, ຕັ້ງຄ່າພາລາມິເຕີ ແລະເພີ່ມຕາມຄວາມຕ້ອງການ.',
scenarios: 'ສະຖານະການ',
scenarioCount: 'ສະຖານະການ (ທັງໝົດ {count})',
scenarioHelp:
'ແຕ່ລະສະຖານະການກຳນົດຈຳນວນໂທເຄັນຂາເຂົ້າ/ຂາອອກ, ລະດັບຄຳຮ້ອງຂໍພ້ອມກັນ ແລະພາລາມິເຕີຄຳຮ້ອງຂໍ. ແຕ່ລະລະດັບຈະຖືກທົດສອບຕາມລຳດັບ ແລະແລ່ນຊ້ຳຕາມຈຳນວນທີ່ກຳນົດ; ແຕ່ລະຄັ້ງສ້າງໜຶ່ງຈຸດວັດແທກ.',
builtIn: 'ມາພ້ອມລະບົບ',
builtInHelp: 'ແຜນທີ່ມາພ້ອມລະບົບແກ້ໄຂຫຼືລຶບບໍ່ໄດ້. ປັບສຳເນົາໃນເວລາສ້າງການທົດສອບ.',
modified: 'ປັບແລ້ວ',
@@ -2096,6 +2101,45 @@ const message = {
resultHelp:
'ຄ່າກາງ ແລະ ຄ່າຕ່ຳສຸດ/ສູງສຸດໃຊ້ສະເພາະການທົດສອບສຳເລັດທີ່ບໍ່ມີຄຳຮ້ອງຂໍຜິດປົກກະຕິ. P99 ແມ່ນຄ່າກາງຂອງ P99 ແຕ່ລະຄັ້ງ. ແຄຊ ແລະ ການຈະລາຈອນພາຍນອກບໍ່ໄດ້ຄວບຄຸມ.',
},
benchmarkSettings: {
settingsHelp: 'ກະລຸນາກະກຽມອິມເມຈ Benchmark ແລະແຜນທົດສອບກ່ອນ. ເມື່ອທັງສອງພ້ອມແລ້ວ ຈຶ່ງສາມາດສ້າງການທົດສອບໄດ້.',
imageAvailable: 'ອິມເມຈ Benchmark ພ້ອມໃຊ້ງານແລ້ວ ({image})',
imageUnavailable: 'ບໍ່ພົບອິມເມຈ Benchmark ({image})',
prepareHelp: 'ກ່ອນສ້າງການທົດສອບ, ກະກຽມອິມເມຈ Benchmark ແລະແຜນທົດສອບໃນ {settings}.',
image: 'ອິມເມຈ Benchmark',
ready: 'ພ້ອມໃຊ້ງານ',
unconfigured: 'ຍັງບໍ່ໄດ້ຕັ້ງຄ່າ',
checkFailed: 'ກວດສອບບໍ່ສຳເລັດ',
imageMissing: 'ບໍ່ພົບອິມເມຈທີ່ຕ້ອງການ. ກະລຸນາດຶງ {image} ໃນການຈັດການອິມເມຈ.',
imageReady: 'ອິມເມຈ Benchmark ພ້ອມສຳລັບສ້າງການທົດສອບແລ້ວ.',
imageHelp: 'ອິມເມຈ Benchmark ໃຊ້ແລ່ນໂປຣແກຣມທົດສອບໂຫຼດ ແລະສົ່ງຄຳຮ້ອງຂໍໄປຫາບໍລິການໂມເດວທີ່ເລືອກ.',
mainNodeHelp: 'ການທົດສອບແລ່ນຢູ່ໂນດຫຼັກ. ກະກຽມອິມເມຈ ແລະ tokenizer ຢູ່ໂນດນັ້ນ.',
goImages: 'ໄປຈັດການອິມເມຈ',
goModels: 'ໄປດາວໂຫຼດໂມເດວ',
tokenizerHelp:
'Tokenizer ໃຊ້ເຂົ້າລະຫັດຂໍ້ຄວາມທົດສອບ ແລະນັບ token. ເລືອກໂມເດວທີ່ມີໄຟລ໌ tokenizer ຖືກຕ້ອງຈາກໂຟນເດີໂມເດວເລີ່ມຕົ້ນ.',
tokenizerEmpty: 'ບໍ່ມີໂມເດວທີ່ໃຊ້ໄດ້. ດາວໂຫຼດໂມເດວທີ່ມີໄຟລ໌ tokenizer ໃນໜ້າດາວໂຫຼດໂມເດວ.',
tokenizerEmptyWithDownload: 'ບໍ່ມີໂມເດວທີ່ໃຊ້ໄດ້. ເປີດໜ້າ {download} ເພື່ອດາວໂຫຼດໂມເດວທີ່ມີໄຟລ໌ tokenizer.',
tokenizerInvalid: 'Tokenizer ຂອງໂມເດວນີ້ໃຊ້ບໍ່ໄດ້. ເລືອກໂມເດວອື່ນ ຫຼືກະກຽມໄຟລ໌ຄືນໃນໜ້າດາວໂຫຼດໂມເດວ.',
schemeHelp:
'ແຜນທົດສອບກຳນົດພາລາມິເຕີຄຳຮ້ອງຂໍ, ຈຳນວນການເຮັດວຽກພ້ອມກັນ ແລະກົດການແລ່ນ. ກະກຽມຢ່າງໜ້ອຍໜຶ່ງແຜນທີ່ໃຊ້ໄດ້.',
schemeEmpty: 'ບໍ່ມີແຜນທົດສອບທີ່ໃຊ້ໄດ້. ສ້າງແຜນກ່ອນ.',
manageSchemes: 'ຈັດການແຜນທົດສອບ',
selectService: 'ເລືອກບໍລິການໂມເດວ',
serviceHelp: 'ເລືອກບໍລິການໂມເດວທີ່ຈະທົດສອບ. ຄຳຮ້ອງຂໍຈະຖືກສົ່ງໄປບໍລິການນີ້; ກະລຸນາກວດວ່າເຂົ້າເຖິງໄດ້.',
noServices: 'ບໍ່ມີບໍລິການໂມເດວ. ເພີ່ມບໍລິການໂມເດວກ່ອນ.',
goModelServices: 'ໄປບໍລິການໂມເດວ',
unsupportedServices: 'ບໍລິການທີ່ບໍ່ຮອງຮັບຖືກປິດໃຊ້. ວາງເມົາສ໌ເທິງຕົວເລືອກເພື່ອເບິ່ງເຫດຜົນ.',
unsupportedProtocol: 'ຍັງບໍ່ຮອງຮັບໂປຣໂຕຄອນ API ນີ້: {0}. ເລືອກບໍລິການທີ່ໃຊ້ OpenAI Chat Completions.',
unsupportedAuth: 'ຍັງບໍ່ຮອງຮັບວິທີຢືນຢັນຕົວຕົນນີ້: {0}. ເລືອກບໍລິການທີ່ໃຊ້ Bearer.',
serviceModelsMissing: 'ບໍລິການນີ້ຍັງບໍ່ມີໂມເດວ. ເພີ່ມໂມເດວໃນການຈັດການບໍລິການໂມເດວ.',
prerequisitesTitle: 'ກະລຸນາຕັ້ງຄ່າການທົດສອບໃຫ້ຄົບກ່ອນ',
prerequisitesMissing: 'ລາຍການຕໍ່ໄປນີ້ຍັງບໍ່ພ້ອມ: {0}. ກະລຸນາກະກຽມໃຫ້ຄົບໃນການຕັ້ງຄ່າ.',
precheckFailed: 'ບໍ່ສາມາດກວດສອບການກະກຽມໄດ້. ເປີດການຕັ້ງຄ່າແລ້ວກວດຄືນ.',
goSettings: 'ໄປການຕັ້ງຄ່າ',
retestServiceHelp:
'ການທົດສອບຄືນຈະໃຊ້ພາລາມິເຕີຂອງວຽກເກົ່າ. ຢືນຢັນບໍລິການໂມເດວປັດຈຸບັນ; ຂໍ້ມູນຢືນຢັນຕົວຕົນຈະອ່ານຈາກບໍລິການທີ່ເລືອກ.',
},
benchmarkOverview: {
comparison: 'ປຽບທຽບສະຖານະການ ແລະ ຈຳນວນຄຳຮ້ອງພ້ອມກັນ',
comparisonHelp: 'ຄລິກຊື່ສະຖານະການເພື່ອເບິ່ງລາຍລະອຽດຂອງຊຸດນັ້ນ.',
+54
View File
@@ -1649,6 +1649,8 @@ const message = {
},
benchmark: {
title: 'Penanda Aras',
description:
'Jalankan penanda aras perkhidmatan model dengan panjang permintaan dan tetapan keserentakan yang berbeza untuk mengukur metrik seperti daya pemprosesan, masa hingga token pertama dan kependaman permintaan.',
launchCommand: 'Arahan Pelancaran',
retest: 'Uji Semula',
statusRunning: 'Sedang berjalan',
@@ -2130,6 +2132,9 @@ const message = {
'Pelbagai senario, tahap keserentakan dan ulangan, termasuk input panjang dan awalan dikongsi.',
customDescription: 'Mulakan dengan satu senario, tetapkan parameternya dan tambah lagi mengikut keperluan.',
scenarios: 'Senario',
scenarioCount: 'Senario ({count} keseluruhan)',
scenarioHelp:
'Setiap senario menentukan token input/output, tahap keserentakan dan parameter permintaan. Tahap keserentakan diuji mengikut urutan; setiap tahap dijalankan mengikut bilangan ulangan yang ditetapkan, dan setiap larian menghasilkan satu titik pengukuran.',
builtIn: 'Terbina dalam',
builtInHelp: 'Pelan terbina dalam tidak boleh disunting atau dipadam. Laraskan salinan semasa mencipta ujian.',
modified: 'Diubah suai',
@@ -2169,6 +2174,55 @@ const message = {
resultHelp:
'Median dan minimum/maksimum hanya melibatkan ujian berjaya tanpa anomali permintaan. P99 ialah median P99 setiap ujian. Cache dan trafik luaran tidak dikawal.',
},
benchmarkSettings: {
settingsHelp:
'Sediakan imej Benchmark dan skema ujian dahulu. Anda boleh mencipta penanda aras apabila kedua-duanya sedia.',
imageAvailable: 'Imej Benchmark sedia ({image})',
imageUnavailable: 'Imej Benchmark tidak ditemui ({image})',
prepareHelp: 'Sebelum mencipta penanda aras, sediakan imej Benchmark dan skema ujian dalam {settings}.',
image: 'Imej Benchmark',
ready: 'Sedia',
unconfigured: 'Belum dikonfigurasi',
checkFailed: 'Semakan gagal',
imageMissing: 'Imej yang diperlukan tidak ditemui. Tarik {image} dalam pengurusan imej.',
imageReady: 'Imej Benchmark sedia untuk mencipta ujian.',
imageHelp:
'Imej Benchmark menjalankan klien ujian beban dan menghantar permintaan ke perkhidmatan model yang dipilih.',
mainNodeHelp: 'Penanda aras dijalankan pada nod utama. Sediakan imej dan tokenizer pada nod tersebut.',
goImages: 'Ke pengurusan imej',
goModels: 'Ke muat turun model',
tokenizerHelp:
'Tokenizer mengekod teks ujian dan mengira token. Pilih model dengan fail tokenizer yang sah daripada direktori model lalai.',
tokenizerEmpty:
'Tiada model tersedia. Muat turun model yang mengandungi fail tokenizer di halaman muat turun model.',
tokenizerEmptyWithDownload:
'Tiada model tersedia. Buka {download} untuk memuat turun model yang mengandungi fail tokenizer.',
tokenizerInvalid:
'Tokenizer model ini tidak boleh digunakan. Pilih model lain atau sediakan failnya di halaman muat turun model.',
schemeHelp:
'Skema ujian menentukan parameter permintaan, keserentakan dan peraturan pelaksanaan. Sediakan sekurang-kurangnya satu skema yang tersedia.',
schemeEmpty: 'Tiada skema ujian tersedia. Cipta skema dahulu.',
manageSchemes: 'Urus skema ujian',
selectService: 'Pilih perkhidmatan model',
serviceHelp:
'Pilih perkhidmatan model untuk diuji. Permintaan akan dihantar ke perkhidmatan ini; pastikan ia boleh dicapai.',
noServices: 'Tiada perkhidmatan model tersedia. Tambah perkhidmatan model dahulu.',
goModelServices: 'Ke perkhidmatan model',
unsupportedServices:
'Perkhidmatan yang tidak disokong dinyahdayakan. Letakkan penuding pada pilihan untuk melihat sebabnya.',
unsupportedProtocol:
'Protokol API ini tidak disokong: {0}. Pilih perkhidmatan model yang menggunakan OpenAI Chat Completions.',
unsupportedAuth:
'Kaedah pengesahan ini tidak disokong: {0}. Pilih perkhidmatan yang menggunakan pengesahan Bearer.',
serviceModelsMissing:
'Perkhidmatan ini belum mempunyai model. Tambah model dalam pengurusan perkhidmatan model.',
prerequisitesTitle: 'Lengkapkan tetapan penanda aras dahulu',
prerequisitesMissing: 'Prasyarat berikut belum sedia: {0}. Lengkapkannya dalam tetapan.',
precheckFailed: 'Tidak dapat menyemak prasyarat penanda aras. Buka tetapan dan semak semula.',
goSettings: 'Ke tetapan',
retestServiceHelp:
'Ujian semula mengekalkan parameter tugas. Sahkan perkhidmatan model semasa; kelayakan dimuatkan daripada perkhidmatan yang dipilih.',
},
benchmarkOverview: {
comparison: 'Perbandingan senario dan keserentakan',
comparisonHelp: 'Klik nama senario untuk melihat butiran gabungan itu.',
+55
View File
@@ -1645,6 +1645,8 @@ const message = {
},
benchmark: {
title: 'Benchmark',
description:
'Execute testes de desempenho dos serviços de modelos com diferentes comprimentos de solicitação e configurações de simultaneidade para medir métricas como a taxa de processamento, o tempo até o primeiro token e a latência das solicitações.',
launchCommand: 'Comando de inicialização',
retest: 'Testar novamente',
statusRunning: 'Executando',
@@ -2126,6 +2128,9 @@ const message = {
'Vários cenários, níveis de concorrência e repetições, incluindo entradas longas e prefixos compartilhados.',
customDescription: 'Comece com um cenário, configure os parâmetros e adicione outros conforme necessário.',
scenarios: 'Cenários',
scenarioCount: 'Cenários ({count} no total)',
scenarioHelp:
'Cada cenário define os tokens de entrada/saída, os níveis de concorrência e os parâmetros das requisições. Os níveis são testados em sequência; cada nível é executado pelo número de repetições configurado e cada execução gera um ponto de medição.',
builtIn: 'Integrado',
builtInHelp: 'Planos integrados não podem ser editados ou excluídos. Ajuste uma cópia ao criar um teste.',
modified: 'Modificado',
@@ -2165,6 +2170,56 @@ const message = {
resultHelp:
'A mediana e os valores mínimo/máximo incluem apenas execuções bem-sucedidas sem anomalias. P99 é a mediana dos P99 de cada execução. Cache e tráfego externo não são controlados.',
},
benchmarkSettings: {
settingsHelp:
'Prepare a imagem do Benchmark e um plano de teste. Você poderá criar um benchmark quando ambos estiverem prontos.',
imageAvailable: 'A imagem do Benchmark está pronta ({image})',
imageUnavailable: 'A imagem do Benchmark não foi encontrada ({image})',
retestServiceHelp:
'Os novos testes mantêm os parâmetros da tarefa. Confirme o serviço de modelos atual; as credenciais são obtidas do serviço selecionado.',
prepareHelp: 'Antes de criar um benchmark, prepare a imagem Benchmark e os planos de teste em {settings}.',
image: 'Imagem do Benchmark',
ready: 'Pronto',
unconfigured: 'Não configurado',
checkFailed: 'Falha na verificação',
imageMissing: 'A imagem necessária não foi encontrada. Baixe {image} no gerenciamento de imagens.',
imageReady: 'A imagem do Benchmark está pronta para criar testes.',
imageHelp:
'A imagem do Benchmark executa o cliente de carga e envia solicitações ao serviço de modelos selecionado.',
mainNodeHelp: 'Os testes são executados no nó principal. Prepare a imagem e o tokenizador nesse nó.',
goImages: 'Ir ao gerenciamento de imagens',
goModels: 'Ir aos downloads de modelos',
tokenizerHelp:
'Os tokenizadores codificam o texto de teste e contam os tokens. Selecione um modelo com arquivos de tokenizador válidos no diretório padrão de modelos.',
tokenizerEmpty:
'Não há modelos disponíveis. Baixe um modelo com arquivos de tokenizador nos downloads de modelos.',
tokenizerEmptyWithDownload:
'Não há modelos disponíveis. Abra {download} para baixar um modelo com arquivos de tokenizador.',
tokenizerInvalid:
'Este modelo não tem um tokenizador utilizável. Selecione outro modelo ou prepare seus arquivos nos downloads de modelos.',
schemeHelp:
'Os planos de teste definem os parâmetros de solicitação, a concorrência e as regras de execução. Prepare pelo menos um plano disponível.',
schemeEmpty: 'Não há planos de teste disponíveis. Crie um primeiro.',
manageSchemes: 'Gerenciar planos de teste',
selectService: 'Selecione um serviço de modelos',
serviceHelp:
'Selecione o serviço de modelos que deseja testar. As solicitações serão enviadas a esse serviço; confirme que ele está acessível.',
noServices: 'Não há serviços de modelos disponíveis. Adicione um primeiro.',
goModelServices: 'Ir aos serviços de modelos',
unsupportedServices:
'Os serviços incompatíveis estão desativados. Passe o cursor sobre uma opção para ver o motivo.',
unsupportedProtocol:
'Este protocolo de API não é compatível: {0}. Selecione um serviço de modelos que use OpenAI Chat Completions.',
unsupportedAuth:
'Este método de autenticação não é compatível: {0}. Selecione um serviço com autenticação Bearer.',
serviceModelsMissing:
'Este serviço não tem modelos configurados. Adicione modelos no gerenciamento de serviços de modelos.',
prerequisitesTitle: 'Conclua primeiro as configurações do teste',
prerequisitesMissing: 'Os seguintes pré-requisitos não estão prontos: {0}. Conclua-os nas configurações.',
precheckFailed:
'Não foi possível verificar os pré-requisitos do teste. Abra as configurações e verifique novamente.',
goSettings: 'Ir às configurações',
},
benchmarkOverview: {
comparison: 'Comparação de cenários e concorrência',
comparisonHelp: 'Clique em um cenário para ver os detalhes dessa combinação.',
+52
View File
@@ -1638,6 +1638,8 @@ const message = {
},
benchmark: {
title: 'Бенчмарк',
description:
'Проводите тестирование производительности сервисов моделей при разной длине запросов и разных настройках параллелизма, чтобы оценить такие показатели, как пропускная способность, время до первого токена и задержку запросов.',
launchCommand: 'Команда запуска',
retest: 'Повторить тест',
statusRunning: 'Выполняется',
@@ -2123,6 +2125,9 @@ const message = {
'Разные сценарии, уровни параллелизма и повторные измерения, включая длинные входы и общие префиксы.',
customDescription: 'Начните с одного сценария, настройте параметры и добавьте другие при необходимости.',
scenarios: 'Сценарии',
scenarioCount: 'Сценарии (всего {count})',
scenarioHelp:
'Каждый сценарий задаёт число входных/выходных токенов, уровни параллелизма и параметры запросов. Уровни проверяются последовательно; каждый уровень выполняется заданное число повторов, и каждый запуск создаёт отдельную точку измерения.',
builtIn: 'Встроенный',
builtInHelp: 'Встроенные планы нельзя изменить или удалить. Настройте копию при создании теста.',
modified: 'Изменён',
@@ -2162,6 +2167,53 @@ const message = {
resultHelp:
'Медиана и минимум/максимум рассчитываются только по успешным запускам без аномалий запросов. P99 — медиана P99 отдельных запусков. Кеш и внешний трафик не контролируются.',
},
benchmarkSettings: {
settingsHelp:
'Подготовьте образ Benchmark и схему тестирования. Когда оба компонента будут готовы, можно создать тест производительности.',
imageAvailable: 'Образ Benchmark готов ({image})',
imageUnavailable: 'Образ Benchmark не найден ({image})',
retestServiceHelp:
'При повторном тесте сохраняются параметры задачи. Подтвердите текущий сервис модели; данные авторизации загружаются из выбранного сервиса.',
prepareHelp: 'Перед созданием теста подготовьте образ Benchmark и схемы тестирования в разделе {settings}.',
image: 'Образ Benchmark',
ready: 'Готово',
unconfigured: 'Не настроено',
checkFailed: 'Ошибка проверки',
imageMissing: 'Необходимый образ не найден. Загрузите {image} в разделе управления образами.',
imageReady: 'Образ Benchmark готов к созданию тестов.',
imageHelp:
'Образ Benchmark запускает клиент нагрузочного тестирования и отправляет запросы выбранному сервису модели.',
mainNodeHelp: 'Тесты выполняются на главном узле. Подготовьте образ и токенизатор на этом узле.',
goImages: 'К управлению образами',
goModels: 'К загрузке моделей',
tokenizerHelp:
'Токенизаторы кодируют тестовый текст и подсчитывают токены. Выберите модель с корректными файлами токенизатора из каталога моделей по умолчанию.',
tokenizerEmpty: 'Нет доступных моделей. Загрузите модель с файлами токенизатора в разделе загрузки моделей.',
tokenizerEmptyWithDownload:
'Нет доступных моделей. Откройте раздел {download}, чтобы загрузить модель с файлами токенизатора.',
tokenizerInvalid:
'Токенизатор этой модели недоступен. Выберите другую модель или подготовьте файлы заново в разделе загрузки моделей.',
schemeHelp:
'Схемы тестирования определяют параметры запросов, параллелизм и правила выполнения. Подготовьте хотя бы одну доступную схему.',
schemeEmpty: 'Нет доступных схем тестирования. Сначала создайте схему.',
manageSchemes: 'Управление схемами тестирования',
selectService: 'Выберите сервис модели',
serviceHelp:
'Выберите сервис модели для тестирования. Запросы будут отправляться этому сервису; убедитесь, что он доступен.',
noServices: 'Нет доступных сервисов моделей. Сначала добавьте сервис модели.',
goModelServices: 'К сервисам моделей',
unsupportedServices:
'Неподдерживаемые сервисы недоступны для выбора. Наведите указатель на пункт, чтобы узнать причину.',
unsupportedProtocol:
'Этот протокол API не поддерживается: {0}. Выберите сервис модели с протоколом OpenAI Chat Completions.',
unsupportedAuth: 'Этот способ авторизации не поддерживается: {0}. Выберите сервис с авторизацией Bearer.',
serviceModelsMissing:
'Для этого сервиса не настроены модели. Добавьте модели в разделе управления сервисами моделей.',
prerequisitesTitle: 'Сначала завершите настройку тестирования',
prerequisitesMissing: 'Не готовы следующие компоненты: {0}. Завершите их настройку.',
precheckFailed: 'Не удалось проверить готовность к тестированию. Откройте настройки и повторите проверку.',
goSettings: 'К настройкам',
},
benchmarkOverview: {
comparison: 'Сравнение сценариев и параллелизма',
comparisonHelp: 'Нажмите на название сценария, чтобы открыть показатели этой комбинации.',
+51
View File
@@ -1644,6 +1644,8 @@ const message = {
},
benchmark: {
title: 'Benchmark',
description:
'Model hizmetlerini farklı istek uzunlukları ve eşzamanlılık ayarlarıyla test ederek aktarım hızı, ilk token süresi ve istek gecikmesi gibi metrikleri ölçün.',
launchCommand: 'Başlatma Komutu',
retest: 'Yeniden test et',
statusRunning: 'Çalışıyor',
@@ -2124,6 +2126,9 @@ const message = {
'Uzun girdiler ve ortak önekler dahil, farklı senaryolar ve eşzamanlılık düzeylerinde tekrarlı ölçümler.',
customDescription: 'Bir senaryoyla başlayın, parametrelerini ayarlayın ve gerektiğinde yenilerini ekleyin.',
scenarios: 'Senaryolar',
scenarioCount: 'Senaryolar (toplam {count})',
scenarioHelp:
'Her senaryo giriş/çıkış token sayılarını, eşzamanlılık düzeylerini ve istek parametrelerini tanımlar. Eşzamanlılık düzeyleri sırayla test edilir; her düzey ayarlanan tekrar sayısı kadar çalıştırılır ve her çalıştırma bir ölçüm noktası oluşturur.',
builtIn: 'Yerleşik',
builtInHelp: 'Yerleşik planlar düzenlenemez veya silinemez. Test oluştururken bir kopyayı ayarlayın.',
modified: 'Değiştirildi',
@@ -2163,6 +2168,52 @@ const message = {
resultHelp:
'Medyan ve en düşük/en yüksek değerler yalnızca istek anomalisi olmayan başarılı çalışmaları içerir. P99, çalışma başına P99 değerlerinin medyanıdır. Önbellek ve dış trafik kontrol edilmez.',
},
benchmarkSettings: {
settingsHelp:
'Önce Benchmark imajını ve bir test planını hazırlayın. Her ikisi de hazır olduğunda bir kıyaslama testi oluşturabilirsiniz.',
imageAvailable: 'Benchmark imajı hazır ({image})',
imageUnavailable: 'Benchmark imajı bulunamadı ({image})',
retestServiceHelp:
'Yeniden testler görev parametrelerini korur. Geçerli model hizmetini doğrulayın; kimlik bilgileri seçilen hizmetten alınır.',
prepareHelp:
'Bir kıyaslama oluşturmadan önce {settings} bölümünde Benchmark imajını ve test planlarını hazırlayın.',
image: 'Benchmark imajı',
ready: 'Hazır',
unconfigured: 'Yapılandırılmadı',
checkFailed: 'Kontrol başarısız',
imageMissing: 'Gerekli imaj bulunamadı. İmaj yönetiminde {image} imajını indirin.',
imageReady: 'Benchmark imajı test oluşturmaya hazır.',
imageHelp: 'Benchmark imajı yük testi istemcisini çalıştırır ve seçilen model hizmetine istek gönderir.',
mainNodeHelp: 'Testler ana düğümde çalışır. İmajı ve tokenizer dosyalarını bu düğümde hazırlayın.',
goImages: 'İmaj yönetimine git',
goModels: 'Model indirmelerine git',
tokenizerHelp:
'Tokenizer test metnini kodlar ve token sayısını hesaplar. Varsayılan model dizininden geçerli tokenizer dosyaları içeren bir model seçin.',
tokenizerEmpty: 'Kullanılabilir model yok. Model indirmelerinden tokenizer dosyaları içeren bir model indirin.',
tokenizerEmptyWithDownload:
'Kullanılabilir model yok. Tokenizer dosyaları içeren bir model indirmek için {download} sayfasını açın.',
tokenizerInvalid:
'Bu modelde kullanılabilir tokenizer yok. Başka bir model seçin veya model indirmelerinde dosyalarını hazırlayın.',
schemeHelp:
'Test planları istek parametrelerini, eşzamanlılığı ve yürütme kurallarını tanımlar. En az bir kullanılabilir plan hazırlayın.',
schemeEmpty: 'Kullanılabilir test planı yok. Önce bir plan oluşturun.',
manageSchemes: 'Test planlarını yönet',
selectService: 'Bir model hizmeti seçin',
serviceHelp:
'Test edilecek model hizmetini seçin. Bu hizmete istek gönderilecektir; erişilebilir olduğundan emin olun.',
noServices: 'Kullanılabilir model hizmeti yok. Önce bir model hizmeti ekleyin.',
goModelServices: 'Model hizmetlerine git',
unsupportedServices: 'Desteklenmeyen hizmetler devre dışı. Nedenini görmek için seçeneğin üzerine gelin.',
unsupportedProtocol:
'Bu API protokolü desteklenmiyor: {0}. OpenAI Chat Completions kullanan bir model hizmeti seçin.',
unsupportedAuth:
'Bu kimlik doğrulama yöntemi desteklenmiyor: {0}. Bearer kimlik doğrulaması kullanan bir hizmet seçin.',
serviceModelsMissing: 'Bu hizmette yapılandırılmış model yok. Model hizmeti yönetiminden model ekleyin.',
prerequisitesTitle: 'Önce test ayarlarını tamamlayın',
prerequisitesMissing: 'Şu ön koşullar hazır değil: {0}. Ayarlardan tamamlayın.',
precheckFailed: 'Test ön koşulları kontrol edilemedi. Ayarları açıp tekrar kontrol edin.',
goSettings: 'Ayarlara git',
},
benchmarkOverview: {
comparison: 'Senaryo ve eşzamanlılık karşılaştırması',
comparisonHelp: 'Bu birleşimin ayrıntılarını görmek için senaryo adına tıklayın.',
+41
View File
@@ -1541,6 +1541,8 @@ const message = {
},
benchmark: {
title: '基準測試',
description:
'對模型服務進行基準測試,評估不同請求長度和並行設定下的吞吐量、首 Token 延遲及請求耗時等指標。',
launchCommand: '啟動命令',
retest: '重新測試',
statusRunning: '執行中',
@@ -1986,6 +1988,9 @@ const message = {
fullDescription: '多場景、多並行與重複測量,包含長輸入和共用前綴。',
customDescription: '從一個場景開始,依需求設定參數並新增場景。',
scenarios: '場景',
scenarioCount: '共 {count} 個場景',
scenarioHelp:
'每個場景定義輸入/輸出 Token、併發檔位及請求參數;各併發檔位依序測試,每個檔位按重複次數執行,每次執行產生一個測點。',
builtIn: '內建',
builtInHelp: '內建方案不可編輯或刪除,可在建立測試時調整本次設定。',
modified: '已調整',
@@ -2025,6 +2030,42 @@ const message = {
resultHelp:
'彙總僅採用成功且無請求異常的重複測試,顯示中位數與最小/最大值。P99 是各次 P99 的中位數;快取與外部流量未受控。',
},
benchmarkSettings: {
settingsHelp: '請先準備 Benchmark 映像和測試方案,兩項均就緒後即可建立基準測試。',
imageAvailable: 'Benchmark 映像已就緒({image})',
imageUnavailable: '未偵測到 Benchmark 映像({image})',
retestServiceHelp: '重新測試沿用任務的測試參數,請確認目前模型服務;驗證資訊將從所選服務讀取。',
prepareHelp: '建立基準測試前,請先在「{settings}」中完成 Benchmark 映像和測試方案的準備。',
image: 'Benchmark 映像',
ready: '已就緒',
unconfigured: '未設定',
checkFailed: '檢查失敗',
imageMissing: '尚未偵測到所需映像,請前往映像管理拉取 {image}。',
imageReady: 'Benchmark 映像已準備就緒,可用於建立基準測試。',
imageHelp: 'Benchmark 映像用於執行壓測用戶端,測試請求將傳送至所選模型服務。',
mainNodeHelp: '基準測試在主節點執行,映像和分詞器均從主節點檢查。請在主節點準備資源。',
goImages: '前往映像管理',
goModels: '前往模型下載',
tokenizerHelp: '分詞器用於對測試文字進行 Token 編碼及統計,請從預設模型目錄選擇包含有效分詞器檔案的模型。',
tokenizerEmpty: '暫無可用模型,請前往模型下載頁面下載包含分詞器檔案的模型。',
tokenizerEmptyWithDownload: '暫無可用模型,請前往 {download} 頁面下載包含分詞器檔案的模型。',
tokenizerInvalid: '目前模型的分詞器無法使用,請選擇其他模型或前往模型下載頁面重新準備。',
schemeHelp: '測試方案用於定義請求參數、並行設定及執行規則,請至少準備一個可用方案。',
schemeEmpty: '暫無可用測試方案,請先建立測試方案。',
manageSchemes: '管理測試方案',
selectService: '請選擇模型服務',
serviceHelp: '請選擇需要進行基準測試的模型服務。測試將向所選服務傳送請求,請確認服務可以正常存取。',
noServices: '暫無模型服務,請先新增模型服務。',
goModelServices: '前往模型服務',
unsupportedServices: '不相容的服務已停用,可將滑鼠停留在選項上查看原因。',
unsupportedProtocol: '暫不支援此介面協定:{0}。請選擇使用 OpenAI Chat Completions 協定的模型服務。',
unsupportedAuth: '暫不支援此驗證方式:{0}。請選擇使用 Bearer 驗證的模型服務。',
serviceModelsMissing: '此服務尚未設定模型,請前往模型服務管理新增模型。',
prerequisitesTitle: '請先完成基準測試設定',
prerequisitesMissing: '以下設定尚未就緒:{0}。請前往設定完成準備。',
precheckFailed: '無法確認基準測試設定狀態,請前往設定重新檢查。',
goSettings: '前往設定',
},
benchmarkOverview: {
comparison: '情境與並行數對照',
comparisonHelp: '點選情境名稱查看該組合的指標詳情。',
+41
View File
@@ -1554,6 +1554,8 @@ const message = {
},
benchmark: {
title: '基准测试',
description:
'对模型服务进行基准测试,评估不同请求长度和并发配置下的吞吐量、首 Token 延迟及请求耗时等指标。',
launchCommand: '启动命令',
retest: '重新测试',
statusRunning: '运行中',
@@ -1994,6 +1996,9 @@ const message = {
fullDescription: '多场景、多并发与重复测量,包含长输入和共享前缀。',
customDescription: '从一个场景开始,按需设置参数并添加场景。',
scenarios: '场景',
scenarioCount: '共 {count} 个场景',
scenarioHelp:
'每个场景定义输入/输出 Token、并发档位及请求参数;各并发档位依次测试,每个档位按重复次数执行,每次执行生成一个测点。',
builtIn: '内置',
builtInHelp: '内置方案不可编辑或删除,可在创建测试时调整本次配置。',
modified: '已调整',
@@ -2033,6 +2038,42 @@ const message = {
resultHelp:
'汇总仅使用成功且无请求异常的重复测试,显示中位数和最小/最大值。P99 是每次测试 P99 的中位数;缓存和外部流量未受控。',
},
benchmarkSettings: {
settingsHelp: '请先准备 Benchmark 镜像和测试方案,两项均就绪后即可创建基准测试。',
imageAvailable: 'Benchmark 镜像已就绪({image})',
imageUnavailable: '未检测到 Benchmark 镜像({image})',
retestServiceHelp: '重测沿用任务的测试参数,请确认当前模型服务;鉴权信息将从所选服务读取。',
prepareHelp: '创建基准测试前,请先在「{settings}」中完成 Benchmark 镜像和测试方案的准备。',
image: 'Benchmark 镜像',
ready: '已就绪',
unconfigured: '未配置',
checkFailed: '检查失败',
imageMissing: '尚未检测到所需镜像,请前往镜像管理拉取 {image}。',
imageReady: 'Benchmark 镜像已准备就绪,可以用于创建基准测试。',
imageHelp: 'Benchmark 镜像用于运行压测客户端,测试请求将发送到所选模型服务。',
mainNodeHelp: '基准测试在主节点执行,镜像和分词器均从主节点检查。请在主节点准备资源。',
goImages: '前往镜像管理',
goModels: '前往模型下载',
tokenizerHelp: '分词器用于对测试文本进行 Token 编码及统计,请从默认模型目录选择包含有效分词器文件的模型。',
tokenizerEmpty: '暂无可用模型,请前往模型下载页面下载包含分词器文件的模型。',
tokenizerEmptyWithDownload: '暂无可用模型,请前往 {download} 页面下载包含分词器文件的模型。',
tokenizerInvalid: '当前模型的分词器不可用,请选择其他模型或前往模型下载页面重新准备。',
schemeHelp: '测试方案用于定义请求参数、并发配置及执行规则,请至少准备一个可用方案。',
schemeEmpty: '暂无可用测试方案,请先创建测试方案。',
manageSchemes: '管理测试方案',
selectService: '请选择模型服务',
serviceHelp: '请选择需要进行基准测试的模型服务。测试将向所选服务发送请求,请确保服务可以正常访问。',
noServices: '暂无模型服务,请先添加模型服务。',
goModelServices: '前往模型服务',
unsupportedServices: '不兼容的服务已禁用,可悬停查看原因。',
unsupportedProtocol: '暂不支持此接口协议:{0}。请选择使用 OpenAI Chat Completions 协议的模型服务。',
unsupportedAuth: '暂不支持此鉴权方式:{0}。请选择使用 Bearer 鉴权的模型服务。',
serviceModelsMissing: '该服务尚未配置模型,请前往模型服务管理添加模型。',
prerequisitesTitle: '请先完成基准测试设置',
prerequisitesMissing: '以下配置尚未就绪:{0}。请前往设置完成准备。',
precheckFailed: '无法确认基准测试配置状态,请前往设置重新检查。',
goSettings: '前往设置',
},
benchmarkOverview: {
comparison: '场景与并发对照',
comparisonHelp: '点击场景名称查看该组合的指标详情。',
+87 -5
View File
@@ -162,7 +162,8 @@
<script lang="ts" setup>
import { useSearchState } from '@/utils/search-reset';
import { toRef, reactive, ref, computed, watch, onBeforeUnmount } from 'vue';
import { toRef, reactive, ref, computed, watch, onActivated, onDeactivated, onBeforeUnmount } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { dateFormat } from '@/utils/date';
import { newUUID } from '@/utils/id';
import { computeSize2 } from '@/utils/size';
@@ -179,14 +180,25 @@ import Prune from '@/views/container/image/prune/index.vue';
import DockerStatus from '@/views/container/docker-status/index.vue';
import CodemirrorDrawer from '@/components/codemirror-pro/drawer.vue';
import TaskLog from '@/components/log/task/index.vue';
import { searchImage, listImageRepo, imageRemove, inspect, containerPrune, imagePull } from '@/api/modules/container';
import {
searchImage,
listImageRepo,
imageRemove,
inspect,
containerPrune,
imagePull,
loadDockerStatus,
} from '@/api/modules/container';
import i18n from '@/lang';
import { ElMessageBox } from 'element-plus';
import { updateCommonDescription } from '@/api/modules/setting';
import { MsgError, MsgSuccess } from '@/utils/message';
import { useGlobalStore } from '@/composables/useGlobalStore';
const { isMobile, currentNode } = useGlobalStore();
const { isMobile, currentNode, globalStore } = useGlobalStore();
const route = useRoute();
const router = useRouter();
let pageActive = true;
const taskLogRef = ref();
const loading = ref(false);
@@ -271,7 +283,10 @@ const resetRepos = () => {
repos.value = undefined;
};
watch(currentNode, resetRepos, { flush: 'sync' });
onBeforeUnmount(resetRepos);
onBeforeUnmount(() => {
pageActive = false;
resetRepos();
});
const loadRepos = () => {
if (repoRequest) return repoRequest;
const version = repoGeneration;
@@ -344,15 +359,82 @@ const onInspect = async (id: string) => {
const remoteSearchRef = ref();
const onRemotePull = async (imageName: string) => {
const version = ++pullGeneration;
const node = currentNode.value;
try {
if (!repos.value) await loadRepos();
if (version !== pullGeneration) return;
if (
version !== pullGeneration ||
!pageActive ||
route.name !== 'Image' ||
node !== currentNode.value ||
!isActive.value ||
!isExist.value ||
!globalStore.hasPermission('container_manage')
)
return;
dialogPullRef.value!.acceptParams({ repos: repos.value, imageName });
} catch {
// The request interceptor displays errors.
}
};
let openingPullQuery = false;
const openRequestedPull = async () => {
if (openingPullQuery || !pageActive || route.name !== 'Image' || route.query.pull === undefined) return;
openingPullQuery = true;
const imageName = route.query.pull;
const requestPath = route.fullPath;
const node = currentNode.value;
const version = pullGeneration;
const isCurrent = () =>
pageActive && route.name === 'Image' && node === currentNode.value && version === pullGeneration;
const query = { ...route.query };
delete query.pull;
try {
const failure = await router.replace({ path: route.path, query, hash: route.hash });
if (
failure ||
!isCurrent() ||
!globalStore.hasPermission('container_manage') ||
typeof imageName !== 'string' ||
!/^[a-zA-Z0-9][a-z:@A-Z0-9_/.-]{0,255}$/.test(imageName)
)
return;
const { data: status } = await loadDockerStatus();
if (!isCurrent()) return;
const needsSearch = !isActive.value || !isExist.value;
isActive.value = status.isActive;
isExist.value = status.isExist;
if (!isActive.value || !isExist.value) return;
if (needsSearch) void search();
await onRemotePull(imageName);
} catch {
// Navigation and request errors use their existing handlers.
} finally {
openingPullQuery = false;
if (
pageActive &&
route.name === 'Image' &&
route.query.pull !== undefined &&
(route.fullPath !== requestPath || node !== currentNode.value || version !== pullGeneration)
)
void openRequestedPull();
}
};
watch(
() => route.fullPath,
() => void openRequestedPull(),
{ immediate: true, flush: 'post' },
);
onActivated(() => {
pageActive = true;
void openRequestedPull();
});
onDeactivated(() => {
pageActive = false;
pullGeneration++;
});
const onOpenPull = () => {
let params = {
repos: repos.value,