상담자 발화 판정(A)·감정(B)·표현(C) 20문항 질문 세트, 감쇠 없는 이번 턴 반응과 비대칭 기분 전이, 개방도 게이트로 생성 지시를 만들고 ccd.coping_strategy 전달 누락을 고친다. trace v2와 고정 문구 속마음 요약(migration 24, AI 경로 차단 RLS)을 같은 트랜잭션에 저장하고 피드백 정책이 켜진 경우에만 done·TurnResponse·음성 reply·리뷰로 노출한다. 회기 화면 속마음 보기 토글, 리뷰 접힘 블록, 관리자 감정 관측 v2 표시를 추가한다.
58 lines
1.4 KiB
Python
58 lines
1.4 KiB
Python
"""관리자 감정 관측 조회 API 계약."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
from .client_affect import ClientAffectTrace
|
|
|
|
|
|
class AdminAffectRuntimeResponse(BaseModel):
|
|
model_config = ConfigDict(extra="forbid", protected_namespaces=())
|
|
|
|
enabled: bool
|
|
provider: str
|
|
model: str
|
|
configured: bool
|
|
|
|
|
|
class AdminAffectSessionSummary(BaseModel):
|
|
model_config = ConfigDict(extra="forbid", protected_namespaces=())
|
|
|
|
session_id: str
|
|
persona_code: str
|
|
started_at: datetime
|
|
ended: bool
|
|
trace_count: int = Field(ge=0)
|
|
|
|
|
|
class AdminAffectSessionListResponse(BaseModel):
|
|
model_config = ConfigDict(extra="forbid", protected_namespaces=())
|
|
|
|
runtime: AdminAffectRuntimeResponse
|
|
sessions: list[AdminAffectSessionSummary]
|
|
total: int = Field(ge=0)
|
|
limit: int = Field(ge=1, le=100)
|
|
offset: int = Field(ge=0)
|
|
|
|
|
|
class AdminAffectTraceRecord(BaseModel):
|
|
model_config = ConfigDict(extra="forbid", protected_namespaces=())
|
|
|
|
turn_id: str
|
|
seq: int = Field(ge=1)
|
|
created_at: datetime
|
|
trace: ClientAffectTrace
|
|
|
|
|
|
class AdminAffectSessionDetailResponse(BaseModel):
|
|
model_config = ConfigDict(extra="forbid", protected_namespaces=())
|
|
|
|
session_id: str
|
|
persona_code: str
|
|
current_emotions: dict[str, float | None]
|
|
traces: list[AdminAffectTraceRecord]
|
|
total_traces: int = Field(ge=0)
|
|
has_more: bool
|