# cortiq-dsh-llm-router 🧠✨

**Ваши LLM на автопилоте.** Один ключ — и каждый промпт автоматически уходит к лучшей модели.

> Не надо думать, какую модель выбрать. Просто печатаете — плагин сам решает, что куда направить.

---

## 🚀 За 1 минуту

```bash
dsh plugin add cortiq-dsh-llm-router
# В Settings → Models → Cortiq Router вставляете ключ
# И выбираете в чате модель "Cortiq Router · Auto"
```

**Готово.** Дальше плагин работает сам.

> **Одно условие:** роутер выбирает *среди моделей, которые уже обслуживают
> другие ваши провайдер-плагины* (например `llm-deepseek`). Хотя бы один
> должен быть настроен — сам роутер к вендорам моделей не ходит.

---

## 🎁 Бесплатный пробный период

**Ключ на 1 месяц бесплатно** — без привязки карты.

👉 [allaigate.com](https://api.allaigate.com/) — зарегистрируйтесь и получите ключ `cortiq_…` мгновенно.

Никаких промокодов. После пробного периода тарифы от **$1/мес**.

---

## 💰 Сколько это стоит?

**Стартовый ключ — $1/мес** по промокоду **`LAUNCH1`** на [allaigate.com](https://api.allaigate.com/).

Сравните:

| Без плагина | С плагином |
|-------------|------------|
| Все запросы летят на дорогую модель | Простые запросы → дешёвая модель |
| Переплата 10–50× | Экономия до 90% |
| Ручной выбор модели каждый раз | Автомат |

*Один сложный запрос в день оправдывает стоимость подписки.*

---

## 🎯 Что он делает?

Плагин — это **личный диспетчер** для ваших LLM. Смотрит на промпт, понимает, что вы хотите, и направляет запрос туда, где его лучше всего обработают.

### Живой пример

Вы пишете: *«Напиши Python-функцию для реверса связного списка»*

| Без плагина | С плагином |
|---|---|
| 🤷‍♂️ Надо самому выбрать модель | 🔍 **Router:** «Это code, сложность низкая (0.29)» |
| 🎲 Наугад: DeepSeek V4 Pro ($) | 🧠 **Правило:** code @ low → быстрая модель |
| Ответ через 3 сек, заплатили $0.01 | ⚡ Ответ через 0.5 сек, бесплатно |

А если: *«Реализуй распределённый консенсусный алгоритм»*

| Без плагина | С плагином |
|---|---|
| 🤷‍♂️ Снова гадание | 🔍 **Router:** «Это code, сложность высокая (0.78)» |
| Может, хватит Flash? | 🚀 **Эскалация:** сложный запрос → сильная модель |
| Ответ может быть плохим | ✅ Мощная модель делает работу хорошо |

---

## ⚙️ Что можно настроить?

### Пороги сложности

```yaml
complexityBands:
  low:   0.35    # оценка ≤ 0.35 → простая задача
  medium: 0.65   # ≤ 0.65 → средняя, выше → сложная
```

### Какие модели на какой сложности

```yaml
globalTiers:
  low:    [deepseek-v4-flash]           # простые → быстрые и дешёвые
  medium: [deepseek-v4-pro]             # средние → мощнее
  high:   [deepseek-v4-pro]             # сложные → самые сильные
```

### Свои правила для каждой задачи

```yaml
taskRules:
  code:
    low:  [deepseek-v3-chat]            # простой код → быстрая модель
    high: [deepseek-v4-pro]             # сложный код → мощная
  translation: [deepseek-v3-chat]       # переводы всегда на быстрой
  creative-writing:
    low:  [deepseek-v4-flash]
    high: [deepseek-v4-pro]
```

---

## 🎮 Кому это нужно?

| Вы | Зачем вам плагин |
|---|---|
| **Разработчик AI-агентов** | Агент сам выбирает модель под задачу, не тратя токены впустую |
| **Фрилансер / соло** | Экономите на API, не жертвуя качеством сложных запросов |
| **Команда / стартап** | Единый ключ, автоматическая маршрутизация, прозрачность |
| **Энтузиаст** | За $1 в месяц — умная маршрутизация без головной боли |

---

## 📊 Реальные тесты

Мы прогнали 8 разных запросов через живой роутер allaigate:

```
Запрос                                    Задача       Точность  → Куда направили
────────────────────────────────────────────────────────────────────────────
Напиши функцию реверса списка             code         99.1%     deepseek-v3-chat ✓
Реши квадратное уравнение                 math         98.0%     deepseek-v4-flash
Переведи на французский                   translation  98.8%     deepseek-v3-chat ✓
Напиши стих об ИИ                         creative     95.0%     deepseek-v4-flash ✓
Столица Франции?                          qa           99.8%     deepseek-v4-flash
Суммаризируй текст                        summarization 98.0%   deepseek-v4-flash
Извлеки дату и цену из счёта             extraction   99.7%     deepseek-v4-flash
Как дела?                                 chitchat     100.0%    deepseek-v4-flash
```

**8/8 — все типы задач определены верно.**  
✓ = сработало правило задачи → модель выбрана осознанно, не наугад.

---

## 🔄 Как это работает

```
Вы: «напиши код реверса списка»
    │
    ▼
┌─────────────────────────────┐
│ 1. Извлечение текста         │ ← только last_user (PII не уходит)
└──────────┬──────────────────┘
           │ POST /v1/route
           ▼
┌─────────────────────────────┐
│ 2. Семантический роутер      │ ← router.allaigate.com
│    task=code, complexity=low │
└──────────┬──────────────────┘
           │
           ▼
┌─────────────────────────────┐
│ 3. Таблица маршрутизации     │ ← ваши настройки
│    code @ low → flash        │
│    ↳ fallback → flash/pro    │
└──────────┬──────────────────┘
           │ вызов
           ▼
┌─────────────────────────────┐
│ 4. Вызов уходит плагину-     │
│    провайдеру этой модели    │
└─────────────────────────────┘
```

---

## 🎛 Профиль под конкретный чат

В списке моделей четыре пункта. Маршрутизируют все; три последних дополнительно
фиксируют политику для этого диалога — не заходя в настройки:

| Пункт | Что делает |
|---|---|
| **Auto** | Маршрутизирует по профилю из настроек |
| **Auto · cost saver** | Держится дешёвого конца цепочек |
| **Auto · balanced** | Золотая середина |
| **Auto · quality first** | Раньше эскалирует на сильные модели |

---

## ⚙️ Интерфейс настроек

Плагин добавляет в настройки харнесса собственный раздел **Cortiq Router** — на
всех языках, которые он поддерживает:

| Что там есть | |
|---|---|
| **Ключ классификатора** | вставляется один раз; хранится в службе учётных данных, рядом бейдж «настроен / не настроен» |
| **Адрес и поведение** | URL классификатора, профиль политики, что классифицируем, предел символов, таймаут, логирование решений |
| **Полосы сложности** | где лежат low / medium / high на шкале 0…1, с проверкой «low меньше medium» |
| **Цепочки моделей** | цепочки по тирам и резервная модель |
| **Правила под задачу** | таблица задача × low / medium / high / any, с добавлением и удалением |

> Это отдельный раздел, а не карточка внутри **Models**. Страница Models
> выбирает редактор провайдера по имени пространства настроек и стороннему
> плагину показывает лишь заметку про `settings.yaml` с неактивной кнопкой
> Apply — поэтому плагин регистрируется через тот же слот `settings.section`,
> которым пользуется сама страница Models.

---

## 🌍 Языки

Собственные тексты плагина переведены на **7 языков** — 🇬🇧 English · 🇷🇺 Русский ·
🇨🇳 中文 · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇹🇷 Türkçe — язык выбирается
настройкой `language`:

```yaml
llm-cortiq-router:
  language: auto   # auto | en | ru | zh | de | fr | es | tr
```

`auto` следует языку интерфейса харнесса. Учтите: браузерный клиент dsh
поставляется только с английским и китайским, поэтому `auto` может дать только
их; остальные пять выбираются здесь явно.

Переведены пункты этого провайдера в списке моделей и сообщение о том, что ни
один кандидат не смог обслужить вызов, — то, что плагин-провайдер реально
показывает пользователю. Лог остаётся английским: это диагностика для issue и
`grep`.

---

## 📦 Установка

```bash
# Из магазина плагинов DSH
dsh plugin add cortiq-dsh-llm-router

# Или через npm
npm install cortiq-dsh-llm-router
```

Или добавьте в `cordis.patch.yml`:

```yaml
- insert:
    - id: llm-cortiq-router
      name: 'cortiq-dsh-llm-router'
```

## 🔑 Получить ключ

1. Откройте **[allaigate.com](https://api.allaigate.com/)**
2. Зарегистрируйтесь — получите **бесплатный ключ на 1 месяц** мгновенно
3. Скопируйте ключ `cortiq_…`
4. В DSH: **Settings → Models → Cortiq Router** → вставьте ключ

Или через переменную окружения:
```bash
export CORTIQ_ROUTER_KEY=cortiq_ваш_ключ
```

---

## 💡 Советы

- **Начните с настроек по умолчанию** — они уже разумны и работают из коробки;
  классификатор живёт на `router.allaigate.com`, свой инстанс указывается
  настройкой `routerUrl`
- **Добавьте per-task правила** для задач, которые важны именно вам
- **Поиграйте с complexityBands** — они тоньше настраивают, когда запрос считать «сложным»
- **Смотрите лог** — при включённом `echoRouting` (по умолчанию) каждый вызов
  печатает `task=… tier=… score=… → провайдер/модель`
- **Цепочка переживает отсутствующий ключ** — кандидат, чей провайдер отказал
  (нет ключа, нет адаптера, нет такой модели), пропускается, и отвечает
  следующий; вызов закрепляется за провайдером, только когда тот начал отвечать
- **Можно указать маршрут явно** — кандидат вида `provider:model`
  (например `deepseek-official:deepseek-v4-pro`) минует поиск по каталогу

---

## 📄 Лицензия

MIT — делайте что хотите.

---

**Один ключ. Никакого гадания. Каждый запрос у лучшей модели.** 🚀