mirror of
https://github.com/OpenBMB/ChatDev.git
synced 2026-04-25 19:28:09 +00:00
46 lines
1.6 KiB
Python
Executable File
46 lines
1.6 KiB
Python
Executable File
from fastapi import APIRouter, File, HTTPException, UploadFile
|
|
|
|
from server.state import ensure_known_session
|
|
from utils.exceptions import ValidationError
|
|
from utils.structured_logger import get_server_logger, LogType
|
|
|
|
router = APIRouter()
|
|
|
|
@router.post("/api/uploads/{session_id}")
|
|
async def upload_attachment(session_id: str, file: UploadFile = File(...)):
|
|
try:
|
|
manager = ensure_known_session(session_id, require_connection=False)
|
|
except ValidationError as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc))
|
|
try:
|
|
record = await manager.attachment_service.save_upload_file(session_id, file)
|
|
except ValidationError:
|
|
raise HTTPException(status_code=400, detail="Session not connected")
|
|
except Exception as exc:
|
|
logger = get_server_logger()
|
|
logger.error(
|
|
"Failed to save attachment",
|
|
log_type=LogType.REQUEST,
|
|
session_id=session_id,
|
|
error=str(exc),
|
|
)
|
|
raise HTTPException(status_code=500, detail="Failed to store attachment")
|
|
|
|
ref = record.ref
|
|
return {
|
|
"attachment_id": ref.attachment_id,
|
|
"name": ref.name,
|
|
"mime_type": ref.mime_type,
|
|
"size": ref.size,
|
|
}
|
|
|
|
|
|
@router.get("/api/uploads/{session_id}")
|
|
async def list_attachments(session_id: str):
|
|
try:
|
|
manager = ensure_known_session(session_id, require_connection=False)
|
|
except ValidationError as exc:
|
|
raise HTTPException(status_code=400, detail=str(exc))
|
|
manifest = manager.attachment_service.list_attachment_manifests(session_id)
|
|
return {"attachments": manifest}
|