Обновить
1024K+

Программирование *

Искусство создания компьютерных программ

1 198,38
Рейтинг
Сначала показывать
Порог рейтинга

В Bot API 10.3 появилась остановка генерации. Но LLM-запрос придётся отменять самому

24 августа вышел Telegram Bot API 10.3. В нём появилась полезная функция для AI-ботов: пользователь может остановить генерацию ответа штатной кнопкой Telegram.

В методы sendMessageDraft и sendRichMessageDraft, которые позволяют показывать черновик ответа в личном чате, добавили два параметра:

  • can_stop=True — показывает кнопку остановки;

  • keep_on_stop=True — временно оставляет уже сгенерированную часть ответа в чате.

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

Если вы явно задаёте allowed_updates, новый тип обновления нужно добавить туда. Иначе нажатие кнопки просто не попадёт в обработчик.

Но Telegram останавливает только показ черновика. Запрос к LLM на стороне бота продолжит выполняться, пока разработчик сам его не отменит.

Например, можно хранить задачи по ключу из идентификаторов чата, темы и черновика:

key = (chat_id, message_thread_id, draft_id)

active_generations[key] = asyncio.create_task(
    generate_answer()
)

При получении stopped_message_generation находим задачу и отменяем её:

event = update.stopped_message_generation
key = (event.chat.id, event.message_thread_id, event.draft_id)

task = active_generations.pop(key, None)

if task is not None:
    task.cancel()

    try:
        await task
    except asyncio.CancelledError:
        pass

Это упрощённый пример: конкретный обработчик зависит от используемого фреймворка.

Одного task.cancel() тоже не всегда достаточно. Отмена в asyncio кооперативная: задача остановится только тогда, когда управление вернётся в event loop. Если внутри работает синхронный код или отдельный поток, он может продолжить работу.

Нужно также закрыть потоковое HTTP-соединение с провайдером модели. А если провайдер поддерживает отдельный API отмены, вызвать и его. Иначе модель может продолжить генерацию — вместе с расходом токенов — даже после закрытия соединения.

По сути, здесь есть три независимых действия:

  • Telegram прекращает показывать черновик;

  • бэкенд отменяет локальную задачу и закрывает соединение;

  • провайдер модели останавливает генерацию, если умеет это делать.

Ещё один нюанс касается keep_on_stop=True. Остановленный черновик не превращается в обычное сообщение. Он исчезнет после следующего сообщения в чате или примерно через 30 секунд.

Если частичный ответ нужно сохранить, его придётся отдельно отправить через sendMessage или sendRichMessage.

В многопроцессной системе обычного словаря тоже будет недостаточно: событие остановки может попасть не в тот процесс, где выполняется генерация. Тогда понадобится общая маршрутизация или канал отмены через Redis, брокер сообщений либо другой внешний сервис.

Telegram добавил удобный интерфейс, но жизненный цикл генерации всё равно остаётся на стороне разработчика.

Вопрос: что вы бы делали после остановки: сохраняли частичный ответ, удаляли его или показывали кнопку «Продолжить», которая запускает новый запрос с уже полученным текстом?

Теги:
0
Комментарии0

Я создала красивый GUI для Qemu для запуска древних MacOS начиная с версии 9.0 до 10.5 Leopard. Для удобной эмуляции для простых пользователей ПК. Доступен для всех Linux, в том числе Raspberry Pi, chromeOS, SteamDeck и Steam Machine. Программа создана на Qt6 и C++, из-за чего программа потребляет максимум полтора килобайта ОЗУ.

Я не просто создала программу и выложила на GitHub и всё, я настроила автоматическую сборку бинарного файла на сервере, поэтому вам не нужно компилировать. Бинарная сборка в одном файле AppImage доступна для всех. Работает как минимум на Debian 13 (я проверяла), так что программа будет работать и на Ubuntu, и на Fedora, и на ArchLinux

Теги:
+5
Комментарии0

Что подтянуть бэкендеру для продакшена: 12 практических открытых уроков

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

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

Очереди и надёжная доставка

  • 26 августа, 20:00. «Работа с Kafka через библиотеку Kafka Clients». Записаться

  • 17 сентября, 20:00. «RabbitMQ в Production: Transactional Outbox, идемпотентность и DLQ в ASP.NET Core». Записаться

Базы данных и конкурентный доступ

  • 1 сентября, 20:00. «PostgreSQL 18: асинхронный I/O и io_uring на практике». Записаться

  • 8 сентября, 20:00. «Борьба с блокировками в PostgreSQL: как достичь высокой параллельности при большой нагрузке». Записаться

  • 16 сентября, 20:00. «Темпоральные данные в PostgreSQL 18: история и версии без триггеров». Записаться

Нагрузка и производительность

  • 3 сентября, 20:00. «ASP.NET Core API под нагрузкой: как сделать сервис устойчивым к сбоям и росту трафика». Записаться

  • 9 сентября, 20:00. «Go‑профилирование: как найти и исправить „тормоза“ в продакшене». Записаться

  • 22 сентября, 20:00. «Горутины и каналы: под капотом (under the hood) и нюансы в продакшене». Записаться

