assistant.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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_token_id, get_async_session
  5. from app.models.assistant import Assistant, AssistantUpdate, AssistantCreate, AssistantRead
  6. from app.libs.paginate import cursor_page, CommonPage
  7. from app.models.token_relation import RelationType
  8. from app.providers.auth_provider import auth_policy
  9. from app.schemas.common import DeleteResponse
  10. from app.services.assistant.assistant import AssistantService
  11. router = APIRouter()
  12. @router.get("", response_model=CommonPage[AssistantRead])
  13. async def list_assistants(*, session: AsyncSession = Depends(get_async_session), token_id=Depends(get_token_id)):
  14. """
  15. Returns a list of assistants.
  16. """
  17. statement = auth_policy.token_filter(
  18. select(Assistant), field=Assistant.id, relation_type=RelationType.Assistant, token_id=token_id
  19. )
  20. asts_page = await cursor_page(statement, session)
  21. asts_page.data = [ast.model_dump(by_alias=True) for ast in asts_page.data]
  22. return asts_page
  23. @router.post("", response_model=AssistantRead)
  24. async def create_assistant(
  25. *, session: AsyncSession = Depends(get_async_session), body: AssistantCreate, token_id=Depends(get_token_id)
  26. ):
  27. """
  28. Create an assistant with a model and instructions.
  29. """
  30. ast = await AssistantService.create_assistant(session=session, body=body, token_id=token_id)
  31. return ast.model_dump(by_alias=True)
  32. @router.get("/{assistant_id}", response_model=AssistantRead)
  33. async def get_assistant(*, session: AsyncSession = Depends(get_async_session), assistant_id: str):
  34. """
  35. Retrieves an assistant.
  36. """
  37. ast = await AssistantService.get_assistant(session=session, assistant_id=assistant_id)
  38. return ast.model_dump(by_alias=True)
  39. @router.post("/{assistant_id}", response_model=AssistantRead)
  40. async def modify_assistant(
  41. *, session: AsyncSession = Depends(get_async_session), assistant_id: str, body: AssistantUpdate
  42. ):
  43. """
  44. Modifies an assistant.
  45. """
  46. ast = await AssistantService.modify_assistant(session=session, assistant_id=assistant_id, body=body)
  47. return ast.model_dump(by_alias=True)
  48. @router.delete("/{assistant_id}", response_model=DeleteResponse)
  49. async def delete_assistant(*, session: AsyncSession = Depends(get_async_session), assistant_id: str) -> DeleteResponse:
  50. """
  51. Delete an assistant.
  52. """
  53. return await AssistantService.delete_assistant(session=session, assistant_id=assistant_id)