Перейти к содержимому

← Блог

Что вышло

Chimera Agent 0.67.4 исправляет работу Discord-ботов в упакованном десктопном приложении

Установленное десктопное приложение больше не падает с ошибкой отсутствующего модуля при запуске Discord-бота.

Наш собственный текст о нашем же выпуске. Читать описание выпуска на GitHub →

Упакованное десктопное приложение, представленное в предыдущем релизе, поставлялось с нарушенным контрактом. Если кто-то устанавливал приложение и настраивал его на Discord-бота, панель статуса не показывала работающего бота. Она показывала трассировку, заканчивающуюся ModuleNotFoundError: No module named 'discord'. Конфигурация агента была корректной. Токен был правильным. Сбой был в самой упаковке.

Что сломалось и почему это важно

Проблема возникла из-за сочетания двух решений, которые не конфликтовали до запуска релизной сборки. Во-первых, адаптеры обмена сообщениями, включая Discord, были спроектированы как ленивые импорты. Фреймворк не загружает все чат-поверхности при старте; он импортирует адаптер только тогда, когда конфигурация бота запрашивает его. Такая конструкция сохраняла быстрый холодный старт и низкое потребление памяти, и она работала в любом окружении, где присутствовали все опциональные зависимости.

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

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

Исправление и что оно означает для упаковки

Релиз 0.67.4 исправляет объявление зависимостей, так что расширение для обмена сообщениями включается в устанавливаемое приложение. Теперь PyInstaller видит адаптер Discord как достижимый код и включает необходимые модули. Никаких изменений конфигурации не требуется. Никаких обновлений определений агентов. Панель статуса бота отображает состояние выполнения вместо ошибки импорта.

За этим простым утверждением стоит более широкий урок, который мейнтейнеры немедленно учли. Ленивые импорты — это техника производительности, которую инструменты разработки должны уважать, но инструментам упаковки нужно явно о них сообщать. Скрытый импорт всегда был намеренной архитектурой. Упущение было пробелом в метаданных между манифестом пакета и процессом заморозки. Версия 0.67.4 закрывает этот пробел для адаптера Discord и устанавливает шаблон для каждой поверхности обмена сообщениями, следующей той же конструкции ленивой загрузки.

Что делать сейчас

Если вы используете установленное приложение версии 0.67.3, загрузите обновление 0.67.4 со страницы релизов. Упакованное приложение подписано тем же способом и устанавливается поверх существующей версии. После обновления перезапустите любую конфигурацию Discord-бота. Статус переходит в состояние выполнения без дополнительных шагов.

Если вы собираете агентов из исходников и никогда не трогали упакованное приложение, ничего не меняется. Пакет, установленный через pip, уже включал расширение для обмена сообщениями при установке со стандартным флагом [all]. Этот релиз влияет только на bundled десктопное приложение.

Полный список изменений в этом релизе см. в Chimera Agent v0.67.4.

https://chimeraagent.space