HTTP и серверная разработка

  • 21 сентября, 20:00. «HTTP‑сервер на чистой Java за 30 минут». Записаться

  • 20 октября, 19:00. «Балансировка HTTP и L4 сервисов в Angie». Записаться

Продакшен и наблюдаемость

  • 23 сентября, 20:00. «eBPF: рентгеновское зрение для production». Записаться

  • 23 сентября, 20:00. «Узнайте, как использовать Patroni для управления высокодоступными кластерами PostgreSQL». Записаться

ЧТО ПОЧИТАТЬ БЭКЕНД‑РАЗРАБОТЧИКУ

Если удобнее разбираться в теме в своём темпе, собрали несколько практических материалов: про серверы, обновление стека, обработку ошибок и тонкости C++.

Теги:
+4
Комментарии0

Type-driven development в Rust, часть 2/5: как доверить компилятору проверку контрактов между компонентами

Продолжаем серию о type-driven development в Rust — подходе, при котором правила предметной области выражаются в типах, а код, нарушающий эти правила, не компилируется. Рассказывает Никита Тимофеенко, разработчик команды MXDR компании F6.

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

После неё вы сможете найти в своём коде enum с match на каждом вызове, который на самом деле изображает открытый набор реализаций, и заменить его трейтом; отличить в контракте вход от выхода и перестать делать параметром трейта то, что должна выбирать реализация; поднять в тип размеры, которые известны ещё до запуска.

Во второй статье представлены три механизма, каждый разобран по той же схеме «проблема -> решение -> хорошие практики -> как это используют известные крейты или std библиотека»:

  • traits — контракт вместо конкретной реализации: код-потребитель требует поведение, а не тип, и работает с любым, кто его реализовал; новая реализация — это новый impl, а не правка общего кода;

  • associated types — типы, которые выбирает реализация, а не вызывающий: у каждой реализации свои типы результата и ошибки, и в один общий тип они не сводятся. Разница между параметром трейта и ассоциированным типом — это разница между входом и выходом;

  • const generics — значение как параметр типа: размер известен компилятору, а не хранится в рантайме, и структуры разного размера — разные типы. Что можно и чего нельзя в const-параметрах на стабильном Rust.

Отдельно рассмотрим CGP (Context-Generic Programming): что делать, когда одному типу нужно несколько реализаций одного трейта, а правило когерентности разрешает одну — и как одна и та же логика собирается под разные контексты без dyn и без match.

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

Вторая статья «Type-driven development в Rust. Часть 2/5: задаём контракты между компонентами» уже на GitHub. Там же — компилируемые примеры ко всем приёмам, включая compile_fail-тесты на каждое «это не скомпилируется» из текста.

Теги:
+4
Комментарии0

Бесплатный доступ к Claude Code и Codex через 50 AI-провайдеров

Появился интересный Open Source-проект Free Claude Code, который объединяет десятки AI-провайдеров в одном интерфейсе и позволяет подключать их к популярным агентам для программирования.

Проект поддерживает 50 провайдеров и заявляет о более чем 1,3 млрд бесплатных токенов в месяц. При этом доступность бесплатных лимитов зависит от конкретного провайдера и может меняться.

Через него можно запускать сразу несколько coding-агентов:

  • Claude Code

  • Codex

  • Pi

  • OpenCode

  • Cline

  • Hermes

  • DeepSeek Harness

  • Grok Build

  • Muse Code

То есть вместо постоянного переключения между разными сервисами можно использовать единый слой маршрутизации и выбирать подходящую модель из общего каталога.

Что умеет Free Claude Code

🔄 Автоматический fallback. Если выбранный провайдер не отвечает после повторных попыток, система может переключиться на следующую настроенную модель.

💰 Экономия токенов. В проект интегрированы оптимизации, а дополнительный RTK-фильтр может сокращать объём токенов, расходуемых на вывод команд терминала, — разработчики заявляют до 90% сокращения в соответствующих сценариях.

💻 Несколько способов работы. Инструмент рассчитан на терминал, десктоп, IDE и даже смартфон. Есть интеграции с VS Code, JetBrains, Discord и Telegram.

🎙 Голосовой ввод. Запросы агенту можно отправлять голосом через локальную транскрипцию Whisper или NVIDIA NIM.

🧩 Инструменты остаются доступными. Поддерживаются tools, потоковая генерация, отправка изображений и другие возможности AI-агентов.

Отдельно интересен Hermes — его можно запускать через ту же инфраструктуру, не ограничиваясь только Claude Code или Codex.

При этом есть важный нюанс: проект не связан с Anthropic, а бесплатные лимиты предоставляются сторонними провайдерами и могут изменяться. Поэтому воспринимать заявленный объём токенов как гарантированный лимит не стоит.

Сам проект, инструкции по установке и исходный код доступны в репозитории Free Claude Code на GitHub.

✔ Код — журнал о технологиях https://t.me/kodjournal подпишитесь на наш Telegram-канал! 😎

Теги:
-1
Комментарии1

Godogen превращает Claude Code и Codex в автономных разработчиков игр

Вайбкодинг выходит за пределы обычных приложений. Godogen позволяет поручить AI-агенту создание полноценной игры: от написания кода до генерации ассетов, запуска движка и проверки готового результата. Проект работает с Godot 4, Bevy и Babylon.js, а в качестве агента можно выбрать Claude Code или Codex.

