import osfrom fastapi import FastAPIfrom pydantic import BaseModelfrom firecrawl import Firecrawlapp = FastAPI()firecrawl = Firecrawl(api_key=os.environ["FIRECRAWL_API_KEY"])class SearchRequest(BaseModel): query: str limit: int = 5class ScrapeRequest(BaseModel): url: strclass InteractRequest(BaseModel): scrape_id: str prompt: str@app.post("/search")async def search(req: SearchRequest): results = firecrawl.search(req.query, limit=req.limit) return [{"title": r.title, "url": r.url} for r in results.web]@app.post("/scrape")async def scrape(req: ScrapeRequest): result = firecrawl.scrape(req.url) return {"markdown": result.markdown, "metadata": result.metadata}@app.post("/interact/start")async def interact_start(req: ScrapeRequest): result = firecrawl.scrape(req.url, formats=["markdown"]) return {"scrape_id": result.metadata.scrape_id}@app.post("/interact")async def interact(req: InteractRequest): response = firecrawl.interact(req.scrape_id, prompt=req.prompt) return {"output": response.output}@app.post("/interact/stop")async def interact_stop(req: InteractRequest): firecrawl.stop_interaction(req.scrape_id) return {"status": "stopped"}