diff --git a/pyproject.toml b/pyproject.toml index d6188228..04afe4cc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,7 @@ indent-width = 4 ignore = ["C408", "C901", "E501", "E731", "E741", "W605"] select = ["C", "E", "F", "I", "W"] -[tool.ruff.isort] +[tool.ruff.lint.isort] lines-after-imports = 2 known-first-party = ["llmtuner"] diff --git a/src/llmtuner/data/formatter.py b/src/llmtuner/data/formatter.py index 82dff8ca..a9632931 100644 --- a/src/llmtuner/data/formatter.py +++ b/src/llmtuner/data/formatter.py @@ -75,8 +75,7 @@ class Formatter(ABC): tool_format: Literal["default"] = "default" @abstractmethod - def apply(self, **kwargs) -> SLOTS: - ... + def apply(self, **kwargs) -> SLOTS: ... def extract(self, content: str) -> Union[str, Tuple[str, str]]: raise NotImplementedError diff --git a/src/llmtuner/extras/constants.py b/src/llmtuner/extras/constants.py index cfa69730..33eb7f42 100644 --- a/src/llmtuner/extras/constants.py +++ b/src/llmtuner/extras/constants.py @@ -11,7 +11,14 @@ DEFAULT_MODULE = defaultdict(str) DEFAULT_TEMPLATE = defaultdict(str) -FILEEXT2TYPE = {"arrow": "arrow", "csv": "csv", "json": "json", "jsonl": "json", "parquet": "parquet", "txt": "text"} +FILEEXT2TYPE = { + "arrow": "arrow", + "csv": "csv", + "json": "json", + "jsonl": "json", + "parquet": "parquet", + "txt": "text", +} IGNORE_INDEX = -100 @@ -46,7 +53,9 @@ class DownloadSource(str, Enum): def register_model_group( - models: Dict[str, Dict[DownloadSource, str]], module: Optional[str] = None, template: Optional[str] = None + models: Dict[str, Dict[DownloadSource, str]], + module: Optional[str] = None, + template: Optional[str] = None, ) -> None: prefix = None for name, path in models.items(): @@ -235,8 +244,12 @@ register_model_group( DownloadSource.DEFAULT: "deepseek-ai/deepseek-llm-67b-chat", DownloadSource.MODELSCOPE: "deepseek-ai/deepseek-llm-67b-chat", }, - "DeepSeek-Math-7B-Base": {DownloadSource.DEFAULT: "deepseek-ai/deepseek-math-7b-base"}, - "DeepSeek-Math-7B-Chat": {DownloadSource.DEFAULT: "deepseek-ai/deepseek-math-7b-instruct"}, + "DeepSeek-Math-7B-Base": { + DownloadSource.DEFAULT: "deepseek-ai/deepseek-math-7b-base", + }, + "DeepSeek-Math-7B-Chat": { + DownloadSource.DEFAULT: "deepseek-ai/deepseek-math-7b-instruct", + }, "DeepSeek-MoE-16B-Base": { DownloadSource.DEFAULT: "deepseek-ai/deepseek-moe-16b-base", DownloadSource.MODELSCOPE: "deepseek-ai/deepseek-moe-16b-base", @@ -256,7 +269,9 @@ register_model_group( DownloadSource.DEFAULT: "deepseek-ai/deepseek-coder-6.7b-base", DownloadSource.MODELSCOPE: "deepseek-ai/deepseek-coder-6.7b-base", }, - "DeepSeekCoder-7B-Base": {DownloadSource.DEFAULT: "deepseek-ai/deepseek-coder-7b-base-v1.5"}, + "DeepSeekCoder-7B-Base": { + DownloadSource.DEFAULT: "deepseek-ai/deepseek-coder-7b-base-v1.5", + }, "DeepSeekCoder-33B-Base": { DownloadSource.DEFAULT: "deepseek-ai/deepseek-coder-33b-base", DownloadSource.MODELSCOPE: "deepseek-ai/deepseek-coder-33b-base", @@ -265,7 +280,9 @@ register_model_group( DownloadSource.DEFAULT: "deepseek-ai/deepseek-coder-6.7b-instruct", DownloadSource.MODELSCOPE: "deepseek-ai/deepseek-coder-6.7b-instruct", }, - "DeepSeekCoder-7B-Chat": {DownloadSource.DEFAULT: "deepseek-ai/deepseek-coder-7b-instruct-v1.5"}, + "DeepSeekCoder-7B-Chat": { + DownloadSource.DEFAULT: "deepseek-ai/deepseek-coder-7b-instruct-v1.5", + }, "DeepSeekCoder-33B-Chat": { DownloadSource.DEFAULT: "deepseek-ai/deepseek-coder-33b-instruct", DownloadSource.MODELSCOPE: "deepseek-ai/deepseek-coder-33b-instruct", @@ -367,7 +384,10 @@ register_model_group( register_model_group( models={ - "LLaMA-7B": {DownloadSource.DEFAULT: "huggyllama/llama-7b", DownloadSource.MODELSCOPE: "skyline2006/llama-7b"}, + "LLaMA-7B": { + DownloadSource.DEFAULT: "huggyllama/llama-7b", + DownloadSource.MODELSCOPE: "skyline2006/llama-7b", + }, "LLaMA-13B": { DownloadSource.DEFAULT: "huggyllama/llama-13b", DownloadSource.MODELSCOPE: "skyline2006/llama-13b", @@ -489,18 +509,36 @@ register_model_group( register_model_group( models={ - "Phi-1.5-1.3B": {DownloadSource.DEFAULT: "microsoft/phi-1_5", DownloadSource.MODELSCOPE: "allspace/PHI_1-5"}, - "Phi-2-2.7B": {DownloadSource.DEFAULT: "microsoft/phi-2", DownloadSource.MODELSCOPE: "AI-ModelScope/phi-2"}, + "Phi-1.5-1.3B": { + DownloadSource.DEFAULT: "microsoft/phi-1_5", + DownloadSource.MODELSCOPE: "allspace/PHI_1-5", + }, + "Phi-2-2.7B": { + DownloadSource.DEFAULT: "microsoft/phi-2", + DownloadSource.MODELSCOPE: "AI-ModelScope/phi-2", + }, } ) register_model_group( models={ - "Qwen-1.8B": {DownloadSource.DEFAULT: "Qwen/Qwen-1_8B", DownloadSource.MODELSCOPE: "qwen/Qwen-1_8B"}, - "Qwen-7B": {DownloadSource.DEFAULT: "Qwen/Qwen-7B", DownloadSource.MODELSCOPE: "qwen/Qwen-7B"}, - "Qwen-14B": {DownloadSource.DEFAULT: "Qwen/Qwen-14B", DownloadSource.MODELSCOPE: "qwen/Qwen-14B"}, - "Qwen-72B": {DownloadSource.DEFAULT: "Qwen/Qwen-72B", DownloadSource.MODELSCOPE: "qwen/Qwen-72B"}, + "Qwen-1.8B": { + DownloadSource.DEFAULT: "Qwen/Qwen-1_8B", + DownloadSource.MODELSCOPE: "qwen/Qwen-1_8B", + }, + "Qwen-7B": { + DownloadSource.DEFAULT: "Qwen/Qwen-7B", + DownloadSource.MODELSCOPE: "qwen/Qwen-7B", + }, + "Qwen-14B": { + DownloadSource.DEFAULT: "Qwen/Qwen-14B", + DownloadSource.MODELSCOPE: "qwen/Qwen-14B", + }, + "Qwen-72B": { + DownloadSource.DEFAULT: "Qwen/Qwen-72B", + DownloadSource.MODELSCOPE: "qwen/Qwen-72B", + }, "Qwen-1.8B-Chat": { DownloadSource.DEFAULT: "Qwen/Qwen-1_8B-Chat", DownloadSource.MODELSCOPE: "qwen/Qwen-1_8B-Chat", @@ -657,7 +695,9 @@ register_model_group( register_model_group( models={ - "SOLAR-10.7B": {DownloadSource.DEFAULT: "upstage/SOLAR-10.7B-v1.0"}, + "SOLAR-10.7B": { + DownloadSource.DEFAULT: "upstage/SOLAR-10.7B-v1.0", + }, "SOLAR-10.7B-Chat": { DownloadSource.DEFAULT: "upstage/SOLAR-10.7B-Instruct-v1.0", DownloadSource.MODELSCOPE: "AI-ModelScope/SOLAR-10.7B-Instruct-v1.0", @@ -694,10 +734,18 @@ register_model_group( register_model_group( models={ - "XuanYuan-70B": {DownloadSource.DEFAULT: "Duxiaoman-DI/XuanYuan-70B"}, - "XuanYuan-70B-Chat": {DownloadSource.DEFAULT: "Duxiaoman-DI/XuanYuan-70B-Chat"}, - "XuanYuan-70B-int8-Chat": {DownloadSource.DEFAULT: "Duxiaoman-DI/XuanYuan-70B-Chat-8bit"}, - "XuanYuan-70B-int4-Chat": {DownloadSource.DEFAULT: "Duxiaoman-DI/XuanYuan-70B-Chat-4bit"}, + "XuanYuan-70B": { + DownloadSource.DEFAULT: "Duxiaoman-DI/XuanYuan-70B", + }, + "XuanYuan-70B-Chat": { + DownloadSource.DEFAULT: "Duxiaoman-DI/XuanYuan-70B-Chat", + }, + "XuanYuan-70B-int8-Chat": { + DownloadSource.DEFAULT: "Duxiaoman-DI/XuanYuan-70B-Chat-8bit", + }, + "XuanYuan-70B-int4-Chat": { + DownloadSource.DEFAULT: "Duxiaoman-DI/XuanYuan-70B-Chat-4bit", + }, }, template="xuanyuan", ) @@ -705,9 +753,18 @@ register_model_group( register_model_group( models={ - "XVERSE-7B": {DownloadSource.DEFAULT: "xverse/XVERSE-7B", DownloadSource.MODELSCOPE: "xverse/XVERSE-7B"}, - "XVERSE-13B": {DownloadSource.DEFAULT: "xverse/XVERSE-13B", DownloadSource.MODELSCOPE: "xverse/XVERSE-13B"}, - "XVERSE-65B": {DownloadSource.DEFAULT: "xverse/XVERSE-65B", DownloadSource.MODELSCOPE: "xverse/XVERSE-65B"}, + "XVERSE-7B": { + DownloadSource.DEFAULT: "xverse/XVERSE-7B", + DownloadSource.MODELSCOPE: "xverse/XVERSE-7B", + }, + "XVERSE-13B": { + DownloadSource.DEFAULT: "xverse/XVERSE-13B", + DownloadSource.MODELSCOPE: "xverse/XVERSE-13B", + }, + "XVERSE-65B": { + DownloadSource.DEFAULT: "xverse/XVERSE-65B", + DownloadSource.MODELSCOPE: "xverse/XVERSE-65B", + }, "XVERSE-65B-2": { DownloadSource.DEFAULT: "xverse/XVERSE-65B-2", DownloadSource.MODELSCOPE: "xverse/XVERSE-65B-2", @@ -746,10 +803,22 @@ register_model_group( register_model_group( models={ - "Yi-6B": {DownloadSource.DEFAULT: "01-ai/Yi-6B", DownloadSource.MODELSCOPE: "01ai/Yi-6B"}, - "Yi-34B": {DownloadSource.DEFAULT: "01-ai/Yi-34B", DownloadSource.MODELSCOPE: "01ai/Yi-34B"}, - "Yi-6B-Chat": {DownloadSource.DEFAULT: "01-ai/Yi-6B-Chat", DownloadSource.MODELSCOPE: "01ai/Yi-6B-Chat"}, - "Yi-34B-Chat": {DownloadSource.DEFAULT: "01-ai/Yi-34B-Chat", DownloadSource.MODELSCOPE: "01ai/Yi-34B-Chat"}, + "Yi-6B": { + DownloadSource.DEFAULT: "01-ai/Yi-6B", + DownloadSource.MODELSCOPE: "01ai/Yi-6B", + }, + "Yi-34B": { + DownloadSource.DEFAULT: "01-ai/Yi-34B", + DownloadSource.MODELSCOPE: "01ai/Yi-34B", + }, + "Yi-6B-Chat": { + DownloadSource.DEFAULT: "01-ai/Yi-6B-Chat", + DownloadSource.MODELSCOPE: "01ai/Yi-6B-Chat", + }, + "Yi-34B-Chat": { + DownloadSource.DEFAULT: "01-ai/Yi-34B-Chat", + DownloadSource.MODELSCOPE: "01ai/Yi-34B-Chat", + }, "Yi-6B-int8-Chat": { DownloadSource.DEFAULT: "01-ai/Yi-6B-Chat-8bits", DownloadSource.MODELSCOPE: "01ai/Yi-6B-Chat-8bits", diff --git a/src/llmtuner/hparams/data_args.py b/src/llmtuner/hparams/data_args.py index 68b8ffe8..c387d37f 100644 --- a/src/llmtuner/hparams/data_args.py +++ b/src/llmtuner/hparams/data_args.py @@ -7,6 +7,7 @@ class DataArguments: r""" Arguments pertaining to what data we are going to input our model for training and evaluation. """ + template: Optional[str] = field( default=None, metadata={"help": "Which template to use for constructing prompts in training and inference."} ) diff --git a/src/llmtuner/hparams/evaluation_args.py b/src/llmtuner/hparams/evaluation_args.py index ac1ceb68..bd4263f9 100644 --- a/src/llmtuner/hparams/evaluation_args.py +++ b/src/llmtuner/hparams/evaluation_args.py @@ -10,6 +10,7 @@ class EvaluationArguments: r""" Arguments pertaining to specify the evaluation parameters. """ + task: str = field(metadata={"help": "Name of the evaluation task."}) task_dir: Optional[str] = field( default="evaluation", metadata={"help": "Path to the folder containing the evaluation datasets."} diff --git a/src/llmtuner/hparams/finetuning_args.py b/src/llmtuner/hparams/finetuning_args.py index 69403cc2..3c336574 100644 --- a/src/llmtuner/hparams/finetuning_args.py +++ b/src/llmtuner/hparams/finetuning_args.py @@ -8,6 +8,7 @@ class FreezeArguments: r""" Arguments pertaining to the freeze (partial-parameter) training. """ + name_module_trainable: Optional[str] = field( default="mlp", metadata={ @@ -31,6 +32,7 @@ class LoraArguments: r""" Arguments pertaining to the LoRA training. """ + additional_target: Optional[str] = field( default=None, metadata={ @@ -67,6 +69,7 @@ class RLHFArguments: r""" Arguments pertaining to the PPO and DPO training. """ + dpo_beta: Optional[float] = field(default=0.1, metadata={"help": "The beta parameter for the DPO loss."}) dpo_loss: Optional[Literal["sigmoid", "hinge", "ipo", "kto"]] = field( default="sigmoid", metadata={"help": "The type of DPO loss to use."} @@ -122,6 +125,7 @@ class FinetuningArguments(FreezeArguments, LoraArguments, RLHFArguments): r""" Arguments pertaining to which techniques we are going to fine-tuning with. """ + stage: Optional[Literal["pt", "sft", "rm", "ppo", "dpo"]] = field( default="sft", metadata={"help": "Which stage will be performed in training."} ) diff --git a/src/llmtuner/hparams/generating_args.py b/src/llmtuner/hparams/generating_args.py index 3df2749a..bfd1395f 100644 --- a/src/llmtuner/hparams/generating_args.py +++ b/src/llmtuner/hparams/generating_args.py @@ -7,6 +7,7 @@ class GeneratingArguments: r""" Arguments pertaining to specify the decoding parameters. """ + do_sample: Optional[bool] = field( default=True, metadata={"help": "Whether or not to use sampling, use greedy decoding otherwise."} ) diff --git a/src/llmtuner/hparams/model_args.py b/src/llmtuner/hparams/model_args.py index 9737f707..86006681 100644 --- a/src/llmtuner/hparams/model_args.py +++ b/src/llmtuner/hparams/model_args.py @@ -7,6 +7,7 @@ class ModelArguments: r""" Arguments pertaining to which model/config/tokenizer we are going to fine-tune. """ + model_name_or_path: str = field( metadata={"help": "Path to the model weight or identifier from huggingface.co/models or modelscope.cn/models."} ) diff --git a/src/llmtuner/webui/locales.py b/src/llmtuner/webui/locales.py index 8fd6ca28..7b0730ef 100644 --- a/src/llmtuner/webui/locales.py +++ b/src/llmtuner/webui/locales.py @@ -1,142 +1,456 @@ LOCALES = { - "lang": {"en": {"label": "Lang"}, "ru": {"label": "Русский"}, "zh": {"label": "语言"}}, - "model_name": {"en": {"label": "Model name"}, "ru": {"label": "Название модели"}, "zh": {"label": "模型名称"}}, + "lang": { + "en": { + "label": "Lang", + }, + "ru": { + "label": "Русский", + }, + "zh": { + "label": "语言", + }, + }, + "model_name": { + "en": { + "label": "Model name", + }, + "ru": { + "label": "Название модели", + }, + "zh": { + "label": "模型名称", + }, + }, "model_path": { - "en": {"label": "Model path", "info": "Path to pretrained model or model identifier from Hugging Face."}, - "ru": {"label": "Путь к предварительно обученной модели или идентификатор модели от Hugging Face."}, - "zh": {"label": "模型路径", "info": "本地模型的文件路径或 Hugging Face 的模型标识符。"}, + "en": { + "label": "Model path", + "info": "Path to pretrained model or model identifier from Hugging Face.", + }, + "ru": { + "label": "Путь к модели", + "info": "Путь к предварительно обученной модели или идентификатор модели от Hugging Face.", + }, + "zh": { + "label": "模型路径", + "info": "本地模型的文件路径或 Hugging Face 的模型标识符。", + }, }, "finetuning_type": { - "en": {"label": "Finetuning method"}, - "ru": {"label": "Метод дообучения"}, - "zh": {"label": "微调方法"}, + "en": { + "label": "Finetuning method", + }, + "ru": { + "label": "Метод дообучения", + }, + "zh": { + "label": "微调方法", + }, + }, + "adapter_path": { + "en": { + "label": "Adapter path", + }, + "ru": { + "label": "Путь к адаптеру", + }, + "zh": { + "label": "适配器路径", + }, }, - "adapter_path": {"en": {"label": "Adapter path"}, "ru": {"label": "Путь к адаптеру"}, "zh": {"label": "适配器路径"}}, "refresh_btn": { - "en": {"value": "Refresh adapters"}, - "ru": {"value": "Обновить адаптеры"}, - "zh": {"value": "刷新适配器"}, + "en": { + "value": "Refresh adapters", + }, + "ru": { + "value": "Обновить адаптеры", + }, + "zh": { + "value": "刷新适配器", + }, }, "advanced_tab": { - "en": {"label": "Advanced configurations"}, - "ru": {"label": "Расширенные конфигурации"}, - "zh": {"label": "高级设置"}, + "en": { + "label": "Advanced configurations", + }, + "ru": { + "label": "Расширенные конфигурации", + }, + "zh": { + "label": "高级设置", + }, }, "quantization_bit": { - "en": {"label": "Quantization bit", "info": "Enable 4/8-bit model quantization (QLoRA)."}, - "ru": {"label": "Уровень квантования", "info": "Включить 4/8-битное квантование модели (QLoRA)."}, - "zh": {"label": "量化等级", "info": "启用 4/8 比特模型量化(QLoRA)。"}, + "en": { + "label": "Quantization bit", + "info": "Enable 4/8-bit model quantization (QLoRA).", + }, + "ru": { + "label": "Уровень квантования", + "info": "Включить 4/8-битное квантование модели (QLoRA).", + }, + "zh": { + "label": "量化等级", + "info": "启用 4/8 比特模型量化(QLoRA)。", + }, }, "template": { - "en": {"label": "Prompt template", "info": "The template used in constructing prompts."}, - "ru": {"label": "Шаблон запроса", "info": "Шаблон, используемый при формировании запросов."}, - "zh": {"label": "提示模板", "info": "构建提示词时使用的模板"}, + "en": { + "label": "Prompt template", + "info": "The template used in constructing prompts.", + }, + "ru": { + "label": "Шаблон запроса", + "info": "Шаблон, используемый при формировании запросов.", + }, + "zh": { + "label": "提示模板", + "info": "构建提示词时使用的模板", + }, }, "rope_scaling": { - "en": {"label": "RoPE scaling"}, - "ru": {"label": "Масштабирование RoPE"}, - "zh": {"label": "RoPE 插值方法"}, + "en": { + "label": "RoPE scaling", + }, + "ru": { + "label": "Масштабирование RoPE", + }, + "zh": { + "label": "RoPE 插值方法", + }, + }, + "booster": { + "en": { + "label": "Booster", + }, + "ru": { + "label": "Ускоритель", + }, + "zh": { + "label": "加速方式", + }, }, - "booster": {"en": {"label": "Booster"}, "ru": {"label": "Ускоритель"}, "zh": {"label": "加速方式"}}, "training_stage": { - "en": {"label": "Stage", "info": "The stage to perform in training."}, - "ru": {"label": "Этап", "info": "Этап выполнения обучения."}, - "zh": {"label": "训练阶段", "info": "目前采用的训练方式。"}, + "en": { + "label": "Stage", + "info": "The stage to perform in training.", + }, + "ru": { + "label": "Этап", + "info": "Этап выполнения обучения.", + }, + "zh": { + "label": "训练阶段", + "info": "目前采用的训练方式。", + }, }, "dataset_dir": { - "en": {"label": "Data dir", "info": "Path to the data directory."}, - "ru": {"label": "Директория данных", "info": "Путь к директории данных."}, - "zh": {"label": "数据路径", "info": "数据文件夹的路径。"}, + "en": { + "label": "Data dir", + "info": "Path to the data directory.", + }, + "ru": { + "label": "Директория данных", + "info": "Путь к директории данных.", + }, + "zh": { + "label": "数据路径", + "info": "数据文件夹的路径。", + }, + }, + "dataset": { + "en": { + "label": "Dataset", + }, + "ru": { + "label": "Набор данных", + }, + "zh": { + "label": "数据集", + }, }, - "dataset": {"en": {"label": "Dataset"}, "ru": {"label": "Набор данных"}, "zh": {"label": "数据集"}}, "data_preview_btn": { - "en": {"value": "Preview dataset"}, - "ru": {"value": "Просмотреть набор данных"}, - "zh": {"value": "预览数据集"}, + "en": { + "value": "Preview dataset", + }, + "ru": { + "value": "Просмотреть набор данных", + }, + "zh": { + "value": "预览数据集", + }, + }, + "preview_count": { + "en": { + "label": "Count", + }, + "ru": { + "label": "Количество", + }, + "zh": { + "label": "数量", + }, + }, + "page_index": { + "en": { + "label": "Page", + }, + "ru": { + "label": "Страница", + }, + "zh": { + "label": "页数", + }, + }, + "prev_btn": { + "en": { + "value": "Prev", + }, + "ru": { + "value": "Предыдущая", + }, + "zh": { + "value": "上一页", + }, + }, + "next_btn": { + "en": { + "value": "Next", + }, + "ru": { + "value": "Следующая", + }, + "zh": { + "value": "下一页", + }, + }, + "close_btn": { + "en": { + "value": "Close", + }, + "ru": { + "value": "Закрыть", + }, + "zh": { + "value": "关闭", + }, + }, + "preview_samples": { + "en": { + "label": "Samples", + }, + "ru": { + "label": "Примеры", + }, + "zh": { + "label": "样例", + }, }, - "preview_count": {"en": {"label": "Count"}, "ru": {"label": "Количество"}, "zh": {"label": "数量"}}, - "page_index": {"en": {"label": "Page"}, "ru": {"label": "Страница"}, "zh": {"label": "页数"}}, - "prev_btn": {"en": {"value": "Prev"}, "ru": {"value": "Предыдущая"}, "zh": {"value": "上一页"}}, - "next_btn": {"en": {"value": "Next"}, "ru": {"value": "Следующая"}, "zh": {"value": "下一页"}}, - "close_btn": {"en": {"value": "Close"}, "ru": {"value": "Закрыть"}, "zh": {"value": "关闭"}}, - "preview_samples": {"en": {"label": "Samples"}, "ru": {"label": "Примеры"}, "zh": {"label": "样例"}}, "cutoff_len": { - "en": {"label": "Cutoff length", "info": "Max tokens in input sequence."}, - "ru": {"label": "Длина обрезки", "info": "Максимальное количество токенов во входной последовательности."}, - "zh": {"label": "截断长度", "info": "输入序列分词后的最大长度。"}, + "en": { + "label": "Cutoff length", + "info": "Max tokens in input sequence.", + }, + "ru": { + "label": "Длина обрезки", + "info": "Максимальное количество токенов во входной последовательности.", + }, + "zh": { + "label": "截断长度", + "info": "输入序列分词后的最大长度。", + }, }, "learning_rate": { - "en": {"label": "Learning rate", "info": "Initial learning rate for AdamW."}, - "ru": {"label": "Скорость обучения", "info": "Начальная скорость обучения для AdamW."}, - "zh": {"label": "学习率", "info": "AdamW 优化器的初始学习率。"}, + "en": { + "label": "Learning rate", + "info": "Initial learning rate for AdamW.", + }, + "ru": { + "label": "Скорость обучения", + "info": "Начальная скорость обучения для AdamW.", + }, + "zh": { + "label": "学习率", + "info": "AdamW 优化器的初始学习率。", + }, }, "num_train_epochs": { - "en": {"label": "Epochs", "info": "Total number of training epochs to perform."}, - "ru": {"label": "Эпохи", "info": "Общее количество эпох обучения."}, - "zh": {"label": "训练轮数", "info": "需要执行的训练总轮数。"}, + "en": { + "label": "Epochs", + "info": "Total number of training epochs to perform.", + }, + "ru": { + "label": "Эпохи", + "info": "Общее количество эпох обучения.", + }, + "zh": { + "label": "训练轮数", + "info": "需要执行的训练总轮数。", + }, }, "max_samples": { - "en": {"label": "Max samples", "info": "Maximum samples per dataset."}, + "en": { + "label": "Max samples", + "info": "Maximum samples per dataset.", + }, "ru": { "label": "Максимальное количество образцов", "info": "Максимальное количество образцов на набор данных.", }, - "zh": {"label": "最大样本数", "info": "每个数据集的最大样本数。"}, + "zh": { + "label": "最大样本数", + "info": "每个数据集的最大样本数。", + }, }, "compute_type": { - "en": {"label": "Compute type", "info": "Whether to use mixed precision training (fp16 or bf16)."}, - "ru": {"label": "Тип вычислений", "info": "Использовать ли обучение смешанной точности fp16 или bf16."}, - "zh": {"label": "计算类型", "info": "是否使用混合精度训练(fp16 或 bf16)。"}, + "en": { + "label": "Compute type", + "info": "Whether to use mixed precision training (fp16 or bf16).", + }, + "ru": { + "label": "Тип вычислений", + "info": "Использовать ли обучение смешанной точности fp16 или bf16.", + }, + "zh": { + "label": "计算类型", + "info": "是否使用混合精度训练(fp16 或 bf16)。", + }, }, "batch_size": { - "en": {"label": "Batch size", "info": "Number of samples processed on each GPU."}, - "ru": {"label": "Размер пакета", "info": "Количество образцов для обработки на каждом GPU."}, - "zh": {"label": "批处理大小", "info": "每个 GPU 处理的样本数量。"}, + "en": { + "label": "Batch size", + "info": "Number of samples processed on each GPU.", + }, + "ru": { + "label": "Размер пакета", + "info": "Количество образцов для обработки на каждом GPU.", + }, + "zh": { + "label": "批处理大小", + "info": "每个 GPU 处理的样本数量。", + }, }, "gradient_accumulation_steps": { - "en": {"label": "Gradient accumulation", "info": "Number of steps for gradient accumulation."}, - "ru": {"label": "Накопление градиента", "info": "Количество шагов накопления градиента."}, - "zh": {"label": "梯度累积", "info": "梯度累积的步数。"}, + "en": { + "label": "Gradient accumulation", + "info": "Number of steps for gradient accumulation.", + }, + "ru": { + "label": "Накопление градиента", + "info": "Количество шагов накопления градиента.", + }, + "zh": { + "label": "梯度累积", + "info": "梯度累积的步数。", + }, }, "lr_scheduler_type": { - "en": {"label": "LR scheduler", "info": "Name of the learning rate scheduler."}, - "ru": {"label": "Планировщик скорости обучения", "info": "Название планировщика скорости обучения."}, - "zh": {"label": "学习率调节器", "info": "学习率调度器的名称。"}, + "en": { + "label": "LR scheduler", + "info": "Name of the learning rate scheduler.", + }, + "ru": { + "label": "Планировщик скорости обучения", + "info": "Название планировщика скорости обучения.", + }, + "zh": { + "label": "学习率调节器", + "info": "学习率调度器的名称。", + }, }, "max_grad_norm": { - "en": {"label": "Maximum gradient norm", "info": "Norm for gradient clipping."}, - "ru": {"label": "Максимальная норма градиента", "info": "Норма для обрезки градиента."}, - "zh": {"label": "最大梯度范数", "info": "用于梯度裁剪的范数。"}, + "en": { + "label": "Maximum gradient norm", + "info": "Norm for gradient clipping.", + }, + "ru": { + "label": "Максимальная норма градиента", + "info": "Норма для обрезки градиента.", + }, + "zh": { + "label": "最大梯度范数", + "info": "用于梯度裁剪的范数。", + }, }, "val_size": { - "en": {"label": "Val size", "info": "Proportion of data in the dev set."}, - "ru": {"label": "Размер валидации", "info": "Пропорция данных в наборе для разработки."}, - "zh": {"label": "验证集比例", "info": "验证集占全部样本的百分比。"}, + "en": { + "label": "Val size", + "info": "Proportion of data in the dev set.", + }, + "ru": { + "label": "Размер валидации", + "info": "Пропорция данных в наборе для разработки.", + }, + "zh": { + "label": "验证集比例", + "info": "验证集占全部样本的百分比。", + }, }, "extra_tab": { - "en": {"label": "Extra configurations"}, - "ru": {"label": "Дополнительные конфигурации"}, - "zh": {"label": "其它参数设置"}, + "en": { + "label": "Extra configurations", + }, + "ru": { + "label": "Дополнительные конфигурации", + }, + "zh": { + "label": "其它参数设置", + }, }, "logging_steps": { - "en": {"label": "Logging steps", "info": "Number of steps between two logs."}, - "ru": {"label": "Шаги логирования", "info": "Количество шагов между двумя записями в журнале."}, - "zh": {"label": "日志间隔", "info": "每两次日志输出间的更新步数。"}, + "en": { + "label": "Logging steps", + "info": "Number of steps between two logs.", + }, + "ru": { + "label": "Шаги логирования", + "info": "Количество шагов между двумя записями в журнале.", + }, + "zh": { + "label": "日志间隔", + "info": "每两次日志输出间的更新步数。", + }, }, "save_steps": { - "en": {"label": "Save steps", "info": "Number of steps between two checkpoints."}, - "ru": {"label": "Шаги сохранения", "info": "Количество шагов между двумя контрольными точками."}, - "zh": {"label": "保存间隔", "info": "每两次断点保存间的更新步数。"}, + "en": { + "label": "Save steps", + "info": "Number of steps between two checkpoints.", + }, + "ru": { + "label": "Шаги сохранения", + "info": "Количество шагов между двумя контрольными точками.", + }, + "zh": { + "label": "保存间隔", + "info": "每两次断点保存间的更新步数。", + }, }, "warmup_steps": { - "en": {"label": "Warmup steps", "info": "Number of steps used for warmup."}, - "ru": {"label": "Шаги прогрева", "info": "Количество шагов, используемых для прогрева."}, - "zh": {"label": "预热步数", "info": "学习率预热采用的步数。"}, + "en": { + "label": "Warmup steps", + "info": "Number of steps used for warmup.", + }, + "ru": { + "label": "Шаги прогрева", + "info": "Количество шагов, используемых для прогрева.", + }, + "zh": { + "label": "预热步数", + "info": "学习率预热采用的步数。", + }, }, "neftune_alpha": { - "en": {"label": "NEFTune Alpha", "info": "Magnitude of noise adding to embedding vectors."}, - "ru": {"label": "NEFTune Alpha", "info": "Величина шума, добавляемого к векторам вложений."}, - "zh": {"label": "NEFTune 噪声参数", "info": "嵌入向量所添加的噪声大小。"}, + "en": { + "label": "NEFTune Alpha", + "info": "Magnitude of noise adding to embedding vectors.", + }, + "ru": { + "label": "NEFTune Alpha", + "info": "Величина шума, добавляемого к векторам вложений.", + }, + "zh": { + "label": "NEFTune 噪声参数", + "info": "嵌入向量所添加的噪声大小。", + }, }, "sft_packing": { "en": { @@ -147,27 +461,63 @@ LOCALES = { "label": "Упаковка последовательностей", "info": "Упаковка последовательностей в образцы фиксированной длины при контролируемой тонкой настройке.", }, - "zh": {"label": "序列打包", "info": "在指令监督微调阶段将序列打包为相同长度的样本。"}, + "zh": { + "label": "序列打包", + "info": "在指令监督微调阶段将序列打包为相同长度的样本。", + }, }, "upcast_layernorm": { - "en": {"label": "Upcast LayerNorm", "info": "Upcast weights of layernorm in float32."}, - "ru": {"label": "Приведение весов LayerNorm", "info": "Приведение весов LayerNorm к float32."}, - "zh": {"label": "缩放归一化层", "info": "将归一化层权重缩放至 32 位精度。"}, + "en": { + "label": "Upcast LayerNorm", + "info": "Upcast weights of layernorm in float32.", + }, + "ru": { + "label": "Приведение весов LayerNorm", + "info": "Приведение весов LayerNorm к float32.", + }, + "zh": { + "label": "缩放归一化层", + "info": "将归一化层权重缩放至 32 位精度。", + }, }, "lora_tab": { - "en": {"label": "LoRA configurations"}, - "ru": {"label": "Конфигурации LoRA"}, - "zh": {"label": "LoRA 参数设置"}, + "en": { + "label": "LoRA configurations", + }, + "ru": { + "label": "Конфигурации LoRA", + }, + "zh": { + "label": "LoRA 参数设置", + }, }, "lora_rank": { - "en": {"label": "LoRA rank", "info": "The rank of LoRA matrices."}, - "ru": {"label": "Ранг матриц LoRA", "info": "Ранг матриц LoRA."}, - "zh": {"label": "LoRA 秩", "info": "LoRA 矩阵的秩。"}, + "en": { + "label": "LoRA rank", + "info": "The rank of LoRA matrices.", + }, + "ru": { + "label": "Ранг матриц LoRA", + "info": "Ранг матриц LoRA.", + }, + "zh": { + "label": "LoRA 秩", + "info": "LoRA 矩阵的秩。", + }, }, "lora_dropout": { - "en": {"label": "LoRA Dropout", "info": "Dropout ratio of LoRA weights."}, - "ru": {"label": "Вероятность отсева LoRA", "info": "Вероятность отсева весов LoRA."}, - "zh": {"label": "LoRA 随机丢弃", "info": "LoRA 权重随机丢弃的概率。"}, + "en": { + "label": "LoRA Dropout", + "info": "Dropout ratio of LoRA weights.", + }, + "ru": { + "label": "Вероятность отсева LoRA", + "info": "Вероятность отсева весов LoRA.", + }, + "zh": { + "label": "LoRA 随机丢弃", + "info": "LoRA 权重随机丢弃的概率。", + }, }, "lora_target": { "en": { @@ -178,7 +528,10 @@ LOCALES = { "label": "Модули LoRA (опционально)", "info": "Имена целевых модулей для применения LoRA. Используйте запятые для разделения нескольких модулей.", }, - "zh": {"label": "LoRA 作用模块(非必填)", "info": "应用 LoRA 的目标模块名称。使用英文逗号分隔多个名称。"}, + "zh": { + "label": "LoRA 作用模块(非必填)", + "info": "应用 LoRA 的目标模块名称。使用英文逗号分隔多个名称。", + }, }, "additional_target": { "en": { @@ -187,9 +540,15 @@ LOCALES = { }, "ru": { "label": "Дополнительные модули (опционально)", - "info": "Имена модулей, кроме слоев LoRA, которые следует установить в качестве обучаемых. Используйте запятые для разделения нескольких модулей.", + "info": ( + "Имена модулей, кроме слоев LoRA, которые следует установить в качестве обучаемых. " + "Используйте запятые для разделения нескольких модулей." + ), + }, + "zh": { + "label": "附加模块(非必填)", + "info": "除 LoRA 层以外的可训练模块名称。使用英文逗号分隔多个名称。", }, - "zh": {"label": "附加模块(非必填)", "info": "除 LoRA 层以外的可训练模块名称。使用英文逗号分隔多个名称。"}, }, "create_new_adapter": { "en": { @@ -200,22 +559,49 @@ LOCALES = { "label": "Создать новый адаптер", "info": "Создать новый адаптер с случайной инициализацией веса или нет.", }, - "zh": {"label": "新建适配器", "info": "是否创建一个经过随机初始化的新适配器。"}, + "zh": { + "label": "新建适配器", + "info": "是否创建一个经过随机初始化的新适配器。", + }, }, "rlhf_tab": { - "en": {"label": "RLHF configurations"}, - "ru": {"label": "Конфигурации RLHF"}, - "zh": {"label": "RLHF 参数设置"}, + "en": { + "label": "RLHF configurations", + }, + "ru": { + "label": "Конфигурации RLHF", + }, + "zh": { + "label": "RLHF 参数设置", + }, }, "dpo_beta": { - "en": {"label": "DPO beta", "info": "Value of the beta parameter in the DPO loss."}, - "ru": {"label": "DPO бета", "info": "Значение параметра бета в функции потерь DPO."}, - "zh": {"label": "DPO beta 参数", "info": "DPO 损失函数中 beta 超参数大小。"}, + "en": { + "label": "DPO beta", + "info": "Value of the beta parameter in the DPO loss.", + }, + "ru": { + "label": "DPO бета", + "info": "Значение параметра бета в функции потерь DPO.", + }, + "zh": { + "label": "DPO beta 参数", + "info": "DPO 损失函数中 beta 超参数大小。", + }, }, "dpo_ftx": { - "en": {"label": "DPO-ftx weight", "info": "The weight of SFT loss in the DPO-ftx."}, - "ru": {"label": "Вес DPO-ftx", "info": "Вес функции потерь SFT в DPO-ftx."}, - "zh": {"label": "DPO-ftx 权重", "info": "DPO-ftx 中 SFT 损失的权重大小。"}, + "en": { + "label": "DPO-ftx weight", + "info": "The weight of SFT loss in the DPO-ftx.", + }, + "ru": { + "label": "Вес DPO-ftx", + "info": "Вес функции потерь SFT в DPO-ftx.", + }, + "zh": { + "label": "DPO-ftx 权重", + "info": "DPO-ftx 中 SFT 损失的权重大小。", + }, }, "reward_model": { "en": { @@ -226,79 +612,290 @@ LOCALES = { "label": "Модель вознаграждения", "info": "Адаптер модели вознаграждения для обучения PPO. (Необходимо обновить адаптеры)", }, - "zh": {"label": "奖励模型", "info": "PPO 训练中奖励模型的适配器路径。(需要刷新适配器)"}, + "zh": { + "label": "奖励模型", + "info": "PPO 训练中奖励模型的适配器路径。(需要刷新适配器)", + }, }, "cmd_preview_btn": { - "en": {"value": "Preview command"}, - "ru": {"value": "Просмотр команды"}, - "zh": {"value": "预览命令"}, + "en": { + "value": "Preview command", + }, + "ru": { + "value": "Просмотр команды", + }, + "zh": { + "value": "预览命令", + }, + }, + "start_btn": { + "en": { + "value": "Start", + }, + "ru": { + "value": "Начать", + }, + "zh": { + "value": "开始", + }, + }, + "stop_btn": { + "en": { + "value": "Abort", + }, + "ru": { + "value": "Прервать", + }, + "zh": { + "value": "中断", + }, }, - "start_btn": {"en": {"value": "Start"}, "ru": {"value": "Начать"}, "zh": {"value": "开始"}}, - "stop_btn": {"en": {"value": "Abort"}, "ru": {"value": "Прервать"}, "zh": {"value": "中断"}}, "output_dir": { - "en": {"label": "Output dir", "info": "Directory for saving results."}, - "ru": {"label": "Выходной каталог", "info": "Каталог для сохранения результатов."}, - "zh": {"label": "输出目录", "info": "保存结果的路径。"}, + "en": { + "label": "Output dir", + "info": "Directory for saving results.", + }, + "ru": { + "label": "Выходной каталог", + "info": "Каталог для сохранения результатов.", + }, + "zh": { + "label": "输出目录", + "info": "保存结果的路径。", + }, + }, + "output_box": { + "en": { + "value": "Ready.", + }, + "ru": { + "value": "Готово.", + }, + "zh": { + "value": "准备就绪。", + }, + }, + "loss_viewer": { + "en": { + "label": "Loss", + }, + "ru": { + "label": "Потери", + }, + "zh": { + "label": "损失", + }, }, - "output_box": {"en": {"value": "Ready."}, "ru": {"value": "Готово."}, "zh": {"value": "准备就绪。"}}, - "loss_viewer": {"en": {"label": "Loss"}, "ru": {"label": "Потери"}, "zh": {"label": "损失"}}, "predict": { - "en": {"label": "Save predictions"}, - "ru": {"label": "Сохранить предсказания"}, - "zh": {"label": "保存预测结果"}, + "en": { + "label": "Save predictions", + }, + "ru": { + "label": "Сохранить предсказания", + }, + "zh": { + "label": "保存预测结果", + }, + }, + "load_btn": { + "en": { + "value": "Load model", + }, + "ru": { + "value": "Загрузить модель", + }, + "zh": { + "value": "加载模型", + }, + }, + "unload_btn": { + "en": { + "value": "Unload model", + }, + "ru": { + "value": "Выгрузить модель", + }, + "zh": { + "value": "卸载模型", + }, }, - "load_btn": {"en": {"value": "Load model"}, "ru": {"value": "Загрузить модель"}, "zh": {"value": "加载模型"}}, - "unload_btn": {"en": {"value": "Unload model"}, "ru": {"value": "Выгрузить модель"}, "zh": {"value": "卸载模型"}}, "info_box": { - "en": {"value": "Model unloaded, please load a model first."}, - "ru": {"value": "Модель не загружена, загрузите модель сначала."}, - "zh": {"value": "模型未加载,请先加载模型。"}, + "en": { + "value": "Model unloaded, please load a model first.", + }, + "ru": { + "value": "Модель не загружена, загрузите модель сначала.", + }, + "zh": { + "value": "模型未加载,请先加载模型。", + }, }, "system": { - "en": {"placeholder": "System prompt (optional)"}, - "ru": {"placeholder": "Системный запрос (по желанию)"}, - "zh": {"placeholder": "系统提示词(非必填)"}, + "en": { + "placeholder": "System prompt (optional)", + }, + "ru": { + "placeholder": "Системный запрос (по желанию)", + }, + "zh": { + "placeholder": "系统提示词(非必填)", + }, }, "tools": { - "en": {"placeholder": "Tools (optional)"}, - "ru": {"placeholder": "Инструменты (по желанию)"}, - "zh": {"placeholder": "工具列表(非必填)"}, + "en": { + "placeholder": "Tools (optional)", + }, + "ru": { + "placeholder": "Инструменты (по желанию)", + }, + "zh": { + "placeholder": "工具列表(非必填)", + }, + }, + "query": { + "en": { + "placeholder": "Input...", + }, + "ru": { + "placeholder": "Ввод...", + }, + "zh": { + "placeholder": "输入...", + }, + }, + "submit_btn": { + "en": { + "value": "Submit", + }, + "ru": { + "value": "Отправить", + }, + "zh": { + "value": "提交", + }, + }, + "clear_btn": { + "en": { + "value": "Clear history", + }, + "ru": { + "value": "Очистить историю", + }, + "zh": { + "value": "清空历史", + }, + }, + "max_length": { + "en": { + "label": "Maximum length", + }, + "ru": { + "label": "Максимальная длина", + }, + "zh": { + "label": "最大长度", + }, }, - "query": {"en": {"placeholder": "Input..."}, "ru": {"placeholder": "Ввод..."}, "zh": {"placeholder": "输入..."}}, - "submit_btn": {"en": {"value": "Submit"}, "ru": {"value": "Отправить"}, "zh": {"value": "提交"}}, - "clear_btn": {"en": {"value": "Clear history"}, "ru": {"value": "Очистить историю"}, "zh": {"value": "清空历史"}}, - "max_length": {"en": {"label": "Maximum length"}, "ru": {"label": "Максимальная длина"}, "zh": {"label": "最大长度"}}, "max_new_tokens": { - "en": {"label": "Maximum new tokens"}, - "ru": {"label": "Максимальное количество новых токенов"}, - "zh": {"label": "最大生成长度"}, + "en": { + "label": "Maximum new tokens", + }, + "ru": { + "label": "Максимальное количество новых токенов", + }, + "zh": { + "label": "最大生成长度", + }, + }, + "top_p": { + "en": { + "label": "Top-p", + }, + "ru": { + "label": "Лучшие-p", + }, + "zh": { + "label": "Top-p 采样值", + }, + }, + "temperature": { + "en": { + "label": "Temperature", + }, + "ru": { + "label": "Температура", + }, + "zh": { + "label": "温度系数", + }, }, - "top_p": {"en": {"label": "Top-p"}, "ru": {"label": "Лучшие-p"}, "zh": {"label": "Top-p 采样值"}}, - "temperature": {"en": {"label": "Temperature"}, "ru": {"label": "Температура"}, "zh": {"label": "温度系数"}}, "max_shard_size": { - "en": {"label": "Max shard size (GB)", "info": "The maximum size for a model file."}, - "ru": {"label": "Максимальный размер фрагмента (ГБ)", "info": "Максимальный размер файла модели."}, - "zh": {"label": "最大分块大小(GB)", "info": "单个模型文件的最大大小。"}, + "en": { + "label": "Max shard size (GB)", + "info": "The maximum size for a model file.", + }, + "ru": { + "label": "Максимальный размер фрагмента (ГБ)", + "info": "Максимальный размер файла модели.", + }, + "zh": { + "label": "最大分块大小(GB)", + "info": "单个模型文件的最大大小。", + }, }, "export_quantization_bit": { - "en": {"label": "Export quantization bit.", "info": "Quantizing the exported model."}, - "ru": {"label": "Экспорт бита квантования", "info": "Квантование экспортируемой модели."}, - "zh": {"label": "导出量化等级", "info": "量化导出模型。"}, + "en": { + "label": "Export quantization bit.", + "info": "Quantizing the exported model.", + }, + "ru": { + "label": "Экспорт бита квантования", + "info": "Квантование экспортируемой модели.", + }, + "zh": { + "label": "导出量化等级", + "info": "量化导出模型。", + }, }, "export_quantization_dataset": { - "en": {"label": "Export quantization dataset.", "info": "The calibration dataset used for quantization."}, + "en": { + "label": "Export quantization dataset.", + "info": "The calibration dataset used for quantization.", + }, "ru": { "label": "Экспорт набора данных для квантования", "info": "Набор данных калибровки, используемый для квантования.", }, - "zh": {"label": "导出量化数据集", "info": "量化过程中使用的校准数据集。"}, + "zh": { + "label": "导出量化数据集", + "info": "量化过程中使用的校准数据集。", + }, }, "export_dir": { - "en": {"label": "Export dir", "info": "Directory to save exported model."}, - "ru": {"label": "Каталог экспорта", "info": "Каталог для сохранения экспортированной модели."}, - "zh": {"label": "导出目录", "info": "保存导出模型的文件夹路径。"}, + "en": { + "label": "Export dir", + "info": "Directory to save exported model.", + }, + "ru": { + "label": "Каталог экспорта", + "info": "Каталог для сохранения экспортированной модели.", + }, + "zh": { + "label": "导出目录", + "info": "保存导出模型的文件夹路径。", + }, + }, + "export_btn": { + "en": { + "value": "Export", + }, + "ru": { + "value": "Экспорт", + }, + "zh": { + "value": "开始导出", + }, }, - "export_btn": {"en": {"value": "Export"}, "ru": {"value": "Экспорт"}, "zh": {"value": "开始导出"}}, } @@ -313,16 +910,36 @@ ALERTS = { "ru": "Вы загрузили модель, сначала разгрузите ее.", "zh": "模型已存在,请先卸载模型。", }, - "err_no_model": {"en": "Please select a model.", "ru": "Пожалуйста, выберите модель.", "zh": "请选择模型。"}, - "err_no_path": {"en": "Model not found.", "ru": "Модель не найдена.", "zh": "模型未找到。"}, - "err_no_dataset": {"en": "Please choose a dataset.", "ru": "Пожалуйста, выберите набор данных.", "zh": "请选择数据集。"}, - "err_no_adapter": {"en": "Please select an adapter.", "ru": "Пожалуйста, выберите адаптер.", "zh": "请选择一个适配器。"}, + "err_no_model": { + "en": "Please select a model.", + "ru": "Пожалуйста, выберите модель.", + "zh": "请选择模型。", + }, + "err_no_path": { + "en": "Model not found.", + "ru": "Модель не найдена.", + "zh": "模型未找到。", + }, + "err_no_dataset": { + "en": "Please choose a dataset.", + "ru": "Пожалуйста, выберите набор данных.", + "zh": "请选择数据集。", + }, + "err_no_adapter": { + "en": "Please select an adapter.", + "ru": "Пожалуйста, выберите адаптер.", + "zh": "请选择一个适配器。", + }, "err_no_export_dir": { "en": "Please provide export dir.", "ru": "Пожалуйста, укажите каталог для экспорта.", "zh": "请填写导出目录", }, - "err_failed": {"en": "Failed.", "ru": "Ошибка.", "zh": "训练出错。"}, + "err_failed": { + "en": "Failed.", + "ru": "Ошибка.", + "zh": "训练出错。", + }, "err_demo": { "en": "Training is unavailable in demo mode, duplicate the space to a private one first.", "ru": "Обучение недоступно в демонстрационном режиме, сначала скопируйте пространство в частное.", @@ -333,23 +950,59 @@ ALERTS = { "ru": "Пока не поддерживается множественные GPU.", "zh": "尚不支持多 GPU 训练。", }, - "err_tool_name": {"en": "Tool name not found.", "ru": "Имя инструмента не найдено.", "zh": "工具名称未找到。"}, - "err_json_schema": {"en": "Invalid JSON schema.", "ru": "Неверная схема JSON.", "zh": "Json 格式错误。"}, + "err_tool_name": { + "en": "Tool name not found.", + "ru": "Имя инструмента не найдено.", + "zh": "工具名称未找到。", + }, + "err_json_schema": { + "en": "Invalid JSON schema.", + "ru": "Неверная схема JSON.", + "zh": "Json 格式错误。", + }, "info_aborting": { "en": "Aborted, wait for terminating...", "ru": "Прервано, ожидание завершения...", "zh": "训练中断,正在等待线程结束……", }, - "info_aborted": {"en": "Ready.", "ru": "Готово.", "zh": "准备就绪。"}, - "info_finished": {"en": "Finished.", "ru": "Завершено.", "zh": "训练完毕。"}, - "info_loading": {"en": "Loading model...", "ru": "Загрузка модели...", "zh": "加载中……"}, - "info_unloading": {"en": "Unloading model...", "ru": "Выгрузка модели...", "zh": "卸载中……"}, + "info_aborted": { + "en": "Ready.", + "ru": "Готово.", + "zh": "准备就绪。", + }, + "info_finished": { + "en": "Finished.", + "ru": "Завершено.", + "zh": "训练完毕。", + }, + "info_loading": { + "en": "Loading model...", + "ru": "Загрузка модели...", + "zh": "加载中……", + }, + "info_unloading": { + "en": "Unloading model...", + "ru": "Выгрузка модели...", + "zh": "卸载中……", + }, "info_loaded": { "en": "Model loaded, now you can chat with your model!", "ru": "Модель загружена, теперь вы можете общаться с вашей моделью!", "zh": "模型已加载,可以开始聊天了!", }, - "info_unloaded": {"en": "Model unloaded.", "ru": "Модель выгружена.", "zh": "模型已卸载。"}, - "info_exporting": {"en": "Exporting model...", "ru": "Экспорт модели...", "zh": "正在导出模型……"}, - "info_exported": {"en": "Model exported.", "ru": "Модель экспортирована.", "zh": "模型导出完成。"}, + "info_unloaded": { + "en": "Model unloaded.", + "ru": "Модель выгружена.", + "zh": "模型已卸载。", + }, + "info_exporting": { + "en": "Exporting model...", + "ru": "Экспорт модели...", + "zh": "正在导出模型……", + }, + "info_exported": { + "en": "Model exported.", + "ru": "Модель экспортирована.", + "zh": "模型导出完成。", + }, }