Docker / publish (push) Canceled after 0s
Release / crates-io (push) Canceled after 0s
Release / release (macos-14, aarch64-apple-darwin) (push) Canceled after 0s
Release / release (ubuntu-latest, x86_64-unknown-linux-gnu) (push) Canceled after 0s
Release / release (windows-latest, x86_64-pc-windows-msvc) (push) Canceled after 0s
- Stats snapshot now computes the KPI totals AND the breakdown from the in-window per-minute buckets (previously they used all-time accumulators, so switching 1h/24h/7d changed only the chart, not the numbers). Buckets now carry failovers + per-group breakdown; Prometheus keeps all-time counters. - New DELETE /admin/api/stats clears all in-memory stats and truncates the JSONL log; the dashboard gets a "Clear logs" button (with confirm).
403 lines
28 KiB
JavaScript
Vendored
403 lines
28 KiB
JavaScript
Vendored
// Russian — ru. Keys must match en.js exactly; missing keys fall back to English.
|
||
export default {
|
||
// brand / common
|
||
"brand.sub": "Шлюз",
|
||
"common.loading": "Загрузка…",
|
||
"common.save": "Сохранить",
|
||
"common.saving": "Сохранение…",
|
||
"common.cancel": "Отмена",
|
||
"common.add": "Добавить",
|
||
"common.edit": "Изменить",
|
||
"common.delete": "Удалить",
|
||
"common.close": "Закрыть",
|
||
"common.test": "Тест",
|
||
"common.copy": "Копировать",
|
||
"common.copied": "Скопировано",
|
||
"common.confirm": "Подтвердить",
|
||
"common.none": "нет",
|
||
"common.saved": "Сохранено",
|
||
"common.error": "Ошибка",
|
||
"common.ok": "OK",
|
||
"common.refresh": "Обновить",
|
||
"common.actions": "Действия",
|
||
"common.optional": "необязательно",
|
||
"common.search": "Поиск",
|
||
"common.all": "все",
|
||
|
||
// nav
|
||
"nav.dashboard": "Дашборд",
|
||
"nav.models": "Модели",
|
||
"nav.import": "Импорт модели",
|
||
"nav.routing": "Роутинг",
|
||
"nav.protocols": "Протоколы",
|
||
"nav.keys": "API-ключи",
|
||
"nav.playground": "Playground",
|
||
"nav.settings": "Настройки",
|
||
"nav.foot": "Шлюз · v{v}",
|
||
"nav.billing": "Ключ роутера и оплата",
|
||
|
||
// topbar / status
|
||
"status.router": "Роутер",
|
||
"status.gateway": "Шлюз",
|
||
"status.online": "в сети",
|
||
"status.offline": "недоступен",
|
||
"status.checking": "проверка…",
|
||
"status.noKey": "нет ключа",
|
||
"theme.toggle": "Тема",
|
||
"logout": "Выйти",
|
||
|
||
// login
|
||
"login.title": "allaigate Gateway",
|
||
"login.subtitle": "Введите токен администратора для управления этим шлюзом.",
|
||
"login.token": "Токен администратора",
|
||
"login.tokenPlaceholder": "вставьте токен",
|
||
"login.submit": "Войти в консоль",
|
||
"login.hint": "Токен печатается в логе шлюза при запуске или задаётся через [admin].token_env.",
|
||
"login.failed": "Неверный токен администратора.",
|
||
|
||
// dashboard
|
||
"dash.title": "Дашборд",
|
||
"dash.subtitle": "Трафик в реальном времени, расходы и аналитика роутинга по пулу моделей.",
|
||
"dash.clear": "Очистить логи",
|
||
"dash.clearConfirm": "Очистить всю статистику и логи? Отменить нельзя.",
|
||
"dash.cleared": "Логи очищены",
|
||
"dash.range": "Период",
|
||
"dash.range.1h": "1ч",
|
||
"dash.range.24h": "24ч",
|
||
"dash.range.7d": "7д",
|
||
"dash.kpi.requests": "Запросы",
|
||
"dash.kpi.tokens": "Токены",
|
||
"dash.kpi.cost": "Стоимость",
|
||
"dash.kpi.latency": "Ср. задержка",
|
||
"dash.kpi.success": "Успешность",
|
||
"dash.kpi.failovers": "Переключения",
|
||
"dash.series.title": "Запросы по времени",
|
||
"dash.series.cost": "Расходы по времени",
|
||
"dash.series.empty": "Трафика за этот период нет.",
|
||
"dash.breakdown.title": "Разбивка",
|
||
"dash.groupby.model": "по модели",
|
||
"dash.groupby.tier": "по уровню",
|
||
"dash.groupby.label": "по задаче",
|
||
"dash.groupby.account": "по аккаунту",
|
||
"dash.recent.title": "Последние запросы",
|
||
"dash.recent.empty": "Запросов ещё нет. Попробуйте Playground.",
|
||
"dash.col.time": "Время",
|
||
"dash.col.model": "Модель",
|
||
"dash.col.tier": "Уровень",
|
||
"dash.col.task": "Задача",
|
||
"dash.col.tokens": "Токены",
|
||
"dash.col.cost": "Стоимость",
|
||
"dash.col.latency": "Задержка",
|
||
"dash.col.outcome": "Результат",
|
||
"dash.col.requests": "Запросы",
|
||
"dash.col.errors": "Ошибки",
|
||
"dash.health.title": "Состояние",
|
||
"dash.health.reachable": "доступен",
|
||
"dash.health.unreachable": "недоступен",
|
||
"dash.health.getKey": "Получить ключ роутера",
|
||
|
||
// models
|
||
"models.title": "Модели",
|
||
"models.subtitle": "Пул моделей — сочетайте дешёвые локальные модели с облачными API.",
|
||
"models.add": "Добавить модель",
|
||
"models.empty": "Моделей нет. Добавьте первую модель.",
|
||
"models.col.id": "ID",
|
||
"models.col.provider": "Провайдер",
|
||
"models.col.model": "Модель",
|
||
"models.col.tier": "Уровень цены",
|
||
"models.col.key": "Ключ",
|
||
"models.col.caps": "Возможности",
|
||
"models.col.price": "Цена (вх/исх)",
|
||
"models.probe": "Проверить",
|
||
"models.probe.ok": "Доступна ({ms} мс)",
|
||
"models.probe.fail": "Ошибка: {err}",
|
||
"models.form.addTitle": "Добавить модель",
|
||
"models.form.editTitle": "Редактировать модель",
|
||
"models.form.id": "ID",
|
||
"models.form.idHint": "Уникальный ID для роутинга, например local-qwen",
|
||
"models.form.provider": "Провайдер",
|
||
"models.form.baseUrl": "Base URL",
|
||
"models.form.model": "Имя модели",
|
||
"models.form.kind": "Тип",
|
||
"models.form.costTier": "Уровень цены",
|
||
"models.form.priceIn": "Цена вх. ($/1M)",
|
||
"models.form.priceOut": "Цена исх. ($/1M)",
|
||
"models.form.apiKeyEnv": "Имя env-переменной с ключом",
|
||
"models.form.apiKeyEnvHint": "Имя переменной окружения или секрета с ключом провайдера.",
|
||
"models.form.caps": "Возможности",
|
||
"models.form.secret": "Значение секрета",
|
||
"models.form.secretStored": "сохранён",
|
||
"models.form.secretEnv": "из env",
|
||
"models.form.secretMissing": "не задан",
|
||
"models.form.secretPlaceholder": "задать или заменить ключ (только запись)",
|
||
"models.deleteConfirm": "Удалить модель \"{id}\"?",
|
||
"models.form.idOrModel": "Укажите id или имя модели",
|
||
"models.form.apiKey": "API-ключ",
|
||
"models.form.apiKeyPlaceholder": "вставьте API-ключ",
|
||
"models.form.apiKeyNotNeeded": "не нужен (локальный сервер)",
|
||
"models.form.apiKeyHint": "Хранится безопасно на шлюзе; больше не показывается.",
|
||
"models.form.keyStored": "Ключ сохранён — оставьте пустым, чтобы не менять, или вставьте новый.",
|
||
"models.form.keyFromEnv": "Используется ключ из переменной окружения.",
|
||
"models.form.testKey": "Проверить и загрузить модели",
|
||
"models.form.testing": "проверка…",
|
||
"models.form.foundModels": "загружено моделей: {n}",
|
||
"models.form.modelPlaceholder": "введите для поиска…",
|
||
"models.form.modelHint": "Нажмите «Проверить и загрузить модели», чтобы подтянуть список по ключу, затем выберите.",
|
||
"models.managed": "управляемая",
|
||
"models.managedHint": "Предоставляется CMF-сервером (Настройки → Локальные модели). Настраивается там.",
|
||
|
||
// routing
|
||
"routing.title": "Роутинг",
|
||
"routing.subtitle": "Сопоставьте уровни сложности с упорядоченным списком моделей (приоритет = fallback).",
|
||
"routing.default": "Модель по умолчанию",
|
||
"routing.defaultHint": "Используется, если роутер недоступен.",
|
||
"routing.tiers": "Уровни",
|
||
"routing.tierHint": "Перетащите чипы для изменения порядка; первый — предпочтительный, остальные — резервные.",
|
||
"routing.addModel": "+ добавить",
|
||
"routing.addTier": "Добавить уровень",
|
||
"routing.tierName": "Название уровня",
|
||
"routing.policy": "Политика",
|
||
"routing.policy.mode": "Режим",
|
||
"routing.policy.fixed": "Фиксированная таблица",
|
||
"routing.policy.costAware": "С учётом стоимости",
|
||
"routing.policy.maxCost": "Макс. стоимость запроса ($)",
|
||
"routing.policy.minClass": "Мин. класс на уровень",
|
||
"routing.empty": "Моделей нет — сначала добавьте модели.",
|
||
|
||
// protocols
|
||
"protocols.title": "Протоколы",
|
||
"protocols.subtitle": "Включайте только нужные входящие API. Переключатели применяются мгновенно.",
|
||
"protocols.implemented": "реализован",
|
||
"protocols.planned": "планируется",
|
||
"protocols.openai_chat": "OpenAI Chat Completions",
|
||
"protocols.openai_chat.d": "POST /v1/chat/completions — работает с OpenAI SDK, LangChain, crewAI.",
|
||
"protocols.openai_completions": "OpenAI Completions (устаревший)",
|
||
"protocols.openai_completions.d": "POST /v1/completions — устаревшие интеграции.",
|
||
"protocols.openai_embeddings": "OpenAI Embeddings",
|
||
"protocols.openai_embeddings.d": "POST /v1/embeddings — RAG-пайплайны.",
|
||
"protocols.openai_models": "OpenAI Models",
|
||
"protocols.openai_models.d": "GET /v1/models — автообнаружение клиентами.",
|
||
"protocols.anthropic_messages": "Anthropic Messages",
|
||
"protocols.anthropic_messages.d": "POST /v1/messages — Claude-нативные агенты.",
|
||
"protocols.mcp": "MCP (Model Context Protocol)",
|
||
"protocols.mcp.d": "JSON-RPC / SSE — MCP-нативные оркестраторы.",
|
||
"protocols.native_passthrough": "Нативный проброс",
|
||
"protocols.native_passthrough.d": "POST /route — прямой доступ к решению роутера.",
|
||
|
||
// keys
|
||
"keys.title": "API-ключи",
|
||
"keys.subtitle": "Виртуальные ключи шлюза для агентов. Ключи провайдеров не покидают шлюз.",
|
||
"keys.add": "Новый ключ",
|
||
"keys.empty": "Ключей нет — шлюз в открытом режиме (без аутентификации).",
|
||
"keys.openMode": "Открытый режим: любой запрос принимается (ключ не нужен).",
|
||
"keys.col.key": "Ключ",
|
||
"keys.col.account": "Аккаунт",
|
||
"keys.col.rate": "Лимит / мин",
|
||
"keys.col.models": "Разрешённые модели",
|
||
"keys.form.title": "Новый API-ключ",
|
||
"keys.form.account": "Аккаунт",
|
||
"keys.form.rate": "Лимит запросов / мин",
|
||
"keys.form.allow": "Разрешённые модели",
|
||
"keys.form.allowHint": "Оставьте пустым, чтобы разрешить все модели.",
|
||
"keys.form.custom": "Произвольный ключ (необязательно)",
|
||
"keys.form.customHint": "Оставьте пустым для автогенерации sk-gw-…",
|
||
"keys.created": "Ключ создан — скопируйте его сейчас, он больше не отобразится:",
|
||
"keys.revoke": "Отозвать",
|
||
"keys.revokeConfirm": "Отозвать этот ключ?",
|
||
"keys.allowAll": "все",
|
||
|
||
// playground
|
||
"pg.title": "Playground",
|
||
"pg.subtitle": "Отправьте запрос через активный пайплайн и изучите решение роутера.",
|
||
"pg.system": "Системный промпт",
|
||
"pg.systemPlaceholder": "необязательное системное сообщение",
|
||
"pg.prompt": "Промпт",
|
||
"pg.promptPlaceholder": "Задайте вопрос…",
|
||
"pg.mode": "Режим",
|
||
"pg.mode.auto": "Авто (роутинг)",
|
||
"pg.mode.pinned": "Фиксированная модель",
|
||
"pg.profile": "Профиль",
|
||
"pg.model": "Модель",
|
||
"pg.temp": "Температура",
|
||
"pg.maxTokens": "Макс. токены",
|
||
"pg.send": "Отправить",
|
||
"pg.stream": "Стриминг",
|
||
"pg.sending": "Отправка…",
|
||
"pg.answer": "Ответ",
|
||
"pg.empty": "Ответ и решение роутера появятся здесь.",
|
||
"pg.decision": "Решение роутера",
|
||
"pg.task": "Задача",
|
||
"pg.tier": "Уровень",
|
||
"pg.score": "Сложность",
|
||
"pg.selected": "Выбранная модель",
|
||
"pg.source": "Источник маршрута",
|
||
"pg.cost": "Стоимость",
|
||
"pg.latency": "Задержка",
|
||
"pg.tokens": "Токены (вх/исх)",
|
||
"pg.failover": "Failover",
|
||
"pg.error": "Ошибка запроса",
|
||
|
||
// settings
|
||
"settings.title": "Настройки",
|
||
"settings.subtitle": "Подключение к шлюзу, входные данные роутинга, надёжность и наблюдаемость.",
|
||
"settings.router": "Подключение к роутеру",
|
||
"settings.router.url": "URL роутера",
|
||
"settings.router.keyEnv": "Имя env-переменной с ключом роутера",
|
||
"settings.router.timeout": "Таймаут (мс)",
|
||
"settings.router.verifyTls": "Проверять TLS-сертификат",
|
||
"settings.router.enabled": "Использовать роутер (выкл = только локальные модели)",
|
||
"settings.cmf": "Локальные модели (CMF)",
|
||
"settings.cmf.localOnly": "Использовать только локальные модели",
|
||
"settings.cmf.manage": "Запускать локальный сервер моделей",
|
||
"settings.cmf.autoInstall": "Автоустановка cortiq (crates.io)",
|
||
"settings.cmf.autoUpdate": "Автообновление cortiq",
|
||
"settings.cmf.model": "Путь к локальной .cmf-модели",
|
||
"settings.cmf.port": "Порт локального сервера",
|
||
"settings.cmf.modelId": "ID модели в пуле",
|
||
"settings.cmf.note": "Обслуживает локальный .cmf через cortiq (github.com/infosave2007/cmf). Работает даже когда роутер недоступен.",
|
||
"settings.cmf.threads": "Рабочие потоки",
|
||
"settings.cmf.gpu": "Использовать GPU (Metal / wgpu)",
|
||
"settings.cmf.speedNote": "Потоки распараллеливают декод-матвеки (~×3; 0 = по умолчанию рантайма). GPU-оффлоад помогает в основном на prefill длинных промптов — декод упирается в пропускную способность памяти, поэтому на Apple Silicon почти нейтрален.",
|
||
"settings.cmf.pick": "выберите модель",
|
||
"settings.cmf.models": "Локальные модели",
|
||
"settings.cmf.modelsHelp": "Каждая строка — отдельная модель: шлюз поднимает свой cortiq serve на своём порту и регистрирует её в пуле. Добавляйте столько, сколько есть .cmf-файлов и свободных портов.",
|
||
"settings.cmf.rowHint": "id · файл .cmf · порт · потоки · GPU. Изменения применяются после перезапуска; удаление строки останавливает сервер.",
|
||
"settings.cmf.addServer": "+ Добавить модель",
|
||
"settings.cmf.checkPort": "Проверить порт",
|
||
"settings.cmf.portFree": "порт свободен",
|
||
"settings.cmf.portBusy": "порт занят",
|
||
"settings.cmf.useSuggested": "занять {port}",
|
||
"settings.cmf.serving": "работает: {model} на :{port}",
|
||
"settings.cmf.intro": "Запускайте модели локально движком cortiq — работает даже офлайн или когда роутер недоступен.",
|
||
"settings.cmf.runtime": "Среда cortiq",
|
||
"settings.cmf.runtimeHelp": "Инструмент командной строки `cortiq`, который загружает и запускает .cmf-модели. Установите один раз перед запуском локального сервера.",
|
||
"settings.cmf.install": "Установить cortiq",
|
||
"settings.cmf.reinstall": "Переустановить / обновить",
|
||
"settings.cmf.installing": "устанавливается… (компилируется, пара минут)",
|
||
"settings.cmf.installedOk": "cortiq установлен",
|
||
"settings.cmf.notInstalled": "не установлен",
|
||
"settings.cmf.addModel": "Добавить модель",
|
||
"settings.cmf.addModelHelp": "Модели скачиваются и конвертируются во вкладке Импорт (HuggingFace → .cmf). Затем укажите путь к .cmf ниже.",
|
||
"settings.cmf.importNote": "Ещё нет модели? Импортируйте:",
|
||
"settings.cmf.importLink": "Открыть Импорт",
|
||
"settings.cmf.modelHelp": "Путь к .cmf-файлу для запуска (напр. models/qwen.cmf), создаётся во вкладке Импорт. Несколько моделей под разные задачи? Импортируйте их и меняйте этот путь.",
|
||
"settings.cmf.portHelp": "TCP-порт локального сервера моделей (по умолчанию 8081). Меняйте, только если конфликтует с другим сервисом.",
|
||
"settings.cmf.threadsHelp": "Сколько ядер CPU использовать для генерации. Больше = быстрее (~×3 против 1 ядра); 0 — на усмотрение рантайма.",
|
||
"settings.cmf.gpuHelp": "Выгрузить матричные операции на GPU (Metal/wgpu). На Apple Silicon ускоряет в основном длинные промпты — декод упирается в пропускную способность памяти.",
|
||
"settings.cmf.localOnlyHelp": "Направлять все запросы в локальную модель, игнорируя роутер и облачные провайдеры.",
|
||
"settings.cmf.manageHelp": "Шлюз запускает `cortiq serve` для .cmf ниже при старте и маршрутизирует в него. Нужен установленный cortiq (шаг 1). Применяется после перезапуска.",
|
||
"settings.cmf.autoInstallHelp": "Если cortiq не найден при старте — установить автоматически с crates.io.",
|
||
"settings.cmf.autoUpdateHelp": "При старте обновлять cortiq до новейшей версии, когда есть новее.",
|
||
"settings.router.enabledHelp": "Использовать cortiq-router для классификации запроса (тип задачи + сложность) и выбора модели. Выкл = только локальная таблица маршрутизации.",
|
||
"settings.router.verifyTlsHelp": "Проверять TLS-сертификат роутера. Выключайте только для самоподписанного / привязанного к IP сертификата.",
|
||
"settings.telemetry.metricsHelp": "Отдавать метрики Prometheus по GET /metrics.",
|
||
"settings.cortiq.echoHelp": "Добавлять поле `cortiq` (задача, модель, стоимость) в тело каждого ответа. Заголовки ответа шлются всегда.",
|
||
"settings.stats.enabledHelp": "Записывать недавние запросы для дашборда и графиков.",
|
||
"settings.cache.enabledHelp": "Семантический кэш: возвращать сохранённый ответ, когда новый промпт очень похож на прошлый, пропуская вызов модели. Нужна embedding-модель в пуле.",
|
||
"settings.log.bodiesHelp": "Логировать полные тела запросов/ответов. По умолчанию выкл ради приватности.",
|
||
"settings.router.taxonomy": "ID таксономии",
|
||
"settings.router.getKey": "Получить или пополнить ключ роутера:",
|
||
"settings.router.secret": "Ключ роутера (значение)",
|
||
"settings.router.saveKey": "Сохранить ключ",
|
||
"settings.router.keySaved": "Ключ роутера сохранён",
|
||
"settings.router.keyEmpty": "Сначала вставьте ключ",
|
||
"settings.router.secretHelp": "Вставьте ключ из письма с api.allaigate.com и нажмите «Сохранить ключ». Это НЕ ключ из раздела «Ключи» — те выдаются клиентам для доступа к вашему шлюзу.",
|
||
"settings.router.keyStoredMask": "•••••••••••• — ключ сохранён (вставьте снова, чтобы заменить)",
|
||
"settings.router.test": "Проверить роутер",
|
||
"router.probe.ok": "Роутер работает ({ms} мс)",
|
||
"router.probe.noKey": "Ключ роутера не задан",
|
||
"router.probe.auth": "Ключ отклонён — недействителен или отозван",
|
||
"router.probe.payment": "Требуется оплата — тариф истёк или квота исчерпана",
|
||
"router.probe.quota": "Превышен лимит запросов",
|
||
"router.probe.timeout": "Роутер не ответил вовремя",
|
||
"router.probe.unreachable": "Роутер недоступен",
|
||
"router.probe.error": "Ошибка роутера",
|
||
"router.usage": "Использование",
|
||
"settings.route": "Входные данные роутинга",
|
||
"settings.route.strategy": "Стратегия текста",
|
||
"settings.route.maxChars": "Макс. символов",
|
||
"settings.route.cacheTtl": "TTL кэша",
|
||
"settings.route.profile": "Профиль по умолчанию",
|
||
"settings.route.strategyHelp": "Какой текст отправляется роутеру для классификации: last_user — только последнее сообщение пользователя; last_user_plus_system — последнее сообщение + системный промпт; concat_all — вся переписка.",
|
||
"settings.route.maxCharsHelp": "Максимум символов этого текста, отправляемого роутеру (длиннее — обрезается). Больше = точнее классификация, но медленнее/дороже вызовы роутера.",
|
||
"settings.route.cacheTtlHelp": "Сколько кэшируется решение роутинга для одинакового запроса, прежде чем роутер спрашивается снова (напр. 60s, 5m).",
|
||
"settings.route.profileHelp": "Профиль роутинга по умолчанию, если запрос его не задаёт: cost-saver (дешевле), balanced (баланс) или quality-first (качество). Влияет на выбор модели роутером.",
|
||
"settings.breaker": "Автоматический выключатель",
|
||
"settings.breaker.threshold": "Порог ошибок",
|
||
"settings.breaker.cooldown": "Время восстановления",
|
||
"settings.log": "Логирование",
|
||
"settings.log.level": "Уровень логов",
|
||
"settings.log.bodies": "Логировать тела сообщений (приватность отключена)",
|
||
"settings.telemetry": "Телеметрия",
|
||
"settings.telemetry.metrics": "Включить Prometheus /metrics",
|
||
"settings.cortiq": "Метаданные ответа",
|
||
"settings.cortiq.echo": "Включать блок роутинга cortiq в ответы",
|
||
"settings.stats": "Статистика",
|
||
"settings.stats.enabled": "Записывать статистику запросов",
|
||
"settings.stats.file": "Файл статистики (JSONL)",
|
||
"settings.stats.retention": "Срок хранения",
|
||
"settings.listen": "Адрес прослушивания",
|
||
"settings.export": "Экспорт конфигурации",
|
||
"settings.import": "Импорт конфигурации",
|
||
"settings.needsRestart": "Сохранено. Некоторые изменения (адрес прослушивания) требуют перезапуска.",
|
||
|
||
// toasts / misc
|
||
"toast.saved": "Изменения сохранены",
|
||
"toast.deleted": "Удалено",
|
||
"toast.probing": "Проверка…",
|
||
"toast.imported": "Конфигурация импортирована",
|
||
"dash.cache": "Семантический кэш",
|
||
"dash.cache.hitRate": "Попаданий",
|
||
"dash.cache.hits": "Попадания",
|
||
"dash.cache.saved": "Сэкономлено",
|
||
"dash.cache.disabled": "Семантический кэш выключен — включите в Настройках.",
|
||
"settings.cache": "Семантический кэш",
|
||
"settings.cache.enabled": "Включить семантический кэш",
|
||
"settings.cache.threshold": "Порог сходства",
|
||
"settings.cache.ttl": "TTL записи",
|
||
"settings.cache.embed": "Модель эмбеддингов",
|
||
"settings.cache.note": "Настройки кэша применяются после перезапуска.",
|
||
|
||
// импорт (HuggingFace → CMF)
|
||
"import.subtitle": "Найдите модель на HuggingFace, сконвертируйте в локальный .cmf и подключите.",
|
||
"import.searchPlaceholder": "Поиск моделей на HuggingFace (напр. qwen3, llama)…",
|
||
"import.searching": "Ищу…",
|
||
"import.noResults": "Модели не найдены.",
|
||
"import.configure": "Настройка конвертации",
|
||
"import.outName": "Имя файла",
|
||
"import.outNameHint": "Имя .cmf (буквы, цифры, - и _).",
|
||
"import.quant": "Квантизация",
|
||
"import.convert": "Сконвертировать и загрузить",
|
||
"import.converting": "Конвертация",
|
||
"import.started": "Конвертация запущена",
|
||
"import.failed": "Конвертация не удалась — смотрите лог.",
|
||
"import.register": "Подключить как локальную модель",
|
||
"import.registered": "Подключено как '{id}'. Запустите cortiq-server для обслуживания.",
|
||
"import.jobs": "Конвертации",
|
||
"import.cancel": "Отменить",
|
||
"import.cancelling": "Отмена — удаляю недописанный файл…",
|
||
"import.delete": "Удалить",
|
||
"import.deleteConfirm": "Удалить эту модель и сконвертированный .cmf-файл с диска?",
|
||
"import.deleted": "Удалено вместе с файлами",
|
||
"import.state.running": "идёт",
|
||
"import.state.done": "готово",
|
||
"import.state.error": "ошибка",
|
||
"import.state.cancelled": "отменено",
|
||
"import.q.q8_2f": "8-бит двухполевой (𝒲×θ) — рекомендуется: лучшее качество/размер.",
|
||
"import.q.q8_row": "8-бит построчно — просто, надёжно.",
|
||
"import.q.q4": "4-бит блочно — компактнее, ниже качество.",
|
||
"import.q.vbit": "Переменная 3–8 бит — per-expert бюджеты.",
|
||
"import.q.f16": "16-бит — без квантования.",
|
||
"import.q.f32": "32-бит — полная точность (большой файл).",
|
||
"import.adv.title": "Расширенные настройки",
|
||
"import.adv.auto": "авто",
|
||
"import.adv.linearCore": "Линейное ядро",
|
||
"import.adv.linearHint": "Как переносятся/сворачиваются линейные слои внимания.",
|
||
"import.adv.nphase": "vmf_phase фаз/голову",
|
||
"import.adv.vbitShape": "Форма бюджета VBIT",
|
||
"import.adv.meanBits": "VBIT средних бит",
|
||
"import.adv.shard": "Шард макс (ГБ)",
|
||
"import.adv.noShard": "без шардинга",
|
||
"import.adv.skipMtp": "пропустить MTP-голову",
|
||
};
|