Spaces:
Sleeping
Sleeping
Hetansh Waghela
fix: HF Spaces deployment - schema patch, memory service, API URLs, sync overlay, medicines seeding
0a2ed98 | set -e | |
| echo "=== Lumea Health Platform - Starting ===" | |
| # Run database migrations (best-effort) | |
| echo "Running database migrations..." | |
| python -m alembic upgrade head 2>&1 || echo "Warning: Alembic migrations failed (tables may already exist or DB not ready). Continuing..." | |
| # --------------------------------------------------------------------------- | |
| # Schema patch: ensure all columns the app expects actually exist in the DB. | |
| # Alembic may fail silently (e.g. pgcrypto extension, SSL issues), leaving | |
| # the schema out of date. This idempotent patch uses ADD COLUMN IF NOT EXISTS. | |
| # --------------------------------------------------------------------------- | |
| echo "Running schema patch (ADD COLUMN IF NOT EXISTS)..." | |
| python -c " | |
| import os, sys | |
| sys.path.insert(0, '.') | |
| db_url = os.environ.get('DATABASE_URL', '') | |
| if not db_url: | |
| print('No DATABASE_URL set — skipping schema patch') | |
| sys.exit(0) | |
| # Convert asyncpg URL to sync psycopg2 URL | |
| sync_url = db_url.replace('postgresql+asyncpg://', 'postgresql://').replace('ssl=require', 'sslmode=require') | |
| try: | |
| import sqlalchemy | |
| engine = sqlalchemy.create_engine(sync_url, pool_pre_ping=True) | |
| with engine.connect() as conn: | |
| # -- reports table: columns added by model but possibly missing from DB -- | |
| patches = [ | |
| 'ALTER TABLE reports ADD COLUMN IF NOT EXISTS category VARCHAR(50)', | |
| 'ALTER TABLE reports ADD COLUMN IF NOT EXISTS doc_type VARCHAR(50)', | |
| 'ALTER TABLE reports ADD COLUMN IF NOT EXISTS classification_confidence FLOAT', | |
| 'ALTER TABLE reports ADD COLUMN IF NOT EXISTS classification_rules_matched JSONB', | |
| 'ALTER TABLE reports ADD COLUMN IF NOT EXISTS raw_text TEXT', | |
| 'ALTER TABLE reports ADD COLUMN IF NOT EXISTS extraction_method VARCHAR', | |
| 'ALTER TABLE reports ADD COLUMN IF NOT EXISTS extraction_source VARCHAR(20)', | |
| 'ALTER TABLE reports ADD COLUMN IF NOT EXISTS page_stats JSON', | |
| 'ALTER TABLE reports ADD COLUMN IF NOT EXISTS extracted_data JSON', | |
| 'ALTER TABLE reports ADD COLUMN IF NOT EXISTS extraction_confidence FLOAT', | |
| 'ALTER TABLE reports ADD COLUMN IF NOT EXISTS error_message TEXT', | |
| # -- observations table -- | |
| 'ALTER TABLE observations ADD COLUMN IF NOT EXISTS source VARCHAR(20)', | |
| 'ALTER TABLE observations ADD COLUMN IF NOT EXISTS confidence FLOAT', | |
| 'ALTER TABLE observations ADD COLUMN IF NOT EXISTS user_corrected BOOLEAN DEFAULT FALSE', | |
| 'ALTER TABLE observations ADD COLUMN IF NOT EXISTS display_name VARCHAR', | |
| ] | |
| for sql in patches: | |
| try: | |
| conn.execute(sqlalchemy.text(sql)) | |
| except Exception as col_err: | |
| print(f' patch skipped: {col_err}') | |
| conn.commit() | |
| print('Schema patch applied successfully') | |
| except Exception as e: | |
| print(f'Warning: Schema patch failed: {e}. Continuing...') | |
| " 2>&1 || echo "Warning: Schema patch skipped. Continuing..." | |
| # Seed generic medicine catalog (Jan Aushadhi + generics) — idempotent, skips if already seeded | |
| echo "Seeding generic medicine catalog..." | |
| python -c " | |
| import asyncio, os, sys | |
| sys.path.insert(0, '.') | |
| try: | |
| from scripts.seed_generic_catalog import seed_database | |
| db_url = os.environ.get('DATABASE_URL', 'postgresql+asyncpg://ggw:ggwpassword@localhost:5432/ggwdb') | |
| asyncio.run(seed_database(db_url)) | |
| except Exception as e: | |
| print(f'Warning: Medicine catalog seeding failed: {e}. Continuing...') | |
| " 2>&1 || echo "Warning: Medicine catalog seeding skipped. Continuing..." | |
| echo "Starting FastAPI server on port 7860..." | |
| exec uvicorn app.main:app --host 0.0.0.0 --port 7860 | |