基于预设排名获取源和模型配置 当健康检查数据为空时,基于预设的源排名获取配置。 Args: model_name (str): 模型名称 Returns: tuple: 包含主源和备用源的配置信息 Raises: ValueError: 如果找不到可用的源
(self, model_name)
| 240 | return True # 出错时假设数据为空,使用预设排名 |
| 241 | |
| 242 | def get_sources_from_ranking(self, model_name): |
| 243 | """基于预设排名获取源和模型配置 |
| 244 | |
| 245 | 当健康检查数据为空时,基于预设的源排名获取配置。 |
| 246 | |
| 247 | Args: |
| 248 | model_name (str): 模型名称 |
| 249 | |
| 250 | Returns: |
| 251 | tuple: 包含主源和备用源的配置信息 |
| 252 | |
| 253 | Raises: |
| 254 | ValueError: 如果找不到可用的源 |
| 255 | """ |
| 256 | try: |
| 257 | # 检查是否为屏蔽模型 |
| 258 | if is_model_health_check_blacklisted(model_name): |
| 259 | self.logger.info(f"🚫 模型 {model_name} 在健康检测屏蔽清单中,基于预设排名选择源") |
| 260 | else: |
| 261 | self.logger.info(f"基于预设排名为模型 {model_name} 选择源") |
| 262 | |
| 263 | # 根据source_ranking选择排名靠前的源 |
| 264 | sorted_sources = sorted(self.source_ranking.keys(), key=lambda s: self.source_ranking[s]) |
| 265 | |
| 266 | # 找出可用的源(即映射中有此模型的源) |
| 267 | available_sources = [] |
| 268 | for source in sorted_sources: |
| 269 | if self._check_valid_model(source, model_name): |
| 270 | available_sources.append(source) |
| 271 | |
| 272 | if not available_sources: |
| 273 | error_msg = f"在预设排名中找不到模型 {model_name} 的可用源" |
| 274 | self.logger.error(error_msg) |
| 275 | raise ValueError(error_msg) |
| 276 | |
| 277 | # 选择主源和备用源 |
| 278 | main_source = available_sources[0] |
| 279 | backup_source = available_sources[1] if len(available_sources) > 1 else main_source |
| 280 | |
| 281 | # 获取模型名称和API密钥 |
| 282 | main_source_model_name = self._get_actual_model_name(main_source, model_name) |
| 283 | backup_source_model_name = self._get_actual_model_name(backup_source, model_name) |
| 284 | |
| 285 | self.logger.info(f"选择主源 {main_source} 和备用源 {backup_source} 为模型 {model_name}") |
| 286 | |
| 287 | try: |
| 288 | main_api_key = Harness_localAPI.get_api_key(main_source) |
| 289 | backup_api_key = Harness_localAPI.get_api_key(backup_source) |
| 290 | except Exception as e: |
| 291 | self.logger.error(f"获取API密钥时出错: {str(e)}") |
| 292 | raise ValueError(f"无法获取API密钥: {str(e)}") |
| 293 | |
| 294 | return main_source, main_source_model_name, main_api_key, backup_source, backup_source_model_name, backup_api_key |
| 295 | except Exception as e: |
| 296 | self.logger.error(f"基于预设排名选择源时出错: {str(e)}") |
| 297 | raise |
| 298 | |
| 299 | def _get_actual_model_name(self, source_name, model_name): |
no test coverage detected