Spaces:
Sleeping
Sleeping
File size: 1,773 Bytes
eb5a3ff | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | from fastapi import FastAPI, UploadFile, File, Form
from typing import List, Optional
import uvicorn
from agent import generate_task_prompt
import io
import pypdf
import docx2txt
app = FastAPI(title="Task Prompting API")
@app.post("/generate_prompt")
async def generate_prompt(
description: str = Form(...),
field: str = Form(...),
files: Optional[List[UploadFile]] = File(None)
):
files_data = []
if files:
for file in files:
content = await file.read()
filename_lower = file.filename.lower()
try:
if filename_lower.endswith(".pdf"):
reader = pypdf.PdfReader(io.BytesIO(content))
text = "\n".join([page.extract_text() or "" for page in reader.pages])
files_data.append({"filename": file.filename, "content": text})
elif filename_lower.endswith(".docx"):
text = docx2txt.process(io.BytesIO(content))
files_data.append({"filename": file.filename, "content": text})
else:
decoded_content = content.decode('utf-8')
files_data.append({"filename": file.filename, "content": decoded_content})
except Exception as e:
print(f"Error processing {file.filename}: {e}")
pass # Skip files that fail encoding or extraction
try:
generated_prompt = generate_task_prompt(description, field, files_data)
return {"status": "success", "prompt": generated_prompt}
except Exception as e:
return {"status": "error", "message": str(e)}
if __name__ == "__main__":
uvicorn.run("api:app", host="0.0.0.0", port=8000, reload=True)
|