CoolFace
Apppublic

menno3213/shadowai-api

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
main.py57 linesDownload Raw Back to root
1from fastapi import FastAPI2from fastapi.middleware.cors import CORSMiddleware3from pydantic import BaseModel4import httpx, json, re, uuid, asyncio5 6MODEL_API = "https://menno3213-shadowai.hf.space"7 8app = FastAPI(title="ShadowAI API")9app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"])10 11class GenerateRequest(BaseModel):12    prompt: str13    language: str = "typescript"14    model: str = "shadowai"15    sessionId: str | None = None16    platform: str = "web"17 18@app.get("/")19def root():20    return {"status": "ok", "model": "ShadowAI 42M"}21 22@app.post("/api/generate")23@app.post("/api/ai/generate")24async def generate(req: GenerateRequest):25    session_id = req.sessionId or f"sess_{int(asyncio.get_event_loop().time())}_{uuid.uuid4().hex[:6]}"26    payload = {"data": [req.prompt, [], 0.4, 512]}27    async with httpx.AsyncClient(timeout=120) as client:28        r = await client.post(f"{MODEL_API}/gradio_api/call/respond", json=payload)29        r.raise_for_status()30        event_id = r.json()["event_id"]31        raw = ""32        for _ in range(60):33            await asyncio.sleep(1)34            r2 = await client.get(f"{MODEL_API}/gradio_api/call/respond/{event_id}")35            text = r2.text36            if "event: complete" in text:37                for line in text.split("\n"):38                    if line.startswith("data:"):39                        try:40                            data = json.loads(line[5:])41                            if isinstance(data, list) and len(data) > 1:42                                msgs = data[1]43                                if msgs and len(msgs) > 0:44                                    last = msgs[-1]45                                    if "content" in last and len(last["content"]) > 0:46                                        raw = last["content"][-1].get("text", "")47                        except: pass48                break49    raw = raw.split("# User:")[0].split("# Assistant:")[-1].strip()50    raw = re.sub(r"\s+", " ", raw).strip()51    return {52        "sessionId": session_id,53        "files": [],54        "model": "shadowai",55        "rawResponse": raw or "(no response generated)"56    }57