Технический обзор проекта Codestral ROS2 Generator

Вернулся к тематике использования ROS, но, с несколько необычной стороны - оказалось, что сетевая архитектура, которую предлагает ROS, хорошо подходит для независимой разработки / генерации узлов. Это свойство (в числе прочих) оказалось очень полезным в рамках разработки AI-агента, способного создавать и поддерживать программный код по запросу пользователя. Этой теме посвящен мой тг-канал - AI code developer.

Проект Codestral ROS2 Generator представляет собой решение, использующее специализированную модель для разработки кода - Codestral для автоматизации создания различных элементов ROS2 - узлов (nodes), сервисов (services), действий (actions) и других компонентов.

Структура проекта

Проект организован в модульную структуру с разделением ответственности между основными классами.

1. BaseGenerator (base_generator.py)

Абстрактный базовый класс, реализующий шаблонный метод (Template Method) для генерации кода. 

Ключевые характеристики:

  • Три основные фазы: инициализация, генерация, отчёт.
  • Позволяет настраивать зависимости (generation_attempt_class, metrics_handler_class, model_client_class).
  • Управляет конфигурацией, загружаемой из YAML-файла.
  • Применяет валидацию конфигурации перед использованием.
  • Обрабатывает исключения и логирует события.

2. GenerationAttempt (generation_attempt.py)

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

  • INITIALIZE - подготовка к генерации.
  • GENERATE - отправка запроса к модели AI.
  • PARSE - извлечение и форматирование кода.
  • SAVE - сохранение кода в файл.
  • TEST - запуск и проверка тестов.
  • SUCCESS - успешное завершение.
  • FAILURE - обработка ошибок.

В процессе генерации собираются метрики, для хранения которых используется датакласс AttemptMetrics:

  • attempt_time - время выполнения попытки,
  • success - статус успешности,
  • tests_passed/failed/skipped - статистика тестов,
  • prompt_tokens/completion_tokens/total_tokens - использование токенов,
  • error - описание ошибки (если есть).

3. MistralClient (mistral_client.py)

Класс для взаимодействия с API Mistral AI с помощью библиотеки mistralai для Python. Его задачи:

  • Поддержка различных моделей Mistral (codestral, mistral-large).
  • Настройка параметров запроса (температура, максимальное количество токенов и прочие). 
  • Отслеживание использования токенов через класс ModelUsage.
  • Обработка ошибок API и тайм-аутов.

4. ROS2CodeParser (code_parser.py)

Класс для анализа и форматирования сгенерированного кода. Возможности:

  • Извлечение блоков кода из markdown-разметки.
  • Форматирование кода согласно стандартам ROS2.
  • Поддержка специфичных конвенций именования ROS2.
  • Проверка наличия необходимых импортов и классов.

5. ROS2Runner (ros2_runner.py)

Класс для выполнения команд ROS2 и запуска тестов. Функциональность:

  • Запуск тестов с использованием pytest.
  • Анализ результатов тестирования.
  • Выполнение команд ROS2 в отдельных процессах.
  • Настройка переменных окружения для корректной работы ROS2.
6. MetricsHandler (metrics_handler.py)

Класс для сбора и анализа метрик процесса генерации. Ключевые метрики:

  • Процент успешных генераций.
  • Среднее количество попыток до успеха.
  • Среднее время генерации.
  • Статистика прохождения тестов.
  • Использование токенов (промпт/завершение/всего).

Процесс генерации в деталях

Фаза инициализации

  1. Загрузка конфигурации из YAML.
  2. Валидация параметров конфигурации.
  3. Инициализация клиента Mistral AI.
  4. Создание обработчика метрик.
  5. Подготовка промпта на основе файлов интерфейса и тестов.

Фаза генерации

  1. Инициализация таймера и счётчика попыток.
  2. Запуск попытки генерации:
    • Отправка промпта к модели Mistral AI.
    • Извлечение и форматирование Python-кода.
    • Сохранение в целевой файл.
    • Запуск тестов и анализ результатов.
  3. Если тесты не проходят, повторение с шага 2 (до max_attempts).
  4. Сохранение результатов итерации.
  5. Повторение шагов 1-4 для каждой итерации (до evaluation_iterations).

Фаза отчётности

  1. Обработка собранных метрик.
  2. Генерация табличного отчёта.
  3. Логирование результатов.
  4. Формирование финального статуса генерации.

Схема работы генератора


Полная документация по коду доступна на GitHub Pages, а исходный код - на GitHub. Также всех приглашаю в мой канал  AI code developer.

Let's go design!

Комментарии