"""
推荐系统配置
"""
import os
from app.core.config import (
    DB_CONFIG, DB_HOST, DB_PORT, DB_USERNAME, DB_PASSWORD, DB_NAME,
    REDIS_HOST, REDIS_PORT, REDIS_DB,
    MILVUS_URL, MILVUS_TOKEN, MILVUS_ALIAS,
    MINIO_URL, MINIO_ACCESS, MINIO_SECRET, MINIO_SECURE
)

# Milvus 集合名称
MILVUS_COLLECTION_SKETCH_VECTORS = "sketch_vectors_norm"

# Redis key 前缀
REDIS_KEY_USER_PREF_PREFIX = "user_pref"

# 推荐系统配置参数
RECOMMENDATION_CONFIG = {
    # 时间衰减半衰期（用于计算时间衰减权重）
    # 值越小，最近的行为权重越大
    "K_half": 20,
    
    # 探索与利用的比例 (0.0-1.0)
    # - 值越大，使用探索分支（随机推荐）的几率越大，结果更随机
    # - 值越小，使用利用分支（基于用户偏好）的几率越大，结果更精准
    # - 建议范围: 0.3-0.7，要增加随机性可提高到 0.6-0.8
    "explore_ratio": 0.5,
    
    # 向量检索返回的候选数量
    # 值越大，候选池越大，但计算成本也越高
    # 建议范围: 100-1000
    "topk": 1000,
    
    # Style 加分系数（同 style 的候选进行加分）
    # 值越大，匹配 style 的候选被选中的概率越大
    # 要降低某个结果的重复率，可以降低此值（如 0.1 或 0.05）
    "style_bonus": 0.2,
    
    # Softmax 抽样的温度参数
    # - 温度越高（>1.0），概率分布越均匀，结果更随机，重复率更低
    # - 温度越低（<1.0），高分项概率越大，结果更集中，重复率更高
    # - 温度=1.0 为标准 Softmax
    # - 建议范围: 1.0-3.0，要增加随机性可提高到 2.0-3.0
    "softmax_temperature": 0.07,
    
    # 监听间隔（秒）
    "listen_interval_sec": 30,
    
    # 批量处理大小
    "batch_size": 1000,
    
    # Redis 过期时间（秒，30天）
    "redis_expire_seconds": 2592000,
    
    # 向量维度
    "vector_dim": 2048,
}

# 数据库表名
TABLE_USER_PREFERENCE_LOG = "user_preference_log_test"
TABLE_SYS_FILE = "t_sys_file"

# MySQL 连接配置（用于推荐系统）
MYSQL_CONFIG = {
    "host": DB_HOST,
    "port": DB_PORT,
    "user": DB_USERNAME,
    "password": DB_PASSWORD,
    "database": DB_NAME,
    "charset": "utf8mb4"
}

