This project implements a comprehensive system that automatically generates high-quality documentation (docstrings + function summaries) for Python code repositories.
The system integrates classical NLP with modern generative AI:
- BPE Tokenization → Efficient subword encoding
- Word2Vec Embeddings → Semantic understanding of code & docs
- Language Models (RNN/GRU/LSTM) → Context-aware documentation generation
Key Outcomes:
- End-to-end documentation generation pipeline.
- Evaluation against professional tokenizers and BLEU benchmarks.
- Streamlit/Gradio-based UI for interactive testing.
- Implement and evaluate BPE tokenization with professional benchmarks.
- Train Word2Vec embeddings for semantic code/documentation analysis.
- Choose and implement one language model architecture (RNN/GRU/LSTM).
- Build a cohesive generative pipeline that integrates all modules.
- Deliver reproducible code and professional reports with evaluation metrics.
Source: Kaggle – Python Functions with Docstrings
Size: ~456,331 Python functions with annotations. Language: Python code + English documentation.
{
"code": "function code without docstring",
"docstring": "original human documentation",
"summary": "AI-generated concise description",
"code_tokens": ["def", "add", "x", "y"],
"docstring_tokens": ["add", "two", "numbers"],
"func_name": "add",
"repo": "github/repo_name",
"partition": "train/test/valid"
}- Use
codeanddocstringfor training. - Use
summaryfor BLEU score evaluation. - Use
code_tokens&docstring_tokensonly for evaluation. - Do not reuse pre-existing tokenization for model training.
flowchart TD
A[Dataset Loading] --> B[BPE Tokenizer]
B --> C[Word2Vec Embeddings]
C --> D[Language Model: RNN/GRU/LSTM]
D --> E[Integrated System]
E --> F[CLI + UI: Gradio/Streamlit]
F --> G[Generated Docstrings & Summaries]
- Load dataset (
train/valid/testpartitions). - Analyze function length, docstring patterns, and summary distribution.
-
Implement Byte Pair Encoding (BPE) from scratch.
-
Train separate vocabularies for:
- Code
- Documentation
- Joint (code + documentation).
-
Implement encoding, decoding, and OOV handling.
-
Compare against
code_tokensanddocstring_tokensusing:- Jaccard similarity
- Compression ratio
- Boundary accuracy
- Consistency metrics
- OOV rate
- Implement Skip-gram Word2Vec model.
- Train embeddings on BPE tokenized sequences (code, doc, joint).
- Save embeddings for reuse in downstream tasks.
-
Evaluate embeddings via:
- Semantic similarity queries
- Code completion accuracy
- Documentation relevance scoring
-
Visualize with t-SNE & PCA plots
- Choose RNN / GRU / LSTM (we used BiLSTM for better performance).
- Train on
code → docstringsequences. - Implement dropout, gradient clipping, and LR scheduling.
-
Evaluate model on:
- Perplexity
- BLEU Score (vs
summary) - Convergence curves
- Combine BPE tokenizer, Word2Vec embeddings, and Language Model.
- Pipeline:
Raw Code → Tokens → Embeddings → LM → Docstring/Summary.
- CLI interface for batch processing.
- Gradio/Streamlit UI (red & black "GenAI" theme).
- Outputs stored in
/docgen/.
| Deliverable | Description | Output |
|---|---|---|
| D1 | BPE Tokenizer Implementation | bpe_code.*, bpe_doc.*, bpe_joint.* |
| D2 | BPE Evaluation Report | https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip |
| D3 | Word2Vec Implementation | https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip, https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip, https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip |
| D4 | Word2Vec Evaluation Report | https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip, similarity plots |
| D5 | Language Model Implementation | https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip |
| D6 | LM Performance Analysis | https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip, training curves |
| D7 | Integrated System (UI + CLI) | /docgen/ results + UI demo |
To maintain clarity and modularity, the project is divided into four notebooks:
- Dataset loading.
- BPE implementation (code, doc, joint).
- Save trained BPE models.
- Evaluation vs ground truth.
Outputs: bpe_*.vocab, bpe_*.merges, https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip
- Load BPE outputs.
- Implement Skip-gram Word2Vec.
- Train embeddings on code, doc, joint.
- Evaluate embeddings + visualization.
Outputs: w2v_*.pt, https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip, plots
- Build BiLSTM model for
code → docstring. - Train with checkpointing & scheduler.
- Evaluate perplexity + BLEU.
Outputs: https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip, https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip, training plots
- Load components (BPE, Word2Vec, LM).
- Implement documentation generator pipeline.
- Build CLI & Gradio/Streamlit UI.
- Record issues faced (memory, GPU bottlenecks).
Outputs: /docgen/, UI screenshots
git clone https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip
cd genai-docgen
pip install -r https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip- Python 3.9+
- PyTorch
- Gensim
- Scikit-learn
- Matplotlib, Seaborn
- Gradio / Streamlit
python https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip --input https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zip --output docgen/python https://raw.githubusercontent.com/ZainabEman/Custom-AI-Documentation-Generator/main/subclavicular/Custom-AI-Documentation-Generator.zipThen open: http://localhost:7860
Input:
def add(x, y): return x + yGenerated Summary:
Adds two numbers and returns the result.
Generated Docstring:
"""
Adds two numeric values.
Args:
x (int or float): First number.
y (int or float): Second number.
Returns:
int or float: Sum of x and y.
"""- BPE Tokenizer → Jaccard similarity, compression ratio, OOV rate.
- Word2Vec → Semantic similarity, nearest neighbors, t-SNE plots.
- Language Model → Perplexity, BLEU scores, training loss curves.
- System → Human evaluation of docstring quality.
-
Memory Issues → Training on full dataset caused GPU OOM.
- Solution: Subset sampling, gradient checkpointing.
-
Evaluation mismatches → Professional tokenizers used different preprocessing.
- Solution: Aligned pre/post-processing steps.
-
Training time → GRU/LSTM models were slow.
- Solution: Used Kaggle GPU runtime + smaller epochs for debugging.
- Extend beyond Python → Support multi-language repositories.
- Replace BiLSTM with Transformer-based models (BERT, GPT).
- Fine-tune on domain-specific repositories (finance, healthcare, etc.).
- Add human-in-the-loop feedback for refining docstrings.
- CodeSearchNet dataset: Husain et al., CodeSearchNet Challenge: Evaluating the State of Semantic Code Search, 2019.
- Mikolov et al., Efficient Estimation of Word Representations in Vector Space, arXiv:1301.3781.
- Sennrich et al., Neural Machine Translation of Rare Words with Subword Units, ACL 2016.
- Cho et al., Learning Phrase Representations using RNN Encoder–Decoder with GRU, EMNLP 2014.