A Python library for batch text extraction and processing using Google Cloud Vertex AI
Project description
PyRTex
A simple Python library for batch text extraction and processing using Google Cloud Vertex AI.
PyRTex makes it easy to process multiple documents, images, or text snippets with Gemini models and get back structured, type-safe results using Pydantic models.
✨ Features
- 🚀 Simple API: Just 3 steps - configure, submit, get results
- 📦 Batch Processing: Process multiple inputs efficiently
- 🔒 Type Safety: Pydantic models for structured output
- 🎨 Flexible Templates: Jinja2 templates for prompt engineering
- ☁️ GCP Integration: Seamless Vertex AI and BigQuery integration
- 🧪 Testing Mode: Simulate without GCP costs
📦 Installation
Install from PyPI (recommended):
pip install pyrtex
Or install from source:
git clone https://github.com/CaptainTrojan/pyrtex.git
cd pyrtex
pip install -e .
For development:
pip install -e .[dev]
🚀 Quick Start
from pydantic import BaseModel
from pyrtex import Job
# Define your data structures
class TextInput(BaseModel):
content: str
class Analysis(BaseModel):
summary: str
sentiment: str
key_points: list[str]
# Create a job
job = Job[Analysis](
model="gemini-2.0-flash-lite-001",
output_schema=Analysis,
prompt_template="Analyze this text: {{ content }}",
simulation_mode=True # Set to False for real processing
)
# Add your data
job.add_request("doc1", TextInput(content="Your text here"))
job.add_request("doc2", TextInput(content="Another document"))
# Process and get results
for result in job.submit().wait().results():
if result.was_successful:
print(f"Summary: {result.output.summary}")
print(f"Sentiment: {result.output.sentiment}")
else:
print(f"Error: {result.error}")
📋 Core Workflow
PyRTex uses a simple 3-step workflow:
1. Configure & Add Data
job = Job[YourSchema](model="gemini-2.0-flash-lite-001", ...)
job.add_request("key1", YourModel(data="value1"))
job.add_request("key2", YourModel(data="value2"))
2. Submit & Wait
job.submit().wait() # Can be chained
3. Get Results
for result in job.results():
if result.was_successful:
# Use result.output (typed!)
else:
# Handle result.error
⚙️ Configuration
For production use, set your GCP project:
export GOOGLE_PROJECT_ID="your-project-id"
Then use simulation_mode=False for real processing.
📚 Examples
The examples/ directory contains complete working examples:
cd examples
# Generate sample files
python generate_sample_data.py
# Extract contact info from business cards
python 01_simple_text_extraction.py
# Parse product catalogs
python 02_pdf_product_parsing.py
# Extract invoice data from PDFs
python 03_image_description.py
Example Use Cases
- 📇 Business Cards: Extract contact information
- 📄 Documents: Process PDFs, images (PNG, JPEG)
- 🛍️ Product Catalogs: Parse pricing and inventory
- 🧾 Invoices: Extract structured financial data
- 📊 Batch Processing: Handle multiple files efficiently
🧪 Development
Running Tests
# All tests (mocked, safe)
./test_runner.sh
# Specific test types
./test_runner.sh --unit
./test_runner.sh --integration
./test_runner.sh --flake
# Real GCP tests (costs money!)
./test_runner.sh --real --project-id your-project-id
Windows users:
test_runner.bat --unit
test_runner.bat --flake
Code Quality
- flake8: Linting
- black: Code formatting
- isort: Import sorting
- pytest: Testing with coverage
🤝 Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests:
./test_runner.sh - Submit a pull request
📄 License
MIT License - see LICENSE for details.
🆘 Support
- Issues: GitHub Issues
- Examples: Check the
examples/directory - Testing: Use
simulation_mode=Truefor development
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyrtex-0.1.2.tar.gz.
File metadata
- Download URL: pyrtex-0.1.2.tar.gz
- Upload date:
- Size: 14.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1bde3d4de17912fb4d5aafe60d3d8f7a5b5736cba08257bee49e0fc47a23d67c
|
|
| MD5 |
b979606026fe1cbb33a8396e8378d21c
|
|
| BLAKE2b-256 |
8881941047b165c35efa9be90f7217ad5c3f2a38757a4a75091228e87c7efa2e
|
File details
Details for the file pyrtex-0.1.2-py3-none-any.whl.
File metadata
- Download URL: pyrtex-0.1.2-py3-none-any.whl
- Upload date:
- Size: 13.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cea7271c0d37c561ce70a04b481b0dcc987d8c1322d5be40edc98e444374788f
|
|
| MD5 |
57fefab8404ae092082ce252316f09fb
|
|
| BLAKE2b-256 |
3aa689667bde47e138f2e14c2ff869c5488e3317409b613b566504e35e388667
|