Catalog PyPI
PACKAGE EXPLORERView in registry

ai-docs-gen

PyPI

CLI-инструмент для генерации технической документации по коду и конфигурациям

Versions collected1
Direct dependencies10From release 0.1.11
Last observed21 Oct, 10:32 UTC

README

Version 0.1.11 documentation

ai_docs — генератор технической документации

English version | Русская версия

Обзор

ai_docs — CLI‑инструмент для генерации технической документации по коду и конфигурациям. Поддерживает локальные папки, локальные git‑проекты и удалённые git‑репозитории. Генерирует README.md и MkDocs‑сайт (с автоматической сборкой).

Ключевые возможности:

  • Автоопределение доменов инфраструктуры (Kubernetes, Helm, Terraform, Ansible, Docker, CI/CD, Observability, Service Mesh / Ingress, Data / Storage)
  • Инкрементальная генерация и кэширование
  • Учет .gitignore и фильтрация файлов
  • Параллельное сканирование и LLM‑суммаризация с глобальным лимитом одновременных запросов к LLM (--threads / AI_DOCS_THREADS)
  • Отчёт об изменениях в docs/changes.md

Быстрый старт

  1. Установка зависимостей:
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt

Альтернатива (установка как пакет):

python3 -m venv .venv
. .venv/bin/activate
pip install ai-docs-gen

Локальная установка в editable‑режиме:

python3 -m venv .venv
. .venv/bin/activate
pip install -e .
  1. Настройка переменных окружения (пример — .env.example):
OPENAI_API_KEY=your_api_key_here
OPENAI_BASE_URL=
OPENAI_MODEL=gpt-4o-mini
OPENAI_MAX_TOKENS=1200
OPENAI_CONTEXT_TOKENS=8192
OPENAI_TEMPERATURE=0.2
AI_DOCS_THREADS=5
AI_DOCS_LOCAL_SITE=false

Если инструмент установлен как пакет, можно задать переменные окружения так:

export OPENAI_API_KEY="your_api_key_here"
export OPENAI_BASE_URL=""
export OPENAI_MODEL="gpt-4o-mini"
export OPENAI_MAX_TOKENS="1200"
export OPENAI_CONTEXT_TOKENS="8192"
export OPENAI_TEMPERATURE="0.2"
export AI_DOCS_THREADS="5"
export AI_DOCS_LOCAL_SITE="false"
  1. Генерация README и MkDocs:
python -m ai_docs --source .

Альтернативно:

python ai_docs --source .

Если установлен как пакет:

ai-docs --source .

Примечание для Windows:

  • Пути обрабатываются корректно, но внутри всегда нормализуются в формат с /.
  • Если используете PowerShell, пример активации venv и переменных окружения:
python -m venv .venv
.\\.venv\\Scripts\\Activate.ps1
$env:OPENAI_API_KEY="your_api_key_here"
$env:OPENAI_BASE_URL=""
$env:OPENAI_MODEL="gpt-4o-mini"
$env:OPENAI_MAX_TOKENS="1200"
$env:OPENAI_CONTEXT_TOKENS="8192"
$env:OPENAI_TEMPERATURE="0.2"
$env:AI_DOCS_THREADS="5"
$env:AI_DOCS_LOCAL_SITE="false"

Подкоманды CLI

ai-docs предоставляет несколько подкоманд:

КомандаНазначение
genСгенерировать/обновить документацию (поведение по умолчанию)
lintПроверить, есть ли файлы с изменениями без обновления документации. Завершается с ненулевым кодом, если есть stale‑файлы
watchСледить за изменениями в исходниках и автоматически регенерировать документацию (требует пакет watchdog)
pr-diffРегенерировать документацию только для файлов, изменённых относительно базовой ветки (--base)

Примеры:

ai-docs gen --source . --mkdocs
ai-docs lint --source .
ai-docs watch --source . --mkdocs --debounce 3.0
ai-docs pr-diff --source . --base main

