"""
知识库检索日志模型

记录每次检索的查询、结果、耗时等信息，用于分析检索质量。
"""
from sqlalchemy import Column, String, Text, Integer, Float, JSON, Index

from app.base_model import BaseModel


class KnowledgeRetrievalLog(BaseModel):
    """
    知识库检索日志

    记录每次检索请求的完整信息，用于检索质量分析和优化。
    """
    __tablename__ = "ai_knowledge_retrieval_log"

    # 检索请求
    query = Column(Text, nullable=False, comment="查询文本")
    knowledge_base_ids = Column(JSON, nullable=False, comment="检索的知识库ID列表")
    retrieval_mode = Column(String(20), default="hybrid", comment="检索模式: vector/fulltext/hybrid")
    top_k = Column(Integer, default=5, comment="请求的返回数量")
    score_threshold = Column(Float, default=0.5, comment="相似度阈值")

    # 检索结果
    result_count = Column(Integer, default=0, comment="实际返回结果数")
    results = Column(JSON, nullable=True, comment="检索结果摘要（segment_id/score/kb_id）")
    rerank_applied = Column(String(5), default="false", comment="是否应用了重排序")

    # 性能
    elapsed_time = Column(Integer, default=0, comment="耗时（毫秒）")

    # 来源
    source = Column(String(50), nullable=True, comment="调用来源: api/workflow/chat")
    user_id = Column(String(21), nullable=True, comment="操作用户ID")

    __table_args__ = (
        Index('idx_retrieval_log_query_time', 'sys_create_datetime'),
        Index('idx_retrieval_log_user', 'user_id'),
    )
