Правила, которым подчиняется каждое число
- 1У каждого числа есть источник и дата, когда оно было верным, — а не дата, когда мы его прочитали.
- 2Заявленное производителем и измеренное кем-то хранятся отдельно. Их показывают рядом и никогда не усредняют в одно число.
- 3Если значение никто не опубликовал и не измерил, вы видите пустое кольцо и причину — а не догадку.
- 4Формула меняется только новой версией. То, что посчитано до изменения, не переписывается.
Откуда берутся числа
У каждого значения одна из пяти меток. Нажмите на число с пунктирным подчёркиванием мышью, пальцем или с клавиатуры — увидите метку и дату.
- Заявлено производителем
- То, что производитель публикует о своём продукте. Заявление, а не замер.
- Независимый замер
- Замер независимой стороны — прогон бенчмарка или открытый набор данных — с методикой и датой.
- Наш замер
- Наш собственный замер на наших аккаунтах. Один человек, один стиль работы: частный случай, он никогда не ставится выше независимого источника.
- Наш расчёт
- Значение, которое мы вычисляем из других по формуле с этой страницы, например цена задачи. Оно не свежее самого старого из своих входов.
- Утверждение из иска
- Утверждение из судебного иска. Не доказано, дело идёт — никогда не выдаётся за замер.
Что значит «свежее»
Возраст считается с момента, когда факт стал верным или был последний раз подтверждён, — а не с момента загрузки. Значение старше предела помечается как устаревшее янтарным кольцом; результат, посчитанный из устаревшего значения, тоже устаревший.
| Вид данных | Устаревает через | Что сюда входит |
|---|---|---|
| Меняется часто | 14 дн. | Цены и лимиты. Цена задачи наследует их возраст. |
| Меняется медленно | 45 дн. | Результаты бенчмарков. |
| Не стареет | только при изменении | Окно контекста, открытость весов — меняются только с новым релизом. |
Цена задачи
В прайсах пишут доллары за миллион токенов, но работа стоит не столько. Агент для кода снова и снова перечитывает одни и те же файлы (дешёвое чтение из кэша), пишет относительно немного и иногда подолгу думает.
Поэтому мы считаем цену целой типичной задачи по собственным ценам производителя — в трёх видах работы: чат, агент для кода и конвейер, работающий круглые сутки. На всём сайте по умолчанию — агент для кода.
Сегодня примера нет: ни у одной модели не опубликованы обе цены.
Три вида работы
- Чат
- Из кэша
- 20%
- Вход, токенов
- 6000
- Выход, токенов
- 2000
- В кэш
- 1000
- Агент для кода
- Из кэша
- 70%
- Вход, токенов
- 120 000
- Выход, токенов
- 12 000
- В кэш
- 8000
- Конвейер 24/7
- Из кэша
- 85%
- Вход, токенов
- 400 000
- Выход, токенов
- 20 000
- В кэш
- 10 000
| Вид работы | Из кэша | Вход, токенов | Выход, токенов | В кэш |
|---|---|---|---|---|
| Чат | 20% | 6000 | 2000 | 1000 |
| Агент для кода | 70% | 120 000 | 12 000 | 8000 |
| Конвейер 24/7 | 85% | 400 000 | 20 000 | 10 000 |
Если производитель не публикует цену чтения из кэша, мы считаем его по цене обычного входа — без скидки, которую не можем показать.
cost_per_task(model, P) =
p_in · T_in(P) · (1 − cache_share(P)) # свежий ввод
+ p_cr · T_in(P) · cache_share(P) # чтение из кэша
+ p_cw · T_cw(P) # запись в кэш
+ p_out · T_out_base(P) · verbosity_ratio
# вывод с поправкой на многословность модели
+ p_out · T_think(model, P) # токены рассуждений
× geo_mult × tier_mult
# надбавка за регион, часы пик, скидка за пакетный режимТокены везде разные
Модели режут текст на токены по-разному: новый токенизатор может дать примерно на 30% больше токенов на тот же текст. Поэтому виды работы выше заданы объёмом текста и переводятся в токены каждой модели отдельно. Сравнивать цены за миллион токенов у разных производителей без этого шага — значит ошибаться.
Болтливые модели дороже
На одну и ту же задачу одни модели пишут намного больше других. Мы учитываем это в цене: выход модели умножается на то, во сколько раз она многословнее одной закреплённой эталонной модели.
Писать меньше — дешевле, а не умнее. Короткий ответ не значит лучший.
Оценка модели от 0 до 100
Там, где помогает одно число — чтобы отсортировать таблицу, — мы используем оценку от 0 до 100 из независимых бенчмарков. Часть без данных не участвует и не считается нулём, а старый вход делает старой всю оценку.
- ОбщаяПоказывается
Overall = mean(Intelligence, Coding, Reasoning)учитываются только те части, что есть у модели - КодПоказывается
Coding = mean(aider, SWE-bench, LiveCodeBench)пока сырые бенчмарки не опубликованы, вместо них — индекс программирования Artificial Analysis - МатематикаПоказывается
Math = mean(MATH-500, AIME)пока сырые бенчмарки не опубликованы, вместо них — математический индекс Artificial Analysis - РассужденияЖдёт источник
Reasoning = mean(GPQA, HLE) - СкоростьПоказывается
Speed = percentile(median tokens/sec)среди языковых моделей, у которых измерена скорость - Цена и качествоПоказывается
Value = percentile(SCORE(Overall) / $/task coding-agent)среди моделей, у которых есть и оценка, и цена - ЯзыкиЖдёт источник
Multilingual = mean(available multilingual signals)
Скорость и «цена и качество» — это место среди всех моделей (перцентиль), поэтому они могут сдвинуться, когда появляются новые модели. Остальные части абсолютные.
Как читать точки
- Отлично
- Хорошо
- Средне
- Слабо
Интеллект
Интеллект — среднее по тем видам задач, которые измерены: код, рассуждения и общие знания. Каждый вид — среднее его бенчмарков. Вид без замеров не участвует; бенчмарк старше своего предела выпадает из числа и показывается как исключённый.
Если источники расходятся, показываются оба — их не смешивают в скрытое среднее.
intelligence = mean(coding, reasoning, general) # только измеренные классы задач; 0–100 coding = mean(aider_polyglot_pct, swe_bench_verified) reasoning = livebench_score general = intelligence_index # Artificial Analysis # у каждого бенчмарка считается последний замер; все замеры остаются в истории # бенчмарк старше своего предела свежести в число не входит и указан отдельно # результат не свежее самого старого из оставшихся бенчмарков
Ступени: топ, сильная, средняя, слабая
Границы ступеней постоянные, это не место среди нынешних моделей, поэтому модель не меняет ступень, когда появляется новая. Устаревший вход опускает ступень и никогда не считается свежим.
- Интеллект, индекс 0–100
- Топ
- ≥ 65
- Сильная
- ≥ 55
- Средняя
- ≥ 40
- Слабая
- < 40
- Цена задачи агента для кода
- Топ
- ≤ $0.15
- Сильная
- ≤ $0.50
- Средняя
- ≤ $1.50
- Слабая
- > $1.50
- Скорость, токенов в секунду
- Топ
- ≥ 100
- Сильная
- ≥ 60
- Средняя
- ≥ 30
- Слабая
- < 30
| Мера | Топ | Сильная | Средняя | Слабая |
|---|---|---|---|---|
| Интеллект, индекс 0–100 | ≥ 65 | ≥ 55 | ≥ 40 | < 40 |
| Цена задачи агента для кода | ≤ $0.15 | ≤ $0.50 | ≤ $1.50 | > $1.50 |
| Скорость, токенов в секунду | ≥ 100 | ≥ 60 | ≥ 30 | < 30 |
Скорость
Скорость — медиана токенов, которые модель пишет в секунду, плюс ожидание первого слова, где его измеряли. Оба числа — из независимых замеров.
Как подбирается замена
Ответ «найти дешевле» — это арифметика, а не нейросеть, поэтому на один и тот же вопрос всегда один ответ. Вы называете свою модель и одно желание: дешевле, быстрее, открытые веса или больше контекст.
Кандидат должен быть заметно лучше в этом желании: хотя бы на 20% дешевле за задачу или на 20% быстрее, с более открытыми весами или с более длинным окном контекста. «0» у поставщика — не цена, поэтому такую модель мы никогда не называем дешевле. А сохранить он должен интеллект: до 10 пунктов ниже вашей модели — лучший вариант, до 20 пунктов ниже — хорошая замена с названной потерей, ещё ниже — не предлагается. Модель, чей интеллект никто не измерял, получает только «стоит взглянуть». Вы получаете до пяти вариантов, сначала лучший вердикт; внутри вердикта первым идёт заметно больший выигрыш (свежее число засчитывается полностью, старое — меньше); при похожем выигрыше — меньшая потеря в интеллекте. Если не подошёл никто, вы видите ближайшего и то, чего ему не хватило. Для компьютеров то же правило сохраняет память: машину с меньшей памятью, чем у вашей, или с памятью, которой нет в наших данных, мы не предлагаем, а «дешевле» и «быстрее» значат хотя бы 20% по цене машины и по скорости памяти.
improves ⟺ gain(candidate, yours, wish) ≥ min_step # цена и скорость — хотя бы на 20% дешевле или быстрее; контекст — окно # шире; веса: открытые > код доступен > закрытые; «0» у поставщика — не цена drop = intelligence(yours) − intelligence(candidate) вердикт: лучший вариант # лучше во всех желаниях; потеря ≤ 10 пунктов хорошая замена # лучше во всех желаниях; потеря 10–20 пунктов, она названа стоит взглянуть # лучше только в части желаний или интеллект не измерен не предлагается # потеря > 20 пунктов; только как ближайший промах order = verdict, Σ log₂(gainᵢ) × confidenceᵢ, drop # сначала лучший вердикт; затем больший выигрыш (удвоение = 1, # сравнение шагами по половине); затем меньшая потеря; не больше 5 # доверие по возрасту числа: свежее 1 · стареющее 0.75 · устаревшее 0.5 # улучшенная мера со стареющими или устаревшими данными помечается у кандидата # нет кандидатов → ближайший и мера, которой ему не хватило
Компьютеры для агентов
Машины получают оценку 0–100 за то, насколько хорошо держат ИИ-агентов круглые сутки. Больше всего весит пропускная способность памяти: она решает, как быстро несколько агентов пишут одновременно. Мера, по которой у машины нет данных, не участвует, а остальные веса пересчитываются — отсутствующая цена никогда не считается низкой.
fit(machine) = 100 · Σ wᵢ · normᵢ / Σ wᵢ # по тем мерам, что есть у машины normᵢ = (xᵢ − min) / (max − min) # по всем машинам, 0..1; цена перевёрнута: дешевле → 1 # веса: пропускная способность памяти 0.35 · память 0.2 # · скорость 0.2 · энергоэффективность 0.1 · цена 0.1 · кластер 0.05 # отсутствующая мера не участвует и не считается нулём; # веса пересчитываются по остальным
Жив ли агент для кода
Мы не ставим агентов для кода в рейтинг друг против друга — рынок слишком быстро их сливает и закрывает. Мы проверяем только пульс: как давно вышел последний датированный релиз, с потолком по статусу проекта, чтобы затухающий или архивный агент не выглядел очень живым. Нет датированного релиза — значение пустое, а не ноль.
pulse(agent) = round(min(100 · recency, ceiling[status])) # свежесть: 1, если последний датированный релиз не старше 7 дней, # 0 — от 180 дней, между ними линейно # потолок по статусу: активен 100 · замедлился 55 · прекращён 25 · в архиве 10 # нет датированного релиза → пустое значение, никогда не 0
Подходит ли подписка под вашу работу
Для каждого тарифа мы проверяем, помещается ли ваша нагрузка в его лимиты. Сначала — опубликованные числовые лимиты, потом независимый замер того, сколько тариф даёт на деле. Утверждения из исков не используются никогда. Если есть только заявление производителя, ответ всё равно показывается, но с широким разбросом и пометкой «по заявлению производителя». Между тарифами сравнивается одно: сколько ваша нагрузка стоила бы через API, делённое на цену тарифа.
fit(plan | you) = tier(load) # 1. сначала опубликованные лимиты load = max(demand_5h / limit_5h, demand_week / limit_week) # 2. иначе независимый замер того, сколько даёт тариф load = your_$ / (measured × price) # 3. иначе множитель со слов производителя: # широкая полоса и пометка «по заявлению производителя» # 4. ничего не опубликовано → пустой ответ, а не угаданное «подходит» # подходит с запасом при нагрузке ≤ 0.7, впритык при ≤ 1, выше — не подходит demand = prompts_per_hour × active_hours # запросов в активный час: чат 20 · агент для кода 12 # · конвейер 30; всплеск заполняет 5-часовое окно ×1.5 your_$ = Σ wᵢ · price_per_taskᵢ × prompts_per_month # сколько ваша работа стоила бы через API value = your_$ / plan_price # то одно число, по которому сравниваются тарифы
Наши замеры подписок
Мы измеряем, сколько дают наши собственные подписки: каждая сессия оценивается по публичным ценам API, и сумма за последние 30 дней делится на месячную цену тарифа. Это другая база, чем заявление производителя «столько-то использования за сессию», поэтому их никогда не сравнивают как одно число. Это стиль работы одного человека, независимо его не повторить, — частный случай. Публикуются только итоги; содержимое сессий не покидает нашу машину.
Как упорядочены новости
Лента упорядочена по постоянному правилу, а не по вкусу: вид изменения, умноженный на его размер и на то, можете ли вы что-то с этим сделать. В ленту попадают за сделанное — датированные собственные работы, — а не за число подписчиков; аккаунт с большой аудиторией и без результатов помечается. У каждой новости о цене есть цена задачи модели — то же число, что в каталоге.
relevance(story) = round(weight[kind] · size · actionable · 100) # вес по виду изменения, см. таблицу ниже; неизвестный вид → 0.5 # размер: насколько велико изменение, 0..1 # (распознанный сдвиг цены; неизвестно → 0.5, не 0) # применимость: модель, которую можно вызвать, 0.7 # · известная модель вне каталога 0.5 · всё прочее 0.4 # человек проходит ⟺ есть хотя бы одна датированная собственная работа: # коммиты, релизы, посты # помечается: подписчики без работ или подписчики ÷ работы ≥ 50 000 # число подписчиков само по себе никого не проводит
Вес по виду изменения
- Ценыцена снижена 1 · цена выросла 0.85
- Лимиты и условия тарифовтариф даёт меньше обещанного 0.95 · лимит ужесточён 0.9 · изменилось, как считается расход 0.9 · изменилось, что входит в тариф 0.85 · тариф снят 0.85 · лимит ослаблен 0.8 · тариф даёт больше 0.8 · изменилось, с какими инструментами работает тариф 0.8 · новый тариф 0.75
- Новые модели и результатыобходит модель, с которой сравнивают 0.95 · новая модель или продукт 0.75 · новый результат бенчмарка 0.65
- Статусвыпуск, устаревание или закрытие 0.7
- Что сообщают пользователиволна жалоб 0.6 · жалобы утихли 0.45
| Вид изменения | Что сюда входит и с каким весом |
|---|---|
| Цены | цена снижена 1 · цена выросла 0.85 |
| Лимиты и условия тарифов | тариф даёт меньше обещанного 0.95 · лимит ужесточён 0.9 · изменилось, как считается расход 0.9 · изменилось, что входит в тариф 0.85 · тариф снят 0.85 · лимит ослаблен 0.8 · тариф даёт больше 0.8 · изменилось, с какими инструментами работает тариф 0.8 · новый тариф 0.75 |
| Новые модели и результаты | обходит модель, с которой сравнивают 0.95 · новая модель или продукт 0.75 · новый результат бенчмарка 0.65 |
| Статус | выпуск, устаревание или закрытие 0.7 |
| Что сообщают пользователи | волна жалоб 0.6 · жалобы утихли 0.45 |
Насколько полны данные
Модель описана полностью, когда у неё есть окно контекста, обе цены и статус. Доля читается из реестра в момент открытия страницы; низкое число — это реальный пробел, и он показан как есть.
- Модели, которые можно вызватьОписано полностью: 100% · моделей: 142
- Модели, доступные через роутерОписано полностью: 28.6% · моделей: 497
- Все строки моделей, включая только бенчмаркиОписано полностью: 18.7% · моделей: 761
По всем 761 строкам: окно контекста 65.3% · обе цены 18.7% · статус 100%.
Моделей с оценками бенчмарков, но без цены или контекста: 619. Они есть в рейтингах и бенчмарках, но не в каталоге.
Окна контекста: 338 — из публичных каталогов, 159 — перенесены с базовой модели того же семейства.
Строк без окна контекста ни в одном публичном источнике: 264.