import duckdb from fastapi import FastAPI, HTTPException, Query import os app = FastAPI() # --- 🔐 CONFIG --- VALID_KEYS = {"Satuu5": "Master_Admin"} HF_TOKEN = os.getenv("HF_TOKEN") DATA_URL = "https://huggingface.co/datasets/Watchhrr/HITECH_DB/resolve/main/Hi-Tek-DB.zip.001" @app.get("/") def home(): status = "READY" if HF_TOKEN else "TOKEN_MISSING_IN_SETTINGS" return {"status": "Online", "auth": status, "Owner": "Swapnil"} @app.get("/search") def search(query: str, key: str = None): if key not in VALID_KEYS: raise HTTPException(status_code=403, detail="Invalid Key!") if not HF_TOKEN: return {"error": "Bhai, Settings mein HF_TOKEN secret dalo pehle!"} con = duckdb.connect() try: con.execute("INSTALL httpfs; LOAD httpfs;") # --- FIX: Sabse stable method for HTTP Authentication --- con.execute(f"SET http_headers = 'Authorization: Bearer {HF_TOKEN}';") # Data scanning (Automatic Indexing) # Pehli bar scan karne mein 30-40 sec lag sakte hain sql_check = f"SELECT * FROM read_csv_auto('{DATA_URL}', all_varchar=True) LIMIT 1" df_sample = con.execute(sql_check).df() cols = df_sample.columns # Phone/Mobile column detect karna search_col = next((c for c in cols if any(x in c.lower() for x in ['phone', 'mobile', 'number', 'contact'])), cols[0]) # Final Search Query final_sql = f"SELECT * FROM read_csv_auto('{DATA_URL}', all_varchar=True) WHERE \"{search_col}\" LIKE '%{query}%' LIMIT 5" result = con.execute(final_sql).df().to_dict(orient="records") return { "status": "success", "column_searched": search_col, "results": result } except Exception as e: # Agar connection timeout ho jaye return {"status": "error", "message": "Database is heavy, retrying...", "details": str(e)}