Главная идея в том, что разработчику достаточно описать, какую игру он хочет получить. Дальше агент самостоятельно собирает проект, пишет необходимые скрипты, создаёт сцены и запускает игру.

Причём Godogen не ограничивается проверкой успешной компиляции. Он оценивает именно работу запущенной игры: смотрит live-версию или записанный геймплей, замечает видимые проблемы и использует их для следующей итерации.

AI сам создаёт игровые ассеты

Отдельный интерес представляет генерация контента. В проект встроен пайплайн для создания:

  • персонажей и референсов;

  • текстур;

  • простых 3D-объектов;

  • 3D-моделей и риггинга;

  • анимированных спрайтов.

Для разных задач используются Gemini, Grok и Tripo3D.

При этом Godogen не является отдельным игровым движком. Это скорее генератор игровых проектов, который подготавливает окружение, после чего AI-агент работает непосредственно внутри созданного репозитория.

Есть и режим практически автономной разработки. Если не вмешиваться в процесс, в конце агент может подготовить 15–20-секундную запись геймплея, демонстрирующую результат.

Для запуска потребуются соответствующие SDK и инструменты движка, Python, а для генерации ассетов — API-ключи используемых сервисов. Полный список требований разработчики разместили в репозитории Godogen на GitHub.

Похоже, следующий этап вайбкодинга — это уже не «напиши мне функцию», а «сделай мне игру и покажи, что она действительно работает».

✔ Код — журнал о технологиях https://t.me/kodjournal подпишитесь на наш Telegram-канал! 😎

Теги:
-1
Комментарии0

Qwen 3.8 27B за 30 минут обошла защиту коммерческого приложения

Локальная модель Qwen 3.8 27B справилась с задачей, для которой еще недавно потребовалась бы одна из самых мощных облачных моделей. Она провела реверс-инжиниринг системы лицензирования коммерческого приложения и создала рабочий proof-of-concept обхода — причем полностью офлайн.

Эксперимент провел технический редактор XDA Адам Конвей. Подробности он описал в своем разборе эксперимента.

Все происходило на одной машине

Qwen 3.8 27B запустили на Lenovo ThinkStation PGX с чипом Nvidia GB10 Grace Blackwell и 128 ГБ объединенной памяти. Модель работала локально и не использовала облачные API.

Особенно показательно другое: во время основного анализа приложение вообще не запускалось. Qwen работала с бинарными данными и использовала статический анализ.

Модель:

  • разобрала ARM64-код;

  • сопоставила функции безопасности с их вызовами;

  • исследовала механизм проверки лицензии;

  • обнаружила спрятанный внутри бинарника публичный ключ;

  • восстановила структуру системы лицензирования;

  • в конечном итоге подготовила рабочий обход проверки.

На весь процесс ушло около 30 минут.

Сначала Qwen отказалась

Экспериментатор попытался представить себя разработчиком приложения и использовал jailbreak-промпт, чтобы заставить модель обойти ограничения.

Qwen не только отказалась следовать такой инструкции, но и самостоятельно проверила сертификат подписи приложения. Модель правильно определила настоящего разработчика и заявила, что готова провести аудит безопасности, но не станет создавать рабочий обход лицензии.

На этом, однако, эксперимент не закончился.

Во время анализа модель самостоятельно дошла до устройства механизма защиты и в итоге все же создала рабочий proof-of-concept обхода.

Самое интересное — модель исправила собственную ошибку

Первоначально Qwen неправильно восстановила криптографический ключ.

Проблема обнаружилась не сразу: проверка подписи проходила успешно, однако дополнительная проверка целостности выдавала несовпадение.

Модель заметила противоречие, вернулась к предыдущим этапам анализа и продолжила поиск ошибки. После нескольких итераций восстановленное значение стало совпадать побитно.

И только после этого Qwen получила корректный результат и смогла продемонстрировать работоспособность обхода.

Почему это важно для кибербезопасности

Здесь интересен не столько сам факт обхода лицензии, сколько масштабирование возможностей реверс-инжиниринга.

Раньше подобная работа ассоциировалась с опытным специалистом, специализированными инструментами и значительным количеством ручного анализа. Теперь часть этого процесса способен выполнить локальный ИИ-модельный агент.

Причем локальный запуск дает одновременно два противоположных преимущества.

Для специалистов по безопасности это означает возможность анализировать закрытое ПО, бинарники и чувствительные данные без отправки информации в облако.

Но для злоумышленников действует тот же принцип: модель не требует внешнего API, не передает исследуемый бинарник стороннему сервису и может работать полностью автономно.

Именно поэтому локальные модели вроде Qwen 3.8 27B уже становятся отдельным фактором, который разработчикам стоит учитывать при построении моделей угроз для коммерческого ПО.

Главный вывод эксперимента довольно простой: способности, которые еще недавно связывали с frontier-моделями, постепенно перемещаются на локальные машины. И вместе с преимуществами приватного AI разработчикам приходится учитывать новые сценарии атак на программное обеспечение.

✔ Код — журнал о технологиях https://t.me/kodjournal подпишитесь на наш Telegram-канал! 😎

