创建单个数据训练记录 Args: skip_embedding: 是否跳过embedding处理(用于批量插入)
(session: SessionDep, info: DataTrainingInfo, oid: int, trans: Trans, skip_embedding: bool = False)
| 146 | |
| 147 | |
| 148 | def create_training(session: SessionDep, info: DataTrainingInfo, oid: int, trans: Trans, skip_embedding: bool = False): |
| 149 | """ |
| 150 | 创建单个数据训练记录 |
| 151 | Args: |
| 152 | skip_embedding: 是否跳过embedding处理(用于批量插入) |
| 153 | """ |
| 154 | # 基本验证 |
| 155 | if not info.question or not info.question.strip(): |
| 156 | raise Exception(trans("i18n_data_training.question_cannot_be_empty")) |
| 157 | |
| 158 | if not info.description or not info.description.strip(): |
| 159 | raise Exception(trans("i18n_data_training.description_cannot_be_empty")) |
| 160 | |
| 161 | create_time = datetime.datetime.now() |
| 162 | |
| 163 | # 检查数据源和高级应用不能同时为空 |
| 164 | if info.datasource is None and info.advanced_application is None: |
| 165 | raise Exception(trans("i18n_data_training.datasource_assistant_cannot_be_none")) |
| 166 | |
| 167 | # 检查重复记录 |
| 168 | stmt = select(DataTraining.id).where( |
| 169 | and_(DataTraining.question == info.question.strip(), DataTraining.oid == oid) |
| 170 | ) |
| 171 | |
| 172 | if info.datasource is not None and info.advanced_application is not None: |
| 173 | stmt = stmt.where( |
| 174 | or_( |
| 175 | DataTraining.datasource == info.datasource, |
| 176 | DataTraining.advanced_application == info.advanced_application |
| 177 | ) |
| 178 | ) |
| 179 | elif info.datasource is not None and info.advanced_application is None: |
| 180 | stmt = stmt.where(DataTraining.datasource == info.datasource) |
| 181 | elif info.datasource is None and info.advanced_application is not None: |
| 182 | stmt = stmt.where(DataTraining.advanced_application == info.advanced_application) |
| 183 | |
| 184 | exists = session.query(stmt.exists()).scalar() |
| 185 | |
| 186 | if exists: |
| 187 | raise Exception(trans("i18n_data_training.exists_in_db")) |
| 188 | |
| 189 | # 创建记录 |
| 190 | data_training = DataTraining( |
| 191 | question=info.question.strip(), |
| 192 | description=info.description.strip(), |
| 193 | oid=oid, |
| 194 | datasource=info.datasource, |
| 195 | advanced_application=info.advanced_application, |
| 196 | create_time=create_time, |
| 197 | enabled=info.enabled if info.enabled is not None else True |
| 198 | ) |
| 199 | |
| 200 | session.add(data_training) |
| 201 | session.flush() |
| 202 | session.refresh(data_training) |
| 203 | session.commit() |
| 204 | |
| 205 | # 处理embedding(批量插入时跳过) |
no test coverage detected