97e91a83f3
Ruff / Ruff (push) Has been cancelled
Test / Core Tests (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.10) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.11) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.12) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.13) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.9) (push) Has been cancelled
Test / Full Coverage (Python 3.11) (push) Has been cancelled
Test / Core Provider Tests (OpenAI) (push) Has been cancelled
Test / Core Provider Tests (Anthropic) (push) Has been cancelled
Test / Core Provider Tests (Google) (push) Has been cancelled
Test / Core Provider Tests (Other) (push) Has been cancelled
Test / Anthropic Tests (push) Has been cancelled
Test / Gemini Tests (push) Has been cancelled
Test / Google GenAI Tests (push) Has been cancelled
Test / Vertex AI Tests (push) Has been cancelled
Test / OpenAI Tests (push) Has been cancelled
Test / Writer Tests (push) Has been cancelled
Test / Auto Client Tests (push) Has been cancelled
ty / type-check (push) Has been cancelled
238 lines
7.8 KiB
Markdown
238 lines
7.8 KiB
Markdown
# Scripts Directory
|
||
|
||
This directory contains utility scripts for maintaining and improving the Instructor documentation and project structure.
|
||
|
||
## Available Scripts
|
||
|
||
### 1. `make_clean.py` - Markdown File Cleaner
|
||
|
||
**Purpose**: Cleans markdown files by removing special whitespace characters and replacing em dashes with regular dashes.
|
||
|
||
**What it does**:
|
||
- Recursively finds all `.md` files in the `docs/` directory
|
||
- Removes special Unicode whitespace characters (non-breaking spaces, zero-width spaces, etc.)
|
||
- Replaces em dashes (`—`) and en dashes (`–`) with regular dashes (`-`)
|
||
- Preserves intentional formatting while cleaning problematic characters
|
||
|
||
**Usage**:
|
||
```bash
|
||
# Clean all markdown files in docs/
|
||
python scripts/make_clean.py
|
||
|
||
# Dry run to see what would be changed
|
||
python scripts/make_clean.py --dry-run
|
||
|
||
# Clean files in a different directory
|
||
python scripts/make_clean.py --docs-dir path/to/docs
|
||
```
|
||
|
||
**Pre-commit Integration**: This script runs automatically on commits that include markdown files in the `docs/` directory.
|
||
|
||
### 2. `check_blog_excerpts.py` - Blog Post Excerpt Validator
|
||
|
||
**Purpose**: Ensures all blog posts contain the `<!-- more -->` tag for proper excerpt handling.
|
||
|
||
**What it does**:
|
||
- Scans all markdown files in `docs/blog/posts/`
|
||
- Checks for the presence of `<!-- more -->` tags
|
||
- Reports files missing the tag
|
||
- Exits with error code 1 if any files are missing the tag
|
||
|
||
**Usage**:
|
||
```bash
|
||
# Check all blog posts
|
||
python scripts/check_blog_excerpts.py
|
||
|
||
# Check posts in a different directory
|
||
python scripts/check_blog_excerpts.py --blog-posts-dir path/to/posts
|
||
```
|
||
|
||
**Pre-commit Integration**: This script runs automatically on commits that include blog post files.
|
||
|
||
### 3. `make_sitemap.py` - Enhanced Documentation Sitemap Generator
|
||
|
||
**Purpose**: Generates an enhanced sitemap (`sitemap.yaml`) with AI-powered content analysis and cross-link suggestions.
|
||
|
||
**What it does**:
|
||
- Recursively traverses the `docs/` directory
|
||
- Analyzes each markdown file using OpenAI's GPT-4o-mini
|
||
- Extracts summaries, keywords, and topics for SEO
|
||
- Identifies internal links and references
|
||
- Generates cross-link suggestions based on content similarity
|
||
- Creates a comprehensive `sitemap.yaml` file
|
||
|
||
**Features**:
|
||
- **Caching**: Reuses analysis for unchanged files (based on content hash)
|
||
- **Concurrent Processing**: Processes multiple files simultaneously
|
||
- **Cross-linking**: Suggests related documents based on content similarity
|
||
- **Retry Logic**: Handles API failures with exponential backoff
|
||
|
||
**Usage**:
|
||
```bash
|
||
# Generate sitemap with default settings
|
||
python scripts/make_sitemap.py
|
||
|
||
# Customize settings
|
||
python scripts/make_sitemap.py \
|
||
--root-dir docs \
|
||
--output-file sitemap.yaml \
|
||
--max-concurrency 10 \
|
||
--min-similarity 0.4
|
||
|
||
# Use custom API key
|
||
python scripts/make_sitemap.py --api-key your-openai-key
|
||
```
|
||
|
||
**Output**: Creates `sitemap.yaml` with structure:
|
||
```yaml
|
||
file.md:
|
||
summary: "Brief description of the content"
|
||
keywords: ["keyword1", "keyword2", "keyword3"]
|
||
topics: ["topic1", "topic2", "topic3"]
|
||
references: ["other-file.md", "another-file.md"]
|
||
ai_references: ["ai-detected-reference.md"]
|
||
cross_links: ["suggested-related-file.md"]
|
||
hash: "content-hash-for-caching"
|
||
```
|
||
|
||
**Requirements**:
|
||
- OpenAI API key (set as `OPENAI_API_KEY` environment variable or passed via `--api-key`)
|
||
- Dependencies: `openai`, `typer`, `rich`, `tenacity`, `pyyaml`
|
||
|
||
## Pre-commit Integration
|
||
|
||
These scripts are integrated into the project's pre-commit hooks to ensure code quality:
|
||
|
||
- **`make_clean.py`**: Runs on commits with markdown files in `docs/`
|
||
- **`check_blog_excerpts.py`**: Runs on commits with blog post files
|
||
|
||
The hooks are configured in `.pre-commit-config.yaml` and run automatically during the commit process.
|
||
|
||
## Running Scripts Manually
|
||
|
||
You can run any script manually for testing or one-time operations:
|
||
|
||
```bash
|
||
# Test markdown cleaning
|
||
python scripts/make_clean.py --dry-run
|
||
|
||
# Check blog excerpts
|
||
python scripts/check_blog_excerpts.py
|
||
|
||
# Generate fresh sitemap
|
||
python scripts/make_sitemap.py
|
||
```
|
||
|
||
### 4. `fix_api_calls.py` - API Call Standardization
|
||
|
||
**Purpose**: Replaces old API call patterns with simplified versions for consistency.
|
||
|
||
**What it does**:
|
||
- Finds and replaces `client.chat.completions.create` → `client.create`
|
||
- Finds and replaces `client.chat.completions.create_partial` → `client.create_partial`
|
||
- Finds and replaces `client.chat.completions.create_iterable` → `client.create_iterable`
|
||
- Finds and replaces `client.chat.completions.create_with_completion` → `client.create_with_completion`
|
||
- Processes all markdown and notebook files in the docs directory
|
||
|
||
**Usage**:
|
||
```bash
|
||
# Dry run to see what would be changed
|
||
python scripts/fix_api_calls.py --dry-run
|
||
|
||
# Apply changes to all files
|
||
python scripts/fix_api_calls.py
|
||
|
||
# Process a single file
|
||
python scripts/fix_api_calls.py --file docs/index.md
|
||
|
||
# Custom docs directory
|
||
python scripts/fix_api_calls.py --docs-dir path/to/docs
|
||
```
|
||
|
||
### 5. `fix_old_patterns.py` - Client Initialization Pattern Fixer
|
||
|
||
**Purpose**: Replaces old client initialization patterns with the modern `from_provider` API.
|
||
|
||
**What it does**:
|
||
- Replaces `instructor.from_openai(OpenAI())` → `instructor.from_provider("openai/model-name")`
|
||
- Replaces `instructor.from_anthropic(Anthropic())` → `instructor.from_provider("anthropic/model-name")`
|
||
- Replaces `instructor.patch(OpenAI())` → `instructor.from_provider("openai/model-name")`
|
||
- Handles all supported providers (OpenAI, Anthropic, Google, Cohere, Mistral, Groq, etc.)
|
||
- Attempts to extract model names from existing code
|
||
|
||
**Usage**:
|
||
```bash
|
||
# Dry run to see what would be changed
|
||
python scripts/fix_old_patterns.py --dry-run
|
||
|
||
# Apply changes to all files
|
||
python scripts/fix_old_patterns.py
|
||
|
||
# Process a single file
|
||
python scripts/fix_old_patterns.py --file docs/integrations/openai.md
|
||
```
|
||
|
||
**Note**: Model names are extracted from existing code when possible, but may need manual review for accuracy.
|
||
|
||
### 6. `audit_patterns.py` - Pattern Auditor
|
||
|
||
**Purpose**: Audits documentation files to find old patterns that need updating.
|
||
|
||
**What it does**:
|
||
- Finds old API call patterns (`client.chat.completions.*`)
|
||
- Finds old initialization patterns (`instructor.from_*`, `instructor.patch`)
|
||
- Identifies potentially unused imports
|
||
- Reports line numbers for each issue
|
||
- Provides summary statistics
|
||
|
||
**Usage**:
|
||
```bash
|
||
# Detailed report with line numbers
|
||
python scripts/audit_patterns.py
|
||
|
||
# Summary statistics only
|
||
python scripts/audit_patterns.py --summary
|
||
|
||
# Audit a single file
|
||
python scripts/audit_patterns.py --file docs/index.md
|
||
|
||
# Custom docs directory
|
||
python scripts/audit_patterns.py --docs-dir path/to/docs
|
||
```
|
||
|
||
**Output**: Reports issues by file with line numbers, or summary statistics showing total counts per pattern type.
|
||
|
||
## Adding New Scripts
|
||
|
||
When adding new scripts to this directory:
|
||
|
||
1. **Documentation**: Add a section to this README explaining the script's purpose and usage
|
||
2. **Pre-commit Integration**: If appropriate, add the script to `.pre-commit-config.yaml`
|
||
3. **Error Handling**: Ensure scripts exit with appropriate error codes
|
||
4. **Help Text**: Include `--help` functionality for command-line scripts
|
||
5. **Testing**: Test scripts manually before committing
|
||
|
||
## Dependencies
|
||
|
||
Most scripts use only Python standard library modules. The sitemap generator requires additional dependencies:
|
||
|
||
```bash
|
||
uv add openai typer rich tenacity pyyaml
|
||
```
|
||
|
||
## Troubleshooting
|
||
|
||
**Pre-commit hooks failing**:
|
||
- Check that scripts are executable: `chmod +x scripts/*.py`
|
||
- Verify script paths in `.pre-commit-config.yaml`
|
||
- Run scripts manually to identify issues
|
||
|
||
**Sitemap generation issues**:
|
||
- Ensure OpenAI API key is set correctly
|
||
- Check network connectivity for API calls
|
||
- Review error messages for specific file issues
|
||
|
||
**Markdown cleaning issues**:
|
||
- Use `--dry-run` to preview changes
|
||
- Check file permissions in the docs directory
|
||
- Verify UTF-8 encoding of markdown files |