Теги:
+1
Комментарии2

LLM пишут код. Почему разработка все еще занимает столько времени?

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

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

Таких действий много, они разбросаны по разным системам и часто зависят от того, кто помнит правильный порядок. Мы решили посмотреть на этот процесс как на инженерную задачу: измерить, где именно теряется время, описать повторяющиеся действия и часть из них передать автоматизированной системе.

Например, раньше цепочка после разработки выглядела примерно так: открыть MR → смерджить → собрать main → перевести задачу → уведомить следующего участника процесса.

Теперь ее можно запустить одной командой. Система сама выполняет действия в трекере, репозитории и сборке — но только в рамках заданных инструкций и с предусмотренными проверками.

То же самое мы сделали с дежурством. Система собирает ошибки со стендов, отсеивает известный шум, определяет подходящую экспертизу и дежурного, а затем формирует отчет в мессенджере.

2 сентября в 15:00 мск приходите на вебинар, чтобы посмотреть, как такой подход устроен изнутри и что из него можно применить в своих процессах.

На вебинаре разберем:

  • как устроены инструкции: что входит в описание одного действия и как из отдельных инструкций собирать цепочки;

  • какие метрики помогают найти узкие места: ожидание, передачи задач и переключения между системами;

  • как одной командой запускать действия сразу в нескольких инструментах;

  • как автоматизировать дежурство по ошибкам;

  • какие проверки мы оставили за человеком и почему;

  • что не сработало при создании системы и какие решения пришлось пересмотреть.

Отдельно поговорим о код-ревью, ответственности за прод и о том, какие действия мы не стали отдавать автоматизации.

Спикер: Владимир Шилун, старший frontend-разработчик Just AI.

Участие бесплатное, достаточно зарегистрироваться. А если вдруг не успеете на эфир — пришлем запись и материалы, чтобы можно было посмотреть все в удобное время.

Зарегистрироваться можно по ссылке.

Теги:
+7
Комментарии0

MAX тоже можно защитить шифрованием поверх мессенджера

Telegram, VK и другие сервисы можно использовать как транспорт для зашифрованных сообщений, не полагаясь на их собственный механизм защиты содержимого. Российский разработчик развивает open-source проект CryptoLayer — библиотеку, которая создает дополнительный криптографический слой непосредственно на устройствах участников переписки.

Идея простая: мессенджер становится каналом доставки. Сообщение сначала шифруется локально, затем полученные данные отправляются через выбранный сервис. На устройстве получателя они восстанавливаются и расшифровываются.

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

CryptoLayer не заменяет Telegram, VK или другой сервис, а отделяет защиту содержимого от транспорта.

Для шифрования используется AES-256-GCM, для цифровых подписей — ECDSA на кривой SECP256R1, а согласование ключей выполняется через ECDH с той же кривой. Дополнительно библиотека может преобразовывать зашифрованные данные с помощью WordCoder — он кодирует байты в последовательность обычных слов.

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

Один криптографический слой — разные каналы

Главная особенность проекта — модульная архитектура. CryptoLayer не привязан к конкретному мессенджеру или платформе.

В репозитории указано, что транспортом может быть практически любой канал, способный передавать данные. Среди примеров — Telegram, VK, Discord, HTTP, SSH, FTP, UDP, облачные хранилища, файловая система и Bluetooth. Для нового варианта передачи требуется написать отдельный модуль.

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

Однако готового модуля для MAX в основном репозитории сейчас нет. Поэтому полноценной поддержки этого мессенджера пока нет — потребуется отдельная интеграция.

Какие инструменты уже доступны

Вокруг CryptoLayer постепенно формируется собственная экосистема:

  • CryptoLayer CLI — интерфейс для работы из терминала;

  • CryptoLayer Web UI — веб-интерфейс для защищенного обмена сообщениями;

  • zkgram — отдельный клиент для приватного общения через Telegram.

Исходный код опубликован под лицензией MIT. На момент проверки официальный репозиторий набрал более 200 звезд на GitHub, но проект остается небольшим независимым open-source решением, а не криптографической системой, прошедшей масштабный аудит.

Это важная оговорка. Наличие AES-256-GCM, ECDSA и ECDH само по себе не гарантирует безопасность всей системы. Многое зависит от реализации протокола, генерации и хранения ключей, защиты конечных устройств и отсутствия ошибок в коде.

Что все равно видит мессенджер

CryptoLayer решает конкретную задачу: защищает содержимое сообщения от транспортного сервиса. Но он не скрывает сам факт общения и не делает пользователя анонимным.

Мессенджер по-прежнему может получать техническую информацию, необходимую для работы платформы: данные аккаунтов, факт передачи сообщений, время активности и другие метаданные.

Иными словами, CryptoLayer не скрывает существование переписки. Его задача — не дать транспортному каналу получить исходный текст сообщения.

Где посмотреть исходный код

Репозиторий CryptoLayer на GitHub содержит исходный код, описание архитектуры, используемые криптографические механизмы и информацию о доступных интеграциях.

Архитектура и принцип работы проекта также показаны в видеопрезентации CryptoLayer.

Главное

