Spaces:
Sleeping
Sleeping
Upload app.py
Browse files
app.py
CHANGED
|
@@ -728,17 +728,51 @@ class UltimateMambaSwarm:
|
|
| 728 |
self.model_loaded = False
|
| 729 |
self.current_model_size = "auto"
|
| 730 |
|
| 731 |
-
#
|
| 732 |
-
self.
|
| 733 |
-
'medical':
|
| 734 |
-
|
| 735 |
-
|
| 736 |
-
|
| 737 |
-
|
| 738 |
-
'
|
| 739 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 740 |
}
|
| 741 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 742 |
# Initialize with default model
|
| 743 |
self._initialize_system()
|
| 744 |
|
|
@@ -774,74 +808,223 @@ class UltimateMambaSwarm:
|
|
| 774 |
logger.error(f"System initialization failed: {e}")
|
| 775 |
|
| 776 |
def detect_domain_advanced(self, prompt: str) -> Tuple[str, float]:
|
| 777 |
-
"""Advanced domain detection with
|
| 778 |
prompt_lower = prompt.lower()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 779 |
domain_scores = {}
|
| 780 |
|
| 781 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 782 |
|
| 783 |
-
|
| 784 |
-
|
| 785 |
-
|
| 786 |
-
|
| 787 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 788 |
|
| 789 |
-
if
|
| 790 |
-
|
| 791 |
-
|
| 792 |
-
|
| 793 |
-
# Bonus for multiple matches
|
| 794 |
-
if len(matches) > 1:
|
| 795 |
-
base_score *= (1.0 + 0.1 * len(matches)) # Progressive bonus
|
| 796 |
-
|
| 797 |
-
# Special bonuses for specific domains
|
| 798 |
-
if domain == 'code':
|
| 799 |
-
# Strong bonus for programming-specific terms
|
| 800 |
-
programming_terms = ['python', 'programming', 'code', 'function', 'script', 'algorithm', 'development', 'coding']
|
| 801 |
-
programming_matches = sum(1 for term in programming_terms if term in matches)
|
| 802 |
-
if programming_matches > 0:
|
| 803 |
-
base_score *= 2.0 # Double score for programming
|
| 804 |
-
|
| 805 |
-
# Extra bonus for code syntax patterns
|
| 806 |
-
code_patterns = ['def ', 'class ', 'import ', 'for ', 'while ', 'if ', 'else:', 'try:', 'except:', 'return ', 'print(', 'input(']
|
| 807 |
-
pattern_matches = sum(1 for pattern in code_patterns if pattern in prompt_lower)
|
| 808 |
-
if pattern_matches > 0:
|
| 809 |
-
base_score *= (1.5 + 0.2 * pattern_matches)
|
| 810 |
-
|
| 811 |
-
elif domain == 'medical':
|
| 812 |
-
# Bonus for medical terminology
|
| 813 |
-
medical_terms = ['medical', 'health', 'doctor', 'patient', 'treatment', 'diagnosis']
|
| 814 |
-
medical_matches = sum(1 for term in medical_terms if term in matches)
|
| 815 |
-
if medical_matches > 0:
|
| 816 |
-
base_score *= 1.8
|
| 817 |
-
|
| 818 |
-
elif domain == 'science':
|
| 819 |
-
# Bonus for scientific methodology terms
|
| 820 |
-
science_terms = ['research', 'experiment', 'theory', 'hypothesis', 'analysis', 'study']
|
| 821 |
-
science_matches = sum(1 for term in science_terms if term in matches)
|
| 822 |
-
if science_matches > 0:
|
| 823 |
-
base_score *= 1.6
|
| 824 |
-
|
| 825 |
-
# Cap the score to reasonable levels
|
| 826 |
-
domain_scores[domain] = min(base_score, 2.0)
|
| 827 |
-
print(f" π {domain}: {len(matches)} matches {matches[:3]}{'...' if len(matches) > 3 else ''} β Score: {domain_scores[domain]:.3f}")
|
| 828 |
|
| 829 |
-
# Determine best domain
|
| 830 |
if domain_scores:
|
| 831 |
best_domain = max(domain_scores, key=domain_scores.get)
|
| 832 |
confidence = min(domain_scores[best_domain], 1.0)
|
| 833 |
|
| 834 |
-
#
|
| 835 |
-
if
|
| 836 |
-
|
| 837 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 838 |
|
| 839 |
-
|
| 840 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 841 |
|
| 842 |
-
|
|
|
|
| 843 |
return 'general', 0.5
|
| 844 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 845 |
def simulate_advanced_encoder_routing(self, domain: str, confidence: float, num_encoders: int, model_size: str) -> Dict:
|
| 846 |
"""Advanced encoder routing with model size consideration"""
|
| 847 |
|
|
@@ -1532,6 +1715,12 @@ Secondary: {', '.join(map(str, routing_info['selected_encoders'][8:16]))}{'...'
|
|
| 1532 |
- **Parameter Optimization**: Dynamic
|
| 1533 |
- **Fallback Protection**: Multi-layer
|
| 1534 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1535 |
**π Mamba Status**: Ready for GPU activation (mamba_ssm commented out)
|
| 1536 |
"""
|
| 1537 |
|
|
|
|
| 728 |
self.model_loaded = False
|
| 729 |
self.current_model_size = "auto"
|
| 730 |
|
| 731 |
+
# Dynamic adaptive domain detection system
|
| 732 |
+
self.base_domain_patterns = {
|
| 733 |
+
'medical': {
|
| 734 |
+
'core_terms': ['medical', 'health', 'doctor', 'patient', 'treatment', 'diagnosis'],
|
| 735 |
+
'semantic_patterns': ['symptoms of', 'treatment for', 'causes of', 'how to treat', 'medical condition'],
|
| 736 |
+
'context_indicators': ['healthcare', 'clinical', 'pharmaceutical', 'therapeutic']
|
| 737 |
+
},
|
| 738 |
+
'legal': {
|
| 739 |
+
'core_terms': ['legal', 'law', 'court', 'contract', 'attorney', 'rights'],
|
| 740 |
+
'semantic_patterns': ['according to law', 'legal rights', 'court case', 'legal advice', 'lawsuit'],
|
| 741 |
+
'context_indicators': ['jurisdiction', 'litigation', 'statute', 'regulation']
|
| 742 |
+
},
|
| 743 |
+
'code': {
|
| 744 |
+
'core_terms': ['code', 'python', 'programming', 'function', 'algorithm', 'software'],
|
| 745 |
+
'semantic_patterns': ['write a function', 'create a program', 'how to code', 'programming problem', 'implement algorithm'],
|
| 746 |
+
'context_indicators': ['syntax', 'debugging', 'development', 'coding', 'script']
|
| 747 |
+
},
|
| 748 |
+
'science': {
|
| 749 |
+
'core_terms': ['science', 'research', 'experiment', 'theory', 'study', 'analysis'],
|
| 750 |
+
'semantic_patterns': ['scientific method', 'research shows', 'experimental results', 'theory suggests'],
|
| 751 |
+
'context_indicators': ['hypothesis', 'methodology', 'peer review', 'laboratory']
|
| 752 |
+
},
|
| 753 |
+
'creative': {
|
| 754 |
+
'core_terms': ['story', 'creative', 'write', 'character', 'fiction', 'art'],
|
| 755 |
+
'semantic_patterns': ['write a story', 'create a character', 'creative writing', 'artistic expression'],
|
| 756 |
+
'context_indicators': ['imagination', 'narrative', 'literature', 'poetry']
|
| 757 |
+
},
|
| 758 |
+
'business': {
|
| 759 |
+
'core_terms': ['business', 'marketing', 'strategy', 'finance', 'management', 'company'],
|
| 760 |
+
'semantic_patterns': ['business plan', 'marketing strategy', 'financial analysis', 'company growth'],
|
| 761 |
+
'context_indicators': ['entrepreneur', 'investment', 'revenue', 'profit']
|
| 762 |
+
},
|
| 763 |
+
'general': {
|
| 764 |
+
'core_terms': ['explain', 'what', 'how', 'why', 'describe', 'help'],
|
| 765 |
+
'semantic_patterns': ['can you explain', 'what is', 'how does', 'why do', 'help me understand'],
|
| 766 |
+
'context_indicators': ['information', 'knowledge', 'understanding', 'learning']
|
| 767 |
+
}
|
| 768 |
}
|
| 769 |
|
| 770 |
+
# Dynamic learning components
|
| 771 |
+
self.learned_patterns = {} # Store patterns learned from user interactions
|
| 772 |
+
self.domain_context_history = [] # Track recent domain contexts for better detection
|
| 773 |
+
self.semantic_similarity_cache = {} # Cache for performance
|
| 774 |
+
self.interaction_count = 0
|
| 775 |
+
|
| 776 |
# Initialize with default model
|
| 777 |
self._initialize_system()
|
| 778 |
|
|
|
|
| 808 |
logger.error(f"System initialization failed: {e}")
|
| 809 |
|
| 810 |
def detect_domain_advanced(self, prompt: str) -> Tuple[str, float]:
|
| 811 |
+
"""Advanced adaptive domain detection with machine learning-like capabilities"""
|
| 812 |
prompt_lower = prompt.lower()
|
| 813 |
+
self.interaction_count += 1
|
| 814 |
+
|
| 815 |
+
print(f"π Adaptive Domain Detection #{self.interaction_count}: '{prompt[:50]}...'")
|
| 816 |
+
|
| 817 |
+
# Multi-layered detection approach
|
| 818 |
domain_scores = {}
|
| 819 |
|
| 820 |
+
# Layer 1: Semantic Pattern Analysis
|
| 821 |
+
semantic_scores = self._analyze_semantic_patterns(prompt_lower)
|
| 822 |
+
|
| 823 |
+
# Layer 2: Context-Aware Detection
|
| 824 |
+
context_scores = self._analyze_context_patterns(prompt_lower)
|
| 825 |
+
|
| 826 |
+
# Layer 3: Historical Context Influence
|
| 827 |
+
history_scores = self._analyze_historical_context(prompt_lower)
|
| 828 |
|
| 829 |
+
# Layer 4: Learned Pattern Matching
|
| 830 |
+
learned_scores = self._analyze_learned_patterns(prompt_lower)
|
| 831 |
+
|
| 832 |
+
# Combine all layers with weighted importance
|
| 833 |
+
for domain in self.base_domain_patterns.keys():
|
| 834 |
+
combined_score = (
|
| 835 |
+
semantic_scores.get(domain, 0) * 0.4 +
|
| 836 |
+
context_scores.get(domain, 0) * 0.3 +
|
| 837 |
+
history_scores.get(domain, 0) * 0.2 +
|
| 838 |
+
learned_scores.get(domain, 0) * 0.1
|
| 839 |
+
)
|
| 840 |
|
| 841 |
+
if combined_score > 0:
|
| 842 |
+
domain_scores[domain] = combined_score
|
| 843 |
+
print(f" π {domain}: semantic={semantic_scores.get(domain, 0):.3f}, context={context_scores.get(domain, 0):.3f}, history={history_scores.get(domain, 0):.3f}, learned={learned_scores.get(domain, 0):.3f} β Total={combined_score:.3f}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 844 |
|
| 845 |
+
# Determine best domain with dynamic thresholding
|
| 846 |
if domain_scores:
|
| 847 |
best_domain = max(domain_scores, key=domain_scores.get)
|
| 848 |
confidence = min(domain_scores[best_domain], 1.0)
|
| 849 |
|
| 850 |
+
# Dynamic confidence adjustment based on interaction history
|
| 851 |
+
if len(self.domain_context_history) > 3:
|
| 852 |
+
recent_domains = [entry['domain'] for entry in self.domain_context_history[-3:]]
|
| 853 |
+
if best_domain in recent_domains:
|
| 854 |
+
confidence *= 1.1 # Boost confidence for consistent domain usage
|
| 855 |
+
print(f" π Confidence boosted due to recent domain consistency")
|
| 856 |
+
|
| 857 |
+
# Adaptive threshold - becomes more lenient with more interactions
|
| 858 |
+
min_threshold = max(0.2, 0.4 - (self.interaction_count * 0.01))
|
| 859 |
+
|
| 860 |
+
if confidence >= min_threshold:
|
| 861 |
+
# Store successful detection for learning
|
| 862 |
+
self._update_learned_patterns(prompt_lower, best_domain, confidence)
|
| 863 |
+
self._update_context_history(prompt, best_domain, confidence)
|
| 864 |
|
| 865 |
+
print(f" β
Selected Domain: {best_domain} (confidence: {confidence:.3f}, threshold: {min_threshold:.3f})")
|
| 866 |
+
return best_domain, confidence
|
| 867 |
+
else:
|
| 868 |
+
print(f" β οΈ Low confidence ({confidence:.3f} < {min_threshold:.3f}), using general")
|
| 869 |
+
else:
|
| 870 |
+
print(f" π No patterns matched, using general")
|
| 871 |
|
| 872 |
+
# Fallback to general with context storage
|
| 873 |
+
self._update_context_history(prompt, 'general', 0.5)
|
| 874 |
return 'general', 0.5
|
| 875 |
|
| 876 |
+
def _analyze_semantic_patterns(self, prompt_lower: str) -> Dict[str, float]:
|
| 877 |
+
"""Analyze semantic patterns in the prompt"""
|
| 878 |
+
scores = {}
|
| 879 |
+
|
| 880 |
+
for domain, patterns in self.base_domain_patterns.items():
|
| 881 |
+
score = 0
|
| 882 |
+
|
| 883 |
+
# Check core terms with fuzzy matching
|
| 884 |
+
core_matches = sum(1 for term in patterns['core_terms'] if term in prompt_lower)
|
| 885 |
+
score += core_matches * 0.3
|
| 886 |
+
|
| 887 |
+
# Check semantic patterns (phrase-level matching)
|
| 888 |
+
pattern_matches = sum(1 for pattern in patterns['semantic_patterns'] if pattern in prompt_lower)
|
| 889 |
+
score += pattern_matches * 0.5
|
| 890 |
+
|
| 891 |
+
# Special domain-specific boosters
|
| 892 |
+
if domain == 'code':
|
| 893 |
+
# Look for code-specific patterns
|
| 894 |
+
code_indicators = ['def ', 'class ', 'import ', 'function(', '()', '{', '}', '[]', 'return ', 'print(', 'console.log']
|
| 895 |
+
code_pattern_score = sum(1 for indicator in code_indicators if indicator in prompt_lower)
|
| 896 |
+
score += code_pattern_score * 0.4
|
| 897 |
+
|
| 898 |
+
# Programming language detection
|
| 899 |
+
languages = ['python', 'javascript', 'java', 'c++', 'html', 'css', 'sql', 'react', 'node']
|
| 900 |
+
lang_score = sum(1 for lang in languages if lang in prompt_lower)
|
| 901 |
+
score += lang_score * 0.3
|
| 902 |
+
|
| 903 |
+
elif domain == 'medical':
|
| 904 |
+
# Medical question patterns
|
| 905 |
+
medical_questions = ['what causes', 'symptoms of', 'treatment for', 'how to cure', 'side effects']
|
| 906 |
+
med_pattern_score = sum(1 for pattern in medical_questions if pattern in prompt_lower)
|
| 907 |
+
score += med_pattern_score * 0.4
|
| 908 |
+
|
| 909 |
+
elif domain == 'creative':
|
| 910 |
+
# Creative request patterns
|
| 911 |
+
creative_requests = ['write a', 'create a story', 'imagine', 'make up', 'fictional']
|
| 912 |
+
creative_score = sum(1 for pattern in creative_requests if pattern in prompt_lower)
|
| 913 |
+
score += creative_score * 0.4
|
| 914 |
+
|
| 915 |
+
if score > 0:
|
| 916 |
+
scores[domain] = min(score, 2.0) # Cap maximum score
|
| 917 |
+
|
| 918 |
+
return scores
|
| 919 |
+
|
| 920 |
+
def _analyze_context_patterns(self, prompt_lower: str) -> Dict[str, float]:
|
| 921 |
+
"""Analyze contextual indicators in the prompt"""
|
| 922 |
+
scores = {}
|
| 923 |
+
|
| 924 |
+
for domain, patterns in self.base_domain_patterns.items():
|
| 925 |
+
score = 0
|
| 926 |
+
|
| 927 |
+
# Context indicators
|
| 928 |
+
context_matches = sum(1 for indicator in patterns['context_indicators'] if indicator in prompt_lower)
|
| 929 |
+
score += context_matches * 0.2
|
| 930 |
+
|
| 931 |
+
# Question type analysis
|
| 932 |
+
if any(q in prompt_lower for q in ['how to', 'what is', 'explain']):
|
| 933 |
+
if domain in ['general', 'science']:
|
| 934 |
+
score += 0.2
|
| 935 |
+
|
| 936 |
+
if any(q in prompt_lower for q in ['create', 'make', 'build', 'develop']):
|
| 937 |
+
if domain in ['code', 'creative', 'business']:
|
| 938 |
+
score += 0.3
|
| 939 |
+
|
| 940 |
+
if score > 0:
|
| 941 |
+
scores[domain] = score
|
| 942 |
+
|
| 943 |
+
return scores
|
| 944 |
+
|
| 945 |
+
def _analyze_historical_context(self, prompt_lower: str) -> Dict[str, float]:
|
| 946 |
+
"""Analyze based on recent interaction history"""
|
| 947 |
+
scores = {}
|
| 948 |
+
|
| 949 |
+
if not self.domain_context_history:
|
| 950 |
+
return scores
|
| 951 |
+
|
| 952 |
+
# Look at recent domain patterns
|
| 953 |
+
recent_history = self.domain_context_history[-5:] # Last 5 interactions
|
| 954 |
+
domain_frequency = {}
|
| 955 |
+
|
| 956 |
+
for entry in recent_history:
|
| 957 |
+
domain = entry['domain']
|
| 958 |
+
domain_frequency[domain] = domain_frequency.get(domain, 0) + 1
|
| 959 |
+
|
| 960 |
+
# Boost scores for recently used domains
|
| 961 |
+
for domain, frequency in domain_frequency.items():
|
| 962 |
+
if domain != 'general': # Don't boost general
|
| 963 |
+
boost = frequency * 0.1
|
| 964 |
+
scores[domain] = boost
|
| 965 |
+
|
| 966 |
+
return scores
|
| 967 |
+
|
| 968 |
+
def _analyze_learned_patterns(self, prompt_lower: str) -> Dict[str, float]:
|
| 969 |
+
"""Analyze using patterns learned from previous interactions"""
|
| 970 |
+
scores = {}
|
| 971 |
+
|
| 972 |
+
for domain, learned_data in self.learned_patterns.items():
|
| 973 |
+
score = 0
|
| 974 |
+
|
| 975 |
+
# Check learned phrases
|
| 976 |
+
for phrase, weight in learned_data.get('phrases', {}).items():
|
| 977 |
+
if phrase in prompt_lower:
|
| 978 |
+
score += weight * 0.2
|
| 979 |
+
|
| 980 |
+
# Check learned word combinations
|
| 981 |
+
for combo, weight in learned_data.get('combinations', {}).items():
|
| 982 |
+
if all(word in prompt_lower for word in combo.split()):
|
| 983 |
+
score += weight * 0.3
|
| 984 |
+
|
| 985 |
+
if score > 0:
|
| 986 |
+
scores[domain] = min(score, 1.0)
|
| 987 |
+
|
| 988 |
+
return scores
|
| 989 |
+
|
| 990 |
+
def _update_learned_patterns(self, prompt_lower: str, domain: str, confidence: float):
|
| 991 |
+
"""Update learned patterns based on successful detections"""
|
| 992 |
+
if domain not in self.learned_patterns:
|
| 993 |
+
self.learned_patterns[domain] = {'phrases': {}, 'combinations': {}}
|
| 994 |
+
|
| 995 |
+
# Extract and store successful phrases (2-4 words)
|
| 996 |
+
words = prompt_lower.split()
|
| 997 |
+
for i in range(len(words) - 1):
|
| 998 |
+
for length in [2, 3, 4]:
|
| 999 |
+
if i + length <= len(words):
|
| 1000 |
+
phrase = ' '.join(words[i:i+length])
|
| 1001 |
+
if len(phrase) > 8: # Only meaningful phrases
|
| 1002 |
+
current_weight = self.learned_patterns[domain]['phrases'].get(phrase, 0)
|
| 1003 |
+
self.learned_patterns[domain]['phrases'][phrase] = min(current_weight + confidence * 0.1, 1.0)
|
| 1004 |
+
|
| 1005 |
+
# Limit stored patterns to prevent memory bloat
|
| 1006 |
+
if len(self.learned_patterns[domain]['phrases']) > 100:
|
| 1007 |
+
# Keep only top 50 patterns
|
| 1008 |
+
sorted_phrases = sorted(
|
| 1009 |
+
self.learned_patterns[domain]['phrases'].items(),
|
| 1010 |
+
key=lambda x: x[1],
|
| 1011 |
+
reverse=True
|
| 1012 |
+
)
|
| 1013 |
+
self.learned_patterns[domain]['phrases'] = dict(sorted_phrases[:50])
|
| 1014 |
+
|
| 1015 |
+
def _update_context_history(self, prompt: str, domain: str, confidence: float):
|
| 1016 |
+
"""Update interaction history for context analysis"""
|
| 1017 |
+
self.domain_context_history.append({
|
| 1018 |
+
'prompt': prompt[:100], # Store truncated prompt
|
| 1019 |
+
'domain': domain,
|
| 1020 |
+
'confidence': confidence,
|
| 1021 |
+
'timestamp': time.time()
|
| 1022 |
+
})
|
| 1023 |
+
|
| 1024 |
+
# Keep only recent history (last 20 interactions)
|
| 1025 |
+
if len(self.domain_context_history) > 20:
|
| 1026 |
+
self.domain_context_history = self.domain_context_history[-20:]
|
| 1027 |
+
|
| 1028 |
def simulate_advanced_encoder_routing(self, domain: str, confidence: float, num_encoders: int, model_size: str) -> Dict:
|
| 1029 |
"""Advanced encoder routing with model size consideration"""
|
| 1030 |
|
|
|
|
| 1715 |
- **Parameter Optimization**: Dynamic
|
| 1716 |
- **Fallback Protection**: Multi-layer
|
| 1717 |
|
| 1718 |
+
**π§ Adaptive Learning System:**
|
| 1719 |
+
- **Interactions Processed**: {self.interaction_count}
|
| 1720 |
+
- **Learned Patterns**: {sum(len(patterns.get('phrases', {})) for patterns in self.learned_patterns.values())}
|
| 1721 |
+
- **Context History**: {len(self.domain_context_history)} entries
|
| 1722 |
+
- **Learning Domains**: {', '.join(self.learned_patterns.keys()) if self.learned_patterns else 'Initializing'}
|
| 1723 |
+
|
| 1724 |
**π Mamba Status**: Ready for GPU activation (mamba_ssm commented out)
|
| 1725 |
"""
|
| 1726 |
|