51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
from uuid import UUID
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.db.session import get_db
|
|
from app.schemas import Envelope
|
|
from app.schemas.assistant import (
|
|
AssistantModelList,
|
|
AssistantQueryRequest,
|
|
AssistantQueryResponse,
|
|
AssistantStatus,
|
|
)
|
|
from app.services.geo_assistant_service import GeoAssistantService
|
|
from app.utils.response import envelope
|
|
|
|
|
|
router = APIRouter(tags=["assistant"])
|
|
|
|
|
|
@router.get("/assistant/status", response_model=Envelope[AssistantStatus])
|
|
def assistant_status() -> dict:
|
|
return envelope(GeoAssistantService().status().model_dump())
|
|
|
|
|
|
@router.get("/assistant/models", response_model=Envelope[AssistantModelList])
|
|
def assistant_models() -> dict:
|
|
service = GeoAssistantService()
|
|
models = service.list_models()
|
|
return envelope(
|
|
{
|
|
"items": [model.model_dump() for model in models],
|
|
"total": len(models),
|
|
"default_model": service.settings.ollama_default_model,
|
|
}
|
|
)
|
|
|
|
|
|
@router.post(
|
|
"/projects/{project_id}/assistant/query",
|
|
response_model=Envelope[AssistantQueryResponse],
|
|
)
|
|
def assistant_query(
|
|
project_id: UUID,
|
|
payload: AssistantQueryRequest,
|
|
db: Session = Depends(get_db),
|
|
) -> dict:
|
|
return envelope(GeoAssistantService().query(db, project_id=project_id, payload=payload).model_dump())
|