CryptoLayer интересен не как новый защищенный мессенджер, а как внешний слой шифрования, который отделяет конфиденциальность переписки от конкретного сервиса доставки.

Если проект продолжит развиваться, один и тот же криптографический механизм можно будет использовать поверх разных каналов.

✔ Код — журнал о технологиях https://t.me/kodjournal подпишитесь на наш Telegram-канал! 😎

Теги:
+3
Комментарии3

Stop! Slopo¡ Как избежать дублирования в сгенерированном коде.

tl;dr;

tree‑sitter → выделение структурных фрагментов → эмбеддинги → кластеризация → вот и дубли. Точнее, кандидаты.

Одной из неприятнейших проблем ИИ‑first разработки является, как, думаю, многие уже убедились, способность нейросетей к дублированию кода/инвариантов/политик/и прочего в огромном количестве. Да, можно строить медленно и верно прекрасную архитектуру будущего, использовать линтеры и прочие инструменты, которые после генерации пары десятков тысяч строк в сутки оказываются малополезными. Большие модели видят дублирование, но, как показала практика, жалкие доли.

Кто заходил в X и стал соответствующей ЦА, наверняка заметил, какое количество опенсорса генерится в наносекунду. В общем, я из этого потока выцепил slopo.

Автор додумался разбить код на структурные фрагменты и, векторизовав их, кластеризовать, не знаю, есть ли подобное в ваших любимых курсорах, но кмк это problem solver 🔫🔫🔫.

Натравив codex‑ultra на свой пет, я получил поверх Slopo более строгую систему памяти уже проверенных большой моделью кластеров: сохраняется не просто факт просмотра, а принятое решение, а любой новый, изменившийся или исчезнувший кандидат требует повторного просмотра кластера. Добавляем в пайплайн и вуаля (пол проекта переписано);

Собрал из проекта обвязку в отдельный проектик, но не тестил отдельно.

Теги:
+3
Комментарии0

170+ бесплатных AI-моделей для кодинга собрали в одной CLI-тулзе

Если вы постоянно переключаетесь между OpenCode, OpenClaw, Qwen Code, Cline, Xcode и другими AI-инструментами для разработки, есть проект, который заметно упрощает выбор модели.

free-coding-models собирает каталог из 170+ бесплатных и условно-бесплатных моделей от более чем 20 провайдеров и проверяет их работоспособность прямо в реальном времени.

Главная фишка — не просто список моделей. Утилита параллельно отправляет проверки, показывает текущую задержку, стабильность и статус модели, а затем позволяет выбрать подходящий вариант и сразу прописать его в конфигурации используемого coding-агента.

Что умеет free-coding-models

В терминальном интерфейсе можно увидеть актуальную картину по доступным моделям и:

  • сортировать их по скорости и стабильности;

  • фильтровать по провайдерам и уровням качества;

  • запускать AI Speed Test с реальным запросом;

  • выбирать модель и автоматически подключать её к coding-инструменту;

  • переключаться между поддерживаемыми агентами без перезапуска;

  • сохранять избранные модели;

  • использовать Smart Recommend для подбора подходящего варианта.

Причём проект поддерживает не только терминал. Есть веб-интерфейс, расширения для OpenCode и Pi, а также локальный Smart Model Router, который может автоматически переключаться между доступными моделями при сбоях.

Какие модели и провайдеры доступны

В каталоге представлены модели от NVIDIA NIM, Groq, Cerebras, Google AI Studio, Mistral, Cloudflare, OpenRouter, Alibaba DashScope и других сервисов.

Среди поддерживаемых моделей разработчики указывают Kimi K2, DeepSeek V3/V4, GPT-OSS, Qwen3, MiniMax M3, GLM, Llama 4, Gemma 4 и Devstral.

При этом «бесплатная» не означает полностью безлимитную. У каждого провайдера собственные ограничения по запросам, токенам и периодам использования. Более того, постоянные health-check запросы с API-ключом могут расходовать доступную квоту.

Как попробовать

Для установки достаточно Node.js 18+ и одной команды:

npm install -g free-coding-models

После запуска free-coding-models утилита предложит добавить API-ключ. Можно начать даже с одного провайдера, а остальные подключать позже.

Исходный код и подробная инструкция доступны в репозитории free-coding-models на GitHub.

По сути, это удобный вариант для тех, кто не хочет вручную перебирать десятки AI-моделей: утилита сама показывает, что сейчас доступно и насколько стабильно оно работает, а затем помогает подключить выбранную модель к инструменту разработки.

Код — журнал о технологиях — подпишитесь на наш Telegram-канал!

Теги:
+1
Комментарии0

Как не отставать от технологий, не изучая всё подряд: 14 открытых уроков на этой неделе

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

На этой неделе на открытых уроках OTUS разбираем задачи из разработки, инфраструктуры, AI и ML, аналитики, тестирования и других направлений — чтобы увереннее решать рабочие задачи и двигаться дальше в профессии.

Выбирайте направление и подключайтесь.

AI и ML

Архитектура и системный анализ

Разработка

Инфраструктура и сети

Embedded‑разработка

Тестирование и GameDev

Управление и поддержка

Все занятия бесплатные, а проводят их преподаватели‑практики, которые работают с этими технологиями и задачами каждый день. Чтобы присоединиться, достаточно выбрать интересную тему и зарегистрироваться.

