beastbullet-experts / code /enhanced_router.py
SetMD's picture
Complete package: 18 experts + full codebase
ae1e90a
Raw History Blame Contribute Delete
5 kB
#!/usr/bin/env python3
"""
Enhanced Expert Router - Loads All 23 Trained Experts
"""
import torch
from pathlib import Path
import sys
sys.path.append(str(Path(__file__).parent / 'training' / 'distillation'))
from models import ClassificationExpert
class EnhancedExpertRouter:
"""Enhanced router with all 23 experts loaded"""
def __init__(self):
print("Loading Enhanced Expert Router...")
self.experts = {}
self.expert_configs = self._get_all_expert_configs()
self._load_all_experts()
print(f"✓ Loaded {len(self.experts)} experts")
def _get_all_expert_configs(self):
"""Get configurations for all 23 experts"""
return {
# General Experts (15)
"grammar": {"num_classes": 2, "category": "general"},
"grammar_v2": {"num_classes": 2, "category": "general"},
"mathematical_reasoning": {"num_classes": 2, "category": "general"},
"logical_inference": {"num_classes": 2, "category": "general"},
"common_sense": {"num_classes": 2, "category": "general"},
"question_answering": {"num_classes": 2, "category": "general"},
"code_generation": {"num_classes": 2, "category": "general"},
"sentiment_analysis": {"num_classes": 3, "category": "general"},
"toxicity_detection": {"num_classes": 2, "category": "general"},
"semantic_understanding": {"num_classes": 2, "category": "general"},
"summarization": {"num_classes": 2, "category": "general"},
"ner": {"num_classes": 9, "category": "general"},
"translation": {"num_classes": 2, "category": "general"},
"causal_reasoning": {"num_classes": 2, "category": "general"},
# Security Experts (5)
"attack_surface_mapper": {"num_classes": 2, "category": "security"},
"authorization_logic": {"num_classes": 2, "category": "security"},
"data_flow_analysis": {"num_classes": 2, "category": "security"},
"business_logic": {"num_classes": 2, "category": "security"},
"exploit_feasibility": {"num_classes": 2, "category": "security"},
# Meta-Cognitive (1)
"isl_meta-governor": {"num_classes": 3, "category": "meta"},
}
def _load_all_experts(self):
"""Load all available expert models"""
models_dir = Path("models")
for expert_name, config in self.expert_configs.items():
model_path = models_dir / f"{expert_name}_expert.pt"
if not model_path.exists():
print(f" ⚠️ {expert_name}: model file not found")
continue
try:
expert = ClassificationExpert(
input_dim=256,
hidden_dim=256,
num_layers=3,
num_classes=config["num_classes"],
dropout=0.1
)
expert.load_state_dict(torch.load(model_path, map_location='cpu'))
expert.eval()
self.experts[expert_name] = {
"model": expert,
"category": config["category"],
"num_classes": config["num_classes"]
}
print(f" ✓ {expert_name} ({config['category']})")
except Exception as e:
print(f" ✗ {expert_name}: {str(e)[:50]}")
def get_expert(self, name: str):
"""Get expert by name"""
return self.experts.get(name)
def get_experts_by_category(self, category: str):
"""Get all experts in a category"""
return {
name: info for name, info in self.experts.items()
if info["category"] == category
}
def get_summary(self):
"""Get summary of loaded experts"""
by_category = {}
for name, info in self.experts.items():
cat = info["category"]
if cat not in by_category:
by_category[cat] = []
by_category[cat].append(name)
return {
"total": len(self.experts),
"by_category": by_category
}
def test_enhanced_router():
"""Test enhanced router"""
print("="*70)
print("Testing Enhanced Expert Router")
print("="*70)
router = EnhancedExpertRouter()
print("\n" + "="*70)
print("Summary:")
summary = router.get_summary()
print(f"Total experts loaded: {summary['total']}")
for category, experts in summary['by_category'].items():
print(f"\n{category.upper()} ({len(experts)}):")
for expert in sorted(experts):
print(f" - {expert}")
print("\n" + "="*70)
print("✓ Enhanced router working!")
print("="*70)
if __name__ == "__main__":
test_enhanced_router()