관리자 감정 관측 기록과 조회 API 추가
This commit is contained in:
parent
d22cd9883d
commit
acb0d26338
16 changed files with 1445 additions and 18 deletions
|
|
@ -25,6 +25,10 @@ from ..auth_sessions import (
|
|||
upsert_managed_user,
|
||||
)
|
||||
from ..config import settings
|
||||
from ..contracts.admin_affect import (
|
||||
AdminAffectSessionDetailResponse,
|
||||
AdminAffectSessionListResponse,
|
||||
)
|
||||
from ..contracts.engine_gateway import (
|
||||
ENGINE_PROVIDER_DEFAULTS,
|
||||
ENGINE_PROVIDERS,
|
||||
|
|
@ -38,6 +42,7 @@ from ..deps import Principal, require_admin_access
|
|||
from ..engine_client import engine_client
|
||||
from ..runtime_policy import require_runtime_fallback_allowed
|
||||
from ..services import evaluator, notifications, rag
|
||||
from ..services import admin_affect as admin_affect_service
|
||||
from ..services import provider_credentials as provider_credentials_service
|
||||
from ..services import provider_oauth as provider_oauth_service
|
||||
from ..services.llm_pricing import (
|
||||
|
|
@ -1934,6 +1939,58 @@ async def admin_voice_runtime(
|
|||
return voice_runtime_metrics.snapshot()
|
||||
|
||||
|
||||
@router.get("/affect/sessions", response_model=AdminAffectSessionListResponse)
|
||||
async def list_admin_affect_sessions(
|
||||
principal: AdminPrincipal,
|
||||
limit: Annotated[int, Query(ge=1, le=100)] = 30,
|
||||
offset: Annotated[int, Query(ge=0)] = 0,
|
||||
) -> AdminAffectSessionListResponse:
|
||||
"""관리자 전용 감정 관측 회기 목록을 반환한다."""
|
||||
|
||||
try:
|
||||
return await admin_affect_service.list_sessions(
|
||||
user_id=principal.user_id,
|
||||
limit=limit,
|
||||
offset=offset,
|
||||
)
|
||||
except admin_affect_service.AdminAffectPersistenceError as exc:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
||||
detail="admin affect sessions are unavailable",
|
||||
) from exc
|
||||
|
||||
|
||||
@router.get(
|
||||
"/affect/sessions/{session_id}",
|
||||
response_model=AdminAffectSessionDetailResponse,
|
||||
)
|
||||
async def get_admin_affect_session_detail(
|
||||
session_id: UUID,
|
||||
principal: AdminPrincipal,
|
||||
limit: Annotated[int, Query(ge=1, le=200)] = 100,
|
||||
before_seq: Annotated[int | None, Query(gt=0)] = None,
|
||||
) -> AdminAffectSessionDetailResponse:
|
||||
"""저장된 Jev trace와 현재 감정 snapshot을 반환한다."""
|
||||
|
||||
try:
|
||||
return await admin_affect_service.get_session_detail(
|
||||
user_id=principal.user_id,
|
||||
session_id=session_id,
|
||||
limit=limit,
|
||||
before_seq=before_seq,
|
||||
)
|
||||
except admin_affect_service.AdminAffectSessionNotFoundError as exc:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail="admin affect session not found",
|
||||
) from exc
|
||||
except admin_affect_service.AdminAffectPersistenceError as exc:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
||||
detail="admin affect session is unavailable",
|
||||
) from exc
|
||||
|
||||
|
||||
@router.get("/usage", response_model=AdminUsageResponse)
|
||||
async def admin_usage(
|
||||
principal: AdminPrincipal,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue