From 9bd1a280e47973bb8ac44ceb2eac29a2d20bb7a8 Mon Sep 17 00:00:00 2001 From: gopal-raj-suresh Date: Tue, 10 Mar 2026 20:29:39 -0400 Subject: [PATCH] Add DocQvision Signed-off-by: gopal-raj-suresh --- sample_solutions/DocQvision/.env.example | 9 + sample_solutions/DocQvision/.gitignore | 70 + sample_solutions/DocQvision/README.md | 425 ++ .../DocQvision/TROUBLESHOOTING.md | 468 +++ sample_solutions/DocQvision/api/.dockerignore | 76 + sample_solutions/DocQvision/api/.env.example | 52 + sample_solutions/DocQvision/api/Dockerfile | 73 + sample_solutions/DocQvision/api/config.py | 61 + sample_solutions/DocQvision/api/crud.py | 334 ++ sample_solutions/DocQvision/api/database.py | 60 + sample_solutions/DocQvision/api/main.py | 665 ++++ sample_solutions/DocQvision/api/models.py | 122 + .../DocQvision/api/requirements.txt | 33 + sample_solutions/DocQvision/api/schemas.py | 159 + .../DocQvision/api/services/__init__.py | 0 .../DocQvision/api/services/api_client.py | 94 + .../api/services/extraction_pipeline.py | 202 + .../api/services/extraction_service.py | 293 ++ .../api/services/extractors/__init__.py | 9 + .../api/services/extractors/coverage.py | 118 + .../DocQvision/api/services/pdf_utils.py | 135 + .../DocQvision/api/services/vision_service.py | 1159 ++++++ .../DocQvision/api/utils/__init__.py | 0 .../DocQvision/api/utils/validators.py | 66 + .../DocQvision/assets/configure-chat.png | Bin 0 -> 247492 bytes .../DocQvision/assets/configure-initial.png | Bin 0 -> 140354 bytes .../assets/configure-test-results.png | Bin 0 -> 169708 bytes .../DocQvision/assets/history-page.png | Bin 0 -> 119628 bytes .../DocQvision/assets/results-view.png | Bin 0 -> 169708 bytes .../DocQvision/assets/upload-page.png | Bin 0 -> 105326 bytes .../DocQvision/docker-compose.yml | 109 + .../DocQvision/sample-documents/invoice1.pdf | Bin 0 -> 177069 bytes .../DocQvision/sample-documents/invoice2.pdf | Bin 0 -> 2238 bytes .../sample-documents/prescription.pdf | Bin 0 -> 207818 bytes .../sample-documents/service-contract.pdf | Bin 0 -> 593492 bytes sample_solutions/DocQvision/ui/.dockerignore | 56 + sample_solutions/DocQvision/ui/Dockerfile | 64 + sample_solutions/DocQvision/ui/index.html | 12 + sample_solutions/DocQvision/ui/nginx.conf | 26 + .../DocQvision/ui/package-lock.json | 3529 +++++++++++++++++ sample_solutions/DocQvision/ui/package.json | 27 + .../DocQvision/ui/postcss.config.js | 6 + sample_solutions/DocQvision/ui/src/App.jsx | 23 + .../ui/src/components/ChatInterface.jsx | 74 + .../ui/src/components/ErrorMessage.jsx | 39 + .../ui/src/components/ExtractionStatus.jsx | 202 + .../ui/src/components/FileUpload.jsx | 113 + .../DocQvision/ui/src/components/Layout.jsx | 59 + .../ui/src/components/PDFPreview.jsx | 183 + sample_solutions/DocQvision/ui/src/index.css | 77 + sample_solutions/DocQvision/ui/src/main.jsx | 10 + .../DocQvision/ui/src/pages/ConfigurePage.jsx | 486 +++ .../DocQvision/ui/src/pages/HistoryPage.jsx | 573 +++ .../DocQvision/ui/src/pages/ResultsPage.jsx | 141 + .../DocQvision/ui/src/pages/UploadPage.jsx | 587 +++ .../DocQvision/ui/src/services/api.js | 117 + .../DocQvision/ui/tailwind.config.js | 37 + sample_solutions/DocQvision/ui/vite.config.js | 10 + 58 files changed, 11243 insertions(+) create mode 100644 sample_solutions/DocQvision/.env.example create mode 100644 sample_solutions/DocQvision/.gitignore create mode 100644 sample_solutions/DocQvision/README.md create mode 100644 sample_solutions/DocQvision/TROUBLESHOOTING.md create mode 100644 sample_solutions/DocQvision/api/.dockerignore create mode 100644 sample_solutions/DocQvision/api/.env.example create mode 100644 sample_solutions/DocQvision/api/Dockerfile create mode 100644 sample_solutions/DocQvision/api/config.py create mode 100644 sample_solutions/DocQvision/api/crud.py create mode 100644 sample_solutions/DocQvision/api/database.py create mode 100644 sample_solutions/DocQvision/api/main.py create mode 100644 sample_solutions/DocQvision/api/models.py create mode 100644 sample_solutions/DocQvision/api/requirements.txt create mode 100644 sample_solutions/DocQvision/api/schemas.py create mode 100644 sample_solutions/DocQvision/api/services/__init__.py create mode 100644 sample_solutions/DocQvision/api/services/api_client.py create mode 100644 sample_solutions/DocQvision/api/services/extraction_pipeline.py create mode 100644 sample_solutions/DocQvision/api/services/extraction_service.py create mode 100644 sample_solutions/DocQvision/api/services/extractors/__init__.py create mode 100644 sample_solutions/DocQvision/api/services/extractors/coverage.py create mode 100644 sample_solutions/DocQvision/api/services/pdf_utils.py create mode 100644 sample_solutions/DocQvision/api/services/vision_service.py create mode 100644 sample_solutions/DocQvision/api/utils/__init__.py create mode 100644 sample_solutions/DocQvision/api/utils/validators.py create mode 100644 sample_solutions/DocQvision/assets/configure-chat.png create mode 100644 sample_solutions/DocQvision/assets/configure-initial.png create mode 100644 sample_solutions/DocQvision/assets/configure-test-results.png create mode 100644 sample_solutions/DocQvision/assets/history-page.png create mode 100644 sample_solutions/DocQvision/assets/results-view.png create mode 100644 sample_solutions/DocQvision/assets/upload-page.png create mode 100644 sample_solutions/DocQvision/docker-compose.yml create mode 100644 sample_solutions/DocQvision/sample-documents/invoice1.pdf create mode 100644 sample_solutions/DocQvision/sample-documents/invoice2.pdf create mode 100644 sample_solutions/DocQvision/sample-documents/prescription.pdf create mode 100644 sample_solutions/DocQvision/sample-documents/service-contract.pdf create mode 100644 sample_solutions/DocQvision/ui/.dockerignore create mode 100644 sample_solutions/DocQvision/ui/Dockerfile create mode 100644 sample_solutions/DocQvision/ui/index.html create mode 100644 sample_solutions/DocQvision/ui/nginx.conf create mode 100644 sample_solutions/DocQvision/ui/package-lock.json create mode 100644 sample_solutions/DocQvision/ui/package.json create mode 100644 sample_solutions/DocQvision/ui/postcss.config.js create mode 100644 sample_solutions/DocQvision/ui/src/App.jsx create mode 100644 sample_solutions/DocQvision/ui/src/components/ChatInterface.jsx create mode 100644 sample_solutions/DocQvision/ui/src/components/ErrorMessage.jsx create mode 100644 sample_solutions/DocQvision/ui/src/components/ExtractionStatus.jsx create mode 100644 sample_solutions/DocQvision/ui/src/components/FileUpload.jsx create mode 100644 sample_solutions/DocQvision/ui/src/components/Layout.jsx create mode 100644 sample_solutions/DocQvision/ui/src/components/PDFPreview.jsx create mode 100644 sample_solutions/DocQvision/ui/src/index.css create mode 100644 sample_solutions/DocQvision/ui/src/main.jsx create mode 100644 sample_solutions/DocQvision/ui/src/pages/ConfigurePage.jsx create mode 100644 sample_solutions/DocQvision/ui/src/pages/HistoryPage.jsx create mode 100644 sample_solutions/DocQvision/ui/src/pages/ResultsPage.jsx create mode 100644 sample_solutions/DocQvision/ui/src/pages/UploadPage.jsx create mode 100644 sample_solutions/DocQvision/ui/src/services/api.js create mode 100644 sample_solutions/DocQvision/ui/tailwind.config.js create mode 100644 sample_solutions/DocQvision/ui/vite.config.js diff --git a/sample_solutions/DocQvision/.env.example b/sample_solutions/DocQvision/.env.example new file mode 100644 index 00000000..53b79a8e --- /dev/null +++ b/sample_solutions/DocQvision/.env.example @@ -0,0 +1,9 @@ +# Docker Compose Configuration + +# Local URL Endpoint (only needed for non-public domains) +# If using a local domain like api.example.com mapped to localhost, set to the domain without https:// +# Otherwise, set to: not-needed +LOCAL_URL_ENDPOINT=not-needed + +BACKEND_PORT=5001 +FRONTEND_PORT=3000 diff --git a/sample_solutions/DocQvision/.gitignore b/sample_solutions/DocQvision/.gitignore new file mode 100644 index 00000000..0bae1ed2 --- /dev/null +++ b/sample_solutions/DocQvision/.gitignore @@ -0,0 +1,70 @@ +# Environment variables and secrets +.env +.env.local +.env.*.local +*.env + +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +env/ +venv/ +ENV/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# IDEs +.vscode/ +.idea/ +*.swp +*.swo +*~ +.DS_Store +Thumbs.db + +# Logs +*.log +logs/ + +# Testing +.pytest_cache/ +.coverage +htmlcov/ +tests/ + +# Node modules +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Docker +*.pid + +# Database files +*.db +*.sqlite +*.sqlite3 + +# Temporary files +*.tmp +*.bak +nul +tmp/ +temp/ diff --git a/sample_solutions/DocQvision/README.md b/sample_solutions/DocQvision/README.md new file mode 100644 index 00000000..3ccd384e --- /dev/null +++ b/sample_solutions/DocQvision/README.md @@ -0,0 +1,425 @@ +# DocQvision + +AI-powered document processing platform that extracts structured data from PDF documents using vision-language models. The system features conversational schema configuration through vision AI assistance, template management, and a multi-stage extraction pipeline that combines traditional pattern matching with vision model extraction as an intelligent fallback. + +## Table of Contents + +- [Project Overview](#project-overview) +- [Features](#features) +- [Architecture](#architecture) +- [Prerequisites](#prerequisites) +- [Quick Start Deployment](#quick-start-deployment) +- [User Interface](#user-interface) +- [Troubleshooting](#troubleshooting) + +--- + +## Project Overview + +DocQvision demonstrates how AI can automatically extract structured data from various document types including invoices, prescriptions, contracts, and forms. Users configure extraction templates through natural language conversation with vision AI, upload documents for batch processing, and export extracted data in multiple formats. The application supports GenAI Gateway and APISIX Gateway for enterprise deployments. + +--- + +## Features + +**Backend** + +- Multi-stage extraction pipeline with intelligent fallback (Traditional → Vision AI) +- Document type validation using vision models +- Conversational schema configuration with vision AI assistance +- Template system for reusable extraction configurations +- Batch document processing (up to 5 files simultaneously) +- Multiple export formats (JSON, CSV) +- Field coverage analysis and quality scoring +- Background job processing with real-time status updates +- Enterprise authentication support (GenAI Gateway, APISIX Gateway) +- SQLite database for persistence +- Document deduplication using SHA-256 hashing +- Comprehensive error handling and logging + +**Frontend** + +- Clean, intuitive interface with multi-page navigation +- Interactive PDF viewer with zoom and page navigation +- Drag-and-drop file upload with validation +- Conversational template configuration interface +- Real-time extraction progress monitoring +- Extraction history with filtering and search +- Template management dashboard +- Re-extraction capability for failed jobs +- Mobile-responsive design with Tailwind CSS + +--- + +## Architecture + +```mermaid +graph TB + subgraph "Client Layer" + A[React Web UI
Nginx
Port 3000] + end + + subgraph "Backend Service" + B[FastAPI Backend
Port 5001] + B1[Extraction Pipeline] + B2[Vision Service] + B3[SQLite Database] + B --> B1 + B --> B2 + B --> B3 + end + + subgraph "External Services" + C[GenAI Gateway / APISIX Gateway
Vision Models] + end + + A -->|Upload PDF| B + A -->|Configure Template Chat| B + A -->|Request Extraction| B + B -->|Chat Processing| B2 + B2 -->|Vision API Call| C + C -->|Schema Suggestions| B2 + B -->|Start Extraction Job| B1 + B1 -->|Traditional Pattern Match| B1 + B1 -->|Fallback if Coverage Low| B2 + C -->|Extracted Data| B2 + B1 -->|Store Templates & Results| B3 + B -->|JSON/CSV Response| A + + style A fill:#e1f5ff + style B fill:#fff4e1 + style B1 fill:#ffe1f5 + style B2 fill:#ffe1f5 + style B3 fill:#f5e1ff + style C fill:#e1ffe1 +``` + +**Service Components** + +1. **React Web UI (Port 3000)** + - Modern React application with responsive styling + - Handles user interactions and file uploads + - Interactive PDF preview with zoom controls + - Real-time extraction status monitoring + - Served via Nginx + +2. **Backend Service (Port 5001)** + - FastAPI-based modular architecture + - Multi-stage extraction pipeline (Traditional → Vision AI) + - Document type validation before extraction + - Template and document management with SQLite persistence + - Background job processing + - Field coverage scoring system + +3. **External Services** + - GenAI Gateway or APISIX Gateway with API key authentication + - Vision-language models for extraction and validation + +**Typical Flow:** + +1. User configures extraction template through conversational interface with vision AI +2. AI assistant guides user to define fields and data types +3. User tests extraction on sample document +4. Template is saved for reuse +5. User selects template and uploads documents for batch processing +6. Backend validates document type matches template +7. Extraction pipeline processes documents page-by-page (traditional first, vision AI fallback) +8. Results are displayed with coverage metrics and export options +9. User can view history and re-run failed extractions + +--- + +## Prerequisites + +### System Requirements + +Before you begin, ensure you have the following installed: + +- **Docker and Docker Compose** +- **GenAI Gateway** or **APISIX Gateway** access configured + +### Verify Docker Installation + +```bash +# Check Docker version +docker --version + +# Check Docker Compose version +docker compose version + +# Verify Docker is running +docker ps +``` + +### Required API Configuration + +**For Inference Service (Document Extraction):** + +This application supports multiple inference deployment patterns: + +**GenAI Gateway**: Provide your GenAI Gateway URL and API key +- **URL format**: `https://api.example.com` +- To generate the GenAI Gateway API key, use the [generate-vault-secrets.sh](https://github.com/opea-project/Enterprise-Inference/blob/main/core/scripts/generate-vault-secrets.sh) script +- The API key is the `litellm_master_key` value from the generated `vault.yml` file + +**APISIX Gateway**: Provide your APISIX Gateway URL and authentication token +- **URL format**: `https://api.example.com/Qwen2.5-VL-7B-Instruct` +- **Note**: APISIX requires the model name in the URL path (without company/family prefixes) +- To generate the APISIX authentication token, use the [generate-token.sh](https://github.com/opea-project/Enterprise-Inference/blob/main/core/scripts/generate-token.sh) script +- The token is generated using Keycloak client credentials + +**Configuration requirements:** +- **INFERENCE_API_ENDPOINT**: URL to your inference service (example: `https://api.example.com`) +- **INFERENCE_API_TOKEN**: Authentication token/API key for your chosen service + +--- + +## Quick Start Deployment + +### Clone the Repository + +```bash +git clone https://github.com/cld2labs/GenAISamples.git +cd GenAISamples/DocQvision +``` + +### Set up the Environment + +This application requires **two `.env` files** for proper configuration: + +1. **Root `.env` file** (for Docker Compose variables) +2. **`api/.env` file** (for backend application configuration) + +#### Step 1: Create Root `.env` File + +```bash +# From the DocQvision directory +cat > .env << EOF +# Docker Compose Configuration +LOCAL_URL_ENDPOINT=not-needed +EOF +``` + +**Note:** If using a local domain (e.g., `api.example.com` mapped to localhost), replace `not-needed` with your domain name (without `https://`). + +#### Step 2: Create `api/.env` File + +Copy from the example file and edit with your actual credentials: + +```bash +cp api/.env.example api/.env +``` + +Then edit `api/.env` to set your `INFERENCE_API_ENDPOINT` and `INFERENCE_API_TOKEN`. + +Or manually create `api/.env` with: + +```bash +# ============================================================================= +# DocQvision Configuration +# ============================================================================= + +# Inference API Configuration +# INFERENCE_API_ENDPOINT: URL to your inference service (without /v1 suffix) +# +# **GenAI Gateway**: Provide your GenAI Gateway URL and API key +# - URL format: https://api.example.com +# - To generate the GenAI Gateway API key, use the [generate-vault-secrets.sh] script +# - The API key is the litellm_master_key value from the generated vault.yml file +# +# **APISIX Gateway**: Provide your APISIX Gateway URL and authentication token +# - URL format: https://api.example.com/Qwen2.5-VL-7B-Instruct +# - Note: APISIX requires the model name in the URL path (without company/family prefixes) +# - To generate the APISIX authentication token, use the [generate-token.sh] script +# - The token is generated using Keycloak client credentials +# +# INFERENCE_API_TOKEN: Authentication token/API key for the inference service +INFERENCE_API_ENDPOINT=https://api.example.com +INFERENCE_API_TOKEN=your-pre-generated-token-here + +# Docker Network Configuration +# LOCAL_URL_ENDPOINT: Required if using local domain mapping (e.g., api.example.com -> localhost) +# Set to your domain name (without https://) or leave as "not-needed" if using public URLs +LOCAL_URL_ENDPOINT=not-needed + +# Vision Model Configuration +VISION_MODEL=Qwen/Qwen2.5-VL-7B-Instruct +DETECTION_MODEL=Qwen/Qwen2.5-VL-7B-Instruct +VISION_MAX_TOKENS=4000 +VISION_TEMPERATURE=0.1 + +# File Upload Limits +MAX_UPLOAD_MB=10 +MAX_PDF_PAGES=50 +MAX_BATCH_UPLOAD=5 + +# Extraction Pipeline Configuration +EXTRACTION_COVERAGE_THRESHOLD=0.8 +VISION_MAX_PAGES=5 + +# Service Configuration +LOG_LEVEL=INFO +ENVIRONMENT=production + +# CORS Settings +CORS_ORIGINS=http://localhost:3000,http://localhost:5173 + +# Security Configuration +# SSL Verification: Set to false only for development with self-signed certificates +VERIFY_SSL=true +``` + +**Important Configuration Notes:** + +- **INFERENCE_API_ENDPOINT**: Your actual inference service URL (replace `https://api.example.com`) + - For APISIX/Keycloak deployments, the model name must be included in the endpoint URL (e.g., `https://api.example.com/Qwen2.5-VL-7B-Instruct`) +- **INFERENCE_API_TOKEN**: Your actual pre-generated authentication token +- **VISION_MODEL** and **DETECTION_MODEL**: Use the exact model names from your inference service +- **LOCAL_URL_ENDPOINT**: Only needed if using local domain mapping + +**Note**: The docker-compose.yml file automatically loads environment variables from both `.env` (root) and `./api/.env` (backend) files. + +### Running the Application + +Start both API and UI services together with Docker Compose: + +```bash +# From the DocQvision directory +docker compose up --build + +# Or run in detached mode (background) +docker compose up -d --build +``` + +What happens during deployment: +- Docker builds images for frontend and backend (first time: 3-5 minutes) +- Creates containers for both services +- Sets up networking between services +- Initializes SQLite database + +### Verify Deployment + +Check that all containers are running: + +```bash +docker compose ps +``` + +Expected output - You should see 2 containers with status "Up": + +| Container Name | Port | Status | +|----------------|------|--------| +| `DocQvision-backend` | 5001 | Up (healthy) | +| `DocQvision-frontend` | 3000 | Up (healthy) | + +If any container shows "Restarting" or "Exited", check logs: + +```bash +docker compose logs -f +``` + +**View logs:** + +```bash +# All services +docker compose logs -f + +# Backend only +docker compose logs -f DocQvision-backend + +# Frontend only +docker compose logs -f DocQvision-frontend +``` + +**Verify the services are running:** + +```bash +# Check API health +curl http://localhost:5001/health + +# Check if containers are running +docker compose ps +``` + +### Local Development (Without Docker) + +For local development with hot reload: + +**Backend:** +```bash +cd api +pip install -r requirements.txt +python main.py +``` + +**Frontend:** +```bash +cd ui +npm install +npm run dev +``` + +The backend will run on http://localhost:5001 and frontend on http://localhost:5173 + +## User Interface + +**Using the Application** + +Access the application at http://localhost:3000 + +### Configure Template Page + +Define extraction fields through conversational vision AI interface. + +![Configure Template - Initial View](./assets/configure-initial.png) + +![Configure Template - Chat Interface](./assets/configure-chat.png) + +**Steps:** +1. Upload a sample PDF document. +2. Chat with vision AI to define fields (e.g., "client Company name, client representative name, patient name, invoice number, etc.") +3. Review configured schema. +4. Test extraction on sample document. +5. Save template for reuse. + +![Configure Template - Test Results](./assets/configure-test-results.png) + +### Upload Documents Page + +Process single or multiple documents with selected template. + +![Upload Page - Batch Processing](./assets/upload-page.png) + +**Steps:** +1. Select document template from dropdown +2. Upload 1-5 PDF files (drag-and-drop or file picker) +3. Click "Upload & Extract" +4. Monitor real-time extraction progress +5. View results or download JSON/CSV + + +### History Page + +Browse past extraction jobs with filtering and search. + +![History Page - Extraction History](./assets/history-page.png) + +**Features:** +- Filter by template or status +- View extraction metadata (coverage, processing time) +- Re-run failed extractions +- Export results to JSON or CSV +- Delete old extraction records +- Bulk operations on multiple records + +### API Documentation + +Interactive API documentation available at: +- **Swagger UI**: http://localhost:5001/docs +- **ReDoc**: http://localhost:5001/redoc + +## Troubleshooting + +For comprehensive troubleshooting guidance, common issues, and solutions, refer to: + +[TROUBLESHOOTING.md](./TROUBLESHOOTING.md) diff --git a/sample_solutions/DocQvision/TROUBLESHOOTING.md b/sample_solutions/DocQvision/TROUBLESHOOTING.md new file mode 100644 index 00000000..480e8c14 --- /dev/null +++ b/sample_solutions/DocQvision/TROUBLESHOOTING.md @@ -0,0 +1,468 @@ +# Troubleshooting Guide + +## Common Issues + +### 1. Containers Not Starting + +**Symptom**: Containers fail to start or exit immediately + +**Check container status:** +```bash +docker compose ps +``` + +**View error logs:** +```bash +docker compose logs backend +docker compose logs frontend +``` + +**Solution:** +```bash +# Rebuild containers +docker compose down +docker compose up -d --build +``` + +### 2. Backend Connection Errors + +**Symptom**: Frontend shows "Failed to connect" or network errors + +**Check backend health:** +```bash +curl http://localhost:5001/health +``` + +**Expected response:** +```json +{"status": "healthy", "auth_mode": "genai_gateway"} +``` + +**Solution:** +- Verify backend container is running: `docker compose ps` +- Check backend logs: `docker compose logs backend -f` +- Restart backend: `docker compose restart backend` + +### 3. Authentication Errors + +**Symptom**: Extraction fails with authentication errors + +**Error**: `AuthenticationError` or `Invalid API key` + +**Solution:** +- Check `GENAI_GATEWAY_API_KEY` in `api/.env` +- Verify API key is active and has proper permissions +- For Keycloak: Verify client secret is correct + +**Error**: `Connection refused` or `Connection timeout` + +**Solution:** +- Verify `GENAI_GATEWAY_URL` is correct in `api/.env` +- For Keycloak: Ensure `KEYCLOAK_BASE_URL` points to correct realm +- Test endpoint directly: +```bash +curl https://your-gateway-url.com/v1/models +``` + +### 4. Vision Model Errors + +**Symptom**: Extraction fails at vision stage + +**Error**: `Model not found` or `Model unavailable` + +**Solution:** +- Verify `VISION_MODEL` is deployed and accessible +- Check model name spelling in `api/.env` +- Confirm GenAI Gateway has vision model deployed +- For Keycloak: Verify inference endpoint supports vision models + +**Error**: `Rate limit exceeded` or `Quota exceeded` + +**Solution:** +- Wait a few minutes and retry +- Check API usage limits with administrator +- Reduce `MAX_BATCH_UPLOAD` to process fewer files at once + +### 5. PDF Upload Errors + +**Symptom**: PDF upload fails or returns validation errors + +**Error**: `Invalid PDF file` or `File validation failed` + +**Causes:** +- Corrupted PDF file +- Password-protected PDF +- Exceeds 10MB size limit +- Exceeds 50 pages limit + +**Solution:** +- Verify PDF opens in standard PDF viewer +- Remove password protection +- Compress large PDF files +- Split multi-page documents +- Check backend logs for specific error + +### 6. Document Type Mismatch + +**Symptom**: Extraction fails with document type validation error + +**Error**: `Document type mismatch detected` + +**Causes:** +- Selected wrong template for document +- Document type doesn't match template configuration +- Low confidence in document type detection + +**Solution:** +- Verify correct template is selected +- Check document matches expected type (invoice, prescription, etc.) +- Upload correct document type or create new template +- For test/debugging: Use template with doc_type "test" to skip validation + +### 7. Low Extraction Coverage + +**Symptom**: Extraction completes but many fields are empty + +**Possible causes:** +- Document quality is poor +- Fields not present in document +- Traditional extraction failed, vision model struggled +- Document layout significantly different from template + +**Solution:** +- Verify document contains all expected fields +- Use high-quality, clear PDF documents +- Check if document type matches template +- Review template schema matches document structure +- Test extraction on sample document in Configure page + +### 8. Frontend Not Loading + +**Symptom**: Browser shows blank page or cannot connect + +**Check frontend status:** +```bash +docker compose ps frontend +``` + +**Check frontend logs:** +```bash +docker compose logs frontend -f +``` + +**Solution:** +- Clear browser cache and hard refresh (Ctrl+F5) +- Verify port 3000 is not in use by another application +- Restart frontend: `docker compose restart frontend` +- Check firewall settings +- Try accessing from different browser + +### 9. PDF Preview Not Working + +**Symptom**: PDF preview shows error or doesn't load + +**Error**: `Failed to load PDF file` + +**Solution:** +- Verify PDF file is valid and not corrupted +- Check file size is under 10MB +- Ensure browser supports PDF.js +- Clear browser cache +- Check browser console for errors + +### 10. Template Configuration Fails + +**Symptom**: Chat-based configuration not responding or returning errors + +**Error**: `Failed to process message` or `Chat response failed` + +**Solution:** +- Check vision model is configured correctly +- Verify authentication is working +- Review backend logs for specific errors +- Try simpler field descriptions +- Ensure PDF is uploaded before chatting + +### 11. Test Extraction Fails with 422 Error + +**Symptom**: Test extraction button returns 422 error + +**Error**: `Failed to test extraction: Request failed with status code 422` + +**Causes:** +- Invalid schema structure +- Missing required fields in template +- Backend validation error + +**Solution:** +- Check backend logs for validation details +- Ensure all fields have proper type definitions +- Restart backend: `docker compose restart backend` +- Try creating a simpler template first + +### 12. Batch Upload Failures + +**Symptom**: Some files in batch fail while others succeed + +**Check error details:** +- Review individual file error messages in UI +- Check backend logs for specific file failures + +**Common causes:** +- Individual file validation errors +- Mixed document types in batch +- One or more files corrupted +- Size or page limit exceeded on specific files + +**Solution:** +- Upload failed files individually to see specific errors +- Ensure all files are same document type +- Verify each file meets requirements (size, format, pages) +- Process problem files separately + +### 13. Port Already in Use + +**Error**: `Port 3000 is already allocated` or `Port 5001 is already allocated` + +**Find process using port:** +```bash +# Windows +netstat -ano | findstr :3000 +netstat -ano | findstr :5001 + +# Linux/Mac +lsof -i :3000 +lsof -i :5001 +``` + +**Solution:** +- Stop the conflicting process +- Or change ports in `docker-compose.yml` + +### 14. Database Errors + +**Symptom**: Backend fails with database operation errors + +**Error**: `Database is locked` or `OperationalError` + +**Solution:** +```bash +# Stop containers +docker compose down + +# Remove database volume +docker volume rm DocQvision_db_data + +# Restart +docker compose up -d --build +``` + +**Warning**: This will delete all templates and extraction history + +### 15. Out of Memory Errors + +**Symptom**: Container crashes or backend becomes unresponsive + +**Check logs:** +```bash +docker compose logs backend | grep -i "memory\|killed" +``` + +**Solution:** +- Reduce `MAX_BATCH_UPLOAD` from 5 to 2-3 files +- Process smaller PDF files +- Reduce `VISION_MAX_PAGES` from 5 to 2-3 pages +- Increase Docker memory limit in Docker Desktop settings +- Reduce `VISION_MAX_TOKENS` if using large context + +### 16. CORS Errors + +**Symptom**: Browser console shows CORS policy errors + +**Error**: `Access to fetch has been blocked by CORS policy` + +**Solution:** +- Verify backend is running on port 5001 +- Check `CORS_ORIGINS` in `api/.env` includes frontend URL +- Ensure frontend is accessing correct backend URL +- Restart both containers after configuration changes + +### 17. Session Lost on Refresh + +**Symptom**: Template configuration session lost when page refreshes + +**Explanation:** +- Configure page saves session to browser localStorage +- Data persists across page refreshes +- Intentional design for resume capability + +**Solution:** +- Use "New Template" button to start fresh session +- Browser prompts to continue or start new when previous session found +- Clear browser localStorage to reset completely + +### 18. Extraction Returns Incomplete Data + +**Symptom**: Some fields extracted correctly, others missing + +**Common causes:** +- Fields located in different sections of document +- Vision model only processed first few pages +- Field names don't match document structure + +**Solution:** +- Increase `VISION_MAX_PAGES` to process more pages +- Verify field names match actual document headers +- Use more specific field descriptions in template +- Check if missing fields are on later pages + +## Configuration Issues + +### Invalid .env Configuration + +**Symptom**: Backend fails to start with configuration errors + +**Check required variables in `api/.env`:** +```bash +AUTH_MODE=genai_gateway +GENAI_GATEWAY_URL=https://your-gateway-url.com/v1 +GENAI_GATEWAY_API_KEY=your-api-key-here +VISION_MODEL=Qwen/Qwen2.5-VL-7B-Instruct +``` + +**Common mistakes:** +- Missing required variables +- Extra spaces in variable names +- Wrong endpoint format (missing /v1) +- Quotes around values (not needed) +- Wrong AUTH_MODE value + +### Authentication Mode Configuration + +**For GenAI Gateway:** +```bash +AUTH_MODE=genai_gateway +GENAI_GATEWAY_URL=https://your-gateway-url.com/v1 +GENAI_GATEWAY_API_KEY=your-api-key-here +VISION_MODEL=Qwen/Qwen2.5-VL-7B-Instruct +DETECTION_MODEL=Qwen/Qwen2.5-VL-7B-Instruct +``` + +**For Keycloak:** +```bash +AUTH_MODE=keycloak +KEYCLOAK_BASE_URL=https://your-keycloak-url.com/realms/master/protocol/openid-connect +KEYCLOAK_REALM=master +KEYCLOAK_CLIENT_ID=api +KEYCLOAK_CLIENT_SECRET=your-client-secret-here +VISION_MODEL=Qwen/Qwen2.5-VL-7B-Instruct +DETECTION_MODEL=Qwen/Qwen2.5-VL-7B-Instruct +``` + +## Advanced Troubleshooting + +### Enable Debug Logging + +Edit `api/.env`: +```bash +LOG_LEVEL=DEBUG +``` + +Restart backend: +```bash +docker compose restart backend +docker compose logs backend -f +``` + +### Test Backend Directly + +**Test health endpoint:** +```bash +curl http://localhost:5001/health +``` + +**Test template creation:** +```bash +curl -X POST http://localhost:5001/api/templates \ + -H "Content-Type: application/json" \ + -d '{ + "name": "Test Template", + "doc_type": "test", + "schema_json": { + "field1": {"type": "string", "required": true}, + "field2": {"type": "number", "required": false} + } + }' +``` + +**Test document upload:** +```bash +curl -X POST http://localhost:5001/api/documents/upload \ + -F "file=@test.pdf" +``` + +### Inspect Container + +**Access backend container shell:** +```bash +docker compose exec backend /bin/bash +``` + +**Check Python environment:** +```bash +docker compose exec backend pip list +docker compose exec backend python -c "import pypdf; print(pypdf.__version__)" +``` + +**Check database:** +```bash +docker compose exec backend python -c " +from database import engine +from sqlalchemy import inspect +inspector = inspect(engine) +print('Tables:', inspector.get_table_names()) +" +``` + +### Clean Docker Environment + +If issues persist, clean Docker completely: + +```bash +# Stop and remove containers +docker compose down -v + +# Remove unused images +docker system prune -a + +# Rebuild from scratch +docker compose up -d --build +``` + +## Getting Help + +If issues persist after following this guide: + +1. **Collect Information:** + - Docker logs: `docker compose logs > logs.txt` + - Docker status: `docker compose ps` + - Environment: `docker compose config` + - Backend health: `curl http://localhost:5001/health` + +2. **Check Configuration:** + - Review `api/.env` file + - Verify API keys/credentials are valid + - Test authentication endpoint independently + - Check vision model is deployed + +3. **Try Minimal Setup:** + - Use fresh `.env` configuration + - Test with simple document (single page invoice) + - Verify extraction works on known good document + - Check if issue persists with minimal config + +4. **System Information:** + - Docker version: `docker --version` + - Docker Compose version: `docker compose version` + - Operating system and version + - Available memory and disk space diff --git a/sample_solutions/DocQvision/api/.dockerignore b/sample_solutions/DocQvision/api/.dockerignore new file mode 100644 index 00000000..719e5044 --- /dev/null +++ b/sample_solutions/DocQvision/api/.dockerignore @@ -0,0 +1,76 @@ +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Virtual environments +venv/ +env/ +ENV/ +.venv + +# Environment variables +.env +.env.local +.env.*.local + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ +.DS_Store + +# Testing +.pytest_cache/ +.coverage +htmlcov/ +.tox/ + +# Database +*.db +*.sqlite +*.sqlite3 +data/ + +# Logs +*.log +logs/ + +# Documentation +*.md +docs/ + +# Git +.git/ +.gitignore +.gitattributes + +# Docker +Dockerfile* +docker-compose*.yml +.dockerignore + +# Temporary files +*.tmp +*.bak +*.swp +.cache/ diff --git a/sample_solutions/DocQvision/api/.env.example b/sample_solutions/DocQvision/api/.env.example new file mode 100644 index 00000000..6396937d --- /dev/null +++ b/sample_solutions/DocQvision/api/.env.example @@ -0,0 +1,52 @@ +# ============================================================================= +# DocQvision Configuration +# ============================================================================= + +# Inference API Configuration +# INFERENCE_API_ENDPOINT: URL to your inference service (without /v1 suffix) +# +# **GenAI Gateway**: Provide your GenAI Gateway URL and API key +# - URL format: https://api.example.com +# - To generate the GenAI Gateway API key, use the [generate-vault-secrets.sh](https://github.com/opea-project/Enterprise-Inference/blob/main/core/scripts/generate-vault-secrets.sh) script +# - The API key is the litellm_master_key value from the generated vault.yml file +# +# **APISIX Gateway**: Provide your APISIX Gateway URL and authentication token +# - URL format: https://api.example.com/Qwen2.5-VL-7B-Instruct +# - Note: APISIX requires the model name in the URL path (without company/family prefixes) +# - To generate the APISIX authentication token, use the [generate-token.sh](https://github.com/opea-project/Enterprise-Inference/blob/main/core/scripts/generate-token.sh) script +# - The token is generated using Keycloak client credentials +# +# INFERENCE_API_TOKEN: Authentication token/API key for the inference service +INFERENCE_API_ENDPOINT=https://api.example.com +INFERENCE_API_TOKEN=your-pre-generated-token-here + +# Docker Network Configuration +# LOCAL_URL_ENDPOINT: Required if using local domain mapping (e.g., api.example.com -> localhost) +# Set to your domain name (without https://) or leave as "not-needed" if using public URLs +LOCAL_URL_ENDPOINT=not-needed + +# Vision Model Configuration +VISION_MODEL=Qwen/Qwen2.5-VL-7B-Instruct +DETECTION_MODEL=Qwen/Qwen2.5-VL-7B-Instruct +VISION_MAX_TOKENS=4000 +VISION_TEMPERATURE=0.1 + +# File Upload Limits +MAX_UPLOAD_MB=10 +MAX_PDF_PAGES=50 +MAX_BATCH_UPLOAD=5 + +# Extraction Pipeline Configuration +EXTRACTION_COVERAGE_THRESHOLD=0.8 +VISION_MAX_PAGES=5 + +# Service Configuration +LOG_LEVEL=INFO +ENVIRONMENT=production + +# CORS Settings +CORS_ORIGINS=http://localhost:3000,http://localhost:5173 + +# Security Configuration +# SSL Verification: Set to false only for development with self-signed certificates +VERIFY_SSL=true diff --git a/sample_solutions/DocQvision/api/Dockerfile b/sample_solutions/DocQvision/api/Dockerfile new file mode 100644 index 00000000..3160f6fb --- /dev/null +++ b/sample_solutions/DocQvision/api/Dockerfile @@ -0,0 +1,73 @@ +# ============================================================================= +# DocQvision API - Production Dockerfile +# ============================================================================= + +FROM python:3.11-slim as base + +# Set environment variables +ENV PYTHONUNBUFFERED=1 \ + PYTHONDONTWRITEBYTECODE=1 \ + PIP_NO_CACHE_DIR=1 \ + PIP_DISABLE_PIP_VERSION_CHECK=1 + +WORKDIR /app + +# ============================================================================= +# Builder stage - Install dependencies +# ============================================================================= +FROM base as builder + +# Install system dependencies required for PDF processing and Python packages +RUN apt-get update && apt-get install -y --no-install-recommends \ + # Required for PDF processing + poppler-utils \ + # Required for building Python packages + gcc \ + g++ \ + # Required for healthcheck + curl \ + && rm -rf /var/lib/apt/lists/* + +# Copy requirements first for better layer caching +COPY requirements.txt . + +# Install Python dependencies +RUN pip install --no-cache-dir -r requirements.txt + +# ============================================================================= +# Runtime stage - Create minimal production image +# ============================================================================= +FROM base as runtime + +# Install only runtime system dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + poppler-utils \ + curl \ + && rm -rf /var/lib/apt/lists/* \ + && apt-get clean + +# Create non-root user for security +RUN groupadd -r appuser && useradd -r -g appuser appuser + +# Copy Python dependencies from builder +COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages +COPY --from=builder /usr/local/bin /usr/local/bin + +# Create directory for SQLite database with proper permissions +RUN mkdir -p /app/data && chown -R appuser:appuser /app/data + +# Copy application code +COPY --chown=appuser:appuser . . + +# Switch to non-root user +USER appuser + +# Expose application port +EXPOSE 5001 + +# Health check +HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ + CMD curl -f http://localhost:5001/health || exit 1 + +# Run the application +CMD ["python", "main.py"] diff --git a/sample_solutions/DocQvision/api/config.py b/sample_solutions/DocQvision/api/config.py new file mode 100644 index 00000000..fd3835bc --- /dev/null +++ b/sample_solutions/DocQvision/api/config.py @@ -0,0 +1,61 @@ +""" +Application configuration management. + +Supports GenAI Gateway, APISIX Gateway, and any OpenAI-compatible inference endpoint. +""" + +import os +from typing import Optional +from dotenv import load_dotenv + +load_dotenv() + + +# Inference API Configuration +# Supports multiple inference deployment patterns: +# - GenAI Gateway: Provide your GenAI Gateway URL and API key +# - APISIX Gateway: Provide your APISIX Gateway URL and authentication token +INFERENCE_API_ENDPOINT: Optional[str] = os.getenv("INFERENCE_API_ENDPOINT") +INFERENCE_API_TOKEN: Optional[str] = os.getenv("INFERENCE_API_TOKEN") + +# Security Configuration +VERIFY_SSL = os.getenv("VERIFY_SSL", "true").lower() in ("true", "1", "yes") + +# Database Configuration +DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///./DocQvision.db") + +# Application Settings +LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO") +ENVIRONMENT = os.getenv("ENVIRONMENT", "development") +CORS_ORIGINS = os.getenv("CORS_ORIGINS", "*") + +# Vision Model Configuration +VISION_MODEL = os.getenv("VISION_MODEL", "Qwen/Qwen2.5-VL-7B-Instruct") +VISION_MAX_TOKENS = int(os.getenv("VISION_MAX_TOKENS", "4000")) +VISION_TEMPERATURE = float(os.getenv("VISION_TEMPERATURE", "0.1")) + +# Document Type Detection Model +DETECTION_MODEL = os.getenv("DETECTION_MODEL", "Qwen/Qwen2.5-VL-7B-Instruct") + +# File Upload Limits +MAX_FILE_SIZE = int(os.getenv("MAX_UPLOAD_MB", "10")) * 1024 * 1024 +MAX_PDF_PAGES = int(os.getenv("MAX_PDF_PAGES", "50")) +MAX_BATCH_UPLOAD = int(os.getenv("MAX_BATCH_UPLOAD", "5")) +ALLOWED_EXTENSIONS = {".pdf"} + +# Extraction Pipeline Configuration +EXTRACTION_COVERAGE_THRESHOLD = float(os.getenv("EXTRACTION_COVERAGE_THRESHOLD", "0.8")) +VISION_MAX_PAGES = int(os.getenv("VISION_MAX_PAGES", "5")) # Increased to handle multi-page documents + + +def validate_auth_config() -> None: + """ + Validate authentication configuration on startup + + Raises: + ValueError: If required configuration is missing + """ + if not INFERENCE_API_ENDPOINT: + raise ValueError("INFERENCE_API_ENDPOINT is required") + if not INFERENCE_API_TOKEN: + raise ValueError("INFERENCE_API_TOKEN is required") diff --git a/sample_solutions/DocQvision/api/crud.py b/sample_solutions/DocQvision/api/crud.py new file mode 100644 index 00000000..3dce7b3e --- /dev/null +++ b/sample_solutions/DocQvision/api/crud.py @@ -0,0 +1,334 @@ +""" +CRUD operations for database models. + +Provides create, read, update, delete operations for templates, documents, +and extraction results. +""" + +from sqlalchemy.orm import Session +from typing import Optional, List, Dict, Any +import models +import schemas +import uuid +import hashlib +from datetime import datetime + + +# Template CRUD operations + +def create_template(db: Session, template: schemas.TemplateCreate) -> models.Template: + """ + Create a new template in database. + + Args: + db: Database session + template: Template creation data + + Returns: + Created template model instance + """ + template_id = str(uuid.uuid4()) + db_template = models.Template( + id=template_id, + name=template.name, + doc_type=template.doc_type, + schema_json={k: v.model_dump() for k, v in template.schema_json.items()} + ) + db.add(db_template) + db.commit() + db.refresh(db_template) + return db_template + + +def get_template(db: Session, template_id: str) -> Optional[models.Template]: + """ + Retrieve template by ID. + + Args: + db: Database session + template_id: Template identifier + + Returns: + Template model instance or None if not found + """ + return db.query(models.Template).filter(models.Template.id == template_id).first() + + +def get_templates(db: Session, skip: int = 0, limit: int = 100) -> List[models.Template]: + """ + Retrieve all templates with pagination. + + Args: + db: Database session + skip: Number of records to skip + limit: Maximum number of records to return + + Returns: + List of template model instances + """ + return db.query(models.Template).order_by(models.Template.created_at.desc()).offset(skip).limit(limit).all() + + +def get_templates_by_doc_type(db: Session, doc_type: str) -> List[models.Template]: + """ + Retrieve templates matching a specific document type. + + Args: + db: Database session + doc_type: Document type to filter by + + Returns: + List of template model instances matching the document type + """ + normalized_doc_type = doc_type.lower().replace("_", "").replace("-", "") + + all_templates = db.query(models.Template).all() + matching_templates = [] + + for template in all_templates: + if template.doc_type: + normalized_template_type = template.doc_type.lower().replace("_", "").replace("-", "") + if normalized_template_type == normalized_doc_type: + matching_templates.append(template) + + return sorted(matching_templates, key=lambda t: t.created_at, reverse=True) + + +def update_template(db: Session, template_id: str, template_update: schemas.TemplateUpdate) -> Optional[models.Template]: + """ + Update existing template. + + Args: + db: Database session + template_id: Template identifier + template_update: Fields to update + + Returns: + Updated template model instance or None if not found + """ + db_template = get_template(db, template_id) + if not db_template: + return None + + update_data = template_update.model_dump(exclude_unset=True) + if 'schema_json' in update_data and update_data['schema_json']: + update_data['schema_json'] = {k: v.model_dump() for k, v in update_data['schema_json'].items()} + + for field, value in update_data.items(): + setattr(db_template, field, value) + + db.commit() + db.refresh(db_template) + return db_template + + +def delete_template(db: Session, template_id: str) -> bool: + """ + Delete template by ID. + + Args: + db: Database session + template_id: Template identifier + + Returns: + True if deleted, False if not found + """ + db_template = get_template(db, template_id) + if not db_template: + return False + + db.delete(db_template) + db.commit() + return True + + +# Document CRUD operations + +def create_document(db: Session, filename: str, file_content: bytes, page_count: Optional[int] = None) -> models.Document: + """ + Create a new document in database. + + Args: + db: Database session + filename: Original filename + file_content: Binary PDF content + page_count: Number of pages in PDF + + Returns: + Created document model instance + """ + document_id = str(uuid.uuid4()) + sha256_hash = hashlib.sha256(file_content).hexdigest() + + db_document = models.Document( + id=document_id, + filename=filename, + file_size=len(file_content), + page_count=page_count, + sha256_hash=sha256_hash, + file_content=file_content + ) + db.add(db_document) + db.commit() + db.refresh(db_document) + return db_document + + +def get_document(db: Session, document_id: str) -> Optional[models.Document]: + """ + Retrieve document by ID. + + Args: + db: Database session + document_id: Document identifier + + Returns: + Document model instance or None if not found + """ + return db.query(models.Document).filter(models.Document.id == document_id).first() + + +def get_document_by_hash(db: Session, sha256_hash: str) -> Optional[models.Document]: + """ + Retrieve document by SHA-256 hash for deduplication. + + Args: + db: Database session + sha256_hash: SHA-256 hash of file content + + Returns: + Document model instance or None if not found + """ + return db.query(models.Document).filter(models.Document.sha256_hash == sha256_hash).first() + + +# Extraction Result CRUD operations + +def create_extraction_result( + db: Session, + document_id: str, + template_id: str +) -> models.ExtractionResult: + """ + Create a new extraction result record with pending status. + + Args: + db: Database session + document_id: Document identifier + template_id: Template identifier + + Returns: + Created extraction result model instance + """ + result_id = str(uuid.uuid4()) + db_result = models.ExtractionResult( + id=result_id, + document_id=document_id, + template_id=template_id, + status=models.ExtractionStatus.PENDING + ) + db.add(db_result) + db.commit() + db.refresh(db_result) + return db_result + + +def update_extraction_result( + db: Session, + result_id: str, + status: Optional[models.ExtractionStatus] = None, + stage_used: Optional[models.ExtractionStage] = None, + extracted_data: Optional[Dict[str, Any]] = None, + field_coverage_percent: Optional[float] = None, + processing_time_ms: Optional[int] = None, + model_used: Optional[str] = None, + error_message: Optional[str] = None +) -> Optional[models.ExtractionResult]: + """ + Update extraction result with processing results. + + Args: + db: Database session + result_id: Extraction result identifier + status: Job status + stage_used: Pipeline stage that produced result + extracted_data: Extracted field values + field_coverage_percent: Coverage percentage + processing_time_ms: Processing time + model_used: Model identifier + error_message: Error details + + Returns: + Updated extraction result model instance or None if not found + """ + db_result = db.query(models.ExtractionResult).filter(models.ExtractionResult.id == result_id).first() + if not db_result: + return None + + if status is not None: + db_result.status = status + if stage_used is not None: + db_result.stage_used = stage_used + if extracted_data is not None: + db_result.extracted_data = extracted_data + if field_coverage_percent is not None: + db_result.field_coverage_percent = field_coverage_percent + if processing_time_ms is not None: + db_result.processing_time_ms = processing_time_ms + if model_used is not None: + db_result.model_used = model_used + if error_message is not None: + db_result.error_message = error_message + + db.commit() + db.refresh(db_result) + return db_result + + +def get_extraction_result(db: Session, result_id: str) -> Optional[models.ExtractionResult]: + """ + Retrieve extraction result by ID. + + Args: + db: Database session + result_id: Extraction result identifier + + Returns: + Extraction result model instance or None if not found + """ + return db.query(models.ExtractionResult).filter(models.ExtractionResult.id == result_id).first() + + +def get_extraction_history( + db: Session, + template_id: Optional[str] = None, + status: Optional[models.ExtractionStatus] = None, + skip: int = 0, + limit: int = 50 +) -> List[models.ExtractionResult]: + """ + Retrieve extraction history with optional filtering. + + Args: + db: Database session + template_id: Filter by template ID + status: Filter by status + skip: Number of records to skip + limit: Maximum number of records to return + + Returns: + List of extraction result model instances with document and template relationships loaded + """ + from sqlalchemy.orm import joinedload + + query = db.query(models.ExtractionResult).options( + joinedload(models.ExtractionResult.document), + joinedload(models.ExtractionResult.template) + ) + + if template_id: + query = query.filter(models.ExtractionResult.template_id == template_id) + if status: + query = query.filter(models.ExtractionResult.status == status) + + return query.order_by(models.ExtractionResult.created_at.desc()).offset(skip).limit(limit).all() diff --git a/sample_solutions/DocQvision/api/database.py b/sample_solutions/DocQvision/api/database.py new file mode 100644 index 00000000..54e0be95 --- /dev/null +++ b/sample_solutions/DocQvision/api/database.py @@ -0,0 +1,60 @@ +""" +Database configuration and session management. + +This module sets up SQLAlchemy engine, session factory, and base class +for all database models. Provides dependency injection for FastAPI endpoints. +""" + +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import sessionmaker, Session +from typing import Generator +import config + +# Database URL from configuration +DATABASE_URL = getattr(config, 'DATABASE_URL', 'sqlite:///./DocQvision.db') + +# Create SQLAlchemy engine +# connect_args for SQLite only - allows multi-threaded access +engine = create_engine( + DATABASE_URL, + connect_args={"check_same_thread": False} if DATABASE_URL.startswith("sqlite") else {}, + pool_pre_ping=True, + echo=False +) + +# Session factory for creating database sessions +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) + +# Base class for all ORM models +Base = declarative_base() + + +def get_db() -> Generator[Session, None, None]: + """ + Dependency function for FastAPI endpoints to get database session. + + Yields database session and ensures proper cleanup after request completion. + + Yields: + Session: SQLAlchemy database session + + Example: + @app.get("/items") + def read_items(db: Session = Depends(get_db)): + return db.query(Item).all() + """ + db = SessionLocal() + try: + yield db + finally: + db.close() + + +def init_db() -> None: + """ + Initialize database by creating all tables. + + Should be called on application startup to ensure database schema exists. + """ + Base.metadata.create_all(bind=engine) diff --git a/sample_solutions/DocQvision/api/main.py b/sample_solutions/DocQvision/api/main.py new file mode 100644 index 00000000..7227938d --- /dev/null +++ b/sample_solutions/DocQvision/api/main.py @@ -0,0 +1,665 @@ +""" +DocQvision API - Document Intelligence Platform + +FastAPI application providing REST endpoints for template-based document extraction +using AI vision models. Supports chat-based schema configuration, PDF upload, +data extraction, and result export. +""" + +import logging +from fastapi import FastAPI, UploadFile, File, Form, HTTPException, Depends, BackgroundTasks +from fastapi.middleware.cors import CORSMiddleware +from fastapi.responses import JSONResponse +from sqlalchemy.orm import Session +from typing import Optional, List +import uvicorn +import json + +import config +from database import get_db, init_db +from services.extraction_service import ExtractionService +from utils.validators import validate_pdf_file, sanitize_chat_message +import crud +import schemas + +logging.basicConfig( + level=getattr(logging, config.LOG_LEVEL), + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' +) +logger = logging.getLogger(__name__) + +app = FastAPI( + title="DocQvision API", + description="Document Intelligence Platform API - Extract structured data from PDF documents using AI vision models", + version="1.0.0" +) + +origins = config.CORS_ORIGINS.split(",") if config.CORS_ORIGINS != "*" else ["*"] + +app.add_middleware( + CORSMiddleware, + allow_origins=origins, + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +extraction_service = ExtractionService() + + +@app.exception_handler(Exception) +async def global_exception_handler(request, exc): + """Global exception handler for unhandled errors.""" + logger.error(f"Global exception: {str(exc)}", exc_info=True) + return JSONResponse( + status_code=500, + content={"error": "Internal server error", "detail": str(exc)} + ) + + +@app.get("/") +def root(): + """Root endpoint with service information.""" + return { + "message": "DocQvision API is running", + "version": "1.0.0", + "status": "healthy", + "docs": "/docs", + "inference_endpoint": config.INFERENCE_API_ENDPOINT, + "vision_model": config.VISION_MODEL + } + + +@app.get("/health") +def health_check(): + """Health check endpoint for monitoring.""" + return { + "status": "healthy", + "service": "DocQvision", + "version": "1.0.0" + } + + +@app.post("/api/configure") +async def configure_schema( + message: str = Form(...), + session_id: Optional[str] = Form(None), + db: Session = Depends(get_db) +): + """ + Process chat message to build extraction schema with session isolation. + + Uses conversational AI to help users define extraction fields interactively. + Each session maintains independent chat history and schema. + + Args: + message: User's natural language message + session_id: Optional session identifier for chat isolation + db: Database session + + Returns: + AI reply with updated schema definition and session_id + """ + try: + if not message or not message.strip(): + raise HTTPException(status_code=400, detail="Message cannot be empty") + + sanitized_message = sanitize_chat_message(message) + result = extraction_service.process_chat_message(sanitized_message, session_id) + return result + except HTTPException: + raise + except Exception as e: + logger.error(f"Error in configure endpoint: {str(e)}") + raise HTTPException(status_code=500, detail=str(e)) + + +@app.post("/api/configure/clear") +async def clear_chat_session(session_id: str = Form(...)): + """ + Clear/reset a chat session. + + Args: + session_id: Session identifier to clear + + Returns: + Success confirmation + """ + try: + result = extraction_service.clear_session(session_id) + return result + except Exception as e: + logger.error(f"Error clearing session: {str(e)}") + raise HTTPException(status_code=500, detail=str(e)) + + +@app.post("/api/templates", response_model=schemas.TemplateResponse) +def create_template( + template: schemas.TemplateCreate, + db: Session = Depends(get_db) +): + """ + Create a new extraction template. + + Args: + template: Template creation data with name, type, and schema + db: Database session + + Returns: + Created template with ID and timestamps + """ + try: + db_template = crud.create_template(db, template) + logger.info(f"Template created: {db_template.id}") + return db_template + except Exception as e: + logger.error(f"Error creating template: {str(e)}") + raise HTTPException(status_code=500, detail=str(e)) + + +@app.get("/api/templates", response_model=List[schemas.TemplateListItem]) +def list_templates( + skip: int = 0, + limit: int = 100, + db: Session = Depends(get_db) +): + """ + Retrieve all templates with pagination. + + Args: + skip: Number of records to skip + limit: Maximum number of records to return + db: Database session + + Returns: + List of template summaries + """ + try: + templates = crud.get_templates(db, skip=skip, limit=limit) + return templates + except Exception as e: + logger.error(f"Error listing templates: {str(e)}") + raise HTTPException(status_code=500, detail=str(e)) + + +@app.get("/api/templates/{template_id}", response_model=schemas.TemplateResponse) +def get_template( + template_id: str, + db: Session = Depends(get_db) +): + """ + Retrieve template by ID. + + Args: + template_id: Template identifier + db: Database session + + Returns: + Template details with full schema + """ + template = crud.get_template(db, template_id) + if not template: + raise HTTPException(status_code=404, detail="Template not found") + return template + + +@app.put("/api/templates/{template_id}", response_model=schemas.TemplateResponse) +def update_template( + template_id: str, + template_update: schemas.TemplateUpdate, + db: Session = Depends(get_db) +): + """ + Update existing template. + + Args: + template_id: Template identifier + template_update: Fields to update + db: Database session + + Returns: + Updated template + """ + updated_template = crud.update_template(db, template_id, template_update) + if not updated_template: + raise HTTPException(status_code=404, detail="Template not found") + + logger.info(f"Template updated: {template_id}") + return updated_template + + +@app.delete("/api/templates/{template_id}") +def delete_template( + template_id: str, + db: Session = Depends(get_db) +): + """ + Delete template by ID. + + Args: + template_id: Template identifier + db: Database session + + Returns: + Success confirmation + """ + deleted = crud.delete_template(db, template_id) + if not deleted: + raise HTTPException(status_code=404, detail="Template not found") + + logger.info(f"Template deleted: {template_id}") + return {"success": True, "message": "Template deleted successfully"} + + +@app.post("/api/templates/save") +async def save_template_from_chat( + name: str = Form(...), + template_type: str = Form(...), + schema: str = Form(...), + db: Session = Depends(get_db) +): + """ + Save template from chat configuration. + + Converts flat schema format to nested format and saves to database. + + Args: + name: Template name + template_type: Document type + schema: JSON string with schema definition + db: Database session + + Returns: + Success confirmation with template ID + """ + try: + schema_dict = json.loads(schema) + + def convert_to_field_schema(field_type): + """Convert field type string to FieldSchema object.""" + if isinstance(field_type, dict): + return field_type + return { + "type": field_type, + "required": True + } + + nested_schema = {} + for field_name, field_type in schema_dict.items(): + nested_schema[field_name] = convert_to_field_schema(field_type) + + template_create = schemas.TemplateCreate( + name=name, + doc_type=template_type, + schema_json=nested_schema + ) + + db_template = crud.create_template(db, template_create) + logger.info(f"Template saved: {db_template.id}") + + return { + "success": True, + "template_id": db_template.id, + "message": f"Template '{name}' saved successfully" + } + except json.JSONDecodeError: + raise HTTPException(status_code=400, detail="Invalid schema format") + except Exception as e: + logger.error(f"Error saving template: {str(e)}", exc_info=True) + raise HTTPException(status_code=500, detail=str(e)) + + +@app.post("/api/documents/upload", response_model=schemas.DocumentUploadResponse) +async def upload_document( + file: UploadFile = File(...), + db: Session = Depends(get_db) +): + """ + Upload PDF document to database. + + Args: + file: PDF file upload + db: Database session + + Returns: + Document metadata with ID + """ + try: + content = await file.read() + + is_valid, error_msg = validate_pdf_file(content, file.filename) + if not is_valid: + raise HTTPException(status_code=400, detail=error_msg) + + if len(content) > config.MAX_FILE_SIZE: + raise HTTPException( + status_code=400, + detail=f"File size exceeds {config.MAX_FILE_SIZE // (1024*1024)}MB limit" + ) + + db_document = crud.create_document(db, file.filename, content) + logger.info(f"Document uploaded: {db_document.id} ({file.filename})") + + return schemas.DocumentUploadResponse( + document_id=db_document.id, + filename=db_document.filename, + file_size=db_document.file_size, + page_count=db_document.page_count, + uploaded_at=db_document.uploaded_at + ) + except HTTPException: + raise + except Exception as e: + logger.error(f"Error uploading document: {str(e)}") + raise HTTPException(status_code=500, detail=str(e)) + + +@app.post("/api/documents/batch-upload") +async def batch_upload_documents( + files: List[UploadFile] = File(...), + db: Session = Depends(get_db) +): + """ + Upload multiple PDF documents in batch. + + Args: + files: List of PDF file uploads + db: Database session + + Returns: + List of document upload responses with success/error status + """ + if len(files) > config.MAX_BATCH_UPLOAD: + raise HTTPException( + status_code=400, + detail=f"Maximum {config.MAX_BATCH_UPLOAD} files allowed per batch upload" + ) + + results = [] + for file in files: + try: + content = await file.read() + + is_valid, error_msg = validate_pdf_file(content, file.filename) + if not is_valid: + results.append({ + "filename": file.filename, + "success": False, + "error": error_msg + }) + continue + + if len(content) > config.MAX_FILE_SIZE: + results.append({ + "filename": file.filename, + "success": False, + "error": f"File size exceeds {config.MAX_FILE_SIZE // (1024*1024)}MB limit" + }) + continue + + db_document = crud.create_document(db, file.filename, content) + logger.info(f"Batch upload - Document uploaded: {db_document.id} ({file.filename})") + + results.append({ + "filename": file.filename, + "success": True, + "document_id": db_document.id, + "file_size": db_document.file_size, + "page_count": db_document.page_count + }) + + except Exception as e: + logger.error(f"Error uploading {file.filename}: {str(e)}") + results.append({ + "filename": file.filename, + "success": False, + "error": str(e) + }) + + successful_uploads = sum(1 for r in results if r["success"]) + logger.info(f"Batch upload completed: {successful_uploads}/{len(files)} files uploaded successfully") + + return { + "total_files": len(files), + "successful": successful_uploads, + "failed": len(files) - successful_uploads, + "results": results + } + + +@app.post("/api/extract", response_model=schemas.ExtractionResponse) +async def create_extraction_job( + extraction: schemas.ExtractionCreate, + background_tasks: BackgroundTasks, + db: Session = Depends(get_db) +): + """ + Create extraction job and process in background. + + Args: + extraction: Extraction job parameters (document_id, template_id) + background_tasks: FastAPI background task handler + db: Database session + + Returns: + Extraction job with initial status (pending) + """ + try: + document = crud.get_document(db, extraction.document_id) + if not document: + raise HTTPException(status_code=404, detail="Document not found") + + template = crud.get_template(db, extraction.template_id) + if not template: + raise HTTPException(status_code=404, detail="Template not found") + + db_result = crud.create_extraction_result(db, extraction.document_id, extraction.template_id) + + background_tasks.add_task( + extraction_service.process_extraction_job, + db_result.id, + document.file_content, + template.schema_json, + template.doc_type + ) + + logger.info(f"Extraction job created: {db_result.id} (template type: {template.doc_type})") + return db_result + except HTTPException: + raise + except Exception as e: + logger.error(f"Error creating extraction job: {str(e)}") + raise HTTPException(status_code=500, detail=str(e)) + + +@app.get("/api/extract/{job_id}", response_model=schemas.ExtractionResponse) +def get_extraction_result( + job_id: str, + db: Session = Depends(get_db) +): + """ + Retrieve extraction job status and results. + + Poll this endpoint to check job completion status. + + Args: + job_id: Extraction job identifier + db: Database session + + Returns: + Extraction job details with status and results + """ + result = crud.get_extraction_result(db, job_id) + if not result: + raise HTTPException(status_code=404, detail="Extraction job not found") + return result + + +@app.get("/api/history", response_model=List[schemas.ExtractionResponse]) +def get_extraction_history( + template_id: Optional[str] = None, + status: Optional[schemas.ExtractionStatusEnum] = None, + skip: int = 0, + limit: int = 50, + db: Session = Depends(get_db) +): + """ + Retrieve extraction history with optional filtering. + + Args: + template_id: Filter by template ID + status: Filter by extraction status + skip: Number of records to skip + limit: Maximum number of records to return + db: Database session + + Returns: + List of extraction results ordered by creation time (newest first) + """ + try: + status_enum = None + if status: + from models import ExtractionStatus + status_enum = ExtractionStatus[status.value.upper()] + + results = crud.get_extraction_history( + db, + template_id=template_id, + status=status_enum, + skip=skip, + limit=limit + ) + + # Enrich results with document and template info + enriched_results = [] + for result in results: + result_dict = { + "id": result.id, + "document_id": result.document_id, + "template_id": result.template_id, + "status": result.status.value, + "stage_used": result.stage_used.value if result.stage_used else None, + "extracted_data": result.extracted_data, + "field_coverage_percent": result.field_coverage_percent, + "processing_time_ms": result.processing_time_ms, + "model_used": result.model_used, + "error_message": result.error_message, + "created_at": result.created_at, + "document_filename": result.document.filename if result.document else None, + "template_name": result.template.name if result.template else None, + "document_page_count": result.document.page_count if result.document else None + } + enriched_results.append(result_dict) + + return enriched_results + except Exception as e: + logger.error(f"Error retrieving extraction history: {str(e)}") + raise HTTPException(status_code=500, detail=str(e)) + + +@app.delete("/api/extract/{job_id}") +def delete_extraction( + job_id: str, + db: Session = Depends(get_db) +): + """ + Delete extraction result by ID. + + Args: + job_id: Extraction job identifier + db: Database session + + Returns: + Success confirmation + """ + result = crud.get_extraction_result(db, job_id) + if not result: + raise HTTPException(status_code=404, detail="Extraction job not found") + + db.delete(result) + db.commit() + logger.info(f"Extraction job deleted: {job_id}") + return {"success": True, "message": "Extraction deleted successfully"} + + +@app.post("/api/extract/{job_id}/re-extract", response_model=schemas.ExtractionResponse) +async def re_extract_document( + job_id: str, + background_tasks: BackgroundTasks, + db: Session = Depends(get_db) +): + """ + Re-run extraction on an existing extraction result. + + Args: + job_id: Existing extraction job identifier + background_tasks: FastAPI background task handler + db: Database session + + Returns: + New extraction job with initial status (pending) + """ + try: + original_result = crud.get_extraction_result(db, job_id) + if not original_result: + raise HTTPException(status_code=404, detail="Original extraction job not found") + + document = crud.get_document(db, original_result.document_id) + if not document: + raise HTTPException(status_code=404, detail="Document not found") + + template = crud.get_template(db, original_result.template_id) + if not template: + raise HTTPException(status_code=404, detail="Template not found") + + # Create new extraction result + db_result = crud.create_extraction_result(db, document.id, template.id) + + background_tasks.add_task( + extraction_service.process_extraction_job, + db_result.id, + document.file_content, + template.schema_json, + template.doc_type + ) + + logger.info(f"Re-extraction job created: {db_result.id} from original: {job_id}") + return db_result + except HTTPException: + raise + except Exception as e: + logger.error(f"Error creating re-extraction job: {str(e)}") + raise HTTPException(status_code=500, detail=str(e)) + + +@app.on_event("startup") +async def startup_event(): + """Initialize database and log startup information.""" + logger.info("=" * 60) + logger.info("DocQvision API Starting") + logger.info(f"Environment: {config.ENVIRONMENT}") + logger.info(f"Database: {config.DATABASE_URL}") + logger.info(f"Inference endpoint: {config.INFERENCE_API_ENDPOINT}") + logger.info(f"Vision Model: {config.VISION_MODEL}") + logger.info(f"Detection Model: {config.DETECTION_MODEL}") + + try: + config.validate_auth_config() + logger.info("Authentication configuration validated") + except ValueError as e: + logger.error(f"Authentication configuration error: {str(e)}") + raise + + logger.info("Initializing database...") + try: + init_db() + logger.info("Database initialized successfully") + except Exception as e: + logger.error(f"Database initialization failed: {str(e)}") + raise + + logger.info("=" * 60) + + +if __name__ == "__main__": + uvicorn.run(app, host="0.0.0.0", port=5001) diff --git a/sample_solutions/DocQvision/api/models.py b/sample_solutions/DocQvision/api/models.py new file mode 100644 index 00000000..67c32fca --- /dev/null +++ b/sample_solutions/DocQvision/api/models.py @@ -0,0 +1,122 @@ +""" +SQLAlchemy ORM models for DocQvision database. + +Defines database schema for templates, documents, extraction results, +and chat sessions with proper relationships and constraints. +""" + +from sqlalchemy import Column, String, Integer, Text, LargeBinary, DateTime, ForeignKey, JSON, Float, Enum +from sqlalchemy.orm import relationship +from sqlalchemy.sql import func +from database import Base +import enum + + +class ExtractionStatus(enum.Enum): + """Enumeration for extraction job status.""" + PENDING = "pending" + RUNNING = "running" + SUCCESS = "success" + FAILED = "failed" + + +class ExtractionStage(enum.Enum): + """Enumeration for extraction pipeline stage used.""" + TRADITIONAL = "traditional" + VISION = "vision" + MOCK = "mock" + + +class Template(Base): + """ + Template model for storing document extraction schemas. + + Templates define what fields to extract from documents and their types. + Users create templates via chat interface and reuse them for similar documents. + + Attributes: + id: Unique template identifier + name: User-provided template name + doc_type: Document type category (invoice, prescription, contract, etc.) + schema_json: JSON object defining extraction fields and their properties + created_at: Timestamp when template was created + updated_at: Timestamp when template was last modified + """ + __tablename__ = "templates" + + id = Column(String(50), primary_key=True, index=True) + name = Column(String(255), nullable=False) + doc_type = Column(String(100), nullable=False) + schema_json = Column(JSON, nullable=False) + created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) + updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False) + + # Relationships + extractions = relationship("ExtractionResult", back_populates="template", cascade="all, delete-orphan") + + +class Document(Base): + """ + Document model for storing uploaded PDF files. + + Stores PDF binary content and metadata for extraction processing. + + Attributes: + id: Unique document identifier + filename: Original filename from upload + file_size: File size in bytes + page_count: Number of pages in PDF + sha256_hash: SHA-256 hash for deduplication and integrity + file_content: Binary PDF content + uploaded_at: Timestamp when document was uploaded + """ + __tablename__ = "documents" + + id = Column(String(50), primary_key=True, index=True) + filename = Column(String(255), nullable=False) + file_size = Column(Integer, nullable=False) + page_count = Column(Integer, nullable=True) + sha256_hash = Column(String(64), nullable=True, index=True) + file_content = Column(LargeBinary, nullable=False) + uploaded_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) + + # Relationships + extractions = relationship("ExtractionResult", back_populates="document", cascade="all, delete-orphan") + + +class ExtractionResult(Base): + """ + Extraction result model for storing extraction job history and results. + + Each extraction run creates a record with status, extracted data, and metadata. + + Attributes: + id: Unique extraction result identifier + document_id: Foreign key to document + template_id: Foreign key to template used + status: Current job status (pending, running, success, failed) + stage_used: Pipeline stage that produced result (traditional, vision) + extracted_data: JSON object with extracted field values + field_coverage_percent: Percentage of required fields successfully extracted + processing_time_ms: Total processing time in milliseconds + model_used: Vision model identifier if vision stage was used + error_message: Error details if extraction failed + created_at: Timestamp when extraction job was created + """ + __tablename__ = "extraction_results" + + id = Column(String(50), primary_key=True, index=True) + document_id = Column(String(50), ForeignKey("documents.id"), nullable=False, index=True) + template_id = Column(String(50), ForeignKey("templates.id"), nullable=False, index=True) + status = Column(Enum(ExtractionStatus), nullable=False, default=ExtractionStatus.PENDING, index=True) + stage_used = Column(Enum(ExtractionStage), nullable=True) + extracted_data = Column(JSON, nullable=True) + field_coverage_percent = Column(Float, nullable=True) + processing_time_ms = Column(Integer, nullable=True) + model_used = Column(String(100), nullable=True) + error_message = Column(Text, nullable=True) + created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False, index=True) + + # Relationships + document = relationship("Document", back_populates="extractions") + template = relationship("Template", back_populates="extractions") diff --git a/sample_solutions/DocQvision/api/requirements.txt b/sample_solutions/DocQvision/api/requirements.txt new file mode 100644 index 00000000..82f8e9da --- /dev/null +++ b/sample_solutions/DocQvision/api/requirements.txt @@ -0,0 +1,33 @@ +# ============================================================================= +# DocQvision API - Python Dependencies +# ============================================================================= + +# Web Framework & Server +fastapi==0.115.4 +uvicorn==0.32.0 +python-multipart>=0.0.18 + +# Data Validation & Configuration +pydantic==2.9.2 +python-dotenv==1.0.1 + +# AI/ML APIs +openai>=1.54.0,<2.0.0 + +# PDF Processing +pypdf==5.1.0 # PDF text extraction +PyMuPDF==1.24.14 # PDF to image conversion (provides 'fitz' module) + +# Image Processing +Pillow==12.1.1 + +# PDF Generation +reportlab==4.2.5 + +# Database +sqlalchemy==2.0.43 +alembic==1.18.0 + +# HTTP Clients +requests==2.32.3 +httpx==0.28.1 diff --git a/sample_solutions/DocQvision/api/schemas.py b/sample_solutions/DocQvision/api/schemas.py new file mode 100644 index 00000000..4ea90a4a --- /dev/null +++ b/sample_solutions/DocQvision/api/schemas.py @@ -0,0 +1,159 @@ +""" +Pydantic schemas for request/response validation. + +Defines data validation models for API endpoints, ensuring type safety +and proper data structure throughout the application. +""" + +from pydantic import BaseModel, Field, field_validator +from typing import Optional, Dict, Any, List +from datetime import datetime +from enum import Enum + + +class ExtractionStatusEnum(str, Enum): + """Extraction job status enumeration.""" + PENDING = "pending" + RUNNING = "running" + SUCCESS = "success" + FAILED = "failed" + + +class ExtractionStageEnum(str, Enum): + """Extraction pipeline stage enumeration.""" + TRADITIONAL = "traditional" + VISION = "vision" + MOCK = "mock" + + +class FieldSchema(BaseModel): + """ + Schema definition for a single extraction field. + + Attributes: + type: Field data type (string, number, date, boolean) + required: Whether field must be extracted + description: Optional field description for UI + enum: Optional list of allowed values + """ + type: str = Field(..., description="Field data type") + required: bool = Field(default=True, description="Whether field is required") + description: Optional[str] = Field(default=None, description="Field description") + enum: Optional[List[str]] = Field(default=None, description="Allowed values for enum fields") + + @field_validator('type') + @classmethod + def validate_type(cls, v: str) -> str: + """Validate field type is one of allowed types.""" + allowed_types = {'string', 'number', 'date', 'boolean', 'array', 'object'} + if v not in allowed_types: + raise ValueError(f"Field type must be one of {allowed_types}") + return v + + +class TemplateCreate(BaseModel): + """Schema for creating a new template.""" + model_config = {"protected_namespaces": ()} + + name: str = Field(..., min_length=1, max_length=255, description="Template name") + doc_type: str = Field(..., min_length=1, max_length=100, description="Document type") + schema_json: Dict[str, FieldSchema] = Field(..., description="Extraction schema definition") + + +class TemplateUpdate(BaseModel): + """Schema for updating an existing template.""" + model_config = {"protected_namespaces": ()} + + name: Optional[str] = Field(None, min_length=1, max_length=255) + doc_type: Optional[str] = Field(None, min_length=1, max_length=100) + schema_json: Optional[Dict[str, FieldSchema]] = None + + +class TemplateResponse(BaseModel): + """Schema for template response.""" + model_config = {"from_attributes": True, "protected_namespaces": ()} + + id: str + name: str + doc_type: str + schema_json: Dict[str, Any] + created_at: datetime + updated_at: datetime + + +class TemplateListItem(BaseModel): + """Schema for template list item (without full schema).""" + id: str + name: str + doc_type: str + created_at: datetime + + class Config: + from_attributes = True + + +class DocumentUploadResponse(BaseModel): + """Schema for document upload response.""" + document_id: str + filename: str + file_size: int + page_count: Optional[int] + uploaded_at: datetime + + +class ExtractionCreate(BaseModel): + """Schema for creating extraction job.""" + document_id: str = Field(..., description="Document ID to extract from") + template_id: str = Field(..., description="Template ID to use for extraction") + + +class ExtractionResponse(BaseModel): + """Schema for extraction job response.""" + model_config = {"from_attributes": True, "protected_namespaces": ()} + + id: str + document_id: str + template_id: str + status: ExtractionStatusEnum + stage_used: Optional[ExtractionStageEnum] + extracted_data: Optional[Dict[str, Any]] + field_coverage_percent: Optional[float] + processing_time_ms: Optional[int] + model_used: Optional[str] + error_message: Optional[str] + created_at: datetime + + # Additional fields for UI + document_filename: Optional[str] = None + template_name: Optional[str] = None + document_page_count: Optional[int] = None + + +class ChatMessage(BaseModel): + """Schema for chat message.""" + role: str = Field(..., pattern="^(user|assistant|system)$") + content: str = Field(..., min_length=1) + + +class ChatRequest(BaseModel): + """Schema for chat configuration request.""" + message: str = Field(..., min_length=1, description="User message") + session_id: Optional[str] = Field(default=None, description="Existing session ID to continue") + + +class ChatResponse(BaseModel): + """Schema for chat configuration response.""" + model_config = {"protected_namespaces": ()} + + session_id: str + reply: str + schema: Dict[str, Any] + messages: List[ChatMessage] + + +class ExtractionHistoryFilter(BaseModel): + """Schema for extraction history filtering.""" + template_id: Optional[str] = None + status: Optional[ExtractionStatusEnum] = None + limit: int = Field(default=50, ge=1, le=100) + offset: int = Field(default=0, ge=0) diff --git a/sample_solutions/DocQvision/api/services/__init__.py b/sample_solutions/DocQvision/api/services/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sample_solutions/DocQvision/api/services/api_client.py b/sample_solutions/DocQvision/api/services/api_client.py new file mode 100644 index 00000000..49661155 --- /dev/null +++ b/sample_solutions/DocQvision/api/services/api_client.py @@ -0,0 +1,94 @@ +""" +API client abstraction layer. + +Supports GenAI Gateway, APISIX Gateway, and any OpenAI-compatible inference endpoint. +""" + +import logging +import httpx +from typing import Optional +from openai import OpenAI + +import config + +logger = logging.getLogger(__name__) + + +class AuthenticationError(Exception): + """Raised when authentication fails""" + pass + + +class APIClient: + """Unified API client for inference endpoints""" + + def __init__(self): + if not config.INFERENCE_API_ENDPOINT: + raise AuthenticationError("INFERENCE_API_ENDPOINT is required") + + if not config.INFERENCE_API_TOKEN: + raise AuthenticationError("INFERENCE_API_TOKEN is required") + + self.base_url = config.INFERENCE_API_ENDPOINT + self.api_key = config.INFERENCE_API_TOKEN + + # Configure httpx clients with extended timeouts for slower inference servers + # Default httpx timeout is 5 seconds, which is too short for VL model inference + timeout_config = httpx.Timeout(300.0, connect=60.0) # 5 minutes read, 1 minute connect + self.http_client = httpx.Client(verify=config.VERIFY_SSL, timeout=timeout_config) + self.async_http_client = httpx.AsyncClient(verify=config.VERIFY_SSL, timeout=timeout_config) + + logger.info(f"Inference endpoint configured: {self.base_url}") + + def get_openai_client(self) -> OpenAI: + return OpenAI( + api_key=self.api_key, + base_url=f"{self.base_url}/v1", + http_client=self.http_client + ) + + def is_authenticated(self) -> bool: + return bool(self.api_key) + + def __del__(self): + """Cleanup HTTP clients on deletion""" + if hasattr(self, 'http_client') and self.http_client: + try: + self.http_client.close() + except Exception: + pass + if hasattr(self, 'async_http_client') and self.async_http_client: + try: + import asyncio + try: + loop = asyncio.get_event_loop() + if loop.is_running(): + loop.create_task(self.async_http_client.aclose()) + else: + loop.run_until_complete(self.async_http_client.aclose()) + except RuntimeError: + pass + except Exception: + pass + + +_api_client: Optional[APIClient] = None + + +def get_api_client() -> APIClient: + """ + Get or create global API client instance + + Returns: + Configured API client + + Raises: + AuthenticationError: If authentication configuration is invalid + """ + global _api_client + + if _api_client is None: + logger.info("Initializing API client") + _api_client = APIClient() + + return _api_client diff --git a/sample_solutions/DocQvision/api/services/extraction_pipeline.py b/sample_solutions/DocQvision/api/services/extraction_pipeline.py new file mode 100644 index 00000000..5662b093 --- /dev/null +++ b/sample_solutions/DocQvision/api/services/extraction_pipeline.py @@ -0,0 +1,202 @@ +""" +Vision-based extraction pipeline. + +Extracts structured data from documents using AI vision model. +""" + +import logging +import time +from typing import Dict, Any, Optional + +import config +from models import ExtractionStage +from services.extractors import calculate_field_coverage +from services.pdf_utils import extract_text_by_page, select_relevant_pages +from services.vision_service import VisionService + +logger = logging.getLogger(__name__) + + +class PipelineResult: + """Container for pipeline execution results.""" + + def __init__( + self, + extracted_data: Dict[str, Any], + stage_used: ExtractionStage, + field_coverage: float, + processing_time_ms: int, + model_used: Optional[str] = None + ): + self.extracted_data = extracted_data + self.stage_used = stage_used + self.field_coverage = field_coverage + self.processing_time_ms = processing_time_ms + self.model_used = model_used + + +class ExtractionPipeline: + """ + Vision-based extraction pipeline. + + Extracts structured data from PDF documents using AI vision model, + with intelligent page selection for multi-page documents. + """ + + def __init__(self): + self.vision_service = VisionService() + self.vision_max_pages = config.VISION_MAX_PAGES + + logger.info(f"Vision-only pipeline initialized (max pages: {self.vision_max_pages})") + + def extract( + self, + pdf_content: bytes, + schema: Dict[str, Any], + template_doc_type: str = None, + validate_type: bool = True + ) -> PipelineResult: + """ + Execute vision-based extraction. + + Args: + pdf_content: Binary PDF content + schema: Extraction schema definition + template_doc_type: Expected document type from template (e.g., "invoice", "prescription") + validate_type: Whether to validate document type before extraction + + Returns: + PipelineResult with extracted data and metadata + + Raises: + ValueError: If extraction fails or document type mismatch + """ + start_time = time.time() + + try: + # Skip validation for test templates or if validation is disabled + if validate_type and template_doc_type and template_doc_type.lower() != 'test': + self._validate_document_type(pdf_content, template_doc_type) + + # Extract using vision model + logger.info("Starting vision extraction") + + page_texts = extract_text_by_page(pdf_content) + total_pages = len(page_texts) + + if total_pages > self.vision_max_pages: + selected_pages = select_relevant_pages( + page_texts, + schema, + max_pages=self.vision_max_pages + ) + logger.info( + f"Selected {len(selected_pages)} pages from {total_pages} total pages" + ) + else: + selected_pages = None + + extracted_data = self.vision_service.extract_with_schema( + pdf_content, + schema, + page_numbers=selected_pages + ) + + coverage, field_status = calculate_field_coverage(extracted_data, schema) + + # Log missing fields for debugging + missing_fields = [field for field, found in field_status.items() if not found] + if missing_fields: + logger.warning( + f"Vision extraction: {len(missing_fields)} fields not extracted: {missing_fields}" + ) + + logger.info( + f"Vision extraction completed: coverage={coverage:.2%} " + f"(extracted {len(extracted_data) - len(missing_fields)}/{len(schema)} fields)" + ) + + # Accept any coverage > 0 + if coverage == 0: + error_msg = ( + "Failed to extract data from document.\n\n" + "Possible reasons:\n" + "• Document type may not match the template\n" + "• Document quality or format may be incompatible\n" + "• Required fields may not be present in the document\n\n" + "Please verify:\n" + "1. You selected the correct template for this document type\n" + "2. The document contains the expected fields\n" + "3. The document is clear and readable" + ) + raise ValueError(error_msg) + + processing_time = int((time.time() - start_time) * 1000) + + return PipelineResult( + extracted_data=extracted_data, + stage_used=ExtractionStage.VISION, + field_coverage=coverage, + processing_time_ms=processing_time, + model_used=config.VISION_MODEL + ) + + except Exception as e: + logger.error(f"Vision extraction failed: {str(e)}") + raise ValueError(str(e)) + + def _validate_document_type(self, pdf_content: bytes, expected_type: str): + """ + Validate that document type matches expected template type. + + Args: + pdf_content: Binary PDF content + expected_type: Expected document type (e.g., "invoice", "prescription") + + Raises: + ValueError: If document type doesn't match expected type + """ + try: + logger.info(f"Validating document type (expected: {expected_type})") + + detection_result = self.vision_service.detect_document_type(pdf_content) + detected_type = detection_result.get("document_type", "unknown") + confidence = detection_result.get("confidence", 0.0) + reasoning = detection_result.get("reasoning", "") + + logger.info( + f"Document type detection: {detected_type} " + f"(confidence: {confidence:.1%}, expected: {expected_type})" + ) + + # Normalize types for comparison + detected_normalized = detected_type.lower().replace("_", "").replace("-", "") + expected_normalized = expected_type.lower().replace("_", "").replace("-", "") + + # Allow if confidence is low (uncertain detection) + if confidence < 0.5: + logger.warning( + f"Low confidence ({confidence:.1%}) in type detection. Proceeding with extraction." + ) + return + + # Check for mismatch + if detected_normalized != expected_normalized and confidence >= 0.7: + error_msg = ( + f"Document type mismatch detected!\n\n" + f"Expected: {expected_type.upper()}\n" + f"Detected: {detected_type.upper()} (confidence: {confidence:.0%})\n\n" + f"Reason: {reasoning}\n\n" + f"Please select the correct template for this document type, " + f"or upload a {expected_type} document." + ) + logger.error(error_msg) + raise ValueError(error_msg) + + logger.info("Document type validation passed") + + except ValueError: + raise # Re-raise validation errors + except Exception as e: + # Don't fail extraction if validation itself fails + logger.warning(f"Document type validation failed: {str(e)}. Proceeding with extraction.") diff --git a/sample_solutions/DocQvision/api/services/extraction_service.py b/sample_solutions/DocQvision/api/services/extraction_service.py new file mode 100644 index 00000000..e90cb3eb --- /dev/null +++ b/sample_solutions/DocQvision/api/services/extraction_service.py @@ -0,0 +1,293 @@ +""" +Extraction service for document processing. + +Handles template management, document upload, and data extraction workflows. +Coordinates multi-stage extraction pipeline and database persistence. +""" + +import uuid +import logging +import time +from datetime import datetime +from typing import Dict, Any +from services.vision_service import VisionService +from services.extraction_pipeline import ExtractionPipeline +from database import SessionLocal +import crud +from models import ExtractionStatus, ExtractionStage + +logger = logging.getLogger(__name__) + + +class ExtractionService: + def __init__(self): + self.templates = self._initialize_templates() + self.documents = {} + self.chat_sessions = {} + self.vision_service = VisionService() + self.extraction_pipeline = ExtractionPipeline() + + def _initialize_templates(self): + """Initialize with default templates""" + return { + "invoice": { + "id": "invoice", + "name": "Invoice Template", + "type": "invoice", + "schema": { + "invoice_number": "string", + "date": "date", + "vendor": "string", + "total": "number" + } + }, + "prescription": { + "id": "prescription", + "name": "Prescription Template", + "type": "prescription", + "schema": { + "patient_name": "string", + "medication": "string", + "dosage": "string", + "date": "date" + } + }, + "contract": { + "id": "contract", + "name": "Contract Template", + "type": "contract", + "schema": { + "party_1": "string", + "party_2": "string", + "date": "date", + "terms": "string" + } + } + } + + def _get_or_create_session(self, session_id: str): + """Get or create chat session by ID""" + if session_id not in self.chat_sessions: + self.chat_sessions[session_id] = { + "schema": {}, + "chat_history": [], + "created_at": datetime.now().isoformat() + } + logger.info(f"Created new chat session: {session_id}") + return self.chat_sessions[session_id] + + def process_chat_message(self, message: str, session_id: str = None): + """Process chat message with AI assistance in isolated session""" + try: + if not session_id: + session_id = str(uuid.uuid4()) + + session = self._get_or_create_session(session_id) + + session["chat_history"].append({"role": "user", "content": message}) + + reply, updated_schema = self.vision_service.process_chat_message( + message, session["schema"] + ) + + session["schema"] = updated_schema + session["chat_history"].append({"role": "assistant", "content": reply}) + + logger.info(f"Chat processed for session {session_id}. Schema has {len(session['schema'])} fields") + + return { + "reply": reply, + "schema": session["schema"], + "chat_history": session["chat_history"], + "session_id": session_id + } + except Exception as e: + logger.error(f"Error processing chat message: {str(e)}") + error_reply = "I encountered an error processing your message. Please try again." + session = self._get_or_create_session(session_id or str(uuid.uuid4())) + session["chat_history"].append({"role": "assistant", "content": error_reply}) + return { + "reply": error_reply, + "schema": session["schema"], + "chat_history": session["chat_history"], + "session_id": session_id + } + + def clear_session(self, session_id: str): + """Clear/delete a chat session""" + if session_id in self.chat_sessions: + del self.chat_sessions[session_id] + logger.info(f"Cleared chat session: {session_id}") + return {"success": True, "message": "Session cleared"} + return {"success": False, "message": "Session not found"} + + def save_template(self, name: str, template_type: str, schema: Dict[str, str]) -> Dict[str, Any]: + """Save a new template""" + try: + template_id = template_type.lower().replace(" ", "_") + + template = { + "id": template_id, + "name": name, + "type": template_type, + "schema": schema, + "created_at": datetime.now().isoformat() + } + + self.templates[template_id] = template + logger.info(f"Template saved: {template_id}") + + return { + "success": True, + "template_id": template_id, + "message": f"Template '{name}' saved successfully" + } + except Exception as e: + logger.error(f"Error saving template: {str(e)}") + return { + "success": False, + "error": str(e) + } + + def upload_file(self, filename: str, content: bytes): + """Upload and store document""" + try: + if len(content) > 10 * 1024 * 1024: + raise ValueError("File size exceeds 10MB limit") + + document_id = str(uuid.uuid4()) + self.documents[document_id] = { + "id": document_id, + "filename": filename, + "content": content, + "size": len(content), + "uploaded_at": datetime.now().isoformat() + } + + logger.info(f"Document uploaded: {document_id} ({filename})") + + return { + "document_id": document_id, + "filename": filename, + "size": len(content), + "status": "uploaded" + } + except Exception as e: + logger.error(f"Error uploading file: {str(e)}") + raise + + def extract_document(self, document_id: str, template_id: str): + """Extract data from document using vision AI""" + start_time = time.time() + + try: + if document_id not in self.documents: + raise ValueError(f"Document not found: {document_id}") + + if template_id not in self.templates: + raise ValueError(f"Template not found: {template_id}") + + document = self.documents[document_id] + template = self.templates[template_id] + schema = template["schema"] + + logger.info(f"Extracting document {document_id} with template {template_id}") + + extracted_data = self.vision_service.extract_with_schema( + document["content"], + schema + ) + + processing_time = int((time.time() - start_time) * 1000) + + result = { + "result_id": str(uuid.uuid4()), + "document_id": document_id, + "template_id": template_id, + "extracted_data": extracted_data, + "status": "completed", + "processing_time_ms": processing_time + } + + logger.info(f"Extraction completed in {processing_time}ms") + + return result + + except Exception as e: + logger.error(f"Error extracting document: {str(e)}") + raise + + def get_templates(self): + """Get all available templates""" + return { + "templates": [ + { + "id": t["id"], + "name": t["name"], + "type": t["type"] + } + for t in self.templates.values() + ] + } + + def process_extraction_job(self, job_id: str, pdf_content: bytes, schema: Dict[str, Any], template_doc_type: str = None) -> None: + """ + Process extraction job through vision-based pipeline in background. + + Executes vision extraction pipeline with intelligent page selection + and document type validation. Updates database with status and results + throughout execution. + + Args: + job_id: Extraction result ID in database + pdf_content: Binary PDF content + schema: Template schema definition + template_doc_type: Expected document type for validation + """ + db = SessionLocal() + + try: + crud.update_extraction_result( + db, + job_id, + status=ExtractionStatus.RUNNING + ) + + logger.info(f"Starting extraction job: {job_id} (template type: {template_doc_type})") + + result = self.extraction_pipeline.extract( + pdf_content, + schema, + template_doc_type=template_doc_type, + validate_type=True + ) + + crud.update_extraction_result( + db, + job_id, + status=ExtractionStatus.SUCCESS, + stage_used=result.stage_used, + extracted_data=result.extracted_data, + field_coverage_percent=result.field_coverage, + processing_time_ms=result.processing_time_ms, + model_used=result.model_used + ) + + logger.info( + f"Extraction job completed: {job_id} " + f"(stage={result.stage_used.value}, coverage={result.field_coverage:.2%}, " + f"time={result.processing_time_ms}ms)" + ) + + except Exception as e: + logger.error(f"Extraction job failed: {job_id} - {str(e)}") + + crud.update_extraction_result( + db, + job_id, + status=ExtractionStatus.FAILED, + error_message=str(e) + ) + + finally: + db.close() diff --git a/sample_solutions/DocQvision/api/services/extractors/__init__.py b/sample_solutions/DocQvision/api/services/extractors/__init__.py new file mode 100644 index 00000000..7a7665b4 --- /dev/null +++ b/sample_solutions/DocQvision/api/services/extractors/__init__.py @@ -0,0 +1,9 @@ +""" +Extraction utility modules. + +Provides coverage calculation and validation utilities for extraction quality assessment. +""" + +from .coverage import calculate_field_coverage, validate_field_types + +__all__ = ['calculate_field_coverage', 'validate_field_types'] diff --git a/sample_solutions/DocQvision/api/services/extractors/coverage.py b/sample_solutions/DocQvision/api/services/extractors/coverage.py new file mode 100644 index 00000000..af2989ce --- /dev/null +++ b/sample_solutions/DocQvision/api/services/extractors/coverage.py @@ -0,0 +1,118 @@ +""" +Field coverage scoring for extraction quality assessment. + +Evaluates extraction completeness to determine pipeline stage progression. +""" + +import logging +from typing import Dict, Any, Tuple + +logger = logging.getLogger(__name__) + + +def calculate_field_coverage( + extracted_data: Dict[str, Any], + schema: Dict[str, Any] +) -> Tuple[float, Dict[str, bool]]: + """ + Calculate field coverage percentage based on schema requirements. + + Args: + extracted_data: Extracted field values + schema: Schema definition with required fields + + Returns: + Tuple of (coverage_percentage, field_status_map) + coverage_percentage: Percentage of required fields successfully extracted (0.0-1.0) + field_status_map: Dict mapping field names to extraction success boolean + """ + if not schema: + return 1.0, {} + + total_required = 0 + extracted_required = 0 + field_status = {} + + for field_name, field_def in schema.items(): + is_required = True + if isinstance(field_def, dict): + is_required = field_def.get('required', True) + + if is_required: + total_required += 1 + value = extracted_data.get(field_name) + is_extracted = value is not None and value != "" + + if is_extracted: + extracted_required += 1 + field_status[field_name] = True + else: + field_status[field_name] = False + else: + value = extracted_data.get(field_name) + field_status[field_name] = value is not None and value != "" + + coverage = extracted_required / total_required if total_required > 0 else 1.0 + + logger.debug( + f"Coverage: {coverage:.2%} ({extracted_required}/{total_required} required fields)" + ) + + return coverage, field_status + + +def validate_field_types( + extracted_data: Dict[str, Any], + schema: Dict[str, Any] +) -> Tuple[bool, Dict[str, str]]: + """ + Validate extracted field values against schema type constraints. + + Args: + extracted_data: Extracted field values + schema: Schema definition with field types + + Returns: + Tuple of (is_valid, validation_errors) + is_valid: True if all extracted fields match schema types + validation_errors: Dict mapping field names to error messages + """ + errors = {} + + for field_name, value in extracted_data.items(): + if value is None: + continue + + field_def = schema.get(field_name) + if not field_def: + continue + + expected_type = field_def.get('type', 'string') if isinstance(field_def, dict) else field_def + + if expected_type == 'number': + if not isinstance(value, (int, float)): + errors[field_name] = f"Expected number, got {type(value).__name__}" + + elif expected_type == 'boolean': + if not isinstance(value, bool): + errors[field_name] = f"Expected boolean, got {type(value).__name__}" + + elif expected_type == 'date': + if not isinstance(value, str): + errors[field_name] = f"Expected date string, got {type(value).__name__}" + + elif expected_type == 'string': + if not isinstance(value, str): + errors[field_name] = f"Expected string, got {type(value).__name__}" + + if isinstance(field_def, dict) and 'enum' in field_def: + allowed_values = field_def['enum'] + if value not in allowed_values: + errors[field_name] = f"Value '{value}' not in allowed values: {allowed_values}" + + is_valid = len(errors) == 0 + + if not is_valid: + logger.warning(f"Type validation failed: {errors}") + + return is_valid, errors diff --git a/sample_solutions/DocQvision/api/services/pdf_utils.py b/sample_solutions/DocQvision/api/services/pdf_utils.py new file mode 100644 index 00000000..e0324c40 --- /dev/null +++ b/sample_solutions/DocQvision/api/services/pdf_utils.py @@ -0,0 +1,135 @@ +""" +PDF processing utilities for text extraction and page selection. + +Provides multi-page text extraction and intelligent page selection for +token-constrained vision model fallback. +""" + +import logging +from typing import List, Tuple, Optional +from io import BytesIO +from pypdf import PdfReader + +logger = logging.getLogger(__name__) + + +def extract_text_from_pdf(pdf_content: bytes, max_pages: Optional[int] = None) -> str: + """ + Extract text from all pages of PDF document. + + Args: + pdf_content: Binary PDF content + max_pages: Maximum number of pages to process (None for all pages) + + Returns: + Concatenated text from all pages with page boundaries preserved + """ + try: + pdf_reader = PdfReader(BytesIO(pdf_content)) + total_pages = len(pdf_reader.pages) + + pages_to_process = min(total_pages, max_pages) if max_pages else total_pages + + text_parts = [] + for page_num in range(pages_to_process): + page = pdf_reader.pages[page_num] + page_text = page.extract_text() + + if page_text.strip(): + text_parts.append(f"--- Page {page_num + 1} ---\n{page_text}") + + combined_text = "\n\n".join(text_parts) + logger.info(f"Extracted text from {pages_to_process} pages ({len(combined_text)} chars)") + + return combined_text + + except Exception as e: + logger.error(f"PDF text extraction failed: {str(e)}") + raise ValueError(f"Failed to extract text from PDF: {str(e)}") + + +def extract_text_by_page(pdf_content: bytes) -> List[Tuple[int, str]]: + """ + Extract text from PDF with per-page granularity. + + Args: + pdf_content: Binary PDF content + + Returns: + List of (page_number, page_text) tuples + """ + try: + pdf_reader = PdfReader(BytesIO(pdf_content)) + page_texts = [] + + for page_num, page in enumerate(pdf_reader.pages): + page_text = page.extract_text() + page_texts.append((page_num + 1, page_text)) + + logger.info(f"Extracted {len(page_texts)} pages individually") + return page_texts + + except Exception as e: + logger.error(f"Per-page text extraction failed: {str(e)}") + raise ValueError(f"Failed to extract text by page: {str(e)}") + + +def select_relevant_pages( + page_texts: List[Tuple[int, str]], + schema: dict, + max_pages: int = 3 +) -> List[int]: + """ + Select most relevant pages for vision model processing based on schema fields. + + Uses keyword matching to identify pages likely containing target fields. + + Args: + page_texts: List of (page_number, page_text) tuples + schema: Schema definition with field names + max_pages: Maximum number of pages to select + + Returns: + List of selected page numbers (1-indexed) + """ + if len(page_texts) <= max_pages: + return [page_num for page_num, _ in page_texts] + + field_keywords = [] + for field_name in schema.keys(): + keywords = field_name.lower().replace('_', ' ').split() + field_keywords.extend(keywords) + + page_scores = [] + for page_num, page_text in page_texts: + page_text_lower = page_text.lower() + score = sum(1 for keyword in field_keywords if keyword in page_text_lower) + + text_density = len(page_text.strip()) + combined_score = score * 10 + (text_density / 1000) + + page_scores.append((page_num, combined_score)) + + page_scores.sort(key=lambda x: x[1], reverse=True) + selected_pages = sorted([page_num for page_num, _ in page_scores[:max_pages]]) + + logger.info(f"Selected pages {selected_pages} from {len(page_texts)} total pages") + return selected_pages + + +def get_page_count(pdf_content: bytes) -> int: + """ + Get total page count from PDF document. + + Args: + pdf_content: Binary PDF content + + Returns: + Number of pages in PDF + """ + try: + pdf_reader = PdfReader(BytesIO(pdf_content)) + return len(pdf_reader.pages) + except Exception as e: + logger.error(f"Failed to get page count: {str(e)}") + return 0 diff --git a/sample_solutions/DocQvision/api/services/vision_service.py b/sample_solutions/DocQvision/api/services/vision_service.py new file mode 100644 index 00000000..75244306 --- /dev/null +++ b/sample_solutions/DocQvision/api/services/vision_service.py @@ -0,0 +1,1159 @@ +import base64 +import logging +from io import BytesIO +from typing import Dict, Any, List, Optional +from PIL import Image +from pypdf import PdfReader +import fitz + +import config +from services.api_client import get_api_client, AuthenticationError + +logger = logging.getLogger(__name__) + + +class VisionService: + def __init__(self): + try: + api_client = get_api_client() + self.client = api_client.get_openai_client() + logger.info(f"Vision service initialized with endpoint: {config.INFERENCE_API_ENDPOINT}") + except AuthenticationError as e: + logger.warning(f"Authentication failed: {e}. Using mock responses.") + self.client = None + + def pdf_to_text(self, pdf_content: bytes) -> str: + """Extract text from first page of PDF""" + try: + pdf_file = BytesIO(pdf_content) + reader = PdfReader(pdf_file) + + text = "" + page = reader.pages[0] + text = page.extract_text() + + logger.info(f"Extracted {len(text)} characters from PDF") + return text + + except Exception as e: + logger.error(f"Error extracting text from PDF: {str(e)}") + return "" + + def _pdf_to_images( + self, + pdf_content: bytes, + page_numbers: Optional[List[int]] = None, + zoom: float = 2.0 + ) -> List[Image.Image]: + """ + Convert PDF pages to PIL images for vision model processing using PyMuPDF. + + Args: + pdf_content: Binary PDF content + page_numbers: Optional list of page numbers to convert (1-indexed) + zoom: Zoom factor for rendering (2.0 = 200% = ~144 DPI) + + Returns: + List of PIL Image objects + """ + try: + # Open PDF with PyMuPDF + pdf_document = fitz.open(stream=pdf_content, filetype="pdf") + total_pages = pdf_document.page_count + + # Determine which pages to convert + if page_numbers: + pages_to_convert = [p - 1 for p in page_numbers if 0 < p <= total_pages] + else: + pages_to_convert = range(total_pages) + + images = [] + mat = fitz.Matrix(zoom, zoom) # Create transformation matrix for zoom + + for page_idx in pages_to_convert: + page = pdf_document[page_idx] + pix = page.get_pixmap(matrix=mat) # Render page to pixmap + + # Convert pixmap to PIL Image + img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples) + images.append(img) + + pdf_document.close() + + logger.info(f"Converted {len(images)} PDF pages to images (zoom: {zoom}x)") + return images + + except Exception as e: + logger.error(f"PDF to image conversion failed: {str(e)}") + return [] + + def _extract_text_from_pages( + self, + pdf_content: bytes, + page_numbers: Optional[List[int]] = None + ) -> str: + """ + Extract text from specific pages or all pages of PDF. + + Args: + pdf_content: Binary PDF content + page_numbers: List of page numbers to extract (1-indexed), None for all pages + + Returns: + Concatenated text from specified pages + """ + try: + pdf_file = BytesIO(pdf_content) + reader = PdfReader(pdf_file) + total_pages = len(reader.pages) + + if page_numbers: + pages_to_extract = [p - 1 for p in page_numbers if 0 < p <= total_pages] + else: + pages_to_extract = range(total_pages) + + text_parts = [] + for page_idx in pages_to_extract: + page_text = reader.pages[page_idx].extract_text() + if page_text.strip(): + text_parts.append(page_text) + + combined_text = "\n\n".join(text_parts) + logger.info( + f"Extracted {len(combined_text)} characters from " + f"{len(pages_to_extract)} pages" + ) + return combined_text + + except Exception as e: + logger.error(f"Error extracting text from pages: {str(e)}") + return "" + + def text_to_image(self, text: str) -> str: + """Convert text to image for vision model (alternative when PDF-to-image fails)""" + try: + img = Image.new('RGB', (800, 1000), color='white') + draw = ImageDraw.Draw(img) + + try: + font = ImageFont.truetype("arial.ttf", 12) + except: + font = ImageFont.load_default() + + y_text = 10 + lines = text.split('\n')[:50] + for line in lines: + draw.text((10, y_text), line[:100], fill='black', font=font) + y_text += 15 + + buffered = BytesIO() + img.save(buffered, format="PNG") + img_str = base64.b64encode(buffered.getvalue()).decode() + + logger.info("Converted text to image successfully") + return img_str + + except Exception as e: + logger.error(f"Error converting text to image: {str(e)}") + return "" + + def extract_with_schema( + self, + pdf_content: bytes, + schema: Dict[str, str], + page_numbers: Optional[List[int]] = None + ) -> Dict[str, Any]: + """ + Extract data from PDF using vision model with defined schema. + + Processes pages sequentially (one image per request) and merges results. + This works around vision model limitations that only support 1 image per request. + + Args: + pdf_content: Binary PDF content + schema: Extraction schema definition + page_numbers: Optional list of specific page numbers to process (1-indexed) + + Returns: + Merged extracted data dictionary + """ + if not self.client: + logger.warning("No vision client available. Returning mock data.") + return self._mock_extraction(schema) + + try: + # Convert PDF pages to images + page_images = self._pdf_to_images(pdf_content, page_numbers) + + if not page_images: + logger.error("Failed to convert PDF to images") + raise ValueError("Could not convert PDF pages to images") + + logger.info(f"Processing {len(page_images)} pages sequentially for vision extraction") + + # Process each page sequentially and merge results + merged_data = {} + + for page_idx, page_image in enumerate(page_images, start=1): + page_num = page_numbers[page_idx - 1] if page_numbers else page_idx + logger.info(f"Processing page {page_num} ({page_idx}/{len(page_images)})") + + # Extract data from this single page + page_data = self._extract_from_single_page(page_image, schema, page_num) + + # Merge results intelligently + merged_data = self._merge_extraction_results(merged_data, page_data, schema) + + logger.info(f"Sequential extraction complete. Final merged data: {list(merged_data.keys())}") + return merged_data + + except Exception as e: + logger.error(f"Vision extraction error: {str(e)}") + raise ValueError(f"Vision extraction failed: {str(e)}") + + def _extract_from_single_page( + self, + page_image: Image.Image, + schema: Dict[str, str], + page_number: int + ) -> Dict[str, Any]: + """ + Extract data from a single page image. + + Args: + page_image: PIL Image of the page + schema: Extraction schema definition + page_number: Page number for logging + + Returns: + Extracted data dictionary for this page + """ + import time + + try: + # Timing: Image encoding + t_encode_start = time.time() + buffered = BytesIO() + page_image.save(buffered, format="PNG") + img_base64 = base64.b64encode(buffered.getvalue()).decode() + img_size_kb = len(buffered.getvalue()) / 1024 + t_encode_end = time.time() + + logger.info(f"Page {page_number}: Image encoded in {(t_encode_end - t_encode_start)*1000:.0f}ms (size: {img_size_kb:.1f}KB)") + + # Build prompt with schema + schema_description = self._format_schema_for_prompt(schema) + + prompt = f"""Extract data from this document as JSON. + +FIELDS TO EXTRACT: +{schema_description} + +CRITICAL RULES: +1. Section Header Matching (HIGHEST PRIORITY): + - ONLY extract from sections with matching numbered headers + - "warranty" field → ONLY from "8. WARRANTY" or "WARRANTY" section header + - "deliverables" field → ONLY from "4. DELIVERABLES" or "DELIVERABLES" section header + - "scope_of_service" field → ONLY from "1. SCOPE OF SERVICES" section header + - DO NOT extract a field from a bullet point list UNLESS that list is under the matching section header + - If you see "60 days of support" in a deliverables LIST, it is NOT warranty - ignore it for warranty field + +2. Field vs Section Distinction: + - If "warranty" appears in a numbered list under "4. DELIVERABLES", ignore it (it's a deliverable item) + - If "warranty" has its own section header "8. WARRANTY", extract from there + - Section headers are usually numbered (1., 2., 8.) and bold/underlined + +3. Output Format: + - Return ONLY valid JSON with exact field names above + - No markdown, no code fences, no commentary + - Use null for missing fields or if section not found on this page + +4. Array Fields: + - Extract ALL items from the section (if 5 bullets, extract all 5) + - Keep complete sentences together as single array items + +5. Text Fields: + - For email/name fields, look for labels like "Email:", "Representative:" + +Example - WRONG extraction: +Under "4. DELIVERABLES": "5. 60 days warranty support" +{{"warranty": "60 days"}} ← WRONG! This is from deliverables section, not warranty section! + +Example - CORRECT extraction: +Under "8. WARRANTY": "Contractor warrants work will be free from defects for 90 days" +{{"warranty": "90 days following final delivery"}} ← CORRECT! Extracted from warranty section header""" + + # Build message content with single page image + message_content = [ + {"type": "text", "text": prompt}, + { + "type": "image_url", + "image_url": { + "url": f"data:image/png;base64,{img_base64}", + "detail": "high" + } + } + ] + + # Timing: Model inference + t_request_start = time.time() + logger.info(f"Page {page_number}: Starting VL model inference (timeout=180s)...") + + # Call vision model with extended timeout for slower inference servers + try: + response = self.client.chat.completions.create( + model=config.VISION_MODEL, + messages=[{"role": "user", "content": message_content}], + max_tokens=config.VISION_MAX_TOKENS, + temperature=config.VISION_TEMPERATURE, + timeout=180.0 # 3 minutes per page for slower inference servers + ) + t_request_end = time.time() + + # Calculate timing metrics + total_latency_ms = (t_request_end - t_request_start) * 1000 + + # Extract token usage if available + usage = getattr(response, 'usage', None) + if usage: + prompt_tokens = getattr(usage, 'prompt_tokens', 0) + completion_tokens = getattr(usage, 'completion_tokens', 0) + total_tokens = getattr(usage, 'total_tokens', 0) + + # Calculate tokens per second + tokens_per_second = completion_tokens / (total_latency_ms / 1000) if total_latency_ms > 0 else 0 + + logger.info( + f"Page {page_number}: VL model response received | " + f"Latency: {total_latency_ms:.0f}ms ({total_latency_ms/1000:.1f}s) | " + f"Tokens: {completion_tokens} output / {prompt_tokens} input = {total_tokens} total | " + f"Speed: {tokens_per_second:.2f} tokens/sec" + ) + else: + logger.info( + f"Page {page_number}: VL model response received | " + f"Latency: {total_latency_ms:.0f}ms ({total_latency_ms/1000:.1f}s) | " + f"Token usage not available" + ) + + result_text = response.choices[0].message.content + extracted_data = self._parse_json_response(result_text) + + except Exception as api_error: + t_error_end = time.time() + error_time_ms = (t_error_end - t_request_start) * 1000 + logger.error( + f"Page {page_number}: VL model API error after {error_time_ms:.0f}ms ({error_time_ms/1000:.1f}s) | " + f"Error: {str(api_error)}" + ) + raise + + if extracted_data: + # Filter out any extra fields that aren't in the schema + expected_fields = set(schema.keys()) + filtered_data = {k: v for k, v in extracted_data.items() if k in expected_fields} + + # Log if any unexpected fields were removed + extra_fields = set(extracted_data.keys()) - expected_fields + if extra_fields: + logger.warning(f"Page {page_number}: Removed unexpected fields: {extra_fields}") + + # Log array lengths for debugging + array_info = [] + for field, value in filtered_data.items(): + if isinstance(value, list): + array_info.append(f"{field}={len(value)} items") + + if array_info: + logger.info(f"Page {page_number} extraction successful: {list(filtered_data.keys())} ({', '.join(array_info)})") + else: + logger.info(f"Page {page_number} extraction successful: {list(filtered_data.keys())}") + return filtered_data + else: + logger.warning(f"Page {page_number} returned no data") + return {} + + except Exception as e: + logger.error(f"Error extracting from page {page_number}: {str(e)}") + return {} + + def _merge_extraction_results( + self, + existing_data: Dict[str, Any], + new_data: Dict[str, Any], + schema: Dict[str, str] + ) -> Dict[str, Any]: + """ + Intelligently merge extraction results from multiple pages. + + - For arrays: Concatenate items from both results + - For scalars: Prefer non-null values, keep first found value + - For objects: Merge recursively + + Args: + existing_data: Previously merged data + new_data: New data from current page + schema: Schema definition to determine field types + + Returns: + Merged data dictionary + """ + merged = dict(existing_data) + + for field, new_value in new_data.items(): + field_type = schema.get(field, "string") + + # Determine if this is an array field + is_array_field = ( + field_type == "array" or + isinstance(field_type, dict) and field_type.get("type") == "array" + ) + + if field not in merged: + # Field doesn't exist in merged data yet, add it + merged[field] = new_value + elif new_value is None or new_value == "": + # New value is null/empty, keep existing + continue + elif merged[field] is None or merged[field] == "": + # Existing is null/empty, replace with new value + merged[field] = new_value + elif is_array_field: + # Merge arrays - prefer longer/more complete arrays + if isinstance(merged[field], list) and isinstance(new_value, list): + existing_len = len(merged[field]) + new_len = len(new_value) + + # If new array is significantly larger, it's likely more complete - replace + if new_len > existing_len * 1.5: # 50% more items + logger.info(f"Array field '{field}': Replacing {existing_len} items with {new_len} items (more complete)") + merged[field] = new_value + elif new_len > existing_len: # New has more items but not significantly + # Prefer the larger array as it's more complete + logger.info(f"Array field '{field}': Using larger array ({new_len} vs {existing_len} items)") + merged[field] = new_value + elif existing_len > new_len * 1.5: # Existing is significantly larger + logger.info(f"Array field '{field}': Keeping existing {existing_len} items (more complete than {new_len})") + # Keep existing + else: + # Similar lengths - concatenate and deduplicate + if all(isinstance(item, (str, int, float, bool)) for item in merged[field] + new_value): + # Simple types - deduplicate + merged[field] = list(dict.fromkeys(merged[field] + new_value)) + else: + # Complex types (objects) - just concatenate + merged[field] = merged[field] + new_value + logger.info(f"Merged array field '{field}': Concatenated to {len(merged[field])} total items") + elif isinstance(new_value, list): + # Existing was not an array but should be, replace + logger.info(f"Array field '{field}': Setting initial value with {len(new_value)} items") + merged[field] = new_value + else: + # Scalar field - choose most valid value + if merged[field] != new_value: + existing_val = str(merged[field]) if merged[field] else "" + new_val = str(new_value) if new_value else "" + + # For email fields, ONLY accept values with @ symbol + if 'email' in field.lower(): + has_existing_at = '@' in existing_val + has_new_at = '@' in new_val + + if has_new_at and not has_existing_at: + # New value is valid email, existing is not + logger.info(f"Field '{field}': replacing '{existing_val}' with valid email '{new_val}'") + merged[field] = new_value + elif has_existing_at and not has_new_at: + # Keep existing valid email, reject invalid new value + logger.info(f"Field '{field}': keeping valid email '{existing_val}', rejecting '{new_val}'") + elif has_new_at and has_existing_at: + # Both are emails, keep first one + logger.info(f"Field '{field}': keeping first email '{existing_val}'") + else: + # Neither is valid email, keep existing + logger.warning(f"Field '{field}': no valid email found ('{existing_val}' vs '{new_val}'), keeping first") + else: + # For non-email fields, prefer longer/more detailed values + if len(new_val) > len(existing_val): + logger.info(f"Field '{field}': using more detailed value '{new_val}' over '{existing_val}'") + merged[field] = new_value + else: + logger.debug(f"Field '{field}': keeping '{existing_val}'") + + return merged + + def _extract_from_text_only(self, text: str, schema: Dict[str, str]) -> Dict[str, Any]: + """Extract using text-only vision model (fallback) with section-aware parsing""" + try: + schema_description = self._format_schema_for_prompt(schema) + + prompt = f"""Extract data from this document text as JSON. + +FIELDS TO EXTRACT: +{schema_description} + +CRITICAL RULES: +1. Section Header Matching (HIGHEST PRIORITY): + - ONLY extract from sections with matching numbered headers + - Look for numbered section headers like "1.", "2.", "4.", "8." followed by section names + - "warranty" field → ONLY from "8. WARRANTY" or "WARRANTY" section header + - "deliverables" field → ONLY from "4. DELIVERABLES" or "DELIVERABLES" section header + - "scope_of_service" field → ONLY from "1. SCOPE OF SERVICES" or "SCOPE OF SERVICE" section header + - DO NOT extract a field from a bullet point list UNLESS that list is under the matching section header + - If you see warranty-related text in a deliverables bullet list, it is NOT warranty - ignore it + +2. Field vs Section Distinction: + - If "warranty" appears in a numbered list under "4. DELIVERABLES", ignore it (it's a deliverable item) + - If "warranty" has its own section header "8. WARRANTY", extract from there + - Section headers are usually numbered (1., 2., 8.) and may be in CAPS or bold + +3. Output Format: + - Return ONLY valid JSON with exact field names above + - No markdown, no code fences, no commentary + - Use null for missing fields or if section not found in text + +4. Array Fields: + - Extract ALL bullet points from the matched section ONLY + - If "scope_of_service" is array, extract bullets ONLY from "1. SCOPE OF SERVICES" section + - If "deliverables" is array, extract bullets ONLY from "4. DELIVERABLES" section + - Keep complete sentences together as single array items + +5. Text Structure: + - Sections are separated by numbered headers (1., 2., etc.) + - Content under a section belongs to that section until next numbered header + - Bullet points (•, -, numbered lists) belong to their parent section + +Example - WRONG extraction: +Text shows: +"4. DELIVERABLES +- Complete source code +- 60 days warranty support" + +{{"warranty": "60 days"}} ← WRONG! This is from deliverables section, not warranty section! + +Example - CORRECT extraction: +Text shows: +"4. DELIVERABLES +- Complete source code +- Technical documentation" +"8. WARRANTY +Contractor warrants work will be free from defects for 90 days" + +{{"deliverables": ["Complete source code", "Technical documentation"], "warranty": "90 days"}} ← CORRECT! + +Document text: +{text[:4000]} + +Return ONLY valid JSON with the exact field names specified.""" + + response = self.client.chat.completions.create( + model=config.VISION_MODEL, + messages=[ + {"role": "user", "content": prompt} + ], + max_tokens=config.VISION_MAX_TOKENS, + temperature=config.VISION_TEMPERATURE, + timeout=180.0 # 3 minutes for slower inference servers + ) + + result_text = response.choices[0].message.content + extracted_data = self._parse_json_response(result_text) + + return extracted_data if extracted_data else self._mock_extraction(schema) + + except Exception as e: + logger.error(f"Text-only extraction error: {str(e)}") + return self._mock_extraction(schema) + + def _parse_json_response(self, response_text: str) -> Dict[str, Any]: + """Parse JSON from model response with smart extraction and sanitization""" + import json + import re + + def extract_json_object(text: str) -> str: + """Extract JSON object by finding matching braces (first { to last })""" + first_brace = text.find('{') + if first_brace == -1: + return "" + + # Find matching closing brace by counting + brace_count = 0 + last_brace = -1 + + for i in range(first_brace, len(text)): + if text[i] == '{': + brace_count += 1 + elif text[i] == '}': + brace_count -= 1 + if brace_count == 0: + last_brace = i + break + + if last_brace == -1: + # No matching brace found, find last } in text + last_brace = text.rfind('}') + if last_brace == -1: + return text[first_brace:] # Return from first { to end + + return text[first_brace:last_brace + 1] + + def sanitize_json_strings(json_str: str) -> str: + """Sanitize control characters and fix corrupted string values""" + # Remove NULL bytes + sanitized = json_str.replace('\x00', '') + + # Fix pattern: "field": "value that may span + # multiple lines or have garbage" + # We need to handle cases where value contains unescaped newlines or quotes + + def fix_field_value(match): + field_name = match.group(1) + # Everything after the colon and opening quote until we hit valid JSON again + rest = match.group(2) + + # Find where the value should end (next field or closing brace) + # Look for patterns like: ",\n "field": or }\n + next_field = re.search(r'[,\}]\s*(?:\n\s*)?"', rest) + if next_field: + value = rest[:next_field.start()] + else: + value = rest + + # Clean the value: remove literal newlines, escape special chars, remove garbage + value = re.sub(r'\s*\n\s*', ' ', value) # Replace newlines with space + value = re.sub(r'\s+', ' ', value).strip() # Normalize whitespace + # Remove random garbage words that shouldn't be there + value = re.sub(r'\s*addCriterion\s*', '', value) + # Escape any remaining control characters + value = value.replace('\r', ' ').replace('\t', ' ') + + return f'"{field_name}": "{value}"' + + # Match "field": " and capture everything after + sanitized = re.sub(r'"([^"]+)":\s*"([^}]+?)(?="[^"]*":|$)', fix_field_value, sanitized, flags=re.DOTALL) + + return sanitized + + def fix_truncated_json(json_str: str) -> str: + """Attempt to fix truncated JSON by closing structures""" + fixed = json_str.strip() + + # Remove trailing comma + if fixed.endswith(','): + fixed = fixed[:-1] + + # If string count is odd, we have an unclosed string + if fixed.count('"') % 2 != 0: + # Find the last complete field and truncate there + last_comma = fixed.rfind('",') + if last_comma != -1: + fixed = fixed[:last_comma + 1] + else: + # Find last colon and set to null + last_colon = fixed.rfind('":') + if last_colon != -1: + fixed = fixed[:last_colon + 1] + ' null' + + # Close any unclosed brackets and braces + open_brackets = fixed.count('[') - fixed.count(']') + open_braces = fixed.count('{') - fixed.count('}') + + fixed += ']' * open_brackets + fixed += '}' * open_braces + + return fixed + + # Step 1: Try direct parse (best case) + try: + return json.loads(response_text) + except json.JSONDecodeError: + pass + + # Step 2: Extract JSON object (from first { to matching }) + json_str = extract_json_object(response_text) + + if not json_str: + logger.error(f"Could not find JSON object in response: {response_text[:200]}") + return {} + + # Step 3: Try parsing extracted JSON + try: + return json.loads(json_str) + except json.JSONDecodeError as e: + logger.debug(f"Extracted JSON parse failed: {str(e)}, attempting repair...") + + # Step 4: Sanitize control characters in string values + try: + sanitized = sanitize_json_strings(json_str) + return json.loads(sanitized) + except json.JSONDecodeError as e: + logger.debug(f"Sanitized JSON parse failed: {str(e)}, attempting truncation fix...") + + # Step 5: Try fixing truncation + try: + fixed = fix_truncated_json(json_str) + result = json.loads(fixed) + logger.warning("Successfully repaired truncated/malformed JSON - some data may be incomplete") + return result + except json.JSONDecodeError as e: + logger.error(f"All JSON repair attempts failed: {str(e)}") + logger.error(f"Failed JSON preview: {json_str[:300]}") + return {} + + def _format_schema_for_prompt(self, schema: Dict[str, str]) -> str: + """Format schema for prompt with helpful descriptions""" + lines = [] + + # Field-specific extraction hints to improve accuracy + field_hints = { + # Section-based array fields + "deliverables": "array from section '4. DELIVERABLES'", + "deliverable": "array from 'DELIVERABLES' section", + "scope_of_work": "array from section '1. SCOPE OF WORK' or '1. SCOPE OF SERVICES'", + "scope_of_services": "array from section '1. SCOPE OF SERVICES'", + "scope_of_service": "array from section '1. SCOPE OF SERVICES'", + + # Representative fields + "contractor_representative": "text following 'Representative:' label in AND/contractor section", + "contractor_representative_name": "text following 'Representative:' label in contractor section", + "client_representative": "text following 'Representative:' label in BETWEEN/client section", + "client_representative_name": "text following 'Representative:' label in client section", + + # Email fields + "contractor_email": "email address following 'Email:' label in AND/contractor section", + "client_email": "email address following 'Email:' label in BETWEEN/client section", + + # Company fields + "contractor_name": "text following 'Company Name:' in contractor section", + "client_company_name": "text following 'Company Name:' in client section", + + # Medical/invoice common fields + "medications": "array of prescribed medicines", + "line_items": "array of items with details" + } + + for field, field_type in schema.items(): + # Check if field_type is a dict (nested schema) or string + if isinstance(field_type, dict): + type_str = field_type.get("type", "string") + description = field_type.get("description", "") + else: + type_str = field_type + description = "" + + # Use custom hint if available, otherwise use description from schema + hint = field_hints.get(field.lower(), description) + + if hint: + lines.append(f"- {field} ({type_str}): {hint}") + else: + lines.append(f"- {field} ({type_str})") + + return "\n".join(lines) + + def _classify_by_keywords(self, text: str) -> Dict[str, Any]: + """ + Fast rule-based classification using keyword patterns. + Returns classification result or None if no confident match. + """ + text_lower = text.lower() + + # Prescription indicators (high confidence) + prescription_keywords = ['prescription', 'rx ', 'medication', 'dosage', 'sig:', 'pharmacy', 'prescriber', 'refills'] + prescription_count = sum(1 for kw in prescription_keywords if kw in text_lower) + if prescription_count >= 2: + return { + "document_type": "prescription", + "confidence": 0.85, + "reasoning": f"Contains {prescription_count} prescription-specific keywords" + } + + # Invoice indicators + invoice_keywords = ['invoice', 'invoice number', 'invoice #', 'bill to', 'payment terms', 'net ', 'due date'] + invoice_count = sum(1 for kw in invoice_keywords if kw in text_lower) + if invoice_count >= 2: + return { + "document_type": "invoice", + "confidence": 0.85, + "reasoning": f"Contains {invoice_count} invoice-specific keywords" + } + + # Contract indicators + contract_keywords = ['agreement', 'hereby', 'whereas', 'party', 'contract', 'terms and conditions', 'signed'] + contract_count = sum(1 for kw in contract_keywords if kw in text_lower) + if contract_count >= 3: + return { + "document_type": "contract", + "confidence": 0.85, + "reasoning": f"Contains {contract_count} contract-specific keywords" + } + + # Bank statement indicators + bank_keywords = ['account number', 'statement period', 'beginning balance', 'ending balance', 'transaction'] + bank_count = sum(1 for kw in bank_keywords if kw in text_lower) + if bank_count >= 2: + return { + "document_type": "bank_statement", + "confidence": 0.85, + "reasoning": f"Contains {bank_count} banking-specific keywords" + } + + # Receipt indicators + receipt_keywords = ['receipt', 'thank you', 'payment method', 'subtotal', 'tax', 'change due'] + receipt_count = sum(1 for kw in receipt_keywords if kw in text_lower) + if receipt_count >= 2: + return { + "document_type": "receipt", + "confidence": 0.80, + "reasoning": f"Contains {receipt_count} receipt-specific keywords" + } + + return None + + def _build_types_description(self, available_types: List[str]) -> str: + """ + Build a formatted description of available document types with common indicators. + + Args: + available_types: List of document types available in the database + + Returns: + Formatted string describing each type + """ + type_indicators = { + "invoice": "vendor name, invoice number, line items with prices, total amount, payment terms", + "prescription": "patient info, doctor/prescriber name, medication names, dosage instructions, pharmacy", + "bank_statement": "account number, statement period dates, transaction list, balances", + "receipt": "store/business name, items purchased, subtotal, tax, total, payment method", + "contract": "legal language (\"hereby\", \"whereas\"), party names, signatures, terms/conditions, sections", + "service_contract": "service agreement, deliverables, scope of work, payment terms, signatures", + "report": "title, sections, analysis, data tables, conclusions, recommendations" + } + + descriptions = [] + for doc_type in available_types: + # Normalize type for matching (remove underscores, lowercase) + normalized_type = doc_type.lower().replace("_", " ").replace("-", " ") + type_key = doc_type.lower().replace("_", "").replace("-", "") + + # Try to find matching indicators + indicators = None + for key, value in type_indicators.items(): + if key.replace("_", "").replace("-", "") == type_key: + indicators = value + break + + if indicators: + descriptions.append(f"• {doc_type} - Typical indicators: {indicators}") + else: + # Generic description for unknown types + descriptions.append(f"• {doc_type} - Custom document type") + + return "\n".join(descriptions) + + def detect_document_type(self, pdf_content: bytes, available_types: List[str] = None) -> Dict[str, Any]: + """ + Detect the type of document using hybrid approach against available template types. + 1. Fast keyword-based classification (50ms) + 2. VL model fallback for unclear cases (5-10 seconds) + + Args: + pdf_content: Binary PDF content + available_types: List of document types that have templates in the database + + Returns dict with: + - document_type: str (e.g., "invoice", "prescription", "bank_statement") + - confidence: float (0.0-1.0) + - reasoning: str (explanation) + """ + if not self.client: + logger.warning("No vision client. Returning mock document type.") + return {"document_type": "unknown", "confidence": 0.0, "reasoning": "Vision service unavailable"} + + if not available_types: + logger.warning("No available document types provided for classification") + return {"document_type": "unknown", "confidence": 0.0, "reasoning": "No templates available in the system"} + + try: + # STEP 1: Extract first page text for fast classification + text = self._extract_text_from_pages(pdf_content, page_numbers=[1]) + + # STEP 2: Try fast keyword-based classification first + if len(text.strip()) >= 50: + keyword_result = self._classify_by_keywords(text) + if keyword_result and keyword_result['confidence'] >= 0.80: + logger.info(f"Fast classification: {keyword_result['document_type']} ({keyword_result['confidence']:.0%})") + return keyword_result + + # STEP 3: If no text or low confidence, use VL model with optimized image + if len(text.strip()) < 50: + logger.info("Limited text found, using image for document type detection") + page_images = self._pdf_to_images(pdf_content, page_numbers=[1], zoom=1.0) # Reduced zoom + if not page_images: + raise ValueError("Cannot extract text or images from PDF") + + # Optimize image size before sending + img = page_images[0] + max_width = 800 # Reduced from potentially 2000+ + if img.width > max_width: + ratio = max_width / img.width + new_size = (max_width, int(img.height * ratio)) + img = img.resize(new_size, Image.Resampling.LANCZOS) + logger.info(f"Resized image to {new_size[0]}x{new_size[1]} for faster processing") + + # Compress as JPEG for smaller size + buffered = BytesIO() + img.convert('RGB').save(buffered, format="JPEG", quality=85, optimize=True) + img_base64 = base64.b64encode(buffered.getvalue()).decode() + img_size_kb = len(buffered.getvalue()) / 1024 + logger.info(f"Optimized image size: {img_size_kb:.1f}KB") + + # Build dynamic prompt with available types + types_description = self._build_types_description(available_types) + + message_content = [ + {"type": "text", "text": f"""Analyze this document image and classify its type. + +AVAILABLE DOCUMENT TYPES IN SYSTEM (choose ONE from this list ONLY): +{types_description} + +IMPORTANT: +- You MUST choose ONE type from the list above +- If the document doesn't clearly match any type, choose the closest match with lower confidence +- DO NOT suggest types that are not in the list above + +RESPONSE FORMAT (JSON only): +{{ + "document_type": "", + "confidence": <0.0 to 1.0>, + "reasoning": "<2-3 key visual indicators you see>" +}} + +Look at the document carefully and identify the strongest visual indicators."""}, + { + "type": "image_url", + "image_url": { + "url": f"data:image/jpeg;base64,{img_base64}", + "detail": "low" + } + } + ] + else: + # Text-based classification with dynamic types + types_description = self._build_types_description(available_types) + + message_content = f"""Analyze this document text and classify its type. + +Document text excerpt: +{text[:800]} + +AVAILABLE DOCUMENT TYPES IN SYSTEM (choose ONE from this list ONLY): +{types_description} + +IMPORTANT: +- You MUST choose ONE type from the list above +- If the document doesn't clearly match any type, choose the closest match with lower confidence +- DO NOT suggest types that are not in the list above + +RESPONSE FORMAT (JSON only): +{{ + "document_type": "", + "confidence": <0.0 to 1.0>, + "reasoning": "<2-3 key text patterns you found>" +}} + +Return ONLY valid JSON, no other text.""" + + # Call VL model with extended timeout for slower inference servers + response = self.client.chat.completions.create( + model=config.DETECTION_MODEL, + messages=[{"role": "user", "content": message_content}], + max_tokens=300, # Increased for better reasoning + temperature=0.2, # Slightly higher for flexibility + timeout=120.0 # 2 minutes for classification on slower servers + ) + + result = self._parse_json_response(response.choices[0].message.content) + + if not result or not result.get('document_type'): + logger.warning("VL model returned empty result") + return {"document_type": "undetected", "confidence": 0.0, "reasoning": "Could not determine document type"} + + logger.info(f"VL classification: {result.get('document_type')} ({result.get('confidence', 0):.0%})") + return result + + except TimeoutError: + logger.error("Document classification timed out after 2 minutes") + return { + "document_type": "undetected", + "confidence": 0.0, + "reasoning": "Classification timed out. Please select a template manually." + } + except Exception as e: + logger.error(f"Document type detection failed: {str(e)}") + return { + "document_type": "undetected", + "confidence": 0.0, + "reasoning": f"Classification failed: {str(e)}" + } + + def _mock_extraction(self, schema: Dict[str, str]) -> Dict[str, Any]: + """Generate mock data based on schema""" + mock_data = {} + for field, field_type in schema.items(): + if "invoice" in field.lower() or "number" in field.lower(): + mock_data[field] = "INV-2024-001" + elif "date" in field.lower(): + mock_data[field] = "2024-12-29" + elif "vendor" in field.lower() or "company" in field.lower(): + mock_data[field] = "Acme Corporation" + elif "total" in field.lower() or "amount" in field.lower(): + mock_data[field] = 1250.00 + elif field_type == "array": + mock_data[field] = [ + {"description": "Consulting Services", "amount": 1000.00}, + {"description": "Software License", "amount": 250.00} + ] + else: + mock_data[field] = f"Mock {field}" + + return mock_data + + def process_chat_message(self, message: str, current_schema: Dict[str, str]) -> tuple[str, Dict[str, str]]: + """Process chat message to build extraction schema""" + + if not self.client: + return self._mock_chat_response(message, current_schema) + + try: + schema_str = "\n".join([f"- {k}: {v}" for k, v in current_schema.items()]) if current_schema else "None yet" + + system_prompt = """You are a helpful assistant that helps users build document extraction schemas. + +When users greet you or ask questions: Respond conversationally and ask what fields they want to extract. +When users request fields: Update the schema and confirm. + +FIELD NAME RULES: +- Use snake_case +- Use EXACT names user specifies +- Plural words (deliverables, medications, items) = array type +- NO typos, NO extra letters, NO suffix additions like "_list" + +DATA TYPES: +- string: text, names, emails +- number: integers, floats +- date: dates +- array: lists, multiple items, plural nouns +- object: nested structures + +USER REQUEST PATTERNS: +"extract X" or "add X" → ADD field X to schema (determine type from name) +"extract X as array" → ADD field X with type=array +"remove X" → DELETE field X from schema +"replace X with Y" → DELETE X, ADD Y +"X and Y as well" → ADD both X and Y to schema +"X, Y, Z" → ADD all three to schema +"hi", "hello", "help" → Greet and ask what to extract + +RESPONSE FORMAT (JSON only): +{ + "reply": "Your conversational response", + "schema": {"field1": "type1", "field2": "type2"} +} + +EXAMPLES: +User: "hi" +Response: {"reply": "Hello! I'll help you configure document extraction. What fields would you like to extract from your documents?", "schema": {}} + +User: "extract deliverables" +Response: {"reply": "Added deliverables as an array field. What else would you like to extract?", "schema": {"deliverables": "array"}} + +User: "add client_email and contractor_email" +Response: {"reply": "Added client_email and contractor_email fields.", "schema": {"deliverables": "array", "client_email": "string", "contractor_email": "string"}}""" + + user_prompt = f"""Current schema: +{schema_str} + +User request: {message} + +Process this request and update the schema accordingly.""" + + response = self.client.chat.completions.create( + model=config.VISION_MODEL, + messages=[ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": user_prompt} + ], + max_tokens=800, + temperature=0.3, + timeout=120.0 # 2 minutes for chat processing on slower servers + ) + + result = self._parse_json_response(response.choices[0].message.content) + + reply = result.get("reply", "I'm here to help! What would you like to extract?") + updated_schema = result.get("schema", current_schema) + + logger.info(f"Chat processed: {len(updated_schema)} fields in schema") + + return reply, updated_schema + + except Exception as e: + logger.error(f"Chat processing error: {str(e)}") + return self._mock_chat_response(message, current_schema) + + def _mock_chat_response(self, message: str, current_schema: Dict[str, str]) -> tuple[str, Dict[str, str]]: + """Mock chat response when vision client is not available""" + message_lower = message.lower() + + if not current_schema: + if "invoice" in message_lower: + reply = "I'll help you extract invoice data. What fields do you need? Common invoice fields include: invoice number, date, vendor, line items, and total amount." + return reply, {} + else: + reply = "I can help you define what data to extract from your documents. What type of document are you working with?" + return reply, {} + + new_schema = dict(current_schema) + + if "invoice number" in message_lower or "number" in message_lower: + new_schema["invoice_number"] = "string" + if "date" in message_lower: + new_schema["date"] = "date" + if "vendor" in message_lower or "company" in message_lower: + new_schema["vendor"] = "string" + if "total" in message_lower or "amount" in message_lower: + new_schema["total"] = "number" + if "line item" in message_lower or "items" in message_lower: + new_schema["line_items"] = "array" + + if new_schema != current_schema: + field_list = ", ".join(new_schema.keys()) + reply = f"Got it! I'll extract these fields: {field_list}. You can test this extraction or add more fields." + else: + reply = "What other fields would you like to extract?" + + return reply, new_schema + + def _extract_schema_from_response(self, message: str, current_schema: Dict[str, str]) -> Dict[str, str]: + """Extract schema updates from user message""" + new_schema = dict(current_schema) + message_lower = message.lower() + + field_mappings = { + "invoice number": ("invoice_number", "string"), + "invoice_number": ("invoice_number", "string"), + "date": ("date", "date"), + "vendor": ("vendor", "string"), + "company": ("vendor", "string"), + "total": ("total", "number"), + "amount": ("total", "number"), + "line items": ("line_items", "array"), + "items": ("line_items", "array"), + } + + for keyword, (field, field_type) in field_mappings.items(): + if keyword in message_lower: + new_schema[field] = field_type + + return new_schema diff --git a/sample_solutions/DocQvision/api/utils/__init__.py b/sample_solutions/DocQvision/api/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/sample_solutions/DocQvision/api/utils/validators.py b/sample_solutions/DocQvision/api/utils/validators.py new file mode 100644 index 00000000..5a7ae58a --- /dev/null +++ b/sample_solutions/DocQvision/api/utils/validators.py @@ -0,0 +1,66 @@ +"""Validation utilities for file uploads and data""" +import logging + +logger = logging.getLogger(__name__) + + +def validate_pdf_file(content: bytes, filename: str) -> tuple[bool, str]: + """ + Validate that uploaded file is a legitimate PDF + + Args: + content: File bytes + filename: Original filename + + Returns: + (is_valid, error_message) + """ + if not content: + return False, "Empty file" + + if not filename.lower().endswith('.pdf'): + return False, "Only PDF files are supported" + + if not content.startswith(b'%PDF-'): + return False, "Invalid PDF file format (magic bytes mismatch)" + + if len(content) > 10 * 1024 * 1024: + return False, "File size exceeds 10MB limit" + + return True, "" + + +def sanitize_chat_message(message: str) -> str: + """ + Sanitize user chat input to prevent prompt injection + + Args: + message: User chat message + + Returns: + Sanitized message + """ + if not message: + return "" + + message = message.strip() + + if len(message) > 2000: + message = message[:2000] + + suspicious_patterns = [ + "ignore previous", + "ignore all previous", + "disregard previous", + "forget previous", + "new instructions:", + "system:", + "assistant:", + ] + + message_lower = message.lower() + for pattern in suspicious_patterns: + if pattern in message_lower: + logger.warning(f"Potential prompt injection detected: {pattern}") + + return message diff --git a/sample_solutions/DocQvision/assets/configure-chat.png b/sample_solutions/DocQvision/assets/configure-chat.png new file mode 100644 index 0000000000000000000000000000000000000000..0691ed17c73c9d201ebd173409de2d620e2f7994 GIT binary patch literal 247492 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

v}7&@L2vEgKjq6qmS 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