patchai


Namepatchai JSON
Version 0.1.5 PyPI version JSON
download
home_pageNone
SummaryAI-powered structured file editor with diff visualization
upload_time2025-10-06 21:30:36
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords ai config diff editor json llm yaml
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # PatchAI โœจ

**AI-powered structured file editor with beautiful diff visualization**

PatchAI lets you edit JSON, YAML, and config files using natural language instructions. Perfect for fixing OCR errors, cleaning up data, or making bulk changes across structured documents.

## โœจ Features

- **Natural Language Editing** - Just describe what you want to change
- **Visual Diff** - See exactly what changed with beautiful unified or side-by-side diffs
- **Image-Aware** - Compare JSON/YAML with original document images to fix OCR errors
- **Undo/Reset** - Full history tracking with easy undo
- **Rich CLI** - Beautiful terminal interface with colors and panels
- **Simple API** - 3 lines of code to get started

## ๐Ÿš€ Quick Start

### Installation

```bash
# Basic installation (no LLM provider)
pip install patchai

# With specific provider
pip install patchai[gemini]     # Google Gemini
pip install patchai[openai]     # OpenAI GPT
pip install patchai[anthropic]  # Anthropic Claude

# With all providers
pip install patchai[all-providers]

# With Jupyter support
pip install patchai[jupyter,gemini]
```

### Basic Usage

**Python API:**
```python
from patchai import PatchAI

# Using Gemini (default)
editor = PatchAI("data.json", provider="gemini", api_key="your-key")
editor.edit("Fix all typos and remove extra newlines")
editor.save("fixed.json")

# Using OpenAI
editor = PatchAI("data.json", provider="openai", api_key="your-key", model="gpt-4o")
editor.edit("Fix all typos")
editor.save("fixed.json")

# Using Anthropic Claude
editor = PatchAI("data.json", provider="anthropic", api_key="your-key", model="claude-sonnet-4-20250514")
editor.edit("Fix all typos")
editor.save("fixed.json")
```

**Command Line:**
```bash
# Gemini (default)
export GEMINI_API_KEY="your-key"
patchai data.json -e "Fix all typos"

# OpenAI
export OPENAI_API_KEY="your-key"
patchai data.json --provider openai --model gpt-4o -e "Fix all typos"

# Anthropic
export ANTHROPIC_API_KEY="your-key"
patchai data.json --provider anthropic --model claude-sonnet-4-20250514 -e "Fix all typos"
```

## ๐Ÿ“– Examples

### Fix OCR Errors with Image Reference

```python
from patchai import PatchAI

# Load JSON with reference image
editor = PatchAI(
    data="extracted.json",
    image_path="original_document.jpg"
)

# AI compares JSON with image and fixes errors
editor.edit("Compare the JSON with the document image and correct any OCR errors")

# Show what changed
from patchai import print_diff
print_diff(editor.get_original(), editor.get_current())

# Save
editor.save("corrected.json")
```

### Edit YAML Config

```python
from patchai import PatchAI

editor = PatchAI("config.yaml", format="yaml")
editor.edit("Update database host to localhost and change port to 5432")
editor.save("config.yaml")
```

### Interactive Editing Session

```python
from patchai import PatchAI

editor = PatchAI("data.json")

# Make multiple edits
editor.edit("Remove all empty strings")
editor.edit("Add newlines after periods in the text field")
editor.edit("Fix capitalization in headers")

# Undo last change if needed
editor.undo()

# Check if anything changed
if editor.has_changes:
    editor.save("cleaned.json")
```

### Batch Processing

```python
from patchai import PatchAI
from pathlib import Path

# Process multiple files
files = Path("data/").glob("*.json")

for file in files:
    editor = PatchAI(file)
    editor.edit("Standardize date format to YYYY-MM-DD")
    editor.save(file)
    print(f"โœ“ Processed {file}")
```

## ๐ŸŽจ CLI Examples

