Spaces:
Runtime error
Runtime error
| from __future__ import annotations | |
| from typing import List | |
| from datetime import datetime | |
| from fastapi import FastAPI, UploadFile, File, HTTPException | |
| from pydantic import BaseModel | |
| from fastapi.responses import PlainTextResponse | |
| from .document_service import ( | |
| save_document, | |
| list_documents, | |
| get_document, | |
| read_content, | |
| ) | |
| from src.log import get_logger | |
| class DocumentInfo(BaseModel): | |
| id: int | |
| original_name: str | |
| file_path: str | |
| created_at: datetime | |
| class Config: | |
| from_attributes = True | |
| class DocumentDetail(DocumentInfo): | |
| content: str | |
| def create_app() -> FastAPI: | |
| app = FastAPI(title="LLM Backend API") | |
| log = get_logger(__name__) | |
| async def upload(username: str, file: UploadFile = File(...)) -> DocumentInfo: | |
| log.info("Uploading document %s for %s", file.filename, username) | |
| doc = save_document(username, file) | |
| return DocumentInfo.model_validate(doc.__data__) | |
| async def list_docs(username: str) -> List[DocumentInfo]: | |
| docs = list_documents(username) | |
| return [DocumentInfo.model_validate(d.__data__) for d in docs] | |
| async def inspect(username: str, doc_id: int) -> DocumentDetail: | |
| doc = get_document(username, doc_id) | |
| if not doc: | |
| raise HTTPException(status_code=404, detail="Document not found") | |
| content = read_content(doc) | |
| data = DocumentDetail.model_validate(doc.__data__) | |
| data.content = content | |
| return data | |
| async def download(username: str, doc_id: int) -> PlainTextResponse: | |
| doc = get_document(username, doc_id) | |
| if not doc: | |
| raise HTTPException(status_code=404, detail="Document not found") | |
| return PlainTextResponse(read_content(doc)) | |
| return app | |
| app = create_app() | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host="0.0.0.0", port=8000) | |