curl, jq, API-ключ и базовый URL из вашей панели доступа, идентификаторы моделей GPT-6 Astra и GPT-6.1 Sol из документации (в постах канала они не публикуются), пустая папка ~/bench.~/bench/score.csv с шестью строками замеров и конфиг routes.json, где для каждой задачи задана основная модель и резервная.
curl и jq в $PATH.~/bench).Что уже известно из постов канала — зафиксируйте это до запуска, чтобы не спорить с самим собой после замеров:
| Критерий | GPT-6 Astra | GPT-6.1 Sol |
|---|---|---|
| Бенчмарк ARC AGI 3 | 99,95%, бенчмарк «исчерпан» | данных в постах нет |
| Тест адаптивности | почти 100% там, где средний человек даёт около 48% | данных в постах нет |
| Агентная работа | Ramp: одна строка запроса «add routing controls for individual API keys» → нашла настройки, внесла изменения, проверила себя через computer use; Notion: работа в Codex в роли инженера-коллеги; Figma: дизайн системы полётного контроля | данных в постах нет |
| Ограничение | Figma: разрыв между генерацией интерфейса и проектированием системы «massive» | — |
| Цена, лимиты, id модели | в постах не приводятся — сверьтесь с документацией | в постах не приводятся — сверьтесь с документацией |
GPT-6.1 Sol в постах канала не описан ни разу: единственное упоминание линейки — в соседнем разборе. Поэтому по Sol вы опираетесь только на свой замер и на документацию: GPT-5.5 Instant или GPT-6.1 Sol: что выбрать для чата, API и повседневных задач.
Чек-лист подготовки:
python3 --version выдаёт 3.11 или новееjq --version выдаёт номер версии, а не «command not found»AI_API_KEY и AI_BASE_URL экспортированы в текущей сессииMODEL_A и MODEL_B заполнены идентификаторами из документации/models возвращает 200Что сделать: создать рабочую папку и задать четыре переменные окружения — ключ, базовый URL и два идентификатора моделей.
Зачем: все дальнейшие команды берут значения из окружения. Если захардкодить ключ в скрипт, он утечёт в историю команд и в логи.
Как проверить: тестовый запрос к списку моделей должен вернуть код 200.
mkdir -p ~/bench && cd ~/bench
python3 --version
jq --version
export AI_API_KEY='<ваш-ключ>'
export AI_BASE_URL='<базовый-URL из панели или документации>'
export MODEL_A='<id модели GPT-6 Astra из документации>'
export MODEL_B='<id модели GPT-6.1 Sol из документации>'
Проверка:
printf 'key=%s\nbase=%s\nA=%s\nB=%s\n' "${AI_API_KEY:+set}" "$AI_BASE_URL" "$MODEL_A" "$MODEL_B"
curl -s -o /dev/null -w '%{http_code}\n' "$AI_BASE_URL/models" -H "Authorization: Bearer $AI_API_KEY"
Ожидаемый вывод: key=set, затем три строки с вашими значениями и в конце 200.
Пример: если AI_BASE_URL не задан, curl напечатает 000 — это значит, что запрос ушёл в никуда, а не что ключ плохой.
Почему это работает: /models — самый дешёвый запрос, он проверяет связку «ключ + URL» до того, как вы потратите время на прогон задач.

Что сделать: создать три текстовых файла с задачами (чат, работа, API) и прогнать каждый через обе модели одинаковым запросом.
Зачем: если промпты разные, разница в ответах принадлежит промпту, а не модели. Одинаковый вход — единственный способ сравнить.
Как проверить: в папке появится 6 файлов out_*.json и 2 лога time_*.log.
cat > task_chat.txt <<'EOF'
Объясни за пять предложений, что такое маршрутизация запросов между двумя LLM.
EOF
cat > task_work.txt <<'EOF'
Добавь управление маршрутизацией для отдельных API-ключей: опиши план изменений,
перечисли файлы, которые правишь, и в конце проверь результат.
EOF
cat > task_api.txt <<'EOF'
Верни строго JSON: {"model":"<имя>","tasks":["chat","work","api"],"verified":true}
EOF
Запуск (функция шлёт один запрос и пишет время):
run_one () { # $1 = модель, $2 = задача
local M="$1" T="$2"
curl -sS "$AI_BASE_URL/chat/completions" \
-H "Authorization: Bearer $AI_API_KEY" \
-H 'Content-Type: application/json' \
--max-time 300 \
-d "$(jq -nc --arg m "$M" --rawfile t "task_${T}.txt" \
'{model:$m,messages:[{role:"user",content:$t}]}')" \
-o "out_${M}_${T}.json" \
-w "%{http_code} %{time_total}\n" | tee -a "time_${M}.log"
}
for M in "$MODEL_A" "$MODEL_B"; do
for T in chat work api; do run_one "$M" "$T"; done
done
Проверка:
ls out_*.json | wc -l
jq -r '.error.message // "ok"' out_*.json
column -t time_*.log
Ожидаемо: 6, шесть строк ok, затем две колонки — HTTP-код и время в секундах.
Пример: задача work намеренно повторяет кейс Ramp — в нём Astra сначала нашла нужные настройки, потом внесла изменения и проверила свою работу через computer use. Поэтому в промпте есть требование «в конце проверь результат»: без него вы сравниваете не агентную работу, а генерацию текста.
Почему это работает: jq -nc собирает JSON-тело, а --rawfile подставляет содержимое файла с экранированием — кавычки и переводы строк в промпте не ломают запрос.
Если ваша задача — тексты, переводы и суммаризация, набор промптов удобнее брать из гайда по работе с текстом; для офисных сценариев сравните подходы в ChatGPT Office или Microsoft 365 с Copilot.

