| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | from fastapi import APIRouter, Dependsfrom sqlalchemy.ext.asyncio import AsyncSessionfrom sqlmodel import selectfrom app.api.deps import get_token_id, get_async_sessionfrom app.models.assistant import Assistant, AssistantUpdate, AssistantCreate, AssistantReadfrom app.libs.paginate import cursor_page, CommonPagefrom app.models.token_relation import RelationTypefrom app.providers.auth_provider import auth_policyfrom app.schemas.common import DeleteResponsefrom app.services.assistant.assistant import AssistantServicerouter = APIRouter()@router.get("", response_model=CommonPage[AssistantRead])async def list_assistants(*, session: AsyncSession = Depends(get_async_session), token_id=Depends(get_token_id)):    """    Returns a list of assistants.    """    statement = auth_policy.token_filter(        select(Assistant), field=Assistant.id, relation_type=RelationType.Assistant, token_id=token_id    )    asts_page = await cursor_page(statement, session)    asts_page.data = [ast.model_dump(by_alias=True) for ast in asts_page.data]    return asts_page@router.post("", response_model=AssistantRead)async def create_assistant(    *, session: AsyncSession = Depends(get_async_session), body: AssistantCreate, token_id=Depends(get_token_id)):    """    Create an assistant with a model and instructions.    """    ast = await AssistantService.create_assistant(session=session, body=body, token_id=token_id)    return ast.model_dump(by_alias=True)@router.get("/{assistant_id}", response_model=AssistantRead)async def get_assistant(*, session: AsyncSession = Depends(get_async_session), assistant_id: str):    """    Retrieves an assistant.    """    ast = await AssistantService.get_assistant(session=session, assistant_id=assistant_id)    return ast.model_dump(by_alias=True)@router.post("/{assistant_id}", response_model=AssistantRead)async def modify_assistant(    *, session: AsyncSession = Depends(get_async_session), assistant_id: str, body: AssistantUpdate):    """    Modifies an assistant.    """    ast = await AssistantService.modify_assistant(session=session, assistant_id=assistant_id, body=body)    return ast.model_dump(by_alias=True)@router.delete("/{assistant_id}", response_model=DeleteResponse)async def delete_assistant(*, session: AsyncSession = Depends(get_async_session), assistant_id: str) -> DeleteResponse:    """    Delete an assistant.    """    return await AssistantService.delete_assistant(session=session, assistant_id=assistant_id)
 |