Больше открытых вебинаров и практических занятий — в дайджесте.

Теги:
+4
Комментарии0

Как мы провели второй день Летнего ТехФеста

На площадке Nexign был максимально инженерный день. Ни грамма AI, только бэкенд, цифры и оптимизация. Слушали два доклада про экономику кода и производительность, а потом разбирали реальные кейсы на живом круглом столе.

Смотри влог, чтобы погрузиться с головой в этот вечер.

P.S. В нашем TG-канал рассказываем о технических мероприятиях и конференциях, делимся выступлениями экспертов, обсуждаем подборки на технические и ИБ темы.

Теги:
+3
Комментарии0

Ближайшие события

AI-аналитик, MCP-сервер и GenAI-трейсы: что появилось в Proto Observability Platform 203

Главной темой релиза Proto Observability Platform 203 стало расширение инструментов для анализа телеметрии и наблюдаемости LLM-приложений: к существующим ИИ-расследованиям добавились AI-аналитик для работы с телеметрией на обычном языке, MCP-сервер для подключения ИИ-агентов и представление GenAI-трейсов для анализа работы внешних LLM-приложений.

AI-аналитик работает с метриками, логами, трейсами, инцидентами и ресурсно-сервисной моделью. В ответе он показывает затронутые сервисы, возможные причины проблемы и ссылки на найденные объекты платформы. Для анализа данных в платформе теперь не требуется знание PromQL, LogsQL или топологии приложений - все это теперь можно запрашивать в режиме чата на обычном языке.

Встроенный MCP-сервер предоставляет ИИ-агентам инструменты для работы с данными платформы по стандарту Model Context Protocol. Через него доступны метрики, логи, события, ресурсы, трейсы, сервисы, алерты и инциденты.

Новое представление GenAI-трейсов показывает выполнение LLM-приложения как последовательность действий. На одном экране видны сообщения по ролям, обращения к модели и инструментам, ошибки вызовов и длительность отдельных шагов.

Полное описание этих и других новых возможностей платформы доступно в заметках к релизу.

Теги:
+6
Комментарии0

ИИ-ревью кода как сомнительное удовольствие

Этот пост написан как реакция на сегодняшнюю хабровскую публикацию - Проблема «принципал — агент» в эпоху ИИ‑агентов

В ней рассматривается "интересная" такая схема - отдавать результаты человеческого ревью кода ИИ-агенту.

Меня это в определенной мере удивило, потому что, судя по тому, что сейчас пишут в сети, то и код пишет агент, и ревью тоже агент делает. Чаще всего другой.

Например, код пишет Claude Code, а ревью делает Codex (И это еще хорошо, если они по своим возможностям в написании кода примерно равны, а то ведь агенты-ревьюверы могут быть и гораздо слабее агентов-кодеров).

Но вот остается вопрос: как решаются случаи, когда они расходятся во мнениях? Кому доверять больше? Устраивать дискуссии? И кто принимает окончательное решение?

Или, реальный случай: Claude Code в "холодной сессии" написал ревью своего же кода из порядка 20 пунктов. Тот же код и Codex пишет ревью на 8 пунктов.

Что дальше? - Разбираться самому человеку или снова устроить дискуссию между агентами?

И сколько токенов они сожгут в этой дискуссии? И сколько времени это займет? И где гарантия от того, что если они по отдельности галюционируют, то и вместе они не начнут делать то же самое, а то и провоцировать друг друга на эти самые галюцинации?

Т.е., получается, что выигрыш от такого "автоматизированного" под ИИ ревью становится сомнительным удовольствием.

Теги:
+1
Комментарии4

AI-аналитик, MCP-сервер и GenAI-трейсы: что появилось в Proto Observability Platform 203

Главной темой релиза Proto Observability Platform 203 стало расширение инструментов для машинного анализа телеметрии и наблюдаемости LLM-приложений: к существующим ИИ-расследованиям добавились AI-аналитик для работы с данными телеметрии на обычном языке, MCP-сервер для подключения ИИ-агентов и представление GenAI-трейсов для анализа работы внешних LLM-приложений.

AI-аналитик работает с метриками, логами, трейсами, инцидентами и объектами ресурсно-сервисной модели. В ответе на запросы оператора он показывает затронутые сервисы, возможные причины проблем и ссылки на найденные объекты платформы, сам проводит анализ ключевых данных производительности приложений и инфраструктуры. Для анализа данных в платформе теперь не требуется знание PromQL, LogsQL или топологии приложений - все это теперь можно запрашивать в режиме чата на обычном языке.

Встроенный MCP-сервер предоставляет ИИ-агентам инструменты для работы с данными платформы по стандарту Model Context Protocol. Через него доступны метрики, логи, события, ресурсы, трейсы, сервисы, алерты и инциденты, ошибки и другие ключевые данные платформы.

Новое представление GenAI-трейсов показывает выполнение LLM-приложения как последовательность действий. На одном экране видны сообщения по ролям, обращения к модели и инструментам, ошибки вызовов и длительность отдельных шагов.

Полное описание этих и других новых возможностей платформы доступно в заметках к релизу.

