#!/usr/bin/env python3 """ Виправлений тест MAI-DX Orchestrator Виправляє проблеми з бюджетом та rich console """ import os import sys from dotenv import load_dotenv # Завантажуємо змінні середовища load_dotenv() # Відключаємо verbose логування та rich console проблеми os.environ["SWARMS_VERBOSITY"] = "ERROR" os.environ["RICH_TRACEBACK"] = "0" os.environ["SWARMS_SHOW_PANEL"] = "false" def test_working_diagnosis(): """Тест з правильними налаштуваннями""" print("🩺 Тестування робочої діагностики з правильним бюджетом...") try: from mai_dx import MaiDxOrchestrator # Використовуємо "instant" режим - найпростіший orchestrator = MaiDxOrchestrator( model_name="gemini/gemini-2.5-flash", max_iterations=3, # Більше ітерацій initial_budget=1000, # Достатній бюджет! mode="instant" # Миттєвий режим - швидший ) print("✅ Оркестратор створено") print(f" Модель: {orchestrator.model_name}") print(f" Режим: {orchestrator.mode}") print(f" Бюджет: ${orchestrator.initial_budget}") # Простий, але реалістичний випадок case_info = """ 25-year-old male with bilateral throbbing headache for 2 days. Pain intensity 7/10, worse with light and noise. No fever, no neck stiffness. """ print("🚀 Запуск діагностики...") print("⏳ Це може зайняти 1-2 хвилини...") # Запускаємо діагностику result = orchestrator.run( initial_case_info=case_info, full_case_details=case_info, ground_truth_diagnosis="Migraine" ) print("\n" + "="*50) print("📋 РЕЗУЛЬТАТИ ДІАГНОСТИКИ") print("="*50) print(f"🎯 Діагноз: {result.final_diagnosis}") print(f"🏆 Еталон: {result.ground_truth}") print(f"⭐ Оцінка: {result.accuracy_score}/5.0") print(f"💰 Вартість: ${result.total_cost}") print(f"🔄 Ітерації: {result.iterations}") print(f"💭 Обґрунтування: {result.accuracy_reasoning[:100]}...") # Оцінка успішності if result.accuracy_score >= 4.0: print("🎉 ВІДМІННО! Діагноз правильний") elif result.accuracy_score >= 3.0: print("👍 ДОБРЕ! Діагноз близький до правильного") elif result.accuracy_score >= 2.0: print("⚠️ ЗАДОВІЛЬНО! Частково правильний діагноз") else: print("❌ ПОТРЕБУЄ ПОЛІПШЕННЯ") return True except Exception as e: print(f"❌ Помилка діагностики: {e}") return False def test_budget_variants(): """Тест різних бюджетних варіантів""" print("\n💰 Тестування різних бюджетних режимів...") try: from mai_dx import MaiDxOrchestrator variants = [ ("no_budget", "Без обмежень бюджету", 10000), ("budgeted", "З бюджетними обмеженнями", 2000), ("instant", "Миттєвий режим", 1000) ] simple_case = "30-year-old woman with chest pain for 1 hour" for mode, description, budget in variants: print(f"\n🔍 Тестування: {mode} ({description})") try: orchestrator = MaiDxOrchestrator( model_name="gemini/gemini-2.5-flash", max_iterations=2, # Короткі тести initial_budget=budget, mode=mode ) print(f" ✅ Створено: бюджет ${budget}, режим {mode}") # Швидкий тест (без повного запуску) print(f" 📊 Готово до діагностики") except Exception as e: print(f" ❌ Помилка в режимі {mode}: {e}") return True except Exception as e: print(f"❌ Загальна помилка: {e}") return False def test_api_connectivity(): """Тест підключення до API""" print("\n🌐 Тестування підключення до API...") try: from mai_dx import MaiDxOrchestrator # Створюємо мінімальний оркестратор для тесту API orchestrator = MaiDxOrchestrator( model_name="gemini/gemini-2.5-flash", max_iterations=1, initial_budget=500, mode="instant" ) print("✅ API ключі працюють") print("✅ Gemini API доступний") print("✅ Swarms framework підключено") return True except Exception as e: if "API" in str(e) or "key" in str(e).lower(): print(f"❌ Проблема з API: {e}") else: print(f"❌ Інша помилка: {e}") return False def main(): """Основна функція з виправленими тестами""" print("=" * 60) print("🩺 MAI-DX ORCHESTRATOR - ВИПРАВЛЕНИЙ ТЕСТ") print("=" * 60) tests = [ ("Підключення до API", test_api_connectivity), ("Бюджетні варіанти", test_budget_variants), ("Робоча діагностика", test_working_diagnosis) ] passed = 0 total = len(tests) for test_name, test_func in tests: print(f"\n📋 {test_name}:") try: if test_func(): passed += 1 print(f" ✅ {test_name} - ПРОЙДЕНО") else: print(f" ❌ {test_name} - НЕ ПРОЙДЕНО") except KeyboardInterrupt: print(f"\n⏹️ Тест зупинено користувачем") break except Exception as e: print(f" 💥 Критична помилка в {test_name}: {e}") print("\n" + "=" * 60) print(f"📊 ФІНАЛЬНІ РЕЗУЛЬТАТИ: {passed}/{total} тестів пройшли") if passed == total: print("🎉 ВСІ ТЕСТИ ПРОЙШЛИ! MAI-DX повністю функціональний!") print("🚀 Готовий до використання в реальних проектах") elif passed >= total - 1: print("⚠️ МАЙЖЕ ГОТОВО! Дрібні правки") else: print("🔧 ПОТРІБНІ ВИПРАВЛЕННЯ") print("\n💡 Поради:") print(" • Використовуйте бюджет >= $1000 для складних випадків") print(" • Режим 'instant' найшвидший для тестування") print(" • Режим 'no_budget' для повної діагностики") print(" • Rich console помилки не критичні - система працює") print("=" * 60) if __name__ == "__main__": main()