| --- |
| title: OmniParse AI |
| emoji: ⚡ |
| colorFrom: purple |
| colorTo: indigo |
| sdk: gradio |
| sdk_version: 5.49.1 |
| app_file: app.py |
| pinned: true |
| license: mit |
| --- |
| |
| # OmniParse AI — Invoice Processing SaaS |
|
|
| B2B SaaS pro automatické zpracování faktur. Nahraješ PDF/obrázek faktury, AI vytáhne |
| vendor, čísla faktur, data, částky a DPH, a exportuješ do CSV/JSON/Excel nebo napojíš |
| přes REST API. |
|
|
| ## Jak to spustit |
|
|
| 1. Nahraj `app.py`, `requirements.txt`, `packages.txt` a tento `README.md` do HuggingFace Space |
| se SDK **Gradio**. |
| 2. V **Settings → Variables and Secrets** nastav secrets podle tabulky níže. |
| 3. Pin Space (⋯ → Pin this Space), ať nespí. |
|
|
| ### Secrets |
|
|
| | Secret | Popis | Povinné? | |
| |---|---|---| |
| | `HF_TOKEN` | HuggingFace token pro fallback AI (Mistral-7B) | Doporučeno | |
| | `GROQ_API_KEY` | Primární AI extrakce (Llama 3.1 přes Groq) | Ano | |
| | `SUPABASE_URL` | URL Supabase projektu | Ano (jinak SQLite fallback) | |
| | `SUPABASE_KEY` | anon public key Supabase | Ano (jinak SQLite fallback) | |
| | `GOOGLE_VISION_KEY` | Google Cloud Vision OCR | Volitelné | |
| | `STRIPE_SECRET_KEY` | Stripe secret key (test/live) | Pro platby | |
| | `STRIPE_PRICE_BASIC` | Stripe Price ID pro Basic plán | Pro platby | |
| | `STRIPE_PRICE_PRO` | Stripe Price ID pro Pro plán | Pro platby | |
| | `STRIPE_PRICE_ENTERPRISE` | Stripe Price ID pro Enterprise plán | Pro platby | |
| | `APP_URL` | Veřejná URL Space (pro Stripe redirect) | Pro platby | |
|
|
| Aplikace se **nikdy nezhroutí** kvůli chybějícímu secretu — každá vrstva má fallback: |
|
|
| - Bez `GROQ_API_KEY` → zkusí HF Inference API → pak regex parser. |
| - Bez `SUPABASE_URL`/`KEY` → přepne na lokální SQLite (`omniparse.db`), data nejsou |
| perzistentní mezi restarty Space. |
| - Bez `GOOGLE_VISION_KEY` → jen Tesseract OCR. |
| - Bez `STRIPE_SECRET_KEY` → tlačítko Upgrade zobrazí instrukce místo Checkout linku. |
|
|
| ### Supabase schéma |
|
|
| Pokud používáš Supabase, spusť v **SQL Editor** tento skript před prvním spuštěním appky: |
|
|
| ```sql |
| CREATE TABLE users ( |
| id BIGSERIAL PRIMARY KEY, |
| email TEXT UNIQUE NOT NULL, |
| name TEXT NOT NULL, |
| password TEXT NOT NULL, |
| plan TEXT NOT NULL DEFAULT 'free', |
| stripe_cid TEXT, |
| api_key TEXT, |
| created_at TIMESTAMPTZ DEFAULT NOW() |
| ); |
| |
| CREATE TABLE sessions ( |
| token TEXT PRIMARY KEY, |
| user_id BIGINT NOT NULL REFERENCES users(id), |
| expires_at TIMESTAMPTZ NOT NULL |
| ); |
| |
| CREATE TABLE invoices ( |
| id BIGSERIAL PRIMARY KEY, |
| user_id BIGINT NOT NULL REFERENCES users(id), |
| filename TEXT NOT NULL, |
| vendor TEXT, |
| inv_number TEXT, |
| inv_date TEXT, |
| due_date TEXT, |
| amount NUMERIC(12,2), |
| vat_amount NUMERIC(12,2), |
| total NUMERIC(12,2), |
| currency TEXT DEFAULT 'USD', |
| status TEXT DEFAULT 'done', |
| is_duplicate BOOLEAN DEFAULT FALSE, |
| confidence NUMERIC(4,3), |
| raw_json JSONB, |
| created_at TIMESTAMPTZ DEFAULT NOW() |
| ); |
| |
| CREATE INDEX idx_invoices_user_month ON invoices(user_id, created_at); |
| ``` |
|
|
| ### Demo účet |
|
|
| Při prvním startu se automaticky vytvoří: |
|
|
| - Email: `demo@omniparse.ai` |
| - Heslo: `demo1234` |
| - Plán: Pro |
|
|
| ## Poznámky k platbám |
|
|
| Stripe integrace zde funguje **bez webhooků** — po návratu ze Stripe Checkout uživatel |
| v záložce "⚡ Upgrade" vloží `session_id` z URL a klikne "Ověřit platbu", což zavolá |
| `stripe.checkout.Session.retrieve()` a upgraduje plán v DB. Pro produkční nasazení |
| doporučujeme doplnit skutečný webhook endpoint, tahle verze je zjednodušená podle |
| původního zadání ("bez webhooků"). |
|
|