openrouter-provider-ranking · v1.0.0 · 2026-08-25 · sha256 9119c77df1afd2de

openrouter-provider-ranking v1.0.0A

Immutable. This exact content is served forever at /api/v1/blob/9119c77df1afd2de.

---
name: openrouter-provider-ranking
description: "Use this skill when a user asks to rank, compare, benchmark, prioritize, or generate routing for OpenRouter provider endpoints (provider.order, provider.only, :exacto) by TPS/throughput, TTFT/latency, effective price, uptime, cache hit rate, tool-call/Exacto quality, quantization, context, privacy, or fallback diversity; also for requests about «сортировка/приоритет провайдеров OpenRouter». Do not use for broad model-family selection unless endpoint-level provider routing is required."
compatibility: "Requires Python 3.10+; live endpoint discovery requires outbound HTTPS and a management-capable OpenRouter key in OPENROUTER_API_KEY. Offline endpoint JSON is supported. The bundled ranker uses only the Python standard library."
metadata:
  version: "1.0.0"
  domain: "openrouter-routing"
---

# OpenRouter Provider Ranking

Ранжируй **endpoint-провайдеров одного OpenRouter model slug** под конкретный workload. Не называй порядок «глобально оптимальным»: он оптимален только относительно входных ограничений, весов, профиля токенов и доступной телеметрии.

## Обязательные правила

1. Сначала применяй hard constraints, затем считай score. Никогда не компенсируй несовместимость высоким TPS или низкой ценой.
2. Для tool-calling по умолчанию используй `native-exacto`: модель с суффиксом `:exacto`, без `provider.sort` и без `provider.order`. Собственный score в этом режиме — диагностический, а не замена закрытой телеметрии OpenRouter.
3. Используй `manual` только когда пользователь требует детерминированный порядок, собственная production-телеметрия важнее Exacto, либо нужен явно зафиксированный failover chain.
4. Не сочетай `:exacto` с `provider.sort`: явный sort имеет приоритет. Не добавляй `provider.order` в режиме `native-exacto`.
5. Учитывай цену **на реальном профиле токенов**, а не только headline input/output price. Включай cache read/write, per-request fee, conditional pricing overrides и наблюдаемый cache hit rate.
6. Не выдумывай отсутствующие Exacto/benchmark/cache/tool-success метрики. Применяй conservative prior и uncertainty penalty; явно отмечай пробелы.
7. Для multi-turn workload передавай стабильный `session_id`. Помни: ручной `provider.order` отключает OpenRouter sticky provider routing; `session_id` не отменяет это ограничение.
8. Не сохраняй API key в skill, конфиг, лог или итоговый JSON. Читай его только из `OPENROUTER_API_KEY` либо указанной environment variable.

## Входные данные

Собери или оцени:

- model slug, например `deepseek/deepseek-v4-flash-0731`;
- `uses_tools`, streaming, требуемые параметры, context и output limits;
- ожидаемые prompt/completion tokens и requests per session;
- cacheable prompt fraction, token-level cache read/write rate, response-cache hit rate;
- hard caps: цена, latency, TPS, uptime, quantization, moderation, ZDR/data policy;
- цель: quality, balanced, interactive latency, cost или batch throughput;
- собственную telemetry по provider tag, если она есть.

Когда вход неполный, используй профиль `agentic-balanced`. Для tool-calling включай `uses_tools=true`. Не задавай ненулевой cache hit rate без наблюдений или обоснованной workload-модели.

## Процедура

### 1. Классифицируй workload

Выбери один профиль:

- `agentic-balanced` — default для агентов и B2B SaaS;
- `agentic-quality` — tool correctness и reliability важнее цены;
- `interactive` — минимизация TTFT и end-to-end latency;
- `cost` — минимизация ожидаемой стоимости при SLO;
- `batch` — throughput/cost для длинных completion.

Для нестандартной цели переопредели `weights`, но сумма после нормализации должна быть положительной. Подробная формула: [references/scoring.md](references/scoring.md).

### 2. Получи свежие endpoint-метрики

Предпочтительный путь — OpenRouter Endpoints API через bundled script:

```bash
python3 scripts/rank_providers.py \
  --model deepseek/deepseek-v4-flash-0731 \
  --config assets/config.example.json \
  --format markdown \
  --output recommendation.md
```

Для воспроизводимого/offline анализа:

```bash
python3 scripts/rank_providers.py \
  --endpoints-file endpoints.json \
  --config config.json \
  --observations telemetry.jsonl \
  --previous-ranking previous-result.json \
  --output result.json
```

