diff --git a/agent/app/service/app_upgrade.go b/agent/app/service/app_upgrade.go index 2f559a189..f079349f5 100644 --- a/agent/app/service/app_upgrade.go +++ b/agent/app/service/app_upgrade.go @@ -136,8 +136,8 @@ func upgradeInstall(req request.AppInstallUpgrade) error { if err = checkVllmVersionAccess(install.App.Key, detail.Version); err != nil { return err } - if install.App.Key == vllmAppKeyForUpgrade && !isVllmUpgradeVersionAllowed(install.Version, detail.Version, loadVllmImageFromEnv(install.Env)) { - return errors.New("vLLM can only upgrade within the same image type") + if install.App.Key == vllmAppKeyForUpgrade && !isVllmUpgradeCandidate(install.Version, detail.Version, loadVllmImageFromEnv(install.Env)) { + return errors.New("vLLM upgrade version is not supported") } if install.Version == detail.Version { return errors.New("two version is same") @@ -271,6 +271,9 @@ func (u *appUpgradeContext) prepare(t *task.Task) error { } image := buildVllmUpgradeImage(loadVllmImageFromEnv(stagedInstall.Env), u.original.Version, u.detail.Version) envs[vllmImageEnvKey] = image + if strings.HasPrefix(strings.ToLower(strings.TrimSpace(u.detail.Version)), vllmGB10VersionPrefix) { + envs["DSPARK_VLLM_IMAGE"] = image + } paramBytes, marshalErr := json.Marshal(envs) if marshalErr != nil { return marshalErr diff --git a/agent/app/service/vllm_upgrade.go b/agent/app/service/vllm_upgrade.go index 7b4034e2a..b5ac10f75 100644 --- a/agent/app/service/vllm_upgrade.go +++ b/agent/app/service/vllm_upgrade.go @@ -58,6 +58,9 @@ func resolveVllmVersionFamily(version, image string) string { func trimVllmVersionFamily(version string) string { trimmed := strings.TrimSpace(version) normalized := strings.ToLower(trimmed) + if strings.HasPrefix(normalized, vllmGB10VersionPrefix) { + return strings.TrimSpace(trimmed[len(vllmGB10VersionPrefix):]) + } for _, family := range []string{vllmImageTypeNvidia, vllmImageTypeIntel, vllmImageTypeAscend} { prefix := family + "-" if strings.HasPrefix(normalized, prefix) { @@ -69,6 +72,9 @@ func trimVllmVersionFamily(version string) string { func buildDefaultVllmImageByVersion(version string) string { tag := trimVllmVersionFamily(version) + if strings.HasPrefix(strings.ToLower(strings.TrimSpace(version)), vllmGB10VersionPrefix) { + return "1panel/vllm-gb10-dspark:" + tag + } family := resolveVllmVersionFamily(version, "") if family == vllmImageTypeIntel { return "intel/llm-scaler-vllm:" + tag @@ -83,6 +89,11 @@ func buildDefaultVllmImageByVersion(version string) string { } func isVllmUpgradeVersionAllowed(currentVersion, targetVersion, currentImage string) bool { + currentGB10 := strings.HasPrefix(strings.ToLower(strings.TrimSpace(currentVersion)), vllmGB10VersionPrefix) + targetGB10 := strings.HasPrefix(strings.ToLower(strings.TrimSpace(targetVersion)), vllmGB10VersionPrefix) + if currentGB10 != targetGB10 { + return false + } currentFamily := resolveVllmVersionFamily(currentVersion, currentImage) targetFamily := resolveVllmVersionFamily(targetVersion, "") return currentFamily == targetFamily @@ -102,7 +113,7 @@ func isVllmUpgradeCandidate(currentVersion, targetVersion, currentImage string) if !isVllmUpgradeVersionAllowed(currentVersion, targetVersion, currentImage) { return false } - if common.CompareVersion(targetVersion, currentVersion) { + if common.CompareVersion(trimVllmVersionFamily(targetVersion), trimVllmVersionFamily(currentVersion)) { return true } return !hasVllmVersionFamilyPrefix(currentVersion) && diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index 145c14527..4103be847 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -1071,8 +1071,8 @@ const message = { deploy: 'Deploy', approxWeightSize: 'Approx. {0} GB', services: 'Model services', + addInstance: 'Add instance', addService: 'Add model service', - addEngine: 'Add inference engine', onlineModel: 'Online models', instanceDeployment: 'Deploy by instance', engines: 'Local inference engines', @@ -1084,18 +1084,21 @@ const message = { files: 'Model preparation', connectExternal: 'Connect external service', recipes: 'vLLM Recipes', + recipeConfig: 'Recipe configuration', + selectRecipe: 'Select Recipe', createRecipe: 'Create Recipe', recipeHelper: - 'Recipe = model + hardware + launch arguments. Import from {link} or create from a downloaded model.', - recipeFormHelper: 'Paste a command from {link}, or fill in the fields manually.', + 'A Recipe describes how to launch a model on specific hardware, including the model, hardware, and launch arguments. Commands can be imported from {link}.', + recipeFormHelper: + 'Go to {link}, select the model provider, then select the target model. Configure the hardware, quantization variant, deployment strategy, and other options to generate the final launch command.', recipeArguments: 'Launch arguments', recipeImportCommand: 'Import command', - recipeImportPlaceholder: 'Paste Docker, pip/uv or vllm serve commands to fill in the Recipe automatically', + recipeImportPlaceholder: + 'Paste a pip/uv or Docker launch command here. 1Panel will automatically parse it and fill in the Recipe.', recipeVariablesNotSupported: 'Variable references are not supported in commands. Use explicit values; configure environment variables in the environment field.', recipeImportError: 'Unable to convert. Include a Docker or vllm serve launch command with a model; paste pip/uv installation commands together with the launch command.', - deploymentTemplates: 'vLLM startup command templates', engineProvider: 'Engine / Provider', endpoint: 'Endpoint', cloudAccount: 'Cloud account', @@ -1121,13 +1124,14 @@ const message = { vllmDeployProfile: 'Deployment model', vllmProfileFlash0731: 'DeepSeek V4 Flash 0731', vllmProfileVisionExp: 'DeepSeek V4 Flash Vision Exp', - ascendVisibleDevices: 'Ascend visible devices (ASCEND_RT_VISIBLE_DEVICES)', syncModelAccount: 'Sync to model service', modelAccountAddressHelper: 'Container address is for agent containers; 127.0.0.1, system IP, or custom address is for AI Gateway or external services.', containerAddress: 'Container address', customAddress: 'Custom address', downloader: 'Downloads', + modelDirectoryHelper: + 'The model list defaults to the model directory configured in Model Preparation > Settings and shows models downloaded to that directory.', modelDirectoryPlaceholder: 'Search models or enter a full path', selectModelDirectory: 'Select directory', modelDir: 'Model directory', diff --git a/frontend/src/lang/modules/es-es.ts b/frontend/src/lang/modules/es-es.ts index d1c6921e5..e458b3f49 100644 --- a/frontend/src/lang/modules/es-es.ts +++ b/frontend/src/lang/modules/es-es.ts @@ -1073,8 +1073,8 @@ const message = { deploy: 'Desplegar', approxWeightSize: 'Aprox. {0} GB', services: 'Servicios de modelos', + addInstance: 'Añadir instancia', addService: 'Añadir servicio de modelo', - addEngine: 'Añadir motor de inferencia', onlineModel: 'Modelos en línea', instanceDeployment: 'Despliegue por instancia', engines: 'Motores de inferencia locales', @@ -1086,19 +1086,21 @@ const message = { files: 'Preparación de modelos', connectExternal: 'Conectar servicio externo', recipes: 'vLLM Recipes', + recipeConfig: 'Configuración de Recipe', + selectRecipe: 'Seleccionar Recipe', createRecipe: 'Crear Recipe', recipeHelper: - 'Recipe = modelo + hardware + argumentos de inicio. Importe desde {link} o cree una a partir de un modelo descargado.', - recipeFormHelper: 'Pegue un comando de {link} o complete los campos manualmente.', + 'Una Recipe describe cómo iniciar un modelo en un hardware específico e incluye el modelo, el hardware y los argumentos de inicio. Permite importar comandos desde {link}.', + recipeFormHelper: + 'Vaya a {link}, seleccione el proveedor del modelo y luego el modelo de destino. Configure el hardware, la variante de cuantización, la estrategia de despliegue y otras opciones para generar el comando de inicio final.', recipeArguments: 'Argumentos de inicio', recipeImportCommand: 'Importar comando', recipeImportPlaceholder: - 'Pegue comandos Docker, pip/uv o vllm serve para completar la Recipe automáticamente', + 'Pegue aquí un comando de inicio en formato pip/uv o Docker. 1Panel lo analizará y completará la Recipe automáticamente.', recipeVariablesNotSupported: 'No se admiten referencias a variables en los comandos. Use valores concretos; configure las variables de entorno en su campo correspondiente.', recipeImportError: 'No se puede convertir. Incluya un comando de inicio Docker o vllm serve con un modelo; pegue los comandos de instalación pip/uv junto con el comando de inicio.', - deploymentTemplates: 'Plantillas de comandos de inicio de vLLM', engineProvider: 'Motor / Proveedor', endpoint: 'Punto de conexión', cloudAccount: 'Cuenta en la nube', @@ -1125,13 +1127,14 @@ const message = { vllmDeployProfile: 'Modelo de despliegue', vllmProfileFlash0731: 'DeepSeek V4 Flash 0731', vllmProfileVisionExp: 'DeepSeek V4 Flash Vision Exp', - ascendVisibleDevices: 'Dispositivos Ascend visibles (ASCEND_RT_VISIBLE_DEVICES)', syncModelAccount: 'Sincronizar con servicio de modelo', modelAccountAddressHelper: 'La dirección del contenedor es para contenedores de agentes; 127.0.0.1, IP del sistema o dirección personalizada es para AI Gateway o servicios externos.', containerAddress: 'Dirección del contenedor', customAddress: 'Dirección personalizada', downloader: 'Gestión de descargas', + modelDirectoryHelper: + 'La lista muestra de forma predeterminada los modelos descargados en el directorio configurado en Preparación de modelos > Configuración.', modelDirectoryPlaceholder: 'Buscar modelos o introducir una ruta completa', selectModelDirectory: 'Seleccionar directorio', modelDir: 'Directorio del modelo', diff --git a/frontend/src/lang/modules/fa.ts b/frontend/src/lang/modules/fa.ts index 4a6405a0f..d90271aa8 100644 --- a/frontend/src/lang/modules/fa.ts +++ b/frontend/src/lang/modules/fa.ts @@ -1054,8 +1054,8 @@ const message = { deploy: 'استقرار', approxWeightSize: 'حدود {0} گیگابایت', services: 'سرویسهای مدل', + addInstance: 'افزودن نمونه', addService: 'افزودن سرویس مدل', - addEngine: 'افزودن موتور استنتاج', onlineModel: 'مدلهای آنلاین', instanceDeployment: 'استقرار بر اساس نمونه', engines: 'موتورهای استنتاج محلی', @@ -1067,19 +1067,21 @@ const message = { files: 'آمادهسازی مدل', connectExternal: 'اتصال به سرویس خارجی', recipes: 'vLLM Recipes', + recipeConfig: 'پیکربندی Recipe', + selectRecipe: 'انتخاب Recipe', createRecipe: 'ایجاد Recipe', recipeHelper: - 'Recipe = مدل + سختافزار + آرگومانهای راهاندازی. از {link} وارد کنید یا از مدل دانلودشده بسازید.', - recipeFormHelper: 'فرمان را از {link} جایگذاری کنید یا فیلدها را دستی پر کنید.', + 'Recipe نحوه اجرای مدل روی سختافزار مشخص را توصیف میکند و شامل مدل، سختافزار و آرگومانهای اجرا است؛ وارد کردن فرمان از {link} پشتیبانی میشود.', + recipeFormHelper: + 'به {link} بروید، ابتدا ارائهدهنده مدل و سپس مدل موردنظر را انتخاب کنید. سختافزار، نسخه کوانتیزهسازی، راهبرد استقرار و سایر گزینهها را تنظیم کنید تا فرمان نهایی اجرا تولید شود.', recipeArguments: 'آرگومانهای راهاندازی', recipeImportCommand: 'وارد کردن فرمان', recipeImportPlaceholder: - 'فرمانهای Docker، pip/uv یا vllm serve را برای تکمیل خودکار Recipe جایگذاری کنید', + 'فرمان اجرا را با قالب pip/uv یا Docker اینجا جایگذاری کنید تا 1Panel آن را بهطور خودکار تحلیل و Recipe را تکمیل کند.', recipeVariablesNotSupported: 'ارجاع به متغیرها در دستور پشتیبانی نمیشود. مقادیر مشخص وارد کنید؛ متغیرهای محیطی را در بخش مربوط به آنها تنظیم کنید.', recipeImportError: 'تبدیل ممکن نیست. فرمان راهاندازی Docker یا vllm serve همراه با مدل را وارد کنید؛ فرمانهای نصب pip/uv را همراه با فرمان راهاندازی جایگذاری کنید.', - deploymentTemplates: 'الگوهای فرمان راهاندازی vLLM', engineProvider: 'موتور / ارائهدهنده', endpoint: 'نقطه پایانی', cloudAccount: 'حساب ابری', @@ -1105,13 +1107,14 @@ const message = { vllmDeployProfile: 'مدل استقرار', vllmProfileFlash0731: 'DeepSeek V4 Flash 0731', vllmProfileVisionExp: 'DeepSeek V4 Flash Vision Exp', - ascendVisibleDevices: 'دستگاههای قابل مشاهده Ascend (ASCEND_RT_VISIBLE_DEVICES)', syncModelAccount: 'همگامسازی با سرویس مدل', modelAccountAddressHelper: 'آدرس کانتینر برای کانتینرهای عامل است؛ 127.0.0.1، IP سیستم یا آدرس سفارشی برای دروازه AI یا خدمات خارجی است.', containerAddress: 'آدرس کانتینر', customAddress: 'آدرس سفارشی', downloader: 'مدیریت دانلودها', + modelDirectoryHelper: + 'فهرست مدلها بهطور پیشفرض مدلهای دانلودشده در پوشه تنظیمشده در «آمادهسازی مدل > تنظیمات» را نمایش میدهد.', modelDirectoryPlaceholder: 'جستجوی مدل یا وارد کردن مسیر کامل', selectModelDirectory: 'انتخاب پوشه', modelDir: 'دایرکتوری مدل', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 8932a5a6f..9ffa3b0ad 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -1058,8 +1058,8 @@ const message = { deploy: 'デプロイ', approxWeightSize: '約 {0} GB', services: 'モデルサービス', + addInstance: 'インスタンスを追加', addService: 'モデルサービスを追加', - addEngine: '推論エンジンを追加', onlineModel: 'オンラインモデル', instanceDeployment: 'インスタンス単位でデプロイ', engines: 'ローカル推論エンジン', @@ -1071,18 +1071,21 @@ const message = { files: 'モデル準備', connectExternal: '外部サービスに接続', recipes: 'vLLM Recipes', + recipeConfig: 'Recipe 設定', + selectRecipe: 'Recipe を選択', createRecipe: 'Recipe を作成', recipeHelper: - 'Recipe = モデル + ハードウェア + 起動引数。{link} からインポートするか、ダウンロード済みモデルから作成できます。', - recipeFormHelper: '{link} のコマンドを貼り付けるか、手動で入力してください。', + 'Recipe は、指定したハードウェアでモデルを起動する方法を記述し、モデル、ハードウェア、起動引数を含みます。{link} からコマンドをインポートできます。', + recipeFormHelper: + '{link} にアクセスし、モデルの提供元を選択してから、対象のモデルを選択します。 ハードウェア、量子化バージョン、デプロイ戦略などを設定すると、最終的な起動コマンドが生成されます。', recipeArguments: '起動引数', recipeImportCommand: 'コマンドをインポート', - recipeImportPlaceholder: 'Docker、pip/uv、または vllm serve コマンドを貼り付けて Recipe に自動入力', + recipeImportPlaceholder: + 'ここに pip/uv または Docker 形式の起動コマンドを貼り付けると、1Panel が自動的に解析し、Recipe に入力します。', recipeVariablesNotSupported: 'コマンド内の変数参照はサポートされていません。具体的な値を入力し、環境変数は環境変数欄で設定してください。', recipeImportError: '変換できません。モデルを含む Docker または vllm serve の起動コマンドを入力してください。pip/uv のインストールコマンドは起動コマンドと一緒に貼り付けてください。', - deploymentTemplates: 'vLLM 起動コマンドテンプレート', engineProvider: 'エンジン / プロバイダー', endpoint: 'エンドポイント', cloudAccount: 'クラウドアカウント', @@ -1109,13 +1112,14 @@ const message = { vllmDeployProfile: 'デプロイモデル', vllmProfileFlash0731: 'DeepSeek V4 Flash 0731', vllmProfileVisionExp: 'DeepSeek V4 Flash Vision Exp', - ascendVisibleDevices: 'Ascend 可視デバイス(ASCEND_RT_VISIBLE_DEVICES)', syncModelAccount: 'モデルサービスに同期', modelAccountAddressHelper: 'コンテナアドレスはエージェントコンテナ向けです。127.0.0.1、システム IP、カスタムアドレスは AI Gateway または外部サービス向けです。', containerAddress: 'コンテナアドレス', customAddress: 'カスタムアドレス', downloader: 'ダウンロード管理', + modelDirectoryHelper: + 'モデル一覧には、デフォルトで「モデル準備 > 設定」で指定したモデルディレクトリにダウンロード済みのモデルが表示されます。', modelDirectoryPlaceholder: 'モデルを検索するかフルパスを入力', selectModelDirectory: 'ディレクトリを選択', modelDir: 'モデルディレクトリ', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index dbb07e44b..fabef61fe 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -1048,8 +1048,8 @@ const message = { deploy: '배포', approxWeightSize: '약 {0} GB', services: '모델 서비스', + addInstance: '인스턴스 추가', addService: '모델 서비스 추가', - addEngine: '추론 엔진 추가', onlineModel: '온라인 모델', instanceDeployment: '인스턴스별 배포', engines: '로컬 추론 엔진', @@ -1061,18 +1061,21 @@ const message = { files: '모델 준비', connectExternal: '외부 서비스 연결', recipes: 'vLLM Recipes', + recipeConfig: 'Recipe 설정', + selectRecipe: 'Recipe 선택', createRecipe: 'Recipe 만들기', recipeHelper: - 'Recipe = 모델 + 하드웨어 + 시작 인수. {link}에서 가져오거나 다운로드한 모델로 만들 수 있습니다.', - recipeFormHelper: '{link}의 명령을 붙여넣거나 직접 입력하세요.', + 'Recipe는 특정 하드웨어에서 모델을 실행하는 방법을 설명하며 모델, 하드웨어 및 실행 인수를 포함합니다. {link}에서 명령을 가져올 수 있습니다.', + recipeFormHelper: + '{link}에서 모델 제공업체를 먼저 선택한 다음 대상 모델을 선택하세요. 하드웨어, 양자화 버전, 배포 전략 등을 설정하면 최종 실행 명령이 생성됩니다.', recipeArguments: '시작 인수', recipeImportCommand: '명령 가져오기', - recipeImportPlaceholder: 'Docker, pip/uv 또는 vllm serve 명령을 붙여넣어 Recipe 자동 입력', + recipeImportPlaceholder: + '여기에 pip/uv 또는 Docker 형식의 실행 명령을 붙여넣으면 1Panel이 자동으로 분석하여 Recipe를 채웁니다.', recipeVariablesNotSupported: '명령에서 변수 참조는 지원되지 않습니다. 구체적인 값을 입력하고 환경 변수는 환경 변수 필드에서 설정하세요.', recipeImportError: '변환할 수 없습니다. 모델이 포함된 Docker 또는 vllm serve 시작 명령을 입력하세요. pip/uv 설치 명령은 시작 명령과 함께 붙여넣으세요.', - deploymentTemplates: 'vLLM 시작 명령 템플릿', engineProvider: '엔진 / 공급자', endpoint: '엔드포인트', cloudAccount: '클라우드 계정', @@ -1098,13 +1101,14 @@ const message = { vllmDeployProfile: '배포 모델', vllmProfileFlash0731: 'DeepSeek V4 Flash 0731', vllmProfileVisionExp: 'DeepSeek V4 Flash Vision Exp', - ascendVisibleDevices: 'Ascend 표시 장치 (ASCEND_RT_VISIBLE_DEVICES)', syncModelAccount: '모델 서비스에 동기화', modelAccountAddressHelper: '컨테이너 주소는 에이전트 컨테이너 호출에 적합합니다. 127.0.0.1, 시스템 IP 또는 사용자 지정 주소는 AI Gateway 또는 외부 서비스 호출에 적합합니다.', containerAddress: '컨테이너 주소', customAddress: '사용자 지정 주소', downloader: '다운로드 관리', + modelDirectoryHelper: + '모델 목록은 기본적으로 “모델 준비 > 설정”에서 구성한 모델 디렉터리에 다운로드된 모델을 표시합니다.', modelDirectoryPlaceholder: '모델 검색 또는 전체 경로 입력', selectModelDirectory: '디렉터리 선택', modelDir: '모델 디렉토리', diff --git a/frontend/src/lang/modules/lo.ts b/frontend/src/lang/modules/lo.ts index 8ffec4a03..ac6ea67f4 100644 --- a/frontend/src/lang/modules/lo.ts +++ b/frontend/src/lang/modules/lo.ts @@ -1045,8 +1045,8 @@ const message = { deploy: 'ນຳໃຊ້', approxWeightSize: 'ປະມານ {0} GB', services: 'ບໍລິການໂມເດວ', + addInstance: 'ເພີ່ມອິນສະແຕນ', addService: 'ເພີ່ມບໍລິການໂມເດວ', - addEngine: 'ເພີ່ມເຄື່ອງຈັກອະນຸມານ', onlineModel: 'ໂມເດວອອນລາຍ', instanceDeployment: 'ນຳໃຊ້ຕາມອິນສະແຕນ', engines: 'ເຄື່ອງຈັກອະນຸມານພາຍໃນ', @@ -1058,18 +1058,21 @@ const message = { files: 'ການກະກຽມໂມເດວ', connectExternal: 'ເຊື່ອມຕໍ່ບໍລິການພາຍນອກ', recipes: 'vLLM Recipes', + recipeConfig: 'ການຕັ້ງຄ່າ Recipe', + selectRecipe: 'ເລືອກ Recipe', createRecipe: 'ສ້າງ Recipe', recipeHelper: - 'Recipe = ໂມເດວ + ຮາດແວ + ພາລາມິເຕີເລີ່ມຕົ້ນ. ນຳເຂົ້າຈາກ {link} ຫຼືສ້າງຈາກໂມເດວທີ່ດາວໂຫຼດແລ້ວ.', - recipeFormHelper: 'ວາງຄຳສັ່ງຈາກ {link} ຫຼືປ້ອນຂໍ້ມູນເອງ.', + 'Recipe ອະທິບາຍວິທີເລີ່ມຕົ້ນໂມເດວເທິງຮາດແວທີ່ກຳນົດ ໂດຍປະກອບມີໂມເດວ, ຮາດແວ ແລະພາລາມິເຕີເລີ່ມຕົ້ນ; ຮອງຮັບການນຳເຂົ້າຄຳສັ່ງຈາກ {link}.', + recipeFormHelper: + 'ໄປທີ່ {link}, ເລືອກຜູ້ໃຫ້ບໍລິການໂມເດວກ່ອນ ແລ້ວເລືອກໂມເດວທີ່ຕ້ອງການ. ກຳນົດຮາດແວ, ຮຸ່ນການຫຼຸດຄວາມລະອຽດ, ກົນລະຍຸດການນຳໃຊ້ ແລະຕົວເລືອກອື່ນໆ ເພື່ອສ້າງຄຳສັ່ງເລີ່ມຕົ້ນສຸດທ້າຍ.', recipeArguments: 'ພາລາມິເຕີເລີ່ມຕົ້ນ', recipeImportCommand: 'ນຳເຂົ້າຄຳສັ່ງ', - recipeImportPlaceholder: 'ວາງຄຳສັ່ງ Docker, pip/uv ຫຼື vllm serve ເພື່ອຕື່ມ Recipe ອັດຕະໂນມັດ', + recipeImportPlaceholder: + 'ວາງຄຳສັ່ງເລີ່ມຕົ້ນໃນຮູບແບບ pip/uv ຫຼື Docker ທີ່ນີ້. 1Panel ຈະວິເຄາະແລະຕື່ມ Recipe ອັດຕະໂນມັດ.', recipeVariablesNotSupported: 'ຄຳສັ່ງບໍ່ຮອງຮັບການອ້າງອີງຕົວແປ. ກະລຸນາປ້ອນຄ່າໂດຍກົງ ແລະຕັ້ງຄ່າຕົວແປສະພາບແວດລ້ອມໃນຊ່ອງທີ່ກ່ຽວຂ້ອງ.', recipeImportError: 'ບໍ່ສາມາດແປງໄດ້. ກະລຸນາໃສ່ຄຳສັ່ງເລີ່ມຕົ້ນ Docker ຫຼື vllm serve ທີ່ມີໂມເດວ; ວາງຄຳສັ່ງຕິດຕັ້ງ pip/uv ພ້ອມກັບຄຳສັ່ງເລີ່ມຕົ້ນ.', - deploymentTemplates: 'ແມ່ແບບຄຳສັ່ງເລີ່ມຕົ້ນ vLLM', engineProvider: 'ເຄື່ອງຈັກ / ຜູ້ໃຫ້ບໍລິການ', endpoint: 'ຈຸດເຊື່ອມຕໍ່', cloudAccount: 'ບັນຊີຄລາວ', @@ -1095,13 +1098,14 @@ const message = { vllmDeployProfile: 'ໂມເດວສຳລັບຕິດຕັ້ງ', vllmProfileFlash0731: 'DeepSeek V4 Flash 0731', vllmProfileVisionExp: 'DeepSeek V4 Flash Vision Exp', - ascendVisibleDevices: 'ອຸປະກອນ Ascend ທີ່ເຫັນໄດ້ (ASCEND_RT_VISIBLE_DEVICES)', syncModelAccount: 'ຊິ້ງຄ໌ໄປຍັງບໍລິການໂມເດວ', modelAccountAddressHelper: 'ທີ່ຢູ່ຄອນເທນເນີແມ່ນສຳລັບຄອນເທນເນີຕົວແທນ; 127.0.0.1, IP ລະບົບ, ຫຼື ທີ່ຢູ່ກຳນົດເອງແມ່ນສຳລັບ AI Gateway ຫຼື ບໍລິການພາຍນອກ.', containerAddress: 'ທີ່ຢູ່ຄອນເທນເນີ', customAddress: 'ທີ່ຢູ່ກຳນົດເອງ', downloader: 'ຈັດການການດາວໂຫຼດ', + modelDirectoryHelper: + 'ໂດຍຄ່າເລີ່ມຕົ້ນ ລາຍຊື່ໂມເດວຈະສະແດງໂມເດວທີ່ດາວໂຫຼດໄວ້ໃນໄດເຣັກທໍຣີທີ່ກຳນົດໃນ “ການກະກຽມໂມເດວ > ການຕັ້ງຄ່າ”.', modelDirectoryPlaceholder: 'ຄົ້ນຫາໂມເດວ ຫຼື ປ້ອນເສັ້ນທາງເຕັມ', selectModelDirectory: 'ເລືອກໄດເຣັກທໍຣີ', modelDir: 'ໄດເຣັກທໍຣີໂມເດວ', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index 49bf7ec39..50479cc4e 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -1081,8 +1081,8 @@ const message = { deploy: 'Kerahkan', approxWeightSize: 'Kira-kira {0} GB', services: 'Perkhidmatan model', + addInstance: 'Tambah instans', addService: 'Tambah perkhidmatan model', - addEngine: 'Tambah enjin inferens', onlineModel: 'Model dalam talian', instanceDeployment: 'Pengerahan mengikut instans', engines: 'Enjin inferens setempat', @@ -1094,19 +1094,21 @@ const message = { files: 'Penyediaan model', connectExternal: 'Sambungkan perkhidmatan luaran', recipes: 'vLLM Recipes', + recipeConfig: 'Konfigurasi Recipe', + selectRecipe: 'Pilih Recipe', createRecipe: 'Cipta Recipe', recipeHelper: - 'Recipe = model + perkakasan + argumen pelancaran. Import daripada {link} atau cipta daripada model yang dimuat turun.', - recipeFormHelper: 'Tampal arahan daripada {link} atau isi medan secara manual.', + 'Recipe menerangkan cara melancarkan model pada perkakasan tertentu, termasuk model, perkakasan dan argumen pelancaran. Arahan boleh diimport daripada {link}.', + recipeFormHelper: + 'Pergi ke {link}, pilih penyedia model, kemudian pilih model sasaran. Konfigurasikan perkakasan, varian pengkuantuman, strategi penggunaan dan pilihan lain untuk menjana arahan pelancaran akhir.', recipeArguments: 'Argumen pelancaran', recipeImportCommand: 'Import arahan', recipeImportPlaceholder: - 'Tampal arahan Docker, pip/uv atau vllm serve untuk mengisi Recipe secara automatik', + 'Tampal arahan pelancaran dalam format pip/uv atau Docker di sini. 1Panel akan menghuraikan dan mengisi Recipe secara automatik.', recipeVariablesNotSupported: 'Rujukan pemboleh ubah tidak disokong dalam arahan. Masukkan nilai khusus; tetapkan pemboleh ubah persekitaran dalam medan yang berkenaan.', recipeImportError: 'Tidak dapat menukar. Sertakan arahan pelancaran Docker atau vllm serve dengan model; tampal arahan pemasangan pip/uv bersama arahan pelancaran.', - deploymentTemplates: 'Templat arahan permulaan vLLM', engineProvider: 'Enjin / Pembekal', endpoint: 'Titik akhir', cloudAccount: 'Akaun awan', @@ -1132,13 +1134,14 @@ const message = { vllmDeployProfile: 'Model penggunaan', vllmProfileFlash0731: 'DeepSeek V4 Flash 0731', vllmProfileVisionExp: 'DeepSeek V4 Flash Vision Exp', - ascendVisibleDevices: 'Peranti Ascend boleh dilihat (ASCEND_RT_VISIBLE_DEVICES)', syncModelAccount: 'Segerakkan ke perkhidmatan model', modelAccountAddressHelper: 'Alamat kontena sesuai untuk kontena agen; 127.0.0.1, IP sistem, atau alamat tersuai sesuai untuk AI Gateway atau perkhidmatan luaran.', containerAddress: 'Alamat kontena', customAddress: 'Alamat tersuai', downloader: 'Pengurusan muat turun', + modelDirectoryHelper: + 'Secara lalai, senarai model memaparkan model yang dimuat turun dalam direktori yang dikonfigurasi di Persediaan Model > Tetapan.', modelDirectoryPlaceholder: 'Cari model atau masukkan laluan penuh', selectModelDirectory: 'Pilih direktori', modelDir: 'Direktori Model', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 5c0aae457..706d43d92 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -1077,8 +1077,8 @@ const message = { deploy: 'Implantar', approxWeightSize: 'Aprox. {0} GB', services: 'Serviços de modelos', + addInstance: 'Adicionar instância', addService: 'Adicionar serviço de modelo', - addEngine: 'Adicionar mecanismo de inferência', onlineModel: 'Modelos online', instanceDeployment: 'Implantação por instância', engines: 'Mecanismos de inferência locais', @@ -1090,19 +1090,21 @@ const message = { files: 'Preparação de modelos', connectExternal: 'Conectar serviço externo', recipes: 'vLLM Recipes', + recipeConfig: 'Configuração de Recipe', + selectRecipe: 'Selecionar Recipe', createRecipe: 'Criar Recipe', recipeHelper: - 'Recipe = modelo + hardware + argumentos de inicialização. Importe de {link} ou crie a partir de um modelo baixado.', - recipeFormHelper: 'Cole um comando de {link} ou preencha os campos manualmente.', + 'Uma Recipe descreve como iniciar um modelo em um hardware específico, incluindo o modelo, o hardware e os argumentos de inicialização. É possível importar comandos de {link}.', + recipeFormHelper: + 'Acesse {link}, selecione o provedor do modelo e depois o modelo desejado. Configure o hardware, a variante de quantização, a estratégia de implantação e outras opções para gerar o comando final de inicialização.', recipeArguments: 'Argumentos de inicialização', recipeImportCommand: 'Importar comando', recipeImportPlaceholder: - 'Cole comandos Docker, pip/uv ou vllm serve para preencher a Recipe automaticamente', + 'Cole um comando de inicialização no formato pip/uv ou Docker aqui. O 1Panel irá analisar e preencher a Recipe automaticamente.', recipeVariablesNotSupported: 'Referências a variáveis não são aceitas nos comandos. Use valores explícitos; configure as variáveis de ambiente no campo correspondente.', recipeImportError: 'Não foi possível converter. Inclua um comando de inicialização Docker ou vllm serve com um modelo; cole os comandos de instalação pip/uv junto com o comando de inicialização.', - deploymentTemplates: 'Modelos de comandos de inicialização do vLLM', engineProvider: 'Mecanismo / Provedor', endpoint: 'Endpoint', cloudAccount: 'Conta na nuvem', @@ -1128,13 +1130,14 @@ const message = { vllmDeployProfile: 'Modelo de implantação', vllmProfileFlash0731: 'DeepSeek V4 Flash 0731', vllmProfileVisionExp: 'DeepSeek V4 Flash Vision Exp', - ascendVisibleDevices: 'Dispositivos Ascend visíveis (ASCEND_RT_VISIBLE_DEVICES)', syncModelAccount: 'Sincronizar com serviço de modelo', modelAccountAddressHelper: 'Use o endereço do contêiner para agentes; 127.0.0.1, IP do sistema ou endereço personalizado para AI Gateway ou serviços externos.', containerAddress: 'Endereço do contêiner', customAddress: 'Endereço personalizado', downloader: 'Gerenciamento de downloads', + modelDirectoryHelper: + 'Por padrão, a lista exibe os modelos baixados no diretório configurado em Preparação de modelos > Configurações.', modelDirectoryPlaceholder: 'Buscar modelos ou inserir um caminho completo', selectModelDirectory: 'Selecionar diretório', modelDir: 'Diretório do modelo', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index 513b6863d..7bf3b899e 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -1070,8 +1070,8 @@ const message = { deploy: 'Развернуть', approxWeightSize: 'Около {0} ГБ', services: 'Сервисы моделей', + addInstance: 'Добавить экземпляр', addService: 'Добавить сервис модели', - addEngine: 'Добавить движок инференса', onlineModel: 'Онлайн-модели', instanceDeployment: 'Развертывание по экземплярам', engines: 'Локальные движки инференса', @@ -1083,19 +1083,21 @@ const message = { files: 'Подготовка моделей', connectExternal: 'Подключить внешний сервис', recipes: 'vLLM Recipes', + recipeConfig: 'Настройка Recipe', + selectRecipe: 'Выбрать Recipe', createRecipe: 'Создать Recipe', recipeHelper: - 'Recipe = модель + оборудование + параметры запуска. Импортируйте с {link} или создайте из загруженной модели.', - recipeFormHelper: 'Вставьте команду с {link} или заполните поля вручную.', + 'Recipe описывает способ запуска модели на определённом оборудовании и включает модель, оборудование и параметры запуска. Поддерживается импорт команд с {link}.', + recipeFormHelper: + 'Перейдите на {link}, выберите поставщика модели, затем нужную модель. Укажите оборудование, вариант квантования, стратегию развёртывания и другие параметры, чтобы получить итоговую команду запуска.', recipeArguments: 'Параметры запуска', recipeImportCommand: 'Импорт команды', recipeImportPlaceholder: - 'Вставьте команды Docker, pip/uv или vllm serve для автоматического заполнения Recipe', + 'Вставьте сюда команду запуска в формате pip/uv или Docker. 1Panel автоматически разберёт её и заполнит Recipe.', recipeVariablesNotSupported: 'Ссылки на переменные в командах не поддерживаются. Укажите конкретные значения; переменные окружения настройте в соответствующем поле.', recipeImportError: 'Не удалось преобразовать. Добавьте команду запуска Docker или vllm serve с моделью; вставляйте команды установки pip/uv вместе с командой запуска.', - deploymentTemplates: 'Шаблоны команд запуска vLLM', engineProvider: 'Движок / Поставщик', endpoint: 'Конечная точка', cloudAccount: 'Облачная учетная запись', @@ -1122,13 +1124,14 @@ const message = { vllmDeployProfile: 'Модель развертывания', vllmProfileFlash0731: 'DeepSeek V4 Flash 0731', vllmProfileVisionExp: 'DeepSeek V4 Flash Vision Exp', - ascendVisibleDevices: 'Видимые устройства Ascend (ASCEND_RT_VISIBLE_DEVICES)', syncModelAccount: 'Синхронизировать с сервисом модели', modelAccountAddressHelper: 'Адрес контейнера подходит для контейнеров агентов; 127.0.0.1, системный IP или пользовательский адрес подходит для AI Gateway или внешних сервисов.', containerAddress: 'Адрес контейнера', customAddress: 'Пользовательский адрес', downloader: 'Управление загрузками', + modelDirectoryHelper: + 'По умолчанию список показывает модели, загруженные в каталог, указанный в разделе «Подготовка моделей > Настройки».', modelDirectoryPlaceholder: 'Найти модель или ввести полный путь', selectModelDirectory: 'Выбрать каталог', modelDir: 'Каталог модели', diff --git a/frontend/src/lang/modules/tr.ts b/frontend/src/lang/modules/tr.ts index 339bbc331..f16a4bd02 100644 --- a/frontend/src/lang/modules/tr.ts +++ b/frontend/src/lang/modules/tr.ts @@ -1079,8 +1079,8 @@ const message = { deploy: 'Dağıt', approxWeightSize: 'Yaklaşık {0} GB', services: 'Model hizmetleri', + addInstance: 'Örnek ekle', addService: 'Model hizmeti ekle', - addEngine: 'Çıkarım motoru ekle', onlineModel: 'Çevrimiçi modeller', instanceDeployment: 'Örnek bazında dağıtım', engines: 'Yerel çıkarım motorları', @@ -1092,19 +1092,21 @@ const message = { files: 'Model hazırlığı', connectExternal: 'Harici hizmete bağlan', recipes: 'vLLM Recipes', + recipeConfig: 'Recipe yapılandırması', + selectRecipe: 'Recipe seç', createRecipe: 'Recipe oluştur', recipeHelper: - 'Recipe = model + donanım + başlatma parametreleri. {link} üzerinden içe aktarın veya indirilen bir modelden oluşturun.', - recipeFormHelper: '{link} üzerinden bir komut yapıştırın veya alanları elle doldurun.', + 'Recipe, bir modelin belirli bir donanımda nasıl başlatılacağını açıklar; model, donanım ve başlatma parametrelerini içerir. {link} üzerinden komut içe aktarılabilir.', + recipeFormHelper: + '{link} adresine gidin, önce model sağlayıcısını, ardından hedef modeli seçin. Son başlatma komutunu oluşturmak için donanımı, kuantizasyon sürümünü, dağıtım stratejisini ve diğer seçenekleri yapılandırın.', recipeArguments: 'Başlatma parametreleri', recipeImportCommand: 'Komut içe aktar', recipeImportPlaceholder: - 'Recipe alanlarını otomatik doldurmak için Docker, pip/uv veya vllm serve komutlarını yapıştırın', + 'pip/uv veya Docker biçimindeki başlatma komutunu buraya yapıştırın. 1Panel komutu otomatik olarak ayrıştırıp Recipe alanlarını doldurur.', recipeVariablesNotSupported: 'Komutlarda değişken başvuruları desteklenmez. Açık değerler girin; ortam değişkenlerini ilgili alanda yapılandırın.', recipeImportError: 'Dönüştürülemedi. Model içeren bir Docker veya vllm serve başlatma komutu ekleyin; pip/uv kurulum komutlarını başlatma komutuyla birlikte yapıştırın.', - deploymentTemplates: 'vLLM başlatma komutu şablonları', engineProvider: 'Motor / Sağlayıcı', endpoint: 'Uç nokta', cloudAccount: 'Bulut hesabı', @@ -1130,13 +1132,14 @@ const message = { vllmDeployProfile: 'Dağıtım modeli', vllmProfileFlash0731: 'DeepSeek V4 Flash 0731', vllmProfileVisionExp: 'DeepSeek V4 Flash Vision Exp', - ascendVisibleDevices: 'Görünür Ascend cihazları (ASCEND_RT_VISIBLE_DEVICES)', syncModelAccount: 'Model hizmetine senkronize et', modelAccountAddressHelper: 'Konteyner adresi ajan konteynerleri içindir; 127.0.0.1, sistem IP veya özel adres AI Gateway ya da harici servisler içindir.', containerAddress: 'Konteyner adresi', customAddress: 'Özel adres', downloader: 'İndirme yönetimi', + modelDirectoryHelper: + 'Model listesi varsayılan olarak Model Hazırlığı > Ayarlar bölümünde yapılandırılan dizine indirilen modelleri gösterir.', modelDirectoryPlaceholder: 'Model arayın veya tam yol girin', selectModelDirectory: 'Dizin seç', modelDir: 'Model dizini', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index 9c815bb1a..9449cff43 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -1009,8 +1009,8 @@ const message = { deploy: '部署', approxWeightSize: '約 {0} GB', services: '模型服務', + addInstance: '新增實例', addService: '新增模型服務', - addEngine: '新增推理引擎', onlineModel: '線上模型', instanceDeployment: '按執行個體部署', engines: '本機推理引擎', @@ -1022,16 +1022,19 @@ const message = { files: '模型準備', connectExternal: '接入外部服務', recipes: 'vLLM Recipes', + recipeConfig: 'Recipe 配置', + selectRecipe: '選擇 Recipe', createRecipe: '建立 Recipe', - recipeHelper: 'Recipe = 模型 + 硬體 + 啟動參數。支援從 {link} 匯入或從已下載模型建立。', - recipeFormHelper: '從 {link} 複製命令匯入,或手動填寫。', + recipeHelper: + 'Recipe 用於描述模型在指定硬體上的啟動方式,包含模型、硬體和啟動參數;支援從 {link} 匯入命令。', + recipeFormHelper: + '前往 {link},依序選擇模型提供商和目標模型,再根據硬體、量化版本及部署策略等選項產生啟動命令。', recipeArguments: '啟動參數', recipeImportCommand: '匯入命令', - recipeImportPlaceholder: '貼上 Docker、pip/uv 或 vllm serve 命令,自動填入 Recipe', + recipeImportPlaceholder: '貼上 pip/uv 或 Docker 格式的啟動命令,1Panel 將自動解析並填入 Recipe。', recipeVariablesNotSupported: '命令中不支援變數引用,請填寫具體值;環境變數請在環境變數欄設定。', recipeImportError: '無法轉換,請提供包含模型的 Docker 或 vllm serve 啟動命令;pip/uv 安裝命令需要與啟動命令一起貼上。', - deploymentTemplates: 'vLLM 啟動命令範本', engineProvider: '引擎 / 供應商', endpoint: '端點', cloudAccount: '雲端帳號', @@ -1057,13 +1060,13 @@ const message = { vllmDeployProfile: '部署模型', vllmProfileFlash0731: 'DeepSeek V4 Flash 0731', vllmProfileVisionExp: 'DeepSeek V4 Flash Vision Exp', - ascendVisibleDevices: 'Ascend 可見裝置(ASCEND_RT_VISIBLE_DEVICES)', syncModelAccount: '同步到模型服務', modelAccountAddressHelper: '容器地址適合智能體容器呼叫;127.0.0.1、本機 IP 或自訂地址適合 AI 閘道或外部服務呼叫。', containerAddress: '容器地址', customAddress: '自訂地址', downloader: '下載管理', + modelDirectoryHelper: '模型列表預設來自「模型準備 > 設定」中配置的模型目錄,顯示該目錄下已下載的模型。', modelDirectoryPlaceholder: '搜尋模型或輸入完整路徑', selectModelDirectory: '選擇目錄', modelDir: '模型目錄', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index bab3d79a8..fe1a28cf8 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -1022,8 +1022,8 @@ const message = { deploy: '部署', approxWeightSize: '约 {0} GB', services: '模型服务', + addInstance: '新增实例', addService: '添加模型服务', - addEngine: '添加推理引擎', onlineModel: '在线模型', instanceDeployment: '按实例部署', engines: '本地推理引擎', @@ -1035,16 +1035,19 @@ const message = { files: '模型准备', connectExternal: '接入外部服务', recipes: 'vLLM Recipes', + recipeConfig: 'Recipe 配置', + selectRecipe: '选择 Recipe', createRecipe: '创建 Recipe', - recipeHelper: 'Recipe = 模型 + 硬件 + 启动参数。支持从 {link} 导入或从已下载模型创建。', - recipeFormHelper: '从 {link} 复制命令导入,或手动填写。', + recipeHelper: + 'Recipe 用于描述模型在指定硬件上的启动方式,包含模型、硬件和启动参数;支持从 {link} 导入命令。', + recipeFormHelper: + '前往 {link},依次选择模型提供商和目标模型,再根据硬件、量化版本及部署策略等选项生成启动命令。', recipeArguments: '启动参数', recipeImportCommand: '导入命令', - recipeImportPlaceholder: '粘贴 Docker、pip/uv 或 vllm serve 命令,自动填充 Recipe', + recipeImportPlaceholder: '粘贴 pip/uv 或 Docker 格式的启动命令,1Panel 将自动解析并填充 Recipe。', recipeVariablesNotSupported: '命令中不支持变量引用,请填写具体值;环境变量请在环境变量栏配置。', recipeImportError: '无法转换,请提供包含模型的 Docker 或 vllm serve 启动命令;pip/uv 安装命令需要与启动命令一起粘贴。', - deploymentTemplates: 'vLLM 启动命令模板', engineProvider: '引擎 / 供应商', endpoint: '端点', cloudAccount: '云端账号', @@ -1070,13 +1073,13 @@ const message = { vllmDeployProfile: '部署模型', vllmProfileFlash0731: 'DeepSeek V4 Flash 0731', vllmProfileVisionExp: 'DeepSeek V4 Flash Vision Exp', - ascendVisibleDevices: 'Ascend 可见设备(ASCEND_RT_VISIBLE_DEVICES)', syncModelAccount: '同步到模型服务', modelAccountAddressHelper: '容器地址适合智能体容器调用;127.0.0.1、本机 IP 或自定义地址适合 AI 网关或外部服务调用。', containerAddress: '容器地址', customAddress: '自定义地址', downloader: '下载管理', + modelDirectoryHelper: '模型列表默认来自“模型准备 > 设置”中配置的模型目录,展示该目录下已下载的模型。', modelDirectoryPlaceholder: '搜索模型或输入完整路径', selectModelDirectory: '选择目录', modelDir: '模型目录', diff --git a/frontend/src/views/ai/model/components/connection/index.vue b/frontend/src/views/ai/model/components/connection/index.vue index 1f16dbce7..3a4074477 100644 --- a/frontend/src/views/ai/model/components/connection/index.vue +++ b/frontend/src/views/ai/model/components/connection/index.vue @@ -1,7 +1,7 @@ - @@ -67,32 +67,24 @@ {{ $t('database.remoteConnHelper2') }} - OpenWebUI {{ $t('commons.button.close') }} - - +
{{ $t('database.remoteConnHelper2') }}