专门获取凭证的错误信息(包含 error_codes 和 error_messages) Args: filename: 凭证文件名 mode: 凭证模式 ("geminicli" 或 "antigravity") Returns: 包含 error_codes 和 error_messages 的字典
(self, filename: str, mode: str = "geminicli")
| 1175 | return False |
| 1176 | |
| 1177 | async def get_credential_errors(self, filename: str, mode: str = "geminicli") -> Dict[str, Any]: |
| 1178 | """ |
| 1179 | 专门获取凭证的错误信息(包含 error_codes 和 error_messages) |
| 1180 | |
| 1181 | Args: |
| 1182 | filename: 凭证文件名 |
| 1183 | mode: 凭证模式 ("geminicli" 或 "antigravity") |
| 1184 | |
| 1185 | Returns: |
| 1186 | 包含 error_codes 和 error_messages 的字典 |
| 1187 | """ |
| 1188 | self._ensure_initialized() |
| 1189 | |
| 1190 | # 统一使用 basename 处理文件名 |
| 1191 | filename = os.path.basename(filename) |
| 1192 | |
| 1193 | try: |
| 1194 | table_name = self._get_table_name(mode) |
| 1195 | async with aiosqlite.connect(self._db_path) as db: |
| 1196 | # 精确匹配 |
| 1197 | async with db.execute(f""" |
| 1198 | SELECT error_codes, error_messages FROM {table_name} WHERE filename = ? |
| 1199 | """, (filename,)) as cursor: |
| 1200 | row = await cursor.fetchone() |
| 1201 | |
| 1202 | if row: |
| 1203 | error_codes_json = row[0] or '[]' |
| 1204 | error_messages_json = row[1] or '[]' |
| 1205 | return { |
| 1206 | "filename": filename, |
| 1207 | "error_codes": json.loads(error_codes_json), |
| 1208 | "error_messages": json.loads(error_messages_json), |
| 1209 | } |
| 1210 | |
| 1211 | # 凭证不存在,返回空错误信息 |
| 1212 | return { |
| 1213 | "filename": filename, |
| 1214 | "error_codes": [], |
| 1215 | "error_messages": [], |
| 1216 | } |
| 1217 | |
| 1218 | except Exception as e: |
| 1219 | log.error(f"Error getting credential errors {filename}: {e}") |
| 1220 | return { |
| 1221 | "filename": filename, |
| 1222 | "error_codes": [], |
| 1223 | "error_messages": [], |
| 1224 | "error": str(e) |
| 1225 | } |
| 1226 | |
| 1227 | # ============ 模型级冷却管理 ============ |
| 1228 |
nothing calls this directly
no test coverage detected