Endpoint API дает provider tag, pricing, quantization, context/output limits, supported parameters, uptime, latency и throughput percentiles. Если анализируется performance page, перенеси видимые provider-specific Auto Exacto/benchmark значения в observations по точному `tag`; не пытайся угадывать соответствие по display name при наличии tag.

Форматы входа: [references/input-formats.md](references/input-formats.md).

### 3. Добавь production-телеметрию

Приоритет сигналов качества:

1. собственный tool-call/schema success по тому же model, prompt class и provider tag;
2. provider-specific Exacto/benchmark значения с performance page;
3. endpoint performance/uptime API;
4. conservative prior при отсутствии данных.

Собирай минимум: `provider_name` или `provider_tag`, success, tool success, prompt/completion/cached/cache-write tokens, TTFT, generation time/TPS и total cost. Для долей с малой выборкой используй Wilson lower bound, а не raw percentage.

### 4. Запусти ranking и проверь результат

Скрипт должен:

- исключить неактивные/несовместимые endpoints;
- разрешить pricing overrides на момент запроса;
- посчитать expected cost для workload;
- смешать OpenRouter percentiles с собственными наблюдениями по sample confidence;
- нормализовать cost/TPS/TTFT/E2E относительно текущего eligible pool;
- применить quality, reliability, cache, fidelity и uncertainty components;
- стабилизировать порядок предыдущим результатом;
- выбрать fallback chain с provider-family diversity, если разрыв score приемлем.

Проверь exit code. При `4` не ослабляй ограничения молча: покажи, какие constraints исключили все endpoints, и предложи минимальное ослабление.

### 5. Выбери routing mode

| Условие | Режим | Что отправлять |
|---|---|---|
| Tool calls, нет требования фиксированного порядка | `native-exacto` | `model: <slug>:exacto`, filters/preferences, без `sort/order` |
| Фиксированный failover chain или сильная собственная telemetry | `manual` | `provider.order` из ranking |
| Только одна простая цель без custom score | native OpenRouter | `provider.sort: price/throughput/latency`; bundled ranker не обязателен |

OpenRouter-specific взаимодействия и ограничения: [references/openrouter-routing.md](references/openrouter-routing.md).

## Формат ответа пользователю

Всегда возвращай:

1. выбранный mode и краткое обоснование;
2. таблицу eligible ranking: provider tag, score, expected cost/request, TPS percentile, TTFT, E2E, uptime, quality confidence и cache hit rate;
3. готовый JSON request fragment;
4. excluded providers с причинами;
5. coverage/warnings и список отсутствующих сигналов;
6. правило обновления ranking: пересчитывать после заметного drift, изменения цен/endpoints или достаточного прироста telemetry; не фиксировать бессрочно.

В `native-exacto` четко разделяй **diagnostic ranking** и **authoritative runtime ordering by Exacto**.

## Validation checklist

Перед выдачей результата проверь:

- provider tags взяты из свежего API/файла, а не из памяти;
- hard constraints применены до score;
- цены переведены из USD/token в понятные USD/M и workload cost без двойного пересчета;
- p90 throughput трактуется как нижняя граница, достигаемая примерно 90% запросов, а p90 latency — как верхняя граница примерно для 90% запросов;
- `provider.max_price` передан в USD per million tokens, тогда как endpoint pricing хранится в USD per token;
- `provider.order` отсутствует в `native-exacto`;
- service-tier tags (`/fast`, `/flex`) не включены случайно;
- при cache-heavy сессиях указан stable `session_id`, а последствия manual order отмечены;
- низкая выборка не переоценивается;
- итоговый request JSON синтаксически валиден.

## Bundled resources

- `scripts/rank_providers.py` — автономный ranker и генератор routing fragment.
- `scripts/validate_skill.py` — self-check frontmatter, resources, syntax и unit tests.
- `assets/config.example.json` — конфиг для tool-using agent workload.
- `assets/observations.example.json` — агрегированные provider observations.
- `assets/telemetry.example.jsonl` — сырые request-level observations.
- `tests/trigger-evals.json` — positive/negative activation queries для description.
- `references/scoring.md` — формула, нормализация и профили.
- `references/input-formats.md` — схема config/telemetry.
- `references/openrouter-routing.md` — semantics OpenRouter routing/caching.

Для проверки пакета запусти:

```bash
python3 scripts/validate_skill.py
```