### Interactive Mode

```bash
patchai data.json
```

You'll see:
```
โ”Œโ”€ PatchAI Interactive Mode โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                                                    โ”‚
โ”‚ Commands:                                          โ”‚
โ”‚   โ€ข Type instruction to edit                       โ”‚
โ”‚   โ€ข 'undo' - undo last edit                       โ”‚
โ”‚   โ€ข 'reset' - reset to original                   โ”‚
โ”‚   โ€ข 'save' - save and exit                        โ”‚
โ”‚   โ€ข 'quit' - exit without saving                  โ”‚
โ”‚   โ€ข 'diff' - show current changes                 โ”‚
โ”‚                                                    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Instruction: Fix all typos in the header
```

### Single Edit Mode

```bash
# Basic edit
patchai data.json -e "Clean up formatting"

# With image reference
patchai extracted.json \
  --image document.jpg \
  -e "Compare with image and fix OCR errors"

# YAML file
patchai config.yaml \
  --format yaml \
  -e "Update production database credentials"

# Save to new file
patchai data.json \
  -e "Remove all null values" \
  -o cleaned.json

# Side-by-side diff
patchai data.json \
  -e "Fix all dates" \
  --diff side-by-side
```

## ๐Ÿ”ง Advanced Usage

### Custom Model

```python
from patchai import PatchAI

editor = PatchAI(
    "data.json",
    model="gemini-2.0-flash",  # or gemini-2.0-flash-thinking-exp
    api_key="your-api-key"     # or set GEMINI_API_KEY env var
)
```

### Programmatic Diff Analysis

```python
from patchai import PatchAI, print_diff, print_summary, generate_unified_diff

editor = PatchAI("data.json")
original = editor.get_original()

editor.edit("Your instruction here")
modified = editor.get_current()

# Print colored diff
print_diff(original, modified, style="unified")

# Print summary of changes
print_summary(original, modified)

# Get diff as string
diff_text = generate_unified_diff(original, modified)
```

### History Tracking

```python
editor = PatchAI("data.json")

# Make multiple edits
editor.edit("Fix typos")
editor.edit("Remove newlines")
editor.edit("Update dates")

# Access edit history
for i, edit in enumerate(editor.edit_history):
    print(f"{i+1}. {edit['instruction']}")

# Undo multiple times
editor.undo()  # undo "Update dates"
editor.undo()  # undo "Remove newlines"

# Reset to original
editor.reset()
```

## ๐ŸŽฏ Use Cases

### ๐Ÿ“„ Document Processing
- Fix OCR extraction errors by comparing JSON output with original document images
- Clean up formatting in extracted data
- Standardize field values across documents

### โš™๏ธ Configuration Management  
- Update config files across multiple environments
- Fix formatting issues in YAML/JSON configs
- Bulk update values (URLs, API keys, ports)

### ๐Ÿ”ง Data Cleaning
- Remove null/empty values
- Standardize date formats
- Fix typos across structured data
- Normalize field values

### ๐Ÿ“Š Data Transformation
- Restructure nested JSON
- Move values between fields
- Split/merge fields based on natural language instructions

## ๐Ÿงช Jupyter Notebook Support

```python
from patchai import PatchAI

editor = PatchAI("data.json", image_path="doc.jpg")

# Edit
editor.edit("Fix all OCR errors")

# Beautiful diff in notebook
from patchai import print_diff
print_diff(editor.get_original(), editor.get_current(), style="side-by-side")
```

## ๐Ÿ’ฌ Interactive Jupyter Editor (Widget UI)
PatchAI also includes a fully interactive **Jupyter/Colab editor** โ€” a beautiful, two-panel interface that lets you edit JSON or YAML files using natural language instructions, with live diffs and undo support.

```python
from patchai.jupyter import create_jupyter_editor

# Launch interactive editor
create_jupyter_editor("data.json", image_path="document.jpg")
```

