Union resolution on .gitea/workflows/ci.yml (2 hunks, test-gate lists only): - offline gate: main + test_scraper_proxy + test_scraper_browser_lane (sources/worker_modes/v2_loop/rtve stay in the dep-richer step per #1664 - they importorskip fastapi and would fake coverage offline) - dep-richer tail: UNION of main coverage (concept_auto_tag..taxonomy_resolver) + uat reverse_lookup x4. Side-pick either way drops real coverage. Preflight: 13/13 canaries, YAML valid, 87/87 gated tests exist, py_compile clean, lazy parity 56/56, security scan clean.
107 lines
2.8 KiB
Bash
107 lines
2.8 KiB
Bash
# SAPL Backend — Dokploy Environment Reference
|
|
# Get values from backend/.env (local machine)
|
|
# Paste into Dokploy → Compose → Environment
|
|
|
|
# Azure OpenAI (Vision / Chat)
|
|
AZURE_OPENAI_API_KEY=
|
|
AZURE_OPENAI_API_BASE=
|
|
AZURE_OPENAI_DEPLOYMENT_NAME=
|
|
AZURE_OPENAI_API_VERSION=
|
|
|
|
# Azure OpenAI (Embeddings)
|
|
AZURE_OPENAI_EMBEDDINGS_API_KEY=
|
|
AZURE_OPENAI_EMBEDDINGS_API_BASE=
|
|
AZURE_OPENAI_EMBEDDINGS_DEPLOYMENT=
|
|
AZURE_OPENAI_EMBEDDINGS_API_VERSION=
|
|
|
|
# Mistral AI
|
|
MISTRAL_API_KEY=
|
|
MISTRAL_VISION_MODEL=pixtral-large-latest
|
|
MISTRAL_EMBED_MODEL=mistral-embed
|
|
MISTRAL_AGENT_MODEL=mistral-large-latest
|
|
|
|
# Groq (agent reasoning)
|
|
GROQ_API_KEY=
|
|
GROQ_AGENT_MODEL=llama-3.3-70b-versatile
|
|
|
|
# Claude (backup)
|
|
CLAUDE_API_KEY=
|
|
|
|
# Gemini (vision, embeddings, image gen)
|
|
GEMINI_API_KEY=
|
|
GEMINI_VISION_MODEL=gemini-3.7-flash
|
|
GEMINI_SYNTHESIS_MODEL=gemini-3.7-flash
|
|
GEMINI_EMBED_MODEL=gemini-embedding-2-preview
|
|
GEMINI_IMAGE_MODEL=gemini-3-pro-image
|
|
|
|
# Moodboard PDF page analysis (concurrency/perf knobs — bounded semaphore
|
|
# replaces the old sequential page loop + fixed 5s sleep)
|
|
MOODBOARD_PAGE_CONCURRENCY=2
|
|
MOODBOARD_PAGE_DELAY=5.0
|
|
MOODBOARD_PAGE_RETRY_DELAYS=15,30,60
|
|
MOODBOARD_PAGE_ATTEMPT_TIMEOUT=300.0
|
|
|
|
# Stitch ERP
|
|
STITCH_USERNAME=
|
|
STITCH_PASSWORD=
|
|
STITCH_API_KEY=
|
|
STITCH_API_HOST=https://portal2.stitcherp.com
|
|
|
|
# WFX WebAPI
|
|
WFX_USERNAME=
|
|
WFX_PASSWORD=
|
|
WFX_COMPANYID=
|
|
WFX_TOKEN_ID=
|
|
WFX_TOKEN_SECRET=
|
|
WFX_API_HOST=https://sapl.worldfashionexchange.com
|
|
|
|
# Auth — REQUIRED in every environment. Auth tokens are HMAC-SHA256 signed with
|
|
# this key; the app boots with a FORGEABLE dev default until you set it.
|
|
# Generate a strong value: openssl rand -hex 32
|
|
# NOTE: changing SECRET_KEY invalidates all existing sessions (users re-login).
|
|
SECRET_KEY=change-this-in-production
|
|
|
|
# CORS / URLs
|
|
CORS_ORIGINS=https://sapl.ai-automation-hub.tech
|
|
QR_BASE_URL=https://sapl.ai-automation-hub.tech
|
|
|
|
# Database / Paths (Dokploy defaults — match docker-compose.yml)
|
|
DATABASE_URL=sqlite:////app/data/sapl_garment_intel.db
|
|
CHROMADB_PATH=/app/data/chromadb
|
|
IMAGES_PATH=/app/data/images
|
|
|
|
# Gmail Bot (Order Ingest)
|
|
MAIL_AUTH_USER=
|
|
MAIL_APP_PASSWORD=
|
|
MAIL_FROM=
|
|
SMTP_SERVER=smtp.gmail.com
|
|
SMTP_PORT=587
|
|
IMAP_SERVER=imap.gmail.com
|
|
IMAP_PORT=993
|
|
MAIL_MAILBOX=BOM
|
|
MAIL_FILTER_TO=
|
|
|
|
# Feature Flags
|
|
ENABLE_SCRAPER=false
|
|
|
|
# Build-time only (Dokploy env-only changes won't apply without rebuild)
|
|
VITE_APP_VERSION=uat-local
|
|
|
|
# Reverse Lookup S2+S3 (refs #1525) — empty = that half fails/skips cleanly
|
|
TREG_TOKEN=
|
|
GOOGLE_VISION_API_KEY=
|
|
REVERSE_LOOKUP_PUBLIC_BASE_URL=
|
|
CLOUDFLARE_ACCOUNT_ID=
|
|
CLOUDFLARE_API_TOKEN=
|
|
|
|
# Scraper egress proxy + lanes (refs #1780) — empty = direct + fail-soft skips
|
|
SCRAPER_PROXY_URL=
|
|
SCRAPER_PROXY_BRANDS=
|
|
BD_SCRAPE_WSS=
|
|
BD_SCRAPER_WSS=
|
|
BRIGHTDATA_API_KEY=
|
|
BD_UNLOCKER_ZONE=
|
|
|
|
# UAT mail safety — dry-run logs instead of delivering (UAT default true)
|
|
MAIL_DRY_RUN=true
|