"""QA 会话语义状态模型。""" from __future__ import annotations from typing import Any, Optional from sqlalchemy import ForeignKey, Integer, TIMESTAMP, VARCHAR from sqlalchemy.orm import Mapped, mapped_column from .base import Base from .types import JSONB class QASessionState(Base): __tablename__ = "qa_session_states" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) session_id: Mapped[int] = mapped_column( Integer, ForeignKey("qa_sessions.id", ondelete="CASCADE"), nullable=False, unique=True, index=True, ) last_subject: Mapped[Optional[str]] = mapped_column(VARCHAR(255), nullable=True, index=True) last_entity_ids: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) last_intent: Mapped[Optional[str]] = mapped_column(VARCHAR(20), nullable=True, index=True) ambiguity: Mapped[Optional[str]] = mapped_column(VARCHAR(20), nullable=True, index=True) rewrite_history: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) pending_clarification: Mapped[Optional[Any]] = mapped_column(JSONB, nullable=True) pending_clarification_expires_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True, index=True)