专门获取凭证的错误信息(包含 error_codes 和 error_messages) Args: filename: 凭证文件名 mode: 凭证模式 ("geminicli" 或 "antigravity") Returns: 包含 error_codes 和 error_messages 的字典
(self, filename: str, mode: str = "geminicli")
| 1308 | return False |
| 1309 | |
| 1310 | async def get_credential_errors(self, filename: str, mode: str = "geminicli") -> Dict[str, Any]: |
| 1311 | """ |
| 1312 | 专门获取凭证的错误信息(包含 error_codes 和 error_messages) |
| 1313 | |
| 1314 | Args: |
| 1315 | filename: 凭证文件名 |
| 1316 | mode: 凭证模式 ("geminicli" 或 "antigravity") |
| 1317 | |
| 1318 | Returns: |
| 1319 | 包含 error_codes 和 error_messages 的字典 |
| 1320 | """ |
| 1321 | self._ensure_initialized() |
| 1322 | |
| 1323 | # 统一使用 basename 处理文件名 |
| 1324 | filename = os.path.basename(filename) |
| 1325 | |
| 1326 | try: |
| 1327 | collection_name = self._get_collection_name(mode) |
| 1328 | collection = self._db[collection_name] |
| 1329 | |
| 1330 | # 精确匹配 |
| 1331 | doc = await collection.find_one( |
| 1332 | {"filename": filename}, |
| 1333 | {"error_codes": 1, "error_messages": 1, "_id": 0} |
| 1334 | ) |
| 1335 | |
| 1336 | if doc: |
| 1337 | return { |
| 1338 | "filename": filename, |
| 1339 | "error_codes": doc.get("error_codes", []), |
| 1340 | "error_messages": doc.get("error_messages", []), |
| 1341 | } |
| 1342 | |
| 1343 | # 凭证不存在,返回空错误信息 |
| 1344 | return { |
| 1345 | "filename": filename, |
| 1346 | "error_codes": [], |
| 1347 | "error_messages": [], |
| 1348 | } |
| 1349 | |
| 1350 | except Exception as e: |
| 1351 | log.error(f"Error getting credential errors {filename}: {e}") |
| 1352 | return { |
| 1353 | "filename": filename, |
| 1354 | "error_codes": [], |
| 1355 | "error_messages": [], |
| 1356 | "error": str(e) |
| 1357 | } |
| 1358 | |
| 1359 | # ============ 模型级冷却管理 ============ |
| 1360 |
nothing calls this directly
no test coverage detected