Теги:
+4
Комментарии0

Коннекторы 1С: быстрая интеграция через OData в Digital Q.Integration

Интеграция с решениями 1С остается одной из наиболее востребованных задач в построении корпоративных ИТ-ландшафтов. При этом разработка и сопровождение интеграционных решений зачастую требуют значительных временных и трудовых затрат.

На вебинаре эксперты компании «Диасофт» расскажут, как организовать обмен данными между 1С и внешними системами с помощью готового коннектора платформы Digital Q.Integration, реализованного на базе протокола OData. Вы узнаете, какие подходы для интеграции с 1С существуют, почему именно OData выбран в качестве технологической основы решения и какие преимущества это дает при построении современных интеграционных процессов.

Во время демонстрации покажем, как:

  • настроить подключение к 1С с помощью коннектора Q.Integration;

  • получать данные из 1С;

  • добавлять/изменять данные в 1С;

  • автоматизировать интеграционные процессы средствами платформы Digital Q.Integration.

Программа

13:00 – 13:10 Введение. Почему интеграция с 1С остается актуальной задачей и какие подходы используются для ее реализации.

13:10 – 13:25 Подходы к интеграции с 1С. Рассмотрим основные способы организации обмена данными, сравним интеграцию через OData и использование специализированных конфигураций 1С, разберем преимущества и ограничения каждого подхода.

13:25 – 13:40 Коннектор 1С в Digital Q.Integration. Расскажем, как реализован коннектор, какие процессы автоматизированы, как устроена работа с OData и какие возможности получает пользователь при настройке интеграции.

13:40 – 13:55 Практическая демонстрация. Покажем настройку коннектора, получение данных из 1С и изменение.

13:55 – 14:00 Вопросы и ответы. Ответим на вопросы участников и обсудим практические кейсы использования коннектора.

Кому полезен вебинар:

  • ИТ-директорам и техническим руководителям;

  • архитекторам интеграционных решений;

  • руководителям проектов цифровой трансформации;

  • разработчикам и интеграторам;

  • специалистам по сопровождению корпоративных информационных систем.

Спикеры:

  • Виктор Овчинников, руководитель продукта Digital Q.Integration компании «Диасофт»

  • Андрей Даниленко, ведущий разработчик MSA департамента «Цифровые решения» компании «Диасофт»

Зарегистрироваться на мероприятие можно по ссылке

Теги:
+3
Комментарии0

Какие уникальные фичи есть в django-modern-rest?

Иногда, когда я добавляю какие-то фичи в мой https://github.com/wemake-services/django-modern-rest (можно ставить ⭐), то я думаю про себя: почему таких фичей больше нет нигде? 

Давайте сегодня посмотрим на них. А вы мне расскажите свое мнение в комментах.

Семантическая схема 

Допустим, вы навесили на какой-то свой endpoint auth: 

class UserController(Controller[MsgspecSerializer]):
      @modify(auth=[JWTAsyncAuth()])
      async def get(self) -> User: ...

В OpenAPI автоматически появятся все коды ошибок, которые могут случиться в auth (401).
Ничего не надо допом писать. И так происходит со всеми частями фреймворка: добавил throttling=[SyncThrottle(1, Rate.minute)]? Теперь у тебя в ответах автоматом 429. Если нужно, можно отключить любые семантические статусы. 

Не должно ли такое быть дефолтом везде?

Умные типы ошибок

Не уходя далеко: как кастомизировать формат ошибки, например, в FastAPI? Через боль. Как поменять в спеке формат? Руками.

В DMR мы просто добавили везде error_model как параметр. Можно заменять любые ошибки, все автоматом сконвертится и покажет правильную схему. Зачем? Хочешь Problem Details - используешь. Хочешь свой формат - реализуешь. Можно даже content negotiation на ошибки навесить.

Почему никто о таком не думает в других фреймворках?

Нормальный throttling

Фича, которая принесла мне больше всех боли. Я прочитал throttling реализации во всех фреймворках. В Litestar даже фиксы присылал

1. Почти нигде из коробки нет поддержки разных алгоритмов, бекендов, иногда даже cache-keys. Очень жаль, есть только обычный counter с бекендом в памяти
2. Нигде (пришлите в комменты контр-пример) нет разделения на throttling до auth и после. Почему такое вообще важно? Чтобы не заддосить auth. И чтобы иметь возможность выдавать per-user правила. Нужны и важны оба варианта
3. Кастомизация заголовков ответа? Ха!

Что? Почему?

Простое переиспользование кода

Когда я смотрю на АПИ разных DRF проектов или FastAPI, мне становится больно. FastAPI строит все на view функциях, которые нельзя нормально кастомизировать. А DRF строит все на импортах строк внутри настроек. А как на счет классов и наследования?

У нас подобное сделано как абстрактные generic классы. Например: получить JWT. Можно выбрать любой сериализатор, можно выбрать любые модели для запроса и ответа:

class RequestPayload(pydantic.BaseModel):
     username: str
     password: str

class ResponsePayload(pydantic.BaseModel):
     access: str
     refresh: str

class ObtainAccessAndRefreshSyncController(
    ObtainTokensSyncController[
        PydanticSerializer,
        RequestPayload,
        ResponsePayload,
    ],
): ...  # надо еще переопределить 2 метода