Вызов ai-docs --source . (без явной подкоманды) сохраняет обратную совместимость и эквивалентен ai-docs gen --source ..

Примеры использования

Локальная папка:

python -m ai_docs /path/to/project

или явно:

python -m ai_docs --source /path/to/project

Локальный git‑проект:

python -m ai_docs --source ~/projects/my-repo

Удалённый репозиторий:

python -m ai_docs --source https://github.com/org/repo.git

Только README:

python -m ai_docs --source . --readme

Только MkDocs:

python -m ai_docs --source . --mkdocs

Локальный режим для MkDocs:

python -m ai_docs --source . --mkdocs --local-site

Интеграция в CI/CD

Готовые шаблоны пайплайнов лежат в examples/ci/:

  • examples/ci/github-actions.yml — GitHub Actions: lint на PR, gen на push в main, автокоммит обновлённой документации.
  • examples/ci/gitlab-ci.yml — GitLab CI: отдельные stages lint и docs.

Минимальный пример для GitHub Actions:

- name: Generate Docs
  run: |
    pip install ai-docs-gen
    ai-docs gen --source . --mkdocs --readme --language en --force
  env:
    OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}

Pre-commit hook

В репозитории есть .pre-commit-hooks.yaml с двумя хуками:

  • ai-docs-lint — запускается на pre-commit и падает, если документация устарела.
  • ai-docs-regen — запускается на pre-push и перегенерирует документацию.

Подключение в чужом проекте:

repos:
  - repo: https://github.com/<your>/ai-docs
    rev: main
    hooks:
      - id: ai-docs-lint
      - id: ai-docs-regen

Что генерируется

  • README.md — краткое описание проекта
  • .ai-docs/ — страницы документации
  • .ai-docs/overview.md — сохранённый обзор проекта (используется для README и MkDocs)
  • .ai-docs/changes.md — изменения с последней генерации
  • .ai-docs/modules/ — детальная документация модулей (страница на модуль, Doxygen‑подобное описание функций/классов/параметров)
  • .ai-docs/configs/ — документация конфигов проекта (обзор + страницы конфигов в универсальном стиле)
  • .ai-docs/_index.json — навигационный индекс документации (правила маршрутизации, список секций и модулей)
  • mkdocs.yml — конфиг MkDocs
  • ai_docs_site/ — собранный сайт MkDocs
  • .ai_docs_cache/ — кэш и промежуточные summary‑файлы

Поддерживаемые языки и расширения

Поддержка основана на расширениях кода в ai_docs/domain.py: .py, .pyi, .pyx, .js, .jsx, .ts, .tsx, .go, .java, .c, .cc, .cpp, .h, .hpp, .rs, .rb, .php, .cs, .kt, .kts, .swift, .m, .mm, .vb, .bas, .sql, .pas, .dpr, .pp, .r, .pl, .pm, .f, .for, .f90, .f95, .f03, .f08, .sb3, .adb, .ads, .asm, .s, .ino, .htm, .html, .css.

Индекс документации

