MCPcopy Index your code
hub / github.com/THESIS-AGENT/AIRouter / get_api_key

Method get_api_key

LoadBalancing.py:59–122  ·  view source on GitHub ↗

从API密钥管理服务获取API密钥,失败时使用备用方案 Args: source_name (str): 源名称 Returns: str: API密钥 Raises: Exception: 如果主备用方案都无法获取API密钥

(source_name)

Source from the content-addressed store, hash-verified

57
58 @staticmethod
59 def get_api_key(source_name):
60 """从API密钥管理服务获取API密钥,失败时使用备用方案
61
62 Args:
63 source_name (str): 源名称
64
65 Returns:
66 str: API密钥
67
68 Raises:
69 Exception: 如果主备用方案都无法获取API密钥
70 """
71 logger = logging.getLogger(__name__)
72 # 防止日志向上传播,避免重复打印
73 logger.propagate = False
74
75 try:
76 # 优先尝试调用API密钥管理服务API
77 response = requests.post(
78 f"{API_KEY_MANAGER_URL}{API_KEY_MANAGER_GET_ENDPOINT}",
79 json={"source_name": source_name},
80 timeout=INNER_TIMEOUT
81 )
82
83 if response.status_code == 200:
84 result = response.json()
85 logger.info(f"成功从API密钥管理服务获取 {source_name} 的API密钥")
86 return result["api_key"]
87 else:
88 # 如果API调用失败,记录警告并尝试备用方案
89 logger.warning(f"API密钥服务返回错误状态码: {response.status_code},尝试使用备用方案")
90 raise Exception(f"API service returned status code: {response.status_code}")
91
92 except Exception as e:
93 # 连接失败时,尝试使用备用方案:从pool_mapping中获取API密钥
94 logger.warning(f"无法连接到API密钥管理服务 (已离线): {str(e)},使用兜底离线配获取API密钥")
95
96 try:
97 if source_name not in pool_mapping:
98 raise ValueError(f"兜底离线配中未找到源 '{source_name}' 的配置")
99
100 source_pool = pool_mapping[source_name]
101 if not source_pool:
102 raise ValueError(f"源 '{source_name}' 的API密钥池为空")
103
104 # 从所有账户的所有API密钥中随机选择一个
105 all_api_keys = []
106 for account, keys in source_pool.items():
107 for key_info in keys:
108 if "api_key" in key_info:
109 all_api_keys.append(key_info["api_key"])
110
111 if not all_api_keys:
112 raise ValueError(f"源 '{source_name}' 的兜底离线配中没有有效的API密钥")
113
114 selected_api_key = random.choice(all_api_keys)
115 logger.warning(f"使用兜底离线配置为源 '{source_name}' 随机选择了一个API密钥")
116 return selected_api_key

Callers 7

generate_docMethod · 0.95
generate_embeddingMethod · 0.95
generate_rerankerMethod · 0.95
get_configMethod · 0.45

Calls

no outgoing calls

Tested by 1