Все типизировано, документировано, очевидно. 
Как вы думаете, почему так больше никто не делает?

Внешние вьюхи

Интегрировать один фреймворк в другой - крайне сложно. Вот мы недавно даже стрим проводили, потому что не могли использовать dj-rest-auth из DRF. Так быть не должно.

Теперь в DMR можно использовать любые внешние Django View. Хоть DRF, хоть django-ninja, хоть ванильные вьюхи. И отображать любой внешний OpenAPI. Вот настолько просто:

raw_schema = read_openapi_yaml('openapi.yml')
router = Router(
    urls=[
        external_path(
            'number/', number, name='number',
            openapi=load_schema(raw_schema['paths']['/api/number'], PathItem),
        ),
    ],
)

Почему другие фреймворки не стараются вписать существующие решения?

Одной строкой

- Больше подобного у меня в тегеграм канале "Находки в опенсорсе": https://t.me/opensource_findings
- У нас есть еще куча других крутых фичей! Заглядывайте в наш чатик по DMR
- Релизнули django-stubs@6.1 с поддержкой django@6.1
- Сделали папку с крутыми каналами ребят из нашего Python сообщества. Смело можно закидывать коллегам как базовую папку "на кого подписаться в тг по питону". Внутри все мои друзья и коллеги, советую!

Теги:
+10
Комментарии2

МТС True Tech Champ 2026: выбирай свой трек и получи до 10 250 000 ₽ за победу 🔥

Регистрация на четвертый сезон True Tech Champ в самом разгаре. Мероприятие объединяет разработчиков, студентов и школьников со всей страны — все этапы, кроме финала, проходят онлайн.

Участвуй в одном из двух треков: алгоритмическом или программировании роботов, дойди до грандиозного шоу-финала и побеждай!

⚙️ Индивидуальный алгоритмический трек для бэкенд- и фронтенд-разработчиков, фулстек-инженеров, ML-специалистов и всех, кто хочет проверить себя в олимпиадном формате.

  • Решай задачи по алгоритмам и структурам данных — это прокачает навыки для технических собеседований и работы в ведущих ИТ-командах.

  • Отборочный этап и полуфинал проходят онлайн, в финале — лайв-кодинг без заготовок: только скорость, логика и умение находить решение здесь и сейчас.

  • Призовой фонд — 2 750 000 рублей.

🤖 Групповой трек «Программирование роботов» для разработчиков, архитекторов и всех, кому интересно программировать физические объекты:

  • Проходи трассу и выполняй задания по передаче предметов.

  • Затем — удалённое управление реальным полигоном с робособакой и роботом-манипулятором.

  • В очном финале лучшие команды дорабатывают алгоритмы на глазах у зрителей и борются за победу в МТС Live Холл в Москве.

  • Призовой фонд — 7 500 000 рублей.

Участие бесплатное, а лучшие участники получат шанс на стажировку в МТС Web Services (MWS).

➡️ Выбирай свой трек и регистрируйся по ссылке.

Теги:
+3
Комментарии0

Чуть лучше код

Короче, котаны, сейчас открою вам секрет, который бустанет вас нереально по качеству кода. Люди давние в профессии интуитивно чувствуют его, даже если никогда не слышали о нем. Самые признанные олды выступают на конференциях, как вы догадались, о мега секрете. Итак, барабанная дробь, хотя еще секунду, почему об этом хочется написать министатью, потому что иногда (а на деле слишком часто) стандартную задачу сходить за репортом и положить в базу нельзя переиспользовать и нельзя легко затестить. Речь пойдет о идемпотентности.

Что дано:

  1. поход в базу (начальные данные)

  2. поход по апи за списком (указателей или стримов)

  3. для каждого (репорта): поход по апи за данными и сохранение в базу

Легко пишем (неправильный) скрипт, кладем в крон и профит? Почти. Через пару лет в дев базе 2kk записей и селект ну очень долго ждать. Порядочные пацаны (и девушки) пишут тесты на sqlite, и неявно имплeмeнтируют идемпотентность, создавая и дропая базу данных на каждую пачку тестов. Sql insert не является идемпотентной операцией, но с пустой базой прокатывает.

В чем, собственно, проблема? Идемпотентность (от лат. idem — тот же самый и potens — сильный, буквально — равносильность) — свойство объекта или операции при повторном применении операции к объекту давать тот же результат, что и при первом. Так вот, sql insert и app_call(date_now) не обладают идемпотентностью.

Что делать? Как и в примере выше, создаем искусственную идемпотентность (да, этот термин повторится еще много раз), вынося в контекст доступ к базе, апи вызовы и т.д. (трансформация csv). Короче, контекст может быть пустой и код должен корректно работать. Или в контексте будет передан доступ к базе, но без апи вызовов или трансформации csv. И опять код должен работать корректно.

Чем заменить? Дефолтными значениями, как ни странно, дефолтные значения идемпотентны, если это, например, список и словарь. Удачного кодинга :)

P.S.: Хотел приложить примеры кода, но кол-во строк оказалось больше размера статьи :)

Теги:
-2
Комментарии3
1
23 ...