В итоге я написал своей инструмент для автодокументации.
Как это работает:
Код парсится в AST при помощи модуля
ast. Ходим по узлам я проверяем не является ли функцией, проверяя, нет ли существующей документации функции
ast.get_docstring(node)
.
Если отсутствует, то получаем тело функции
ast.unparse(node)
и отправляем запрос LLM с промптом (использовал Codestral), прося подготовить краткое описание назначения функции согласно
PEP 257. Полученный ответ вставляется обратно в тело функции в ее узле.
Из минусов следует отметить, что модуль "ast" отбрасывает комментарии в коде при его парсинге, что потенциально могло добавить некоторые нюансы при генерации docstring.
В итоге, модифицированное дерево AST дампится в новый файл.
Затем этот файл заменяет исходный файл в коде проекта и мне необходимо было сделать вручную откат на код с комментариями и тем места, где была разница с кавычками и форматированием (благо, их было немного).
В качестве оптимизации, чтобы сберечь запросы при дебагинге, воспользовался хранилищем K/V.