| 123 | |
| 124 | |
| 125 | class LoadBalancing: |
| 126 | def __init__(self) -> None: |
| 127 | """初始化LoadBalancing实例,获取健康检查数据和配置""" |
| 128 | # 这里要维护一个包含滑动窗口逻辑的, 每个供应商的每个模型的表现情况队列. |
| 129 | # 然后先按照损坏概率去降序排序. |
| 130 | # 再按照执行时间去降序排序. |
| 131 | self.healthy = Harness_localAPI.check_healthy() |
| 132 | self.source_price = source_price |
| 133 | self.source_ranking = source_ranking |
| 134 | self.source_mapping = source_mapping |
| 135 | # 添加日志记录器 |
| 136 | self.logger = logging.getLogger(__name__) |
| 137 | # 防止日志向上传播,避免重复打印 |
| 138 | self.logger.propagate = False |
| 139 | |
| 140 | |
| 141 | def _check_valid_model(self, source_name, model_name): |
| 142 | """检查模型是否在源上有效 |
| 143 | |
| 144 | Args: |
| 145 | source_name (str): 源名称 |
| 146 | model_name (str): 模型名称 |
| 147 | |
| 148 | Returns: |
| 149 | bool: 如果模型有效返回True,否则返回False |
| 150 | """ |
| 151 | # 处理多模态模型的情况 |
| 152 | base_model_name = model_name[:-3] if model_name.endswith("_mm") else model_name |
| 153 | |
| 154 | # 检查映射是否存在且非None |
| 155 | if (source_name in self.source_mapping and |
| 156 | base_model_name in self.source_mapping[source_name] and |
| 157 | self.source_mapping[source_name][base_model_name] is not None): |
| 158 | return True |
| 159 | return False |
| 160 | |
| 161 | def get_combinedRanking(self, ranking_1, ranking_2, weight): |
| 162 | """融合两个不同指标的排序 |
| 163 | |
| 164 | 将两个不同指标的排序结果按给定权重融合为一个新的排序结果。 |
| 165 | |
| 166 | Args: |
| 167 | ranking_1 (dict): 第一个指标的排序结果 |
| 168 | ranking_2 (dict): 第二个指标的排序结果 |
| 169 | weight (float): ranking_2的权重,范围[0,1] |
| 170 | |
| 171 | Returns: |
| 172 | dict: 融合后的排序结果 |
| 173 | """ |
| 174 | ranking_3 = {} |
| 175 | |
| 176 | len_1 = len(ranking_1) |
| 177 | len_2 = len(ranking_2) |
| 178 | |
| 179 | # 创建副本避免修改原始数据 |
| 180 | tmp_ranking_1 = ranking_1.copy() |
| 181 | tmp_ranking_2 = ranking_2.copy() |
| 182 |
no outgoing calls