Metadata-Version: 2.4
Name: xyberos-vision
Version: 0.1.0
Summary: Vision plugin (RFC-0019, M8): describe images, OCR, generate images
License: Apache-2.0
Keywords: xyberos,plugin,vision,ocr,tesseract,image
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: xyberos>=1.0
Provides-Extra: ocr
Requires-Dist: pytesseract; extra == "ocr"
Requires-Dist: pillow; extra == "ocr"
Provides-Extra: test
Requires-Dist: pytest; extra == "test"

# xyberos-vision

**Vision plugin — RFC-0019, M8.** Describe images (vision model), extract text
(OCR), and generate images — three tools, three contracts.

## Install

```bash
pip install -e ./vision
pip install xyberos-vision[ocr]    # optional: pytesseract + pillow for OCR
```

## Usage

```python
from xyberos import create_app
from xyberos_vision import VisionPlugin

app = create_app()
app.load_plugin(VisionPlugin())    # key from OPENAI_API_KEY

app.tools.execute("vision_describe", None, image_path="photo.png", prompt="What's in this photo?")
app.tools.execute("ocr_extract_text", None, image_path="scan.png")
app.tools.execute("image_generate", None, prompt="a sunset over the ocean", output_path="out.png")
```

## Tools

| Tool | Backed by |
| ---- | --------- |
| `vision_describe(image_path, prompt=...)` | `OpenAICompatibleVision` (`VISION_MODEL`, default `gpt-4o-mini`) |
| `ocr_extract_text(image_path)` | `TesseractOCR` (lazy `pytesseract` + `pillow`) |
| `image_generate(prompt, output_path)` | `OpenAIImageGenerator` (`dall-e-3`) |

## Tests

```bash
pip install pytest
pytest tests/
```

Vision/image-gen are tested via injectable transports; OCR tests skip when
`pytesseract` is absent.

## Ship location

Plugin (`xyberos.plugins` entry point) — vision/multimodal (M8).
