Spaces:
Running
Running
File size: 7,260 Bytes
1fc2038 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
#!/usr/bin/env python3
"""
Hybrid GAIA Solver - Best of Both Architectures
Combines the production-proven main.py with modular architecture benefits.
"""
import os
import sys
from pathlib import Path
# Add current directory to path
current_dir = Path(__file__).parent
if str(current_dir) not in sys.path:
sys.path.insert(0, str(current_dir))
# Architecture selection based on availability and preferences
ARCHITECTURE_PREFERENCE = os.getenv("GAIA_ARCHITECTURE", "auto") # auto, legacy, refactored
def get_solver_class():
"""
Intelligent solver selection with fallback chain:
1. Try refactored architecture (if available and requested)
2. Fall back to legacy monolithic (production-proven)
"""
if ARCHITECTURE_PREFERENCE == "legacy":
print("π§ Using legacy monolithic architecture (forced)")
from main import GAIASolver
return GAIASolver, "legacy"
if ARCHITECTURE_PREFERENCE == "refactored":
try:
print("π§ Using refactored modular architecture (forced)")
from gaia import GAIASolver, Config
return GAIASolver, "refactored"
except ImportError as e:
print(f"β Refactored architecture not available: {e}")
print("π Falling back to legacy architecture")
from main import GAIASolver
return GAIASolver, "legacy"
# Auto mode - intelligent selection
try:
# Try refactored first (preferred for new development)
from gaia import GAIASolver, Config
print("β
Using refactored modular architecture (auto-selected)")
return GAIASolver, "refactored"
except ImportError:
# Fall back to legacy (production-proven)
from main import GAIASolver
print("β
Using legacy monolithic architecture (auto-selected)")
return GAIASolver, "legacy"
class HybridGAIASolver:
"""
Hybrid solver that provides a unified interface regardless of underlying architecture.
"""
def __init__(self, **kwargs):
self.solver_class, self.architecture = get_solver_class()
if self.architecture == "refactored":
# Initialize refactored version with configuration
try:
from gaia import Config
config = kwargs.get('config', Config())
self.solver = self.solver_class(config)
except Exception as e:
print(f"β οΈ Refactored initialization failed: {e}")
print("π Falling back to legacy architecture")
from main import GAIASolver
self.solver = GAIASolver(**kwargs)
self.architecture = "legacy"
else:
# Initialize legacy version
self.solver = self.solver_class(**kwargs)
def solve_question(self, question_data):
"""
Unified solve_question interface that works with both architectures.
"""
if self.architecture == "refactored":
# Refactored architecture expects different format
try:
result = self.solver.solve_question(question_data)
# Convert refactored result to legacy format for compatibility
if hasattr(result, 'answer'):
return {
'answer': result.answer,
'explanation': getattr(result, 'reasoning', ''),
'confidence': getattr(result, 'confidence', 1.0),
'method_used': getattr(result, 'method_used', 'unknown'),
'execution_time': getattr(result, 'execution_time', 0.0)
}
else:
return result
except Exception as e:
print(f"β οΈ Refactored solver failed: {e}")
print("π This question may need legacy solver")
return f"Error with refactored solver: {str(e)}"
else:
# Legacy architecture
return self.solver.solve_question(question_data)
def get_system_info(self):
"""Get information about the current architecture and capabilities."""
info = {
'architecture': self.architecture,
'solver_class': self.solver_class.__name__,
'capabilities': {}
}
if self.architecture == "refactored":
try:
status = self.solver.get_system_status()
info['capabilities'] = status
except:
info['capabilities'] = {'status': 'refactored architecture active'}
else:
info['capabilities'] = {
'status': 'legacy monolithic architecture active',
'features': 'production-proven, comprehensive'
}
return info
def solve_random_question(self):
"""Solve a random question (legacy interface compatibility)."""
if hasattr(self.solver, 'solve_random_question'):
return self.solver.solve_random_question()
else:
return "Random question solving not available in current architecture"
def solve_all_questions(self, max_questions=5):
"""Solve multiple questions (legacy interface compatibility)."""
if hasattr(self.solver, 'solve_all_questions'):
return self.solver.solve_all_questions(max_questions)
else:
return "Batch question solving not available in current architecture"
def main():
"""Main function for testing the hybrid solver."""
print("π GAIA Solver - Hybrid Architecture")
print("=" * 50)
try:
# Initialize hybrid solver
solver = HybridGAIASolver()
# Show system information
info = solver.get_system_info()
print(f"π Architecture: {info['architecture']}")
print(f"π§ Solver Class: {info['solver_class']}")
print(f"π‘ Capabilities: {info['capabilities']}")
# Test with a sample question
print("\nπ§ͺ Testing with sample question...")
sample_question = {
"task_id": "hybrid_test_001",
"question": "What is 2 + 2?",
"level": 1
}
result = solver.solve_question(sample_question)
print(f"\nπ Results:")
if isinstance(result, dict):
print(f" Answer: {result.get('answer', 'No answer')}")
print(f" Explanation: {result.get('explanation', 'No explanation')}")
if 'confidence' in result:
print(f" Confidence: {result['confidence']:.2f}")
if 'method_used' in result:
print(f" Method: {result['method_used']}")
if 'execution_time' in result:
print(f" Time: {result['execution_time']:.2f}s")
else:
print(f" Result: {result}")
print(f"\nβ
Hybrid solver test completed successfully!")
print(f"ποΈ Using {info['architecture']} architecture")
except Exception as e:
print(f"β Error: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
main() |