from sqlalchemy import Column, String, Integer, TIMESTAMP, select from app.db.session import Base async def get_model_by_id(db_session, model_id: str): """根据 ID 获取单个模型配置。""" result =await db_session.execute(select(ModelConfig).where(ModelConfig.id == model_id)) model_config = result.scalar_one_or_none() return model_config class ModelConfig(Base): """模型配置表,对应表 t_model_config CREATE TABLE IF NOT EXISTS t_model_config ( id VARCHAR(36) PRIMARY KEY COMMENT '主键ID', model_name VARCHAR(100) NOT NULL COMMENT '模型名称(如 qwen2)', provider VARCHAR(50) NOT NULL COMMENT '模型提供商(如 Ollama、OpenAI、DeepSeek)', base_url VARCHAR(255) NOT NULL COMMENT 'API 基础地址', api_key VARCHAR(512) DEFAULT '' COMMENT 'API 密钥(无密钥则为空)', type VARCHAR(50) NOT NULL COMMENT '模型类型(如 chat、embedding)', is_enabled TINYINT DEFAULT 1 COMMENT '是否启用:1-启用,0-禁用', is_default TINYINT DEFAULT 0 COMMENT '是否默认:1-默认,0-非默认', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', created_by VARCHAR(255) COMMENT '创建者', updated_by VARCHAR(255) COMMENT '更新者', UNIQUE KEY uk_model_provider (model_name, provider) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT ='模型配置表'; """ __tablename__ = "t_model_config" id = Column(String(36), primary_key=True, index=True, comment="主键ID") model_name = Column(String(100), nullable=False, comment="模型名称(如 qwen2)") provider = Column(String(50), nullable=False, comment="模型提供商(如 Ollama、OpenAI、DeepSeek)") base_url = Column(String(255), nullable=False, comment="API 基础地址") api_key = Column(String(512), nullable=False, default="", comment="API 密钥(无密钥则为空)") type = Column(String(50), nullable=False, comment="模型类型(如 chat、embedding)") # 使用 Integer 存储 TINYINT,后续可在业务层将 0/1 转为 bool is_enabled = Column(Integer, nullable=False, default=1, comment="是否启用:1-启用,0-禁用") is_default = Column(Integer, nullable=False, default=0, comment="是否默认:1-默认,0-非默认") created_at = Column(TIMESTAMP, nullable=True, comment="创建时间") updated_at = Column(TIMESTAMP, nullable=True, comment="更新时间") created_by = Column(String(255), nullable=True, comment="创建者") updated_by = Column(String(255), nullable=True, comment="更新者") __table_args__ = ( # 与 DDL 中的 uk_model_provider 保持一致 { "mysql_engine": "InnoDB", "mysql_charset": "utf8mb4", "comment": "模型配置表", }, )