## ๐Ÿ›ก๏ธ API Reference

### PatchAI

```python
PatchAI(
    data: Union[Dict, str, Path],
    format: str = "json",
    image_path: Optional[Union[str, Path]] = None,
    api_key: Optional[str] = None,
    model: str = "gemini-2.0-flash-exp"
)
```

**Parameters:**
- `data`: Input data as dict, JSON/YAML string, or file path
- `format`: File format (`"json"` or `"yaml"`)
- `image_path`: Optional reference image for visual comparison
- `api_key`: Gemini API key (or set `GEMINI_API_KEY` env var)
- `model`: Gemini model to use

**Methods:**
- `edit(instruction: str, include_image: bool = True) -> Dict` - Apply edit instruction
- `undo() -> bool` - Undo last edit
- `reset()` - Reset to original data
- `save(path: Union[str, Path])` - Save to file
- `get_current() -> Dict` - Get current data
- `get_original() -> Dict` - Get original data

**Properties:**
- `has_changes: bool` - Check if data has been modified
- `history: List[Dict]` - Edit history
- `edit_history: List[Dict]` - Instruction history

## ๐Ÿ” Environment Variables

```bash
# Set your Gemini API key
export GEMINI_API_KEY="your-api-key-here"
```

Get your free API key at: [https://ai.google.dev](https://ai.google.dev)

## ๐Ÿ“ฆ Project Structure

```
patchai/
โ”œโ”€โ”€ src/patchai/
โ”‚   โ”œโ”€โ”€ __init__.py      # Main exports
โ”‚   โ”œโ”€โ”€ editor.py        # Core PatchAI class
โ”‚   โ”œโ”€โ”€ diff.py          # Diff utilities
โ”‚   โ””โ”€โ”€ cli.py           # Command-line interface
โ”‚   โ””โ”€โ”€ jupyter.py        
โ”œโ”€โ”€ tests/               # Unit tests
โ”œโ”€โ”€ examples/            # Example scripts
โ”œโ”€โ”€ pyproject.toml       # Package configuration
โ””โ”€โ”€ README.md
```

## ๐Ÿค Contributing

Contributions welcome! Ideas for improvement:

- [ ] Support for more formats (TOML, XML, CSV)
- [ ] Web UI for non-technical users
- [ ] Batch operation commands
- [ ] Custom validation rules
- [ ] PDF form field editing
- [ ] Excel/DOCX simple edits

## ๐Ÿ“„ License

MIT License - see [LICENSE](LICENSE) file

## ๐Ÿ™ Acknowledgments

Built with:
- [Google Gemini](https://ai.google.dev) - AI editing engine
- [Rich](https://github.com/Textualize/rich) - Beautiful terminal output
- [PyYAML](https://pyyaml.org) - YAML parsing

## ๐Ÿ’ก Tips

1. **Be specific**: "Fix typos in the 'description' field" works better than "fix everything"
2. **Use image reference**: When fixing OCR errors, always include the original image
3. **Check diffs**: Always review changes before saving
4. **Start small**: Test on a copy before editing important files

## ๐Ÿ“š More Examples

Check out the [examples/](examples/) directory for:
- OCR error correction workflow
- Batch config file updates
- Data cleaning pipelines
- YAML configuration management

## ๐Ÿ”— Links

- **Documentation**: [https://github.com/davidkjeremiah/patchai](https://github.com/davidkjeremiah/patchai)
- **Issues**: [https://github.com/davidkjeremiah/patchai/issues](https://github.com/davidkjeremiah/patchai/issues)
- **PyPI**: [https://pypi.org/project/patchai](https://pypi.org/project/patchai)

---

**Made with โค๏ธ by developers who hate manual data cleaning**
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "patchai",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "ai, config, diff, editor, json, llm, yaml",
    "author": null,
    "author_email": "David Jeremiah <flasconnect@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/36/90/6ea216e6aa17a9f0e1bc97b227f8fdb43de7eb85921273596216f7c31d89/patchai-0.1.5.tar.gz",
    "platform": null,
    "description": "# PatchAI \u2728\n\n**AI-powered structured file editor with beautiful diff visualization**\n\nPatchAI lets you edit JSON, YAML, and config files using natural language instructions. Perfect for fixing OCR errors, cleaning up data, or making bulk changes across structured documents.\n\n## \u2728 Features\n\n- **Natural Language Editing** - Just describe what you want to change\n- **Visual Diff** - See exactly what changed with beautiful unified or side-by-side diffs\n- **Image-Aware** - Compare JSON/YAML with original document images to fix OCR errors\n- **Undo/Reset** - Full history tracking with easy undo\n- **Rich CLI** - Beautiful terminal interface with colors and panels\n- **Simple API** - 3 lines of code to get started\n\n## \ud83d\ude80 Quick Start\n\n### Installation\n\n```bash\n# Basic installation (no LLM provider)\npip install patchai\n\n# With specific provider\npip install patchai[gemini]     # Google Gemini\npip install patchai[openai]     # OpenAI GPT\npip install patchai[anthropic]  # Anthropic Claude\n\n# With all providers\npip install patchai[all-providers]\n\n# With Jupyter support\npip install patchai[jupyter,gemini]\n```\n\n### Basic Usage\n\n**Python API:**\n```python\nfrom patchai import PatchAI\n\n# Using Gemini (default)\neditor = PatchAI(\"data.json\", provider=\"gemini\", api_key=\"your-key\")\neditor.edit(\"Fix all typos and remove extra newlines\")\neditor.save(\"fixed.json\")\n\n# Using OpenAI\neditor = PatchAI(\"data.json\", provider=\"openai\", api_key=\"your-key\", model=\"gpt-4o\")\neditor.edit(\"Fix all typos\")\neditor.save(\"fixed.json\")\n\n# Using Anthropic Claude\neditor = PatchAI(\"data.json\", provider=\"anthropic\", api_key=\"your-key\", model=\"claude-sonnet-4-20250514\")\neditor.edit(\"Fix all typos\")\neditor.save(\"fixed.json\")\n```\n\n**Command Line:**\n```bash\n# Gemini (default)\nexport GEMINI_API_KEY=\"your-key\"\npatchai data.json -e \"Fix all typos\"\n\n# OpenAI\nexport OPENAI_API_KEY=\"your-key\"\npatchai data.json --provider openai --model gpt-4o -e \"Fix all typos\"\n\n# Anthropic\nexport ANTHROPIC_API_KEY=\"your-key\"\npatchai data.json --provider anthropic --model claude-sonnet-4-20250514 -e \"Fix all typos\"\n```\n\n## \ud83d\udcd6 Examples\n\n### Fix OCR Errors with Image Reference\n\n```python\nfrom patchai import PatchAI\n\n# Load JSON with reference image\neditor = PatchAI(\n    data=\"extracted.json\",\n    image_path=\"original_document.jpg\"\n)\n\n# AI compares JSON with image and fixes errors\neditor.edit(\"Compare the JSON with the document image and correct any OCR errors\")\n\n# Show what changed\nfrom patchai import print_diff\nprint_diff(editor.get_original(), editor.get_current())\n\n# Save\neditor.save(\"corrected.json\")\n```\n\n### Edit YAML Config\n\n```python\nfrom patchai import PatchAI\n\neditor = PatchAI(\"config.yaml\", format=\"yaml\")\neditor.edit(\"Update database host to localhost and change port to 5432\")\neditor.save(\"config.yaml\")\n```\n\n### Interactive Editing Session\n\n```python\nfrom patchai import PatchAI\n\neditor = PatchAI(\"data.json\")\n\n# Make multiple edits\neditor.edit(\"Remove all empty strings\")\neditor.edit(\"Add newlines after periods in the text field\")\neditor.edit(\"Fix capitalization in headers\")\n\n# Undo last change if needed\neditor.undo()\n\n# Check if anything changed\nif editor.has_changes:\n    editor.save(\"cleaned.json\")\n```\n\n### Batch Processing\n\n```python\nfrom patchai import PatchAI\nfrom pathlib import Path\n\n# Process multiple files\nfiles = Path(\"data/\").glob(\"*.json\")\n\nfor file in files:\n    editor = PatchAI(file)\n    editor.edit(\"Standardize date format to YYYY-MM-DD\")\n    editor.save(file)\n    print(f\"\u2713 Processed {file}\")\n```\n\n## \ud83c\udfa8 CLI Examples\n\n### Interactive Mode\n\n```bash\npatchai data.json\n```\n\nYou'll see:\n```\n\u250c\u2500 PatchAI Interactive Mode \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502                                                    \u2502\n\u2502 Commands:                                          \u2502\n\u2502   \u2022 Type instruction to edit                       \u2502\n\u2502   \u2022 'undo' - undo last edit                       \u2502\n\u2502   \u2022 'reset' - reset to original                   \u2502\n\u2502   \u2022 'save' - save and exit                        \u2502\n\u2502   \u2022 'quit' - exit without saving                  \u2502\n\u2502   \u2022 'diff' - show current changes                 \u2502\n\u2502                                                    \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\nInstruction: Fix all typos in the header\n```\n\n### Single Edit Mode\n\n```bash\n# Basic edit\npatchai data.json -e \"Clean up formatting\"\n\n# With image reference\npatchai extracted.json \\\n  --image document.jpg \\\n  -e \"Compare with image and fix OCR errors\"\n\n# YAML file\npatchai config.yaml \\\n  --format yaml \\\n  -e \"Update production database credentials\"\n\n# Save to new file\npatchai data.json \\\n  -e \"Remove all null values\" \\\n  -o cleaned.json\n\n# Side-by-side diff\npatchai data.json \\\n  -e \"Fix all dates\" \\\n  --diff side-by-side\n```\n\n## \ud83d\udd27 Advanced Usage\n\n### Custom Model\n\n```python\nfrom patchai import PatchAI\n\neditor = PatchAI(\n    \"data.json\",\n    model=\"gemini-2.0-flash\",  # or gemini-2.0-flash-thinking-exp\n    api_key=\"your-api-key\"     # or set GEMINI_API_KEY env var\n)\n```\n\n### Programmatic Diff Analysis\n\n```python\nfrom patchai import PatchAI, print_diff, print_summary, generate_unified_diff\n\neditor = PatchAI(\"data.json\")\noriginal = editor.get_original()\n\neditor.edit(\"Your instruction here\")\nmodified = editor.get_current()\n\n# Print colored diff\nprint_diff(original, modified, style=\"unified\")\n\n# Print summary of changes\nprint_summary(original, modified)\n\n# Get diff as string\ndiff_text = generate_unified_diff(original, modified)\n```\n\n### History Tracking\n\n```python\neditor = PatchAI(\"data.json\")\n\n# Make multiple edits\neditor.edit(\"Fix typos\")\neditor.edit(\"Remove newlines\")\neditor.edit(\"Update dates\")\n\n# Access edit history\nfor i, edit in enumerate(editor.edit_history):\n    print(f\"{i+1}. {edit['instruction']}\")\n\n# Undo multiple times\neditor.undo()  # undo \"Update dates\"\neditor.undo()  # undo \"Remove newlines\"\n\n# Reset to original\neditor.reset()\n```\n\n## \ud83c\udfaf Use Cases\n\n### \ud83d\udcc4 Document Processing\n- Fix OCR extraction errors by comparing JSON output with original document images\n- Clean up formatting in extracted data\n- Standardize field values across documents\n\n### \u2699\ufe0f Configuration Management  \n- Update config files across multiple environments\n- Fix formatting issues in YAML/JSON configs\n- Bulk update values (URLs, API keys, ports)\n\n### \ud83d\udd27 Data Cleaning\n- Remove null/empty values\n- Standardize date formats\n- Fix typos across structured data\n- Normalize field values\n\n### \ud83d\udcca Data Transformation\n- Restructure nested JSON\n- Move values between fields\n- Split/merge fields based on natural language instructions\n\n## \ud83e\uddea Jupyter Notebook Support\n\n```python\nfrom patchai import PatchAI\n\neditor = PatchAI(\"data.json\", image_path=\"doc.jpg\")\n\n# Edit\neditor.edit(\"Fix all OCR errors\")\n\n# Beautiful diff in notebook\nfrom patchai import print_diff\nprint_diff(editor.get_original(), editor.get_current(), style=\"side-by-side\")\n```\n\n## \ud83d\udcac Interactive Jupyter Editor (Widget UI)\nPatchAI also includes a fully interactive **Jupyter/Colab editor** \u2014 a beautiful, two-panel interface that lets you edit JSON or YAML files using natural language instructions, with live diffs and undo support.\n\n```python\nfrom patchai.jupyter import create_jupyter_editor\n\n# Launch interactive editor\ncreate_jupyter_editor(\"data.json\", image_path=\"document.jpg\")\n```\n\n## \ud83d\udee1\ufe0f API Reference\n\n### PatchAI\n\n```python\nPatchAI(\n    data: Union[Dict, str, Path],\n    format: str = \"json\",\n    image_path: Optional[Union[str, Path]] = None,\n    api_key: Optional[str] = None,\n    model: str = \"gemini-2.0-flash-exp\"\n)\n```\n\n**Parameters:**\n- `data`: Input data as dict, JSON/YAML string, or file path\n- `format`: File format (`\"json\"` or `\"yaml\"`)\n- `image_path`: Optional reference image for visual comparison\n- `api_key`: Gemini API key (or set `GEMINI_API_KEY` env var)\n- `model`: Gemini model to use\n\n**Methods:**\n- `edit(instruction: str, include_image: bool = True) -> Dict` - Apply edit instruction\n- `undo() -> bool` - Undo last edit\n- `reset()` - Reset to original data\n- `save(path: Union[str, Path])` - Save to file\n- `get_current() -> Dict` - Get current data\n- `get_original() -> Dict` - Get original data\n\n**Properties:**\n- `has_changes: bool` - Check if data has been modified\n- `history: List[Dict]` - Edit history\n- `edit_history: List[Dict]` - Instruction history\n\n## \ud83d\udd10 Environment Variables\n\n```bash\n# Set your Gemini API key\nexport GEMINI_API_KEY=\"your-api-key-here\"\n```\n\nGet your free API key at: [https://ai.google.dev](https://ai.google.dev)\n\n## \ud83d\udce6 Project Structure\n\n```\npatchai/\n\u251c\u2500\u2500 src/patchai/\n\u2502   \u251c\u2500\u2500 __init__.py      # Main exports\n\u2502   \u251c\u2500\u2500 editor.py        # Core PatchAI class\n\u2502   \u251c\u2500\u2500 diff.py          # Diff utilities\n\u2502   \u2514\u2500\u2500 cli.py           # Command-line interface\n\u2502   \u2514\u2500\u2500 jupyter.py        \n\u251c\u2500\u2500 tests/               # Unit tests\n\u251c\u2500\u2500 examples/            # Example scripts\n\u251c\u2500\u2500 pyproject.toml       # Package configuration\n\u2514\u2500\u2500 README.md\n```\n\n## \ud83e\udd1d Contributing\n\nContributions welcome! Ideas for improvement:\n\n- [ ] Support for more formats (TOML, XML, CSV)\n- [ ] Web UI for non-technical users\n- [ ] Batch operation commands\n- [ ] Custom validation rules\n- [ ] PDF form field editing\n- [ ] Excel/DOCX simple edits\n\n## \ud83d\udcc4 License\n\nMIT License - see [LICENSE](LICENSE) file\n\n## \ud83d\ude4f Acknowledgments\n\nBuilt with:\n- [Google Gemini](https://ai.google.dev) - AI editing engine\n- [Rich](https://github.com/Textualize/rich) - Beautiful terminal output\n- [PyYAML](https://pyyaml.org) - YAML parsing\n\n## \ud83d\udca1 Tips\n\n1. **Be specific**: \"Fix typos in the 'description' field\" works better than \"fix everything\"\n2. **Use image reference**: When fixing OCR errors, always include the original image\n3. **Check diffs**: Always review changes before saving\n4. **Start small**: Test on a copy before editing important files\n\n## \ud83d\udcda More Examples\n\nCheck out the [examples/](examples/) directory for:\n- OCR error correction workflow\n- Batch config file updates\n- Data cleaning pipelines\n- YAML configuration management\n\n## \ud83d\udd17 Links\n\n- **Documentation**: [https://github.com/davidkjeremiah/patchai](https://github.com/davidkjeremiah/patchai)\n- **Issues**: [https://github.com/davidkjeremiah/patchai/issues](https://github.com/davidkjeremiah/patchai/issues)\n- **PyPI**: [https://pypi.org/project/patchai](https://pypi.org/project/patchai)\n\n---\n\n**Made with \u2764\ufe0f by developers who hate manual data cleaning**",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "AI-powered structured file editor with diff visualization",
    "version": "0.1.5",
    "project_urls": {
        "Documentation": "https://github.com/davidkjeremiah/patchai/blob/main/README.md",
        "Homepage": "https://github.com/davidkjeremiah/patchai",
        "Issues": "https://github.com/davidkjeremiah/patchai/issues",
        "Repository": "https://github.com/davidkjeremiah/patchai"
    },
    "split_keywords": [
        "ai",
        " config",
        " diff",
        " editor",
        " json",
        " llm",
        " yaml"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0535aeb1a42db8f9f8641f78e6dbe3d20e3d860efd787fcd8eebd3d179623f89",
                "md5": "30ec0cd19fd3003addff3f1aaa8886b8",
                "sha256": "3e766466726a2e8a79931df7a236a3cec13bfbdcad900ed1398798c0036c9acb"
            },
            "downloads": -1,
            "filename": "patchai-0.1.5-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "30ec0cd19fd3003addff3f1aaa8886b8",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 18213,
            "upload_time": "2025-10-06T21:30:34",
            "upload_time_iso_8601": "2025-10-06T21:30:34.411548Z",
            "url": "https://files.pythonhosted.org/packages/05/35/aeb1a42db8f9f8641f78e6dbe3d20e3d860efd787fcd8eebd3d179623f89/patchai-0.1.5-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "36906ea216e6aa17a9f0e1bc97b227f8fdb43de7eb85921273596216f7c31d89",
                "md5": "f38ec657bc17182dc61c5dbd4b1af27a",
                "sha256": "8b304032af68fc86e9175519dcccd8c3160574fafee8e63af06fd07e1ed5bdd6"
            },
            "downloads": -1,
            "filename": "patchai-0.1.5.tar.gz",
            "has_sig": false,
            "md5_digest": "f38ec657bc17182dc61c5dbd4b1af27a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 22116,
            "upload_time": "2025-10-06T21:30:36",
            "upload_time_iso_8601": "2025-10-06T21:30:36.124440Z",
            "url": "https://files.pythonhosted.org/packages/36/90/6ea216e6aa17a9f0e1bc97b227f8fdb43de7eb85921273596216f7c31d89/patchai-0.1.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-06 21:30:36",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "davidkjeremiah",
    "github_project": "patchai",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "patchai"
}
        
Elapsed time: 1.61558s