""" 测试 Cohere API Key 是否有效 用于验证 API Key 是否可以正常使用 """ import sys import os from typing import Optional import requests from loguru import logger # 配置日志 logger.remove() logger.add( sys.stdout, level="INFO", format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {message}", ) def test_cohere_api_key(api_key: str) -> dict: """ 测试 Cohere API Key 是否有效 Args: api_key: Cohere API Key Returns: 测试结果 """ # Cohere API 端点 base_url = "https://api.cohere.ai/v1" headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json", } # 测试 1: 检查 API Key 基本信息 logger.info("测试 1: 检查 API Key 基本信息...") try: # 使用 models 端点测试(轻量级) response = requests.get( f"{base_url}/models", headers=headers, timeout=10, ) logger.debug(f"响应状态码: {response.status_code}") logger.debug(f"响应内容: {response.text[:200]}") if response.status_code == 200: logger.success("✅ API Key 验证成功!") models = response.json() return { "success": True, "message": "API Key 有效", "status_code": response.status_code, "models_count": len(models.get("models", [])), } elif response.status_code == 401: logger.error("❌ API Key 认证失败 - 无效的 API Key") return { "success": False, "message": "API Key 认证失败", "error": "Unauthorized", "status_code": 401, } elif response.status_code == 403: logger.error("❌ API Key 权限不足 - 可能是账户权限问题") return { "success": False, "message": "API Key 权限不足", "error": "Forbidden", "status_code": 403, } else: logger.warning(f"⚠️ 意外的响应状态码: {response.status_code}") return { "success": False, "message": f"意外的响应: {response.status_code}", "error": response.text[:200], "status_code": response.status_code, } except requests.exceptions.RequestException as e: logger.error(f"❌ 请求异常: {str(e)}") return { "success": False, "message": f"请求失败: {str(e)}", "error": str(e), } # 测试 2: 尝试使用 rerank 端点(如果测试1失败) logger.info("测试 2: 尝试使用 rerank 端点...") try: rerank_data = { "model": "rerank-multilingual-v3.0", "query": "test query", "documents": ["test document 1", "test document 2"], "top_n": 2, } response = requests.post( f"{base_url}/rerank", headers=headers, json=rerank_data, timeout=10, ) logger.debug(f"Rerank 响应状态码: {response.status_code}") logger.debug(f"Rerank 响应内容: {response.text[:200]}") if response.status_code == 200: logger.success("✅ Rerank API 测试成功!") return { "success": True, "message": "Rerank API 可用", "status_code": response.status_code, } else: logger.warning(f"⚠️ Rerank API 测试失败: {response.status_code}") return { "success": False, "message": f"Rerank API 测试失败: {response.status_code}", "error": response.text[:200], "status_code": response.status_code, } except requests.exceptions.RequestException as e: logger.error(f"❌ Rerank 请求异常: {str(e)}") return { "success": False, "message": f"Rerank 请求失败: {str(e)}", "error": str(e), } def main(): """主函数""" # 从命令行参数或环境变量获取 API Key api_key = sys.argv[1] if len(sys.argv) > 1 else os.environ.get("COHERE_API_KEY") if not api_key: logger.error("❌ 请提供 Cohere API Key") logger.info("使用方法: python test_cohere_api_key.py ") logger.info("或设置环境变量: COHERE_API_KEY=") return 1 # 隐藏部分 API Key(安全显示) masked_key = api_key[:8] + "..." + api_key[-4:] if len(api_key) > 12 else "***" logger.info(f"🔍 测试 Cohere API Key: {masked_key}") result = test_cohere_api_key(api_key) print("\n" + "=" * 60) print("测试结果:") print("=" * 60) print(f"成功: {result.get('success', False)}") print(f"消息: {result.get('message', 'N/A')}") if result.get("error"): print(f"错误: {result.get('error')}") if result.get("status_code"): print(f"状态码: {result.get('status_code')}") if not result.get("success"): print("\n" + "=" * 60) print("可能的原因:") print("=" * 60) print("1. API Key 无效或已过期") print("2. API Key 格式不正确(应该没有空格或换行)") print("3. Cohere 账户权限不足") print("4. API Key 未激活或账户未验证") print("5. 网络连接问题") print("\n建议:") print("- 检查 Cohere Dashboard: https://dashboard.cohere.com/") print("- 确认 API Key 是否正确复制(无多余空格)") print("- 检查账户状态和权限") return 0 if result.get("success") else 1 if __name__ == "__main__": sys.exit(main())