diff --git a/src/locales/en-US/models.ts b/src/locales/en-US/models.ts index 0cdfa80a..797c180a 100644 --- a/src/locales/en-US/models.ts +++ b/src/locales/en-US/models.ts @@ -120,5 +120,6 @@ export default { 'To use the llama-box backend, specify the full path to the model file (e.g.,/data/models/model.gguf). For sharded models, provide the path to the first shard (e.g.,/data/models/model-00001-of-00004.gguf).', 'models.form.keyvalue.paste': 'Paste multiple lines of text, with each line containing a key-value pair. The key and value are separated by an = sign, and different key-value pairs are separated by newline characters.', - 'models.form.files': 'files' + 'models.form.files': 'files', + 'models.table.status': 'Status' }; diff --git a/src/locales/ru-RU/models.ts b/src/locales/ru-RU/models.ts index e8a99227..77c3fafd 100644 --- a/src/locales/ru-RU/models.ts +++ b/src/locales/ru-RU/models.ts @@ -13,8 +13,10 @@ export default { 'models.form.env': 'Переменные окружения', 'models.form.configurations': 'Конфигурации', 'models.form.s3address': 'S3-адрес', - 'models.form.partialoffload.tips': 'При включении CPU оффлоудинга GPUStack загружает максимум слоев на GPU для производительности. При нехватке ресурсов GPU часть слоев переносится на CPU. Полная CPU-инференция используется только при отсутствии GPU.', - 'models.form.distribution.tips': 'Позволяет распределить вычисления между одним или несколькими удаленными воркерами при нехватке ресурсов одного GPU/воркера.', + 'models.form.partialoffload.tips': + 'При включении CPU оффлоудинга GPUStack загружает максимум слоев на GPU для производительности. При нехватке ресурсов GPU часть слоев переносится на CPU. Полная CPU-инференция используется только при отсутствии GPU.', + 'models.form.distribution.tips': + 'Позволяет распределить вычисления между одним или несколькими удаленными воркерами при нехватке ресурсов одного GPU/воркера.', 'models.openinplayground': 'Открыть в Песочнице', 'models.instances': 'инстансы', 'models.table.replicas.edit': 'Редактировать реплики', @@ -22,7 +24,8 @@ export default { 'model.form.ollamaholder': 'Выберите или введите название модели', 'model.deploy.sort': 'Сортировка', 'model.deploy.search.placeholder': 'Поиск моделей в {source}', - 'model.form.ollamatips': 'Подсказка: ниже представлены предустановленные модели Ollama в GPUStack. Выберите нужную или введите модель для развертывания в поле 【{name}】 справа.', + 'model.form.ollamatips': + 'Подсказка: ниже представлены предустановленные модели Ollama в GPUStack. Выберите нужную или введите модель для развертывания в поле 【{name}】 справа.', 'models.sort.name': 'По имени', 'models.sort.size': 'По размеру', 'models.sort.likes': 'По лайкам', @@ -39,13 +42,16 @@ export default { 'models.search.nofiles': 'Нет доступных файлов', 'models.search.networkerror': 'Ошибка сетевого подключения!', 'models.search.hfvisit': 'Убедитесь, что доступен', - 'models.search.unsupport': 'Модель не поддерживается и может быть нефункциональна после развертывания.', + 'models.search.unsupport': + 'Модель не поддерживается и может быть нефункциональна после развертывания.', 'models.form.scheduletype': 'Тип планирования', 'models.form.categories': 'Категория модели', 'models.form.scheduletype.auto': 'Авто', 'models.form.scheduletype.manual': 'Вручную', - 'models.form.scheduletype.auto.tips': 'Автоматическое развертывание инстансов модели на подходящие GPU/воркеры в зависимости от текущих ресурсов.', - 'models.form.scheduletype.manual.tips': 'Позволяет вручную указать GPU/воркеры для развертывания инстансов модели.', + 'models.form.scheduletype.auto.tips': + 'Автоматическое развертывание инстансов модели на подходящие GPU/воркеры в зависимости от текущих ресурсов.', + 'models.form.scheduletype.manual.tips': + 'Позволяет вручную указать GPU/воркеры для развертывания инстансов модели.', 'models.form.manual.schedule': 'Ручное распределение', 'models.table.gpuindex': 'Индекс GPU', 'models.table.backend': 'Бэкенды', @@ -54,13 +60,19 @@ export default { 'models.table.layers': 'Слои', 'models.form.backend': 'Бэкенд', 'models.form.backend_parameters': 'Параметры бэкенда', - 'models.search.gguf.tips': 'GGUF-модели используют llama-box (поддерживает Linux, macOS и Windows).', - 'models.search.vllm.tips': 'Не-GGUF модели используют vox-box для аудио и vLLM (только x86 Linux) для остальных.', - 'models.search.voxbox.tips': 'Для развертывания аудиомодели снимите отметку GGUF.', + 'models.search.gguf.tips': + 'GGUF-модели используют llama-box (поддерживает Linux, macOS и Windows).', + 'models.search.vllm.tips': + 'Не-GGUF модели используют vox-box для аудио и vLLM (только x86 Linux) для остальных.', + 'models.search.voxbox.tips': + 'Для развертывания аудиомодели снимите отметку GGUF.', 'models.form.ollamalink': 'Больше моделей в библиотеке Ollama', - 'models.form.backend_parameters.llamabox.placeholder': 'например: --ctx-size=8192', - 'models.form.backend_parameters.vllm.placeholder': 'например: --max-model-len=8192', - 'models.form.backend_parameters.vllm.tips': 'Подробнее о параметрах {backend}', + 'models.form.backend_parameters.llamabox.placeholder': + 'например: --ctx-size=8192', + 'models.form.backend_parameters.vllm.placeholder': + 'например: --max-model-len=8192', + 'models.form.backend_parameters.vllm.tips': + 'Подробнее о параметрах {backend}', 'models.logs.pagination.prev': 'Предыдущие {lines} строк', 'models.logs.pagination.next': 'Следующие {lines} строк', 'models.logs.pagination.last': 'Последняя страница', @@ -68,12 +80,15 @@ export default { 'models.form.localPath': 'Локальный путь', 'models.form.filePath': 'Путь к модели', 'models.form.backendVersion': 'Версия бэкенда', - 'models.form.backendVersion.tips': 'Чтобы использовать желаемую версию {backend}, система автоматически создаст виртуальную среду в онлайн-окружении для установки соответствующей версии. После обновления GPUStack версия бэкенда останется зафиксированной. {link}', + 'models.form.backendVersion.tips': + 'Чтобы использовать желаемую версию {backend}, система автоматически создаст виртуальную среду в онлайн-окружении для установки соответствующей версии. После обновления GPUStack версия бэкенда останется зафиксированной. {link}', 'models.form.gpuselector': 'Селектор GPU', - 'models.form.backend.llamabox': 'Для моделей формата GGUF. Поддержка Linux, macOS и Windows.', + 'models.form.backend.llamabox': + 'Для моделей формата GGUF. Поддержка Linux, macOS и Windows.', 'models.form.backend.vllm': 'Для моделей не-GGUF формата. Только x86 Linux.', 'models.form.backend.voxbox': 'Для аудиомоделей не-GGUF формата.', - 'models.form.search.gguftips': 'Для воркеров на macOS/Windows отметьте GGUF (для аудиомоделей снимите).', + 'models.form.search.gguftips': + 'Для воркеров на macOS/Windows отметьте GGUF (для аудиомоделей снимите).', 'models.form.button.addlabel': 'Добавить метку', 'models.filter.category': 'Фильтр по категориям', 'models.list.more.logs': 'Показать больше', @@ -81,24 +96,34 @@ export default { 'models.localpath.gguf.tips.title': 'Модель формата GGUF', 'models.localpat.safe.tips.title': 'Модель формата Safetensors', 'models.localpath.shared.tips.title': 'Шардированная GGUF-модель', - 'models.localpath.gguf.tips': 'Укажите файл модели, например: /data/models/model.gguf.', - 'models.localpath.safe.tips': 'Укажите директорию модели с файлами .safetensors и config.json.', - 'models.localpath.chunks.tips': 'Укажите первый шард модели, например: /data/models/model-00001-of-00004.gguf.', - 'models.form.replicas.tips': 'Несколько реплик обеспечивают балансировку нагрузки для { api } запросов.', + 'models.localpath.gguf.tips': + 'Укажите файл модели, например: /data/models/model.gguf.', + 'models.localpath.safe.tips': + 'Укажите директорию модели с файлами .safetensors и config.json.', + 'models.localpath.chunks.tips': + 'Укажите первый шард модели, например: /data/models/model-00001-of-00004.gguf.', + 'models.form.replicas.tips': + 'Несколько реплик обеспечивают балансировку нагрузки для { api } запросов.', 'models.table.list.empty': 'Модели отсутствуют!', - 'models.table.list.getStart': 'Начните работу с DeepSeek-R1-Distill-Qwen-1.5B', + 'models.table.list.getStart': + 'Начните работу с DeepSeek-R1-Distill-Qwen-1.5B', 'models.table.llamaAcrossworker': 'Llama-box между воркерами', 'models.table.vllmAcrossworker': 'vLLM между воркерами', 'models.form.releases': 'Релизы', 'models.form.moreparameters': 'Описание параметров', 'models.table.vram.allocated': 'Выделенная VRAM', - 'models.form.backend.warning': 'Бэкенд для моделей формата GGUF использует llama-box.', - 'models.form.ollama.warning': 'Чтобы развернуть бэкенд для моделей Ollama с использованием llama-box , выполните следующие шаги.', - 'models.form.backend.warning.llamabox': 'Чтобы использовать бэкенд llama-box , укажите полный путь к файлу модели (например,/data/models/model.gguf). Для шардированных моделей укажите путь к первому шарду (например,/data/models/model-00001-of-00004.gguf).', - 'models.form.keyvalue.paste': 'Вставьте несколько строк текста, где каждая строка содержит пару ключ-значение. Ключ и значение разделяются знаком равенства (=), а разные пары — символами новой строки.', - 'models.form.files': 'файлы' + 'models.form.backend.warning': + 'Бэкенд для моделей формата GGUF использует llama-box.', + 'models.form.ollama.warning': + 'Чтобы развернуть бэкенд для моделей Ollama с использованием llama-box , выполните следующие шаги.', + 'models.form.backend.warning.llamabox': + 'Чтобы использовать бэкенд llama-box , укажите полный путь к файлу модели (например,/data/models/model.gguf). Для шардированных моделей укажите путь к первому шарду (например,/data/models/model-00001-of-00004.gguf).', + 'models.form.keyvalue.paste': + 'Вставьте несколько строк текста, где каждая строка содержит пару ключ-значение. Ключ и значение разделяются знаком равенства (=), а разные пары — символами новой строки.', + 'models.form.files': 'файлы', + 'models.table.status': 'Status' }; // ========== To-Do: Translate Keys (Remove After Translation) ========== - +// 1. models.table.status // ========== End of To-Do List ========== diff --git a/src/locales/zh-CN/models.ts b/src/locales/zh-CN/models.ts index f2cf0720..5727d0a7 100644 --- a/src/locales/zh-CN/models.ts +++ b/src/locales/zh-CN/models.ts @@ -113,5 +113,6 @@ export default { '要使用 llama-box 后端,请指定模型文件的完整路径(例如:/data/models/model.gguf)。对于分片模型,请提供第一个分片的路径(例如:/data/models/model-00001-of-00004.gguf)。', 'models.form.keyvalue.paste': '粘贴多行文本,每行包含一个键值对,键和值之间用 = 号分隔,不同的键值对之间用换行符分隔。', - 'models.form.files': '文件' + 'models.form.files': '文件', + 'models.table.status': '状态' }; diff --git a/src/pages/llmodels/components/instance-item.tsx b/src/pages/llmodels/components/instance-item.tsx index 4bfde448..cd4c998a 100644 --- a/src/pages/llmodels/components/instance-item.tsx +++ b/src/pages/llmodels/components/instance-item.tsx @@ -46,7 +46,8 @@ const downloadList: ColumnProps[] = [ width: 200 }, { - title: 'Status', + title: 'models.table.status', + locale: true, key: 'download_progress', render: ({ row }) => { return ( @@ -141,7 +142,10 @@ const RenderWorkerDownloading = (props: { instanceData: ModelInstanceListItem; }) => { const { rayActors, workerList, instanceData } = props; - if (instanceData.state === InstanceStatusMap.Error || !rayActors.length) { + if ( + instanceData.state !== InstanceStatusMap.Downloading || + !rayActors.length + ) { return null; } return ( @@ -163,7 +167,7 @@ const RenderWorkerDownloading = (props: { item.download_progress < 100) diff --git a/src/pages/llmodels/hooks/index.ts b/src/pages/llmodels/hooks/index.ts index 65047d97..d648ad87 100644 --- a/src/pages/llmodels/hooks/index.ts +++ b/src/pages/llmodels/hooks/index.ts @@ -121,6 +121,7 @@ export const useGenerateModelFileOptions = () => { const result = Array.from(workersMap.values()).map((worker) => ({ label: worker.name, value: worker.name, + labels: worker.labels, parent: true, children: list .filter((item) => item.worker_id === worker.id) @@ -134,6 +135,8 @@ export const useGenerateModelFileOptions = () => { return { label: item.resolved_paths[0] || '', value: item.resolved_paths[0] || '', + worker_labels: worker.labels, + worker_name: worker.name, parent: false, ...item }; @@ -161,6 +164,7 @@ export const useGenerateModelFileOptions = () => { } return acc; }, []); + console.log('childrenList', childrenList); return childrenList;