К содержимому
sulimko.com

Как мы считаем

Каждое число на сайте взято из опубликованного источника или получено по формуле с этой страницы. Каждая формула здесь дважды: сначала простыми словами, потом точно так, как её считает код.

На странице

Правила, которым подчиняется каждое число

  1. 1У каждого числа есть источник и дата, когда оно было верным, — а не дата, когда мы его прочитали.
  2. 2Заявленное производителем и измеренное кем-то хранятся отдельно. Их показывают рядом и никогда не усредняют в одно число.
  3. 3Если значение никто не опубликовал и не измерил, вы видите пустое кольцо и причину — а не догадку.
  4. 4Формула меняется только новой версией. То, что посчитано до изменения, не переписывается.

Откуда берутся числа

У каждого значения одна из пяти меток. Нажмите на число с пунктирным подчёркиванием мышью, пальцем или с клавиатуры — увидите метку и дату.

Заявлено производителем
То, что производитель публикует о своём продукте. Заявление, а не замер.
Независимый замер
Замер независимой стороны — прогон бенчмарка или открытый набор данных — с методикой и датой.
Наш замер
Наш собственный замер на наших аккаунтах. Один человек, один стиль работы: частный случай, он никогда не ставится выше независимого источника.
Наш расчёт
Значение, которое мы вычисляем из других по формуле с этой страницы, например цена задачи. Оно не свежее самого старого из своих входов.
Утверждение из иска
Утверждение из судебного иска. Не доказано, дело идёт — никогда не выдаётся за замер.

Что значит «свежее»

Возраст считается с момента, когда факт стал верным или был последний раз подтверждён, — а не с момента загрузки. Значение старше предела помечается как устаревшее янтарным кольцом; результат, посчитанный из устаревшего значения, тоже устаревший.

Вид данныхУстаревает черезЧто сюда входит
Меняется часто14 дн.Цены и лимиты. Цена задачи наследует их возраст.
Меняется медленно45 дн.Результаты бенчмарков.
Не старееттолько при измененииОкно контекста, открытость весов — меняются только с новым релизом.

Цена задачи

В прайсах пишут доллары за миллион токенов, но работа стоит не столько. Агент для кода снова и снова перечитывает одни и те же файлы (дешёвое чтение из кэша), пишет относительно немного и иногда подолгу думает.

Поэтому мы считаем цену целой типичной задачи по собственным ценам производителя — в трёх видах работы: чат, агент для кода и конвейер, работающий круглые сутки. На всём сайте по умолчанию — агент для кода.

Сегодня примера нет: ни у одной модели не опубликованы обе цены.

Три вида работы

  • Чат
    Из кэша
    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)

Скорость и «цена и качество» — это место среди всех моделей (перцентиль), поэтому они могут сдвинуться, когда появляются новые модели. Остальные части абсолютные.

Как читать точки

  • Отлично80–100
  • Хорошо60–79
  • Средне40–59
  • Слабо0–39

Интеллект

Интеллект — среднее по тем видам задач, которые измерены: код, рассуждения и общие знания. Каждый вид — среднее его бенчмарков. Вид без замеров не участвует; бенчмарк старше своего предела выпадает из числа и показывается как исключённый.

Если источники расходятся, показываются оба — их не смешивают в скрытое среднее.

Точно так, как считает код
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

Скорость

Скорость — медиана токенов, которые модель пишет в секунду, плюс ожидание первого слова, где его измеряли. Оба числа — из независимых замеров.

Как подбирается замена

Ответ «найти дешевле» — это арифметика, а не нейросеть, поэтому на один и тот же вопрос всегда один ответ. Вы называете свою модель и одно желание: дешевле, быстрее, открытые веса или больше контекст.

Кандидат должен быть заметно лучше в этом желании: хотя бы на 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

Насколько полны данные

Модель описана полностью, когда у неё есть окно контекста, обе цены и статус. Доля читается из реестра в момент открытия страницы; низкое число — это реальный пробел, и он показан как есть.

  • Модели, которые можно вызватьОписано полностью: 100% · моделей: 142
  • Модели, доступные через роутерОписано полностью: 28.6% · моделей: 497
  • Все строки моделей, включая только бенчмаркиОписано полностью: 18.7% · моделей: 761

По всем 761 строкам: окно контекста 65.3% · обе цены 18.7% · статус 100%.

Моделей с оценками бенчмарков, но без цены или контекста: 619. Они есть в рейтингах и бенчмарках, но не в каталоге.

Окна контекста: 338 — из публичных каталогов, 159 — перенесены с базовой модели того же семейства.

Строк без окна контекста ни в одном публичном источнике: 264.