The post has been translated automatically. Original language: Russian
On September 3, 2026, version 1.17.0 of the Microsoft Agent Framework Python packages was released, a set of libraries for building LLM agents and workflows around them. There are few new features, but there is a change marked as incompatible, and a long list of fixes — almost entirely about problems that come up not on demo, but in operation: lost errors, disrupted session recoveries, incorrect metrics.
The agent's middleware is back to serial inputs
The main change in the release notes is marked as breaking: middleware agent inputs that accept only a sequence have been restored, and an experimental additional set of dependencies named agent-hooks has been removed from the core. Everything that has managed to rely on this extra and the event model of hooks will stop working after the update.
For projects that explicitly specify additional sets of dependencies, this is the most noticeable consequence of the release: installing with a non-existent extra will either not install anything quietly, or it will crash — it depends on the package manager.
SDK providers: OpenAI 3.x and the official Mistral client
Support for the 3.x SDK OpenAI branch has been added, and the notes emphasize that the existing lower compatibility limits have been preserved — the upper limit of the fork versions has been expanded, and the entire fork has not been shifted. This is important for monorepositories, where one client pulls multiple services with different update rates.
Mistral chat and embedding clients have been transferred to the official SDK of this provider. The processing of the Gemini response format via Pydantic and the compatibility of the types of the history provider on Redis have been corrected.
Conversation history and replay
There is a clear choice of the owner of the model's history: either the agent's server manages it, or the agent himself. At the same time, protection has been added against duplicate conversation playback — when the same messages are played twice and the model gets an inflated context. The competition contract is documented separately: common chat clients used by several packages at once are designed to work within a single event cycle. Previously, this was an unspoken assumption, now it is written down explicitly.
Fixes noticeable in operation
- Provider failures are saved in the history, during playback, in hosting, and during conversion for the interface — they are no longer eaten up on the way.
- Approvals are linked to stable occurrences of the function call, the old behavior is preserved.
- The response to the OAuth consent is saved, and the status is restored when the session is restored.
- The MCP initialization error is no longer lost when it is masked by the cancellation of the operation.
- DevUI puts message boundaries, multimodal content, and consumption metrics in order.
- Fixed JSON-safe arguments, handling of false result values, and mutations during history compaction.
What does this mean in practice?
The update should start not with the package version, but with a search for the agent-hooks string in the project file, in the lock file, in the imports. If there is one, edits will be needed before, not after, the update. The second place is its own middleware layer: if the signatures accept anything other than a sequence, they will have to be rewritten. There will be no quiet degradation, but the error will appear at the start of the process, not at the installation stage.
Correcting with false result values is a classic Python rake: the tool returned an empty string, zero, or False, and a check of the "if result" type considered this to be a lack of response. If you insured against the defect with crutches, they should now be removed: otherwise they will begin to distort the already correct behavior.
Changes in consumption accounting in DevUI mean that the consumption schedules of tokens before and after the update cannot be directly compared: if the cost is calculated based on these figures, fix the transition point. And the general point is that experimental interfaces appear and disappear here between minor releases, so it's wise to pin the version in production precisely, rather than with a range.
The draft text was prepared with the participation of AI, the facts were checked against the original source — official release notes for python-1.17.0 of the Microsoft Agent Framework project on GitHub
Третьего сентября 2026 года вышла версия 1.17.0 Python-пакетов Microsoft Agent Framework — набора библиотек для сборки LLM-агентов и рабочих процессов вокруг них. Новых возможностей немного, зато есть изменение, помеченное как несовместимое, и длинный список исправлений — почти целиком про проблемы, которые вылезают не на демо, а в эксплуатации: потерянные ошибки, сорванные восстановления сессий, неверные метрики.
Middleware агента вернулся к последовательным входам
Главное изменение в заметках к выпуску отмечено как breaking: восстановлены входы middleware агента, принимающие только последовательность, а экспериментальный дополнительный набор зависимостей с именем agent-hooks из ядра удалён. Всё, что успело опереться на этот extra и на событийную модель хуков, после обновления работать перестанет.
Для проектов, которые указывают дополнительные наборы зависимостей явно, это самое заметное последствие релиза: установка с несуществующим extra либо тихо ничего не поставит, либо упадёт — зависит от менеджера пакетов.
SDK провайдеров: OpenAI 3.x и официальный клиент Mistral
Добавлена поддержка ветки 3.x SDK OpenAI, причём в заметках подчёркнуто: существующие нижние границы совместимости сохранены — расширена верхняя граница вилки версий, а не сдвинута вся вилка. Это важно для монорепозиториев, где один клиент тянут несколько сервисов с разными темпами обновления.
Клиенты чата и эмбеддингов Mistral переведены на официальный SDK этого провайдера. Поправлена обработка формата ответа Gemini через Pydantic и совместимость типов у провайдера истории на Redis.
История разговора и повторное воспроизведение
Появился явный выбор владельца истории модели: либо ею распоряжается сервер агента, либо сам агент. Вместе с этим добавлена защита от дублирующегося воспроизведения разговора — когда одни и те же сообщения проигрываются дважды и модель получает раздутый контекст. Отдельно задокументирован контракт конкурентности: общие клиенты чата, используемые сразу несколькими пакетами, рассчитаны на работу в пределах одного цикла событий. Раньше это было негласным допущением, теперь записано явно.
Исправления, заметные в эксплуатации
- Отказы провайдера сохраняются в истории, при воспроизведении, в хостинге и при конвертации для интерфейса — их больше не съедает по дороге.
- Одобрения привязываются к устойчивым вхождениям вызова функции, старое поведение сохранено.
- Ответ на OAuth-согласие сохраняется, состояние восстанавливается при восстановлении сессии.
- Ошибка инициализации MCP больше не теряется, когда её маскирует отмена операции.
- В DevUI приведены в порядок границы сообщений, мультимодальный контент и метрики потребления.
- Исправлены JSON-безопасные аргументы, обработка ложных значений результата и мутации при уплотнении истории.
Что это значит на практике
Обновление стоит начинать не с версии пакета, а с поиска по проекту строки agent-hooks: в файле проекта, в lock-файле, в импортах. Если она есть, правки понадобятся до, а не после обновления. Второе место — собственный слой middleware: если сигнатуры принимали что-то кроме последовательности, их придётся переписать. Тихой деградации тут не будет, но ошибка вылезет на старте процесса, а не на этапе установки.
Исправление с ложными значениями результата — классические грабли Python: инструмент вернул пустую строку, ноль или False, а проверка вида «если результат» посчитала это отсутствием ответа. Если вы страховались от дефекта костылями, их теперь стоит снять: иначе они начнут искажать уже корректное поведение.
Изменения в учёте потребления в DevUI означают, что графики расхода токенов до и после обновления сравнивать напрямую нельзя: если по этим цифрам считается стоимость, зафиксируйте точку перехода. И общий момент: экспериментальные интерфейсы здесь появляются и исчезают между минорными релизами, поэтому в продакшене версию разумно закреплять точно, а не диапазоном.
Черновик текста подготовлен с участием ИИ, факты сверены с первоисточником — официальные заметки к выпуску python-1.17.0 проекта Microsoft Agent Framework на GitHub