Что сделать: собрать score.csv, выбрать победителя по каждой задаче и записать выбор в routes.json.
Зачем: выбор «на глаз» не воспроизводится. Файл score.csv — ваш аргумент при следующем пересмотре модели, а routes.json — то, что читает ваш сервис.
Как проверить: jq -e подтвердит структуру конфига, а column покажет шесть строк замеров.
printf 'model,task,seconds,json_valid\n' > score.csv
for M in "$MODEL_A" "$MODEL_B"; do
for T in chat work api; do
f="out_${M}_${T}.json"
ok=$(jq -e . "$f" >/dev/null 2>&1 && echo yes || echo no)
sec=$(awk -v t="$T" '$0 ~ t {print $2}' "time_${M}.log" | tail -n 1)
printf '%s,%s,%s,%s\n' "$M" "$T" "$sec" "$ok" >> score.csv
done
done
column -s, -t score.csv
Ожидаемый вывод — таблица из шести строк, например:
model task seconds json_valid
<id-astra> chat 2.314 yes
<id-astra> work 58.902 yes
<id-astra> api 1.988 yes
<id-sol> chat 2.101 yes
<id-sol> work 64.770 yes
<id-sol> api 2.245 yes
Конфиг маршрутизации (подставьте победителей из score.csv):
{
"routes": {
"chat": { "primary": "<id-победителя по task_chat>", "fallback": "<второй id>", "timeout_s": 60 },
"work": { "primary": "<id-победителя по task_work>", "fallback": "<второй id>", "timeout_s": 300, "require_self_check": true },
"api": { "primary": "<id-победителя по task_api>", "fallback": "<второй id>", "timeout_s": 60 }
}
}
Проверка конфига:
jq -e '.routes | keys == ["api","chat","work"]' routes.json
Ожидаемо: true.
Как читать результат: если по work выигрывает Astra — это согласуется с кейсами Ramp, Notion и Figma, где модель вела многошаговую работу и проверяла себя. По chat и api данных о GPT-6.1 Sol в постах нет: primary ставьте по своему score.csv, а расхождения по цене, лимитам и названиям параметров — сверьтесь с документацией.
Проблема. Первый же запрос возвращает 401
{"error":{"message":"Incorrect API key provided","type":"invalid_request_error","code":"invalid_api_key"}}, HTTP 401AI_API_KEY задана в другом окне терминала или не экспортирована — export действует только в текущей сессии.export AI_API_KEY='<ваш-ключ>' в том же окне и повторить curl -s -o /dev/null -w '%{http_code}\n' "$AI_BASE_URL/models" -H "Authorization: Bearer $AI_API_KEY" — должно быть 200.Проблема. Модель «не существует или нет доступа»
{"error":{"message":"The model '<id>' does not exist or you do not have access to it"}}, HTTP 404curl -s "$AI_BASE_URL/models" -H "Authorization: Bearer $AI_API_KEY" | jq -r '.data[].id' — посмотреть доступные id и подставить найденные в MODEL_A/MODEL_B. Если нужной модели в списке нет — сверьтесь с документацией провайдера.Проблема. Задача work обрывается по таймауту
curl: (28) Operation timed out after 300001 milliseconds--max-time 300; в кейсе Ramp это именно цепочка шагов, а не один ответ.--max-time 600 в run_one и поставить "timeout_s": 600 в routes.json; прогонять work первым, chat и api — после него.Для агентной работы берите модель, которая прошла ваш прогон task_work с самопроверкой, — по постам это сильная сторона GPT-6 Astra (кейсы Ramp, Notion, Figma), а по чату и API решение принимайте только по своему score.csv. Дальше перенесите routes.json в сервис, добавьте fallback-модель и перезапускайте прогон при каждом обновлении документации.
GPT-6 Astra — это AGI?
По постам канала модель набрала 99,95% на ARC AGI 3 и «исчерпала» бенчмарк, а Дженсен Хуанг и OpenAI заявляют о достижении AGI; для инженерного выбора это означает только одно — высокий результат на конкретном тесте, а не гарантию на вашей задаче, поэтому нужен собственный прогон.
Чем Astra полезна именно в работе, а не в чате?
В кейсе Ramp она по одной строке запроса нашла нужные настройки, внесла изменения и проверила себя через computer use; в Notion работала в Codex как инженер-коллега, когда ей передали цель и контекст.
Есть ли у Figma ограничение по Astra?
Да, в разборе кейса прямо сказано, что разрыв между генерацией интерфейса и проектированием системы «massive» — то есть сгенерировать экран и спроектировать систему полётного контроля не одно и то же.
Сколько стоят Astra и Sol и как называются их id в API?
В постах канала нет ни цен, ни идентификаторов моделей — сверьтесь с документацией провайдера и подставьте найденные значения в MODEL_A и MODEL_B.