Файл .ai-docs/_index.json строится автоматически при генерации и содержит:

  • список секций и модулей (пути и краткие описания);
  • правила маршрутизации: приоритет modules/index.md → modules/* → index.md/architecture.md/conventions.md;
  • принцип ранжирования: частота ключевых совпадений + приоритет файла.

.ai-docs.yaml (расширения)

Если в проекте есть файл .ai-docs.yaml, он задаёт приоритетный список расширений для сканирования. Если файла нет, он создаётся автоматически на основе текущих *_EXTENSIONS.

Формат (поддерживаются map и list для расширений):

code_extensions:
  .py: Python
  .ts: TypeScript
doc_extensions:
  .md: Markdown
  .rst: reStructuredText
config_extensions:
  .yml: YAML
  .json: JSON
exclude:
  - "temp/*"
  - "*.log"

# Базовый URL для ссылок на исходники в сгенерированных страницах модулей/конфигов.
# Если задан, в начале каждой страницы модуля появится строка вида
# *Источник:* [`path/to/file.py`](<source_url>/path/to/file.py)
source_url: https://github.com/your-org/your-repo/blob/main

# Пользовательские промпты. Переопределяют встроенные шаблоны; неуказанные
# ключи берутся из значений по умолчанию. Доступные ключи:
#   summary, summary_combine,
#   module_summary, module_summary_reformat,
#   config_summary, config_summary_reformat
prompts:
  summary: |
    Ты эксперт по технической документации. Сформируй краткое описание файла
    в нашем корпоративном стиле. Одно‑два предложения, без заголовков и списков.

CLI‑параметры

  • --source <path|url> — источник
  • --output <path> — выходная директория (по умолчанию: source для локальных путей, ./output/<repo> для URL)

Тестирование

Тесты находятся в каталоге tests/:

  • test_cache.py
  • test_changes.py
  • test_cli.py
  • test_performance.py
  • test_prompts.py
  • test_scanner.py
  • test_site_config.py
  • test_summary.py

Запуск (из корня проекта):

python -m pytest
  • --readme — генерировать только README
  • --mkdocs — генерировать только MkDocs
  • --language ru|en — язык документации
  • --include/--exclude — фильтры
  • --max-size — максимальный размер файла
  • --threads — число параллельных воркеров для сканирования и глобальный лимит одновременных запросов к LLM (см. раздел «Параллельность»)
  • --cache-dir — директория кэша (по умолчанию .ai_docs_cache)
  • --no-cache — отключить LLM‑кэш
  • --local-site — добавить site_url и use_directory_urls в mkdocs.yml
  • --force — перезаписать README.md, если он уже существует
  • --regen — перечень разделов для принудительной перегенерации (через запятую, например architecture,configs,changes, либо all)

Поведение по умолчанию: если не указаны --readme и --mkdocs, генерируются оба артефакта. Разделы в .ai-docs/*.md (включая overview.md) не перегенерируются, если файл уже существует, кроме указанных в --regen. Если количество модулей меньше порога AI_DOCS_REGEN_ALL_THRESHOLD (по умолчанию 50), все разделы перегенерируются автоматически (в том числе overview.md). При запуске без параметров для разделов выводится подсказка с примером --regen. Если модулей больше 100, modules/index.md автоматически разбивается на страницы по 100 элементов с навигацией «←/→». Если конфигов больше 100, configs/index.md также разбивается на страницы по 100 элементов с навигацией «←/→».

Параллельность и лимит LLM‑запросов

Параметр --threads N (или переменная окружения AI_DOCS_THREADS=N, по умолчанию 5) задаёт глобальный верхний предел числа одновременных запросов к LLM по всему пайплайну. Лимит реализован как общий asyncio.Semaphore в LLMClient и гарантированно действует на:

  • чанки одного файла при суммаризации (_summarize_chunks);
  • одновременные суммаризации разных файлов;
  • параллельную подготовку контекстов (overview, architecture, runtime, conventions, доменные контексты Kubernetes/Helm/…, index, modules, changes);
  • параллельную генерацию финальных разделов и README.

Cache‑hit'ы слоты семафора не занимают — параллельные повторные запросы с тем же payload отдаются из кэша, не дожидаясь свободного слота.

Тот же --threads используется и для пула потоков при сканировании файлов.

Рекомендации по подбору значения:

  • При ошибках 429 Too Many Requests от провайдера понизьте до 2–3.
  • На мощном платном endpoint без жёсткого rate‑limit имеет смысл поднять до 10–20.
  • --threads 1 сериализует все LLM‑вызовы (удобно для отладки и детерминированных прогонов).

При запуске в логе выводится строка вида:

[ai-docs] llm: model=gpt-4o-mini context=8192 max_tokens=1200 concurrency=5

где concurrency — фактически применяемый глобальный лимит.

MkDocs

Сборка выполняется автоматически в конце генерации:

mkdocs build -f mkdocs.yml

Исключения

Сканер учитывает .gitignore, .build_ignore и дефолтные исключения: .venv, node_modules, ai_docs_site, .ai-docs, .ai_docs_cache, dist, build, т.д.

Разработка и вклад

  • Установите зависимости (см. «Быстрый старт»)
  • Запускайте через python -m ai_docs ... для отладки
  • PR и предложения приветствуются

Лицензия

MIT

Downloads & popularity

1downloads
1-day window · source-reported counts20 Oct 2026
3517.50
2026-07-23: 4 · observed 2026-10-21T15:10:54.4870200Z · period 2026-07-23–2026-07-232026-07-25: 23 · observed 2026-10-21T15:10:54.4870200Z · period 2026-07-25–2026-07-252026-07-26: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-07-26–2026-07-262026-07-27: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-07-27–2026-07-272026-07-28: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-07-28–2026-07-282026-08-01: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-01–2026-08-012026-08-02: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-02–2026-08-022026-08-06: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-06–2026-08-062026-08-09: 9 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-09–2026-08-092026-08-14: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-14–2026-08-142026-08-15: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-15–2026-08-152026-08-17: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-17–2026-08-172026-08-21: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-21–2026-08-212026-08-22: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-22–2026-08-222026-08-23: 3 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-23–2026-08-232026-08-24: 5 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-24–2026-08-242026-08-25: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-25–2026-08-252026-08-26: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-26–2026-08-262026-08-27: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-27–2026-08-272026-08-31: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-08-31–2026-08-312026-09-01: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-01–2026-09-012026-09-06: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-06–2026-09-062026-09-07: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-07–2026-09-072026-09-08: 3 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-08–2026-09-082026-09-09: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-09–2026-09-092026-09-11: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-11–2026-09-112026-09-12: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-12–2026-09-122026-09-13: 3 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-13–2026-09-132026-09-14: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-14–2026-09-142026-09-15: 7 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-15–2026-09-152026-09-21: 15 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-21–2026-09-212026-09-22: 27 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-22–2026-09-222026-09-23: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-23–2026-09-232026-09-25: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-25–2026-09-252026-09-26: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-26–2026-09-262026-09-27: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-27–2026-09-272026-09-28: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-28–2026-09-282026-09-30: 6 · observed 2026-10-21T15:10:54.4870200Z · period 2026-09-30–2026-09-302026-10-01: 35 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-01–2026-10-012026-10-02: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-02–2026-10-022026-10-03: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-03–2026-10-032026-10-04: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-04–2026-10-042026-10-05: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-05–2026-10-052026-10-06: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-06–2026-10-062026-10-09: 7 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-09–2026-10-092026-10-10: 17 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-10–2026-10-102026-10-11: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-11–2026-10-112026-10-12: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-12–2026-10-122026-10-13: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-13–2026-10-132026-10-14: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-14–2026-10-142026-10-17: 2 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-17–2026-10-172026-10-18: 3 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-18–2026-10-182026-10-20: 1 · observed 2026-10-21T15:10:54.4870200Z · period 2026-10-20–2026-10-20
23 Jul20 Oct

pypistats · 53 observations shown. Missing days are unknown. Source category: overall: without mirrors.

View observed values
Date / source periodValueObserved at
2026-10-20 – 2026-10-2012026-10-21T15:10:54.4870200Z
2026-10-18 – 2026-10-1832026-10-21T15:10:54.4870200Z
2026-10-17 – 2026-10-1722026-10-21T15:10:54.4870200Z
2026-10-14 – 2026-10-1412026-10-21T15:10:54.4870200Z
2026-10-13 – 2026-10-1312026-10-21T15:10:54.4870200Z
2026-10-12 – 2026-10-1212026-10-21T15:10:54.4870200Z
2026-10-11 – 2026-10-1122026-10-21T15:10:54.4870200Z
2026-10-10 – 2026-10-10172026-10-21T15:10:54.4870200Z
2026-10-09 – 2026-10-0972026-10-21T15:10:54.4870200Z
2026-10-06 – 2026-10-0612026-10-21T15:10:54.4870200Z
2026-10-05 – 2026-10-0512026-10-21T15:10:54.4870200Z
2026-10-04 – 2026-10-0412026-10-21T15:10:54.4870200Z
2026-10-03 – 2026-10-0312026-10-21T15:10:54.4870200Z
2026-10-02 – 2026-10-0222026-10-21T15:10:54.4870200Z
2026-10-01 – 2026-10-01352026-10-21T15:10:54.4870200Z
2026-09-30 – 2026-09-3062026-10-21T15:10:54.4870200Z
2026-09-28 – 2026-09-2822026-10-21T15:10:54.4870200Z
2026-09-27 – 2026-09-2712026-10-21T15:10:54.4870200Z
2026-09-26 – 2026-09-2612026-10-21T15:10:54.4870200Z
2026-09-25 – 2026-09-2522026-10-21T15:10:54.4870200Z
2026-09-23 – 2026-09-2322026-10-21T15:10:54.4870200Z
2026-09-22 – 2026-09-22272026-10-21T15:10:54.4870200Z
2026-09-21 – 2026-09-21152026-10-21T15:10:54.4870200Z
2026-09-15 – 2026-09-1572026-10-21T15:10:54.4870200Z
2026-09-14 – 2026-09-1412026-10-21T15:10:54.4870200Z
2026-09-13 – 2026-09-1332026-10-21T15:10:54.4870200Z
2026-09-12 – 2026-09-1212026-10-21T15:10:54.4870200Z
2026-09-11 – 2026-09-1122026-10-21T15:10:54.4870200Z
2026-09-09 – 2026-09-0912026-10-21T15:10:54.4870200Z
2026-09-08 – 2026-09-0832026-10-21T15:10:54.4870200Z
2026-09-07 – 2026-09-0712026-10-21T15:10:54.4870200Z
2026-09-06 – 2026-09-0622026-10-21T15:10:54.4870200Z
2026-09-01 – 2026-09-0122026-10-21T15:10:54.4870200Z
2026-08-31 – 2026-08-3112026-10-21T15:10:54.4870200Z
2026-08-27 – 2026-08-2712026-10-21T15:10:54.4870200Z
2026-08-26 – 2026-08-2612026-10-21T15:10:54.4870200Z
2026-08-25 – 2026-08-2522026-10-21T15:10:54.4870200Z
2026-08-24 – 2026-08-2452026-10-21T15:10:54.4870200Z
2026-08-23 – 2026-08-2332026-10-21T15:10:54.4870200Z
2026-08-22 – 2026-08-2222026-10-21T15:10:54.4870200Z
2026-08-21 – 2026-08-2112026-10-21T15:10:54.4870200Z
2026-08-17 – 2026-08-1722026-10-21T15:10:54.4870200Z
2026-08-15 – 2026-08-1522026-10-21T15:10:54.4870200Z
2026-08-14 – 2026-08-1422026-10-21T15:10:54.4870200Z
2026-08-09 – 2026-08-0992026-10-21T15:10:54.4870200Z
2026-08-06 – 2026-08-0612026-10-21T15:10:54.4870200Z
2026-08-02 – 2026-08-0212026-10-21T15:10:54.4870200Z
2026-08-01 – 2026-08-0112026-10-21T15:10:54.4870200Z
2026-07-28 – 2026-07-2812026-10-21T15:10:54.4870200Z
2026-07-27 – 2026-07-2722026-10-21T15:10:54.4870200Z
2026-07-26 – 2026-07-2612026-10-21T15:10:54.4870200Z
2026-07-25 – 2026-07-25232026-10-21T15:10:54.4870200Z
2026-07-23 – 2026-07-2342026-10-21T15:10:54.4870200Z

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.1.1130 Apr 202610

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Metadata history

Meaningful changes
Current collected state Current

Observed since 21 Oct, 10:32 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:2a975d5fe7aa58196aa6a1169dcb57a95d39371e4aa7c1d569111dae406aecc8