Skip to content

Bump version to 1.3.0 and added YandexGPT integration#9

Merged
proDreams merged 2 commits intomainfrom
dev
Oct 7, 2025
Merged

Bump version to 1.3.0 and added YandexGPT integration#9
proDreams merged 2 commits intomainfrom
dev

Conversation

@proDreams
Copy link
Owner

chore: added depends yandex-cloud-ml-sdk for YandexGPT
docs: updated README.md - added new configuration parameter instruction, filled YandexGPT as completed and expand current features
feat: YandexGPT integration

chore: added depends yandex-cloud-ml-sdk for YandexGPT
docs: updated README.md - added new configuration parameter instruction, filled YandexGPT as completed and expand current features
feat: YandexGPT integration
@revu-agent
Copy link
Collaborator

  1. В yandexgpt_adapter.py:

    • В методе get_chat_response используется синхронный вызов model.run(messages) внутри асинхронной функции. Это может блокировать event loop при реальном использовании. Стоит проверить, есть ли у библиотеки асинхронный метод или вынести вызов в поток/процесс.
    • Переменная response[0].text ожидает, что ответ будет списком с объектами, имеющими поле text. Нужно убедиться, что такая структура всегда будет корректной, иначе возникнет IndexError или AttributeError.
    • Отсутствует логирование ошибок или запросов, что затруднит отладку в продакшене.
  2. В yandexgpt_port.py:

    • В методе get_inline_response есть "temporary solution" для удаления Markdown-кода (тройные бэктики). Это выглядит как костыль. Стоит либо настроить промпт так, чтобы YandexGPT сразу возвращал чистый JSON, либо более аккуратно парсить вывод.
    • В случае ошибки при парсинге JSON бросается исключение InvalidAIOutput. Желательно добавить контекст (например, с частью ответа), чтобы проще было диагностировать проблему.
    • Метод _get_messages статический, но использует формат, завязанный на конкретную структуру сообщений YandexGPT. Возможно стоит сделать метод более универсальным или документировать структуру.
    • В целом, порт и адаптер отделены корректно, что хорошо для поддержки SOLID.
  3. В di.py:

    • Добавлена поддержка YandexGPT в функцию получения AI-порта с использованием конструкции match-case. Стиль соответствует текущему коду, ошибок нет.
  4. В default_prompts.py:

    • Добавлено уточнение по неиспользованию Markdown-разметки в системных промптах, что важно и правильно, чтобы избежать ошибочного форматирования.
  5. Общие замечания:

    • В pyproject.toml и uv.lock добавлена зависимость на yandex-cloud-ml-sdk. Это соответствует добавлению YandexGPT, нет конфликтов.
    • Документация (README.md) обновлена, инструкции ясны и включают необходимую информацию для настройки YandexGPT.
    • Отсутствуют тесты для нового адаптера и порта. Рекомендуется добавить юнит-тесты и интеграционные тесты с моками API YandexGPT.
    • В новых файлах хороший уровень типизации и структурирования кода.

✅ В целом, добавленная интеграция выполнена аккуратно и вписывается в архитектуру проекта. Рекомендую рассмотреть вопрос асинхронности вызова YCloudML, улучшить обработку вывода для надежного парсинга JSON, а также добавить тесты для новых классов.

chore: added depends yandex-cloud-ml-sdk for YandexGPT
docs: updated README.md - added new configuration parameter instruction, filled YandexGPT as completed and expand current features
feat: YandexGPT integration
@revu-agent
Copy link
Collaborator

  1. yandexgpt_adapter.py:

    • Общая структура хорошая, инкапсулирован вызов клиента Yandex GPT.
    • Рекомендация: добавить типизацию для messages в методе get_chat_response для повышения читаемости (сейчас list[dict[str, str]]) — можно уточнить, что именно ожидается в словарях.
    • Обработку ошибки NoAIResponse сделано корректно.
  2. yandexgpt_port.py:

    • Логика построения сообщений и обработки ответа адекватна.
    • В методе get_inline_response есть "temporary solution" по удалению Markdown кода ``` обертки — лучше добавить комментарий с пометкой TODO или подумать о более устойчивом решении.
    • Обработка исключений JSONDecodeError с выбросом специального InvalidAIOutput полезна.
    • В целом класс хорошо следует протоколу AIProviderProtocol.
    • Стоит добавить более подробные докстринги к методам, чтобы повысить поддержку.
    • Использование match хорошо подходит; в версии Python 3.10+ это нормально.
    • Параметры и конфиги берутся из настроек централизованно, что хорошо.
  3. DI-модуль (webhooks/di.py):

    • Включение YandexGPTPort корректно, все импортировано и добавлено.
    • Расширение возвращаемых типов у функции get_ai_provider_port корректно и полное.
  4. README и конфигурационные файлы:

    • Обновления README понятны и подробны.
    • В описание добавлены новые параметры, что улучшит адаптацию.
    • Пример использования YandexGPT появился, что хорошо.
  5. Общие замечания:

    • Установлена зависимость yandex-cloud-ml-sdk в pyproject.toml и зафиксированы зависимости в lock-файле — все соблюдено корректно.
    • В default_prompts.py добавлено указание не использовать Markdown, это соответствует коду.
    • Новые классы исключений добавлены грамотно.
  6. По безопасности:

    • Использование официального SDK Yandex не вызывает опасений.
    • Пароли и ключи берутся из конфигурации, что правильно.
    • Нет использования eval/exec или небезопасной работы с внешним вводом.
  7. Производительность и стилистика:

    • Нет очевидных тяжёлых операций.
    • Используются асинхронные методы, что хорошо для сетевых вызовов.
    • Код стильно и структурировано написан, названия информативны.
    • Отсутствуют дублирования.
  8. Рекомендации по улучшению:

    • Добавить тесты для новых адаптера и порта, если их нет.
    • В докстрингах и комментариях подробней описать поведение методов.
    • Рассмотреть обработку наличия Markdown-разметки в ответах более универсально.

✅ В целом, PR выполнен качественно, соблюдены стандарты, обновления документации и конфигов сделаны грамотно, интеграция YandexGPT выглядит корректной и безопасной.

@proDreams proDreams merged commit 585a9d0 into main Oct 7, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants