""" 测试配置刷新功能 验证配置变更后客户端单例是否正确重置 """ import os import sys from pathlib import Path # 添加项目根目录到路径 PROJECT_ROOT = Path(__file__).parent sys.path.insert(0, str(PROJECT_ROOT)) from dotenv import load_dotenv, set_key from llm.client import get_client, reset_client, test_connection, LLMClientError def test_config_refresh(): """测试配置刷新流程""" env_path = PROJECT_ROOT / ".env" print("=" * 60) print("测试配置刷新功能") print("=" * 60) # 1. 加载初始配置 print("\n[步骤 1] 加载初始配置...") load_dotenv(env_path) initial_api_key = os.getenv("LLM_API_KEY", "") print(f"初始 API Key: {initial_api_key[:10]}..." if initial_api_key else "未配置") # 2. 获取客户端实例 print("\n[步骤 2] 获取客户端实例...") try: client1 = get_client() print(f"✓ 客户端实例创建成功") print(f" API URL: {client1.api_url}") print(f" API Key: {client1.api_key[:10]}..." if client1.api_key else "未配置") except LLMClientError as e: print(f"✗ 客户端创建失败: {e}") return # 3. 模拟配置变更(这里只是演示,不实际修改) print("\n[步骤 3] 模拟配置变更...") print(" (实际场景中,用户在设置页修改并保存配置)") # 4. 重置客户端单例 print("\n[步骤 4] 重置客户端单例...") reset_client() print("✓ 客户端单例已重置") # 5. 重新获取客户端实例 print("\n[步骤 5] 重新获取客户端实例...") try: client2 = get_client() print(f"✓ 新客户端实例创建成功") print(f" API URL: {client2.api_url}") print(f" API Key: {client2.api_key[:10]}..." if client2.api_key else "未配置") # 验证是否是新实例 if client1 is client2: print("✗ 警告: 客户端实例未更新(仍是旧实例)") else: print("✓ 确认: 客户端实例已更新(新实例)") except LLMClientError as e: print(f"✗ 新客户端创建失败: {e}") return # 6. 测试连接 print("\n[步骤 6] 测试 API 连接...") success, message = test_connection(timeout=10) if success: print(f"✓ {message}") else: print(f"✗ {message}") print("\n" + "=" * 60) print("测试完成") print("=" * 60) # 7. 显示度量统计 print("\n[度量统计]") try: from llm.config_metrics import get_config_metrics workspace = PROJECT_ROOT / "workspace" metrics = get_config_metrics(workspace) stats = metrics.get_statistics() print(f"配置变更总次数: {stats['total_config_changes']}") print(f"首次调用成功率: {stats['first_call_success_rate']:.1%}") print(f"平均重试次数: {stats['avg_retry_count']:.2f}") print(f"连接测试成功率: {stats['connection_test_success_rate']:.1%}") except Exception as e: print(f"无法获取度量统计: {e}") if __name__ == "__main__": test_config_refresh()