assistant_file.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from fastapi import APIRouter, Depends
  2. from sqlalchemy.ext.asyncio import AsyncSession
  3. from sqlmodel import select
  4. from app.api.deps import get_async_session
  5. from app.libs.paginate import cursor_page, CommonPage
  6. from app.models.assistant_file import AssistantFileCreate, AssistantFile
  7. from app.schemas.common import DeleteResponse
  8. from app.services.assistant.assistant_file import AssistantFileService
  9. router = APIRouter()
  10. @router.get("/{assistant_id}/files", response_model=CommonPage[AssistantFile])
  11. async def list_assistant_files(
  12. *,
  13. session: AsyncSession = Depends(get_async_session),
  14. assistant_id: str,
  15. ):
  16. """
  17. Returns a list of assistant files.
  18. """
  19. return await cursor_page(select(AssistantFile).where(AssistantFile.assistant_id == assistant_id), db=session)
  20. @router.post("/{assistant_id}/files", response_model=AssistantFile)
  21. async def create_assistant_file(
  22. *,
  23. session: AsyncSession = Depends(get_async_session),
  24. assistant_id: str,
  25. body: AssistantFileCreate,
  26. ) -> AssistantFile:
  27. """
  28. Create an assistant file by attaching a [File](/docs/api-reference/files)
  29. to an [assistant](/docs/api-reference/assistants).
  30. """
  31. return await AssistantFileService.create_assistant_file(session=session, assistant_id=assistant_id, body=body)
  32. @router.get("/{assistant_id}/files/{file_id}", response_model=AssistantFile)
  33. async def get_assistant_file(
  34. *, session: AsyncSession = Depends(get_async_session), assistant_id: str, file_id: str
  35. ) -> AssistantFile:
  36. """
  37. Retrieves an AssistantFile.
  38. """
  39. return await AssistantFileService.get_assistant_file(session=session, assistant_id=assistant_id, file_id=file_id)
  40. @router.delete(
  41. "/{assistant_id}/files/{file_id}",
  42. response_model=DeleteResponse,
  43. )
  44. async def delete_assistant_file(
  45. *, session: AsyncSession = Depends(get_async_session), assistant_id: str, file_id: str
  46. ) -> DeleteResponse:
  47. """
  48. Delete an assistant file.
  49. """
  50. return await AssistantFileService.delete_assistant_file(session=session, assistant_id=assistant_id, file_id=file_id)