LLM-powered workflow for automated release notes generation from GitHub repositories. Built with LangGraph orchestration, Streamlit UI, and comprehensive guardrails for production-quality output.
📖 Full Documentation — Architecture, workflows, services, guardrails, and more.
- 🔍 Git Data Harvesting: Extract commits and PRs between any two refs (tags, branches, SHAs)
- 🧹 Intelligent Triage: LLM-based filtering to identify user-facing vs internal changes
- 📁 Smart Classification: Categorize changes as Features, Bug Fixes, or Internal
- ✍️ Polished Drafting: Generate clean, user-friendly release note entries
- 👀 Human-in-the-Loop Review: Edit, approve, flag, or remove entries
- 🌐 Multi-Language Translation: Translate release notes to French, German, Italian
- 📚 MkDocs Export: Generate and host a publishable documentation site
- 🛡️ LLM Guardrails: Input sanitization, JSON repair, content moderation
- 📊 Confidence Thresholding: Flag low-confidence classifications for review
- 🔒 Prompt Injection Prevention: Sanitize inputs before LLM processing
- 📋 List View: Read-only overview of all entries
- 🔍 Detail View: Edit individual entries with full context
- 📝 Diff View: Compare original commit vs LLM-generated content
- 🗑️ Filtered Items: Review and restore filtered entries
git clone <repo-url>
cd NC-assestment
# Create and activate virtual environment
python -m venv venv
.\venv\Scripts\Activate.ps1 # Windows PowerShell
# source venv/bin/activate # macOS/Linux
# Install dependencies
pip install -e ".[dev]"copy .env.template .env # Windows
# cp .env.template .env # macOS/LinuxEdit .env:
# For OpenAI (default)
OPENAI_API_KEY=sk-your-openai-key
# For NC Gateway (requires BOTH variables)
# NC_API_KEY=sk-nc-xxxxx
# NC_BASE_URL=https://ai-gateway.neuralconcept.com/streamlit run src/app.pyInstead of installing dependencies locally, you can use Docker:
# Build and run
docker-compose up --build
# Access the app at http://localhost:8501Note
Docker & Dependencies:
While pyproject.toml is the source of truth for dependencies, this project also includes a requirements.txt (auto-generated) specifically for Docker.
The Dockerfile uses requirements.txt to enable layer caching, ensuring that changing source code doesn't trigger a full dependency reinstall.
| Model | Provider | Use Case |
|---|---|---|
gpt-4o |
OpenAI | Default - best quality |
gpt-5-nano |
OpenAI | Cheap & fast for high volume |
azure-oai-gpt-4.1 |
NC Gateway* | Azure OpenAI |
bedrock-claude-sonnet-4 |
NC Gateway* | AWS Bedrock |
*NC Gateway models only appear when both NC_API_KEY and NC_BASE_URL are set.
llm:
model: "gpt-4o"
temperature: 0.3
max_tokens: 2000
filtering:
exclude_tests: true
exclude_ci_cd: true
exclude_refactoring: true
exclude_docs: false- Setup: Enter repository URL, select refs (from/to), configure filtering
- Harvest: Watch commits/PRs extracted and processed through LLM pipeline
- Review: Use List/Detail/Diff views to review and edit entries
- Export: Preview, translate, download Markdown or host MkDocs site
# Run tests (52 tests)
pytest
# Run with coverage
pytest --cov=src
# Lint
ruff check src/ tests/NC-assestment/
├── src/
│ ├── services/ # Business logic
│ │ ├── github_service.py # Git data extraction
│ │ ├── llm_service.py # LLM operations with guardrails
│ │ ├── database_service.py # SQLite persistence
│ │ └── mkdocs_service.py # Documentation generation
│ ├── workflow/ # LangGraph orchestration
│ │ ├── nodes.py # Harvest/Triage/Classify/Draft nodes
│ │ └── graph.py # Workflow graph definition
│ ├── ui/ # Streamlit tabs
│ │ ├── setup.py # Configuration UI
│ │ ├── harvest.py # Progress monitoring
│ │ ├── review.py # List/Detail/Diff views
│ │ └── export.py # Export & translation
│ ├── guardrails.py # LLM safety: sanitization, moderation
│ ├── config.py # Configuration management
│ ├── models.py # Pydantic models
│ └── app.py # Main Streamlit app
├── config/config.yaml # Default settings
├── docs/CONFIGURATION.md # Full configuration guide
├── tests/unit/ # 52 unit tests
└── pyproject.toml
- Caching: Cache git commits and PRs to avoid reprocessing, might also cache llm responses or cache the final release notes so I also have user preferences saved for those commits
- CI/CD: Add a github action to run the release notes generation and export to mkdocs
- Diff in code: Show the diff in code between commits and directly generate release notes by accessing code developments for fine-grained control, also possibility to analize for security vulnerabilities and then flag for clarification
- Integration test: Current done manually, add a github action to run the integration test
- Session resumption: While the database persists data, Streamlit session state resets on page reload. Add ability to easily resume/select previous sessions from UI.
- Clarification: The flags for clarification can be downloaded, possibility to add feature to create directly an issue on github about a specific commit.
- Scrape how to contribute page: Add possibility to scrape the how to contribute page and then create accurate LLM prompt for filtering and classification based on the content of the page, which usually address commit strategy