Spaces:
Running
Running
Update src/ai_system.py
Browse files- src/ai_system.py +79 -68
src/ai_system.py
CHANGED
|
@@ -50,7 +50,7 @@ class SaemsTunesAISystem:
|
|
| 50 |
max_response_length: int = 150,
|
| 51 |
temperature: float = 0.6,
|
| 52 |
top_p: float = 0.85,
|
| 53 |
-
context_window: int =
|
| 54 |
):
|
| 55 |
self.supabase = supabase_integration
|
| 56 |
self.security = security_system
|
|
@@ -88,9 +88,9 @@ class SaemsTunesAISystem:
|
|
| 88 |
self.logger.addHandler(handler)
|
| 89 |
|
| 90 |
def load_model(self):
|
| 91 |
-
"""Load the optimized AI model with
|
| 92 |
try:
|
| 93 |
-
self.logger.info(f"🔄 Loading {self.model_name} model with
|
| 94 |
|
| 95 |
model_dir = "./models"
|
| 96 |
os.makedirs(model_dir, exist_ok=True)
|
|
@@ -134,12 +134,25 @@ class SaemsTunesAISystem:
|
|
| 134 |
self.model = Llama(
|
| 135 |
model_path=self.model_path,
|
| 136 |
n_ctx=self.context_window,
|
| 137 |
-
n_threads=
|
| 138 |
-
n_batch=
|
| 139 |
n_gpu_layers=0,
|
| 140 |
verbose=False,
|
| 141 |
use_mlock=False,
|
| 142 |
use_mmap=True,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 143 |
low_vram=True
|
| 144 |
)
|
| 145 |
|
|
@@ -152,15 +165,15 @@ class SaemsTunesAISystem:
|
|
| 152 |
|
| 153 |
if test_response and 'choices' in test_response and len(test_response['choices']) > 0:
|
| 154 |
self.model_loaded = True
|
| 155 |
-
self.logger.info("✅
|
| 156 |
self.logger.info(f"📊 Model info: {self.model_path} (Hash: {self.model_hash})")
|
| 157 |
-
self.logger.info(f"⚡
|
| 158 |
else:
|
| 159 |
self.logger.error("❌ Model test failed")
|
| 160 |
self.model_loaded = False
|
| 161 |
|
| 162 |
except Exception as e:
|
| 163 |
-
self.logger.error(f"❌ Error loading optimized model: {e}")
|
| 164 |
self.model_loaded = False
|
| 165 |
|
| 166 |
def process_query(
|
|
@@ -264,16 +277,15 @@ class SaemsTunesAISystem:
|
|
| 264 |
role = "User" if msg["role"] == "user" else "Assistant"
|
| 265 |
conversation_context += f"{role}: {msg['content']}\n"
|
| 266 |
|
| 267 |
-
# Enhanced system prompt with comprehensive Saem's Tunes context
|
| 268 |
system_prompt = f"""<|system|>
|
| 269 |
You are Saem's Tunes AI assistant - the intelligent helper for a comprehensive music education and streaming platform.
|
| 270 |
SAEM'S TUNES PLATFORM OVERVIEW:
|
| 271 |
-
🎵
|
| 272 |
-
📚
|
| 273 |
-
👥
|
| 274 |
-
🎨
|
| 275 |
-
💎
|
| 276 |
-
📱
|
| 277 |
PLATFORM STATISTICS:
|
| 278 |
- Total Tracks: {context.get('stats', {}).get('track_count', 0)}
|
| 279 |
- Total Artists: {context.get('stats', {}).get('artist_count', 0)}
|
|
@@ -508,8 +520,9 @@ ANSWER THE USER'S QUESTION BASED ON SAEM'S TUNES CONTEXT:<|end|>
|
|
| 508 |
"conversations_active": len(self.conversation_history),
|
| 509 |
"cache_size": len(self.response_cache),
|
| 510 |
"optimized_performance": True,
|
| 511 |
-
"cpu_threads":
|
| 512 |
-
"low_vram_mode": True
|
|
|
|
| 513 |
}
|
| 514 |
|
| 515 |
def clear_cache(self, user_id: Optional[str] = None):
|
|
@@ -546,7 +559,8 @@ ANSWER THE USER'S QUESTION BASED ON SAEM'S TUNES CONTEXT:<|end|>
|
|
| 546 |
"cache_hit_rate": round(cache_hit_rate, 2),
|
| 547 |
"performance_optimized": True,
|
| 548 |
"response_speed": "fast",
|
| 549 |
-
"memory_usage": "low"
|
|
|
|
| 550 |
}
|
| 551 |
|
| 552 |
def switch_model(
|
|
@@ -557,7 +571,7 @@ ANSWER THE USER'S QUESTION BASED ON SAEM'S TUNES CONTEXT:<|end|>
|
|
| 557 |
max_response_length: int = 150,
|
| 558 |
temperature: float = 0.6,
|
| 559 |
top_p: float = 0.85,
|
| 560 |
-
context_window: int =
|
| 561 |
) -> bool:
|
| 562 |
"""Dynamically switch between different optimized models"""
|
| 563 |
try:
|
|
@@ -598,7 +612,8 @@ ANSWER THE USER'S QUESTION BASED ON SAEM'S TUNES CONTEXT:<|end|>
|
|
| 598 |
"file": "tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf",
|
| 599 |
"size_gb": 0.7,
|
| 600 |
"speed": "fastest",
|
| 601 |
-
"use_case": "General queries, fast responses"
|
|
|
|
| 602 |
},
|
| 603 |
{
|
| 604 |
"name": "Phi-2",
|
|
@@ -606,7 +621,8 @@ ANSWER THE USER'S QUESTION BASED ON SAEM'S TUNES CONTEXT:<|end|>
|
|
| 606 |
"file": "phi-2.Q4_K_M.gguf",
|
| 607 |
"size_gb": 1.6,
|
| 608 |
"speed": "balanced",
|
| 609 |
-
"use_case": "Complex reasoning, education focus"
|
|
|
|
| 610 |
},
|
| 611 |
{
|
| 612 |
"name": "Qwen-1.8B-Chat",
|
|
@@ -614,50 +630,55 @@ ANSWER THE USER'S QUESTION BASED ON SAEM'S TUNES CONTEXT:<|end|>
|
|
| 614 |
"file": "qwen1.5-1.8b-chat-q4_k_m.gguf",
|
| 615 |
"size_gb": 1.1,
|
| 616 |
"speed": "fast",
|
| 617 |
-
"use_case": "Conversational, user interactions"
|
|
|
|
| 618 |
}
|
| 619 |
]
|
| 620 |
|
| 621 |
-
def optimize_performance(self, level: str = "
|
| 622 |
"""Apply performance optimization profiles"""
|
| 623 |
optimizations = {
|
| 624 |
-
"
|
| 625 |
"max_response_length": 100,
|
| 626 |
"temperature": 0.5,
|
| 627 |
"n_threads": 1,
|
| 628 |
-
"n_batch":
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 629 |
},
|
| 630 |
"balanced": {
|
| 631 |
"max_response_length": 150,
|
| 632 |
"temperature": 0.6,
|
| 633 |
-
"n_threads":
|
| 634 |
-
"n_batch":
|
| 635 |
-
|
| 636 |
-
"quality": {
|
| 637 |
-
"max_response_length": 200,
|
| 638 |
-
"temperature": 0.7,
|
| 639 |
-
"n_threads": 4,
|
| 640 |
-
"n_batch": 512
|
| 641 |
}
|
| 642 |
}
|
| 643 |
|
| 644 |
if level not in optimizations:
|
| 645 |
-
level = "
|
| 646 |
|
| 647 |
config = optimizations[level]
|
| 648 |
self.max_response_length = config["max_response_length"]
|
| 649 |
self.temperature = config["temperature"]
|
|
|
|
| 650 |
|
| 651 |
if self.model_loaded and self.model:
|
| 652 |
self.model.n_threads = config["n_threads"]
|
| 653 |
self.model.n_batch = config["n_batch"]
|
| 654 |
|
| 655 |
-
self.logger.info(f"🎯 Applied {level} performance optimization")
|
| 656 |
|
| 657 |
return {
|
| 658 |
"optimization_level": level,
|
| 659 |
"config_applied": config,
|
| 660 |
-
"current_performance": "
|
| 661 |
}
|
| 662 |
|
| 663 |
def get_conversation_analytics(self, conversation_id: str) -> Dict[str, Any]:
|
|
@@ -751,52 +772,42 @@ ANSWER THE USER'S QUESTION BASED ON SAEM'S TUNES CONTEXT:<|end|>
|
|
| 751 |
else:
|
| 752 |
self.logger.error("❌ AI system emergency restart failed")
|
| 753 |
|
| 754 |
-
# Additional utility functions for the AI system
|
| 755 |
-
|
| 756 |
def create_model_selector(
|
| 757 |
supabase_integration: AdvancedSupabaseIntegration,
|
| 758 |
security_system: AdvancedSecuritySystem,
|
| 759 |
monitor: ComprehensiveMonitor,
|
| 760 |
-
model_preference: str = "
|
| 761 |
) -> SaemsTunesAISystem:
|
| 762 |
-
"""Factory function to create AI system with
|
| 763 |
|
| 764 |
model_configs = {
|
| 765 |
-
"
|
| 766 |
"model_name": "TinyLlama-1.1B-Chat",
|
| 767 |
"model_repo": "TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF",
|
| 768 |
"model_file": "tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf",
|
| 769 |
"max_response_length": 100,
|
| 770 |
"temperature": 0.5,
|
| 771 |
-
"context_window":
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 772 |
},
|
| 773 |
"balanced": {
|
| 774 |
"model_name": "TinyLlama-1.1B-Chat",
|
| 775 |
"model_repo": "TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF",
|
| 776 |
"model_file": "tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf",
|
| 777 |
-
"max_response_length":
|
| 778 |
"temperature": 0.6,
|
| 779 |
-
"context_window":
|
| 780 |
-
},
|
| 781 |
-
"quality": {
|
| 782 |
-
"model_name": "Phi-2",
|
| 783 |
-
"model_repo": "TheBloke/phi-2-GGUF",
|
| 784 |
-
"model_file": "phi-2.Q4_K_M.gguf",
|
| 785 |
-
"max_response_length": 200,
|
| 786 |
-
"temperature": 0.7,
|
| 787 |
-
"context_window": 2048
|
| 788 |
-
},
|
| 789 |
-
"conversational": {
|
| 790 |
-
"model_name": "Qwen-1.8B-Chat",
|
| 791 |
-
"model_repo": "TheBloke/Qwen1.5-1.8B-Chat-GGUF",
|
| 792 |
-
"model_file": "qwen1.5-1.8b-chat-q4_k_m.gguf",
|
| 793 |
-
"max_response_length": 250,
|
| 794 |
-
"temperature": 0.7,
|
| 795 |
-
"context_window": 4096
|
| 796 |
}
|
| 797 |
}
|
| 798 |
|
| 799 |
-
config = model_configs.get(model_preference, model_configs["
|
| 800 |
|
| 801 |
ai_system = SaemsTunesAISystem(
|
| 802 |
supabase_integration=supabase_integration,
|
|
@@ -817,7 +828,8 @@ def validate_ai_system_readiness(ai_system: SaemsTunesAISystem) -> Dict[str, Any
|
|
| 817 |
"monitoring_ready": ai_system.monitor.is_ready(),
|
| 818 |
"model_file_exists": os.path.exists(ai_system.model_path) if ai_system.model_path else False,
|
| 819 |
"sufficient_memory": check_system_memory(),
|
| 820 |
-
"cache_clean": len(ai_system.response_cache) < 1000
|
|
|
|
| 821 |
}
|
| 822 |
|
| 823 |
all_passed = all(checks.values())
|
|
@@ -835,29 +847,28 @@ def check_system_memory() -> bool:
|
|
| 835 |
try:
|
| 836 |
import psutil
|
| 837 |
memory = psutil.virtual_memory()
|
| 838 |
-
return memory.available > (
|
| 839 |
except ImportError:
|
| 840 |
-
return True
|
| 841 |
|
| 842 |
def generate_recommendations(checks: Dict[str, bool]) -> List[str]:
|
| 843 |
"""Generate recommendations based on system check results"""
|
| 844 |
recommendations = []
|
| 845 |
|
| 846 |
if not checks["model_loaded"]:
|
| 847 |
-
recommendations.append("Restart AI system to reload model")
|
| 848 |
|
| 849 |
if not checks["supabase_connected"]:
|
| 850 |
recommendations.append("Check Supabase connection configuration")
|
| 851 |
|
| 852 |
if not checks["sufficient_memory"]:
|
| 853 |
-
recommendations.append("
|
| 854 |
|
| 855 |
if not checks["cache_clean"]:
|
| 856 |
recommendations.append("Clear response cache to free memory")
|
| 857 |
|
| 858 |
-
return recommendations if recommendations else ["
|
| 859 |
|
| 860 |
-
# Export the main class and utility functions
|
| 861 |
__all__ = [
|
| 862 |
'SaemsTunesAISystem',
|
| 863 |
'create_model_selector',
|
|
|
|
| 50 |
max_response_length: int = 150,
|
| 51 |
temperature: float = 0.6,
|
| 52 |
top_p: float = 0.85,
|
| 53 |
+
context_window: int = 512
|
| 54 |
):
|
| 55 |
self.supabase = supabase_integration
|
| 56 |
self.security = security_system
|
|
|
|
| 88 |
self.logger.addHandler(handler)
|
| 89 |
|
| 90 |
def load_model(self):
|
| 91 |
+
"""Load the optimized AI model with Hugging Face Spaces memory optimization"""
|
| 92 |
try:
|
| 93 |
+
self.logger.info(f"🔄 Loading {self.model_name} model with Hugging Face Spaces optimization...")
|
| 94 |
|
| 95 |
model_dir = "./models"
|
| 96 |
os.makedirs(model_dir, exist_ok=True)
|
|
|
|
| 134 |
self.model = Llama(
|
| 135 |
model_path=self.model_path,
|
| 136 |
n_ctx=self.context_window,
|
| 137 |
+
n_threads=1,
|
| 138 |
+
n_batch=64,
|
| 139 |
n_gpu_layers=0,
|
| 140 |
verbose=False,
|
| 141 |
use_mlock=False,
|
| 142 |
use_mmap=True,
|
| 143 |
+
low_vram=True,
|
| 144 |
+
main_gpu=0,
|
| 145 |
+
tensor_split=None,
|
| 146 |
+
vocab_only=False,
|
| 147 |
+
use_mlock=False,
|
| 148 |
+
embedding=False,
|
| 149 |
+
last_n_tokens_size=64,
|
| 150 |
+
seed=-1,
|
| 151 |
+
f16_kv=True,
|
| 152 |
+
logits_all=False,
|
| 153 |
+
kv_overrides=None,
|
| 154 |
+
rope_freq_base=10000.0,
|
| 155 |
+
rope_freq_scale=1.0,
|
| 156 |
low_vram=True
|
| 157 |
)
|
| 158 |
|
|
|
|
| 165 |
|
| 166 |
if test_response and 'choices' in test_response and len(test_response['choices']) > 0:
|
| 167 |
self.model_loaded = True
|
| 168 |
+
self.logger.info("✅ Hugging Face Spaces optimized model loaded and tested successfully!")
|
| 169 |
self.logger.info(f"📊 Model info: {self.model_path} (Hash: {self.model_hash})")
|
| 170 |
+
self.logger.info(f"⚡ Hugging Face Spaces settings: 1 thread, 64 batch, 512 context, CPU-only, ultra-low VRAM")
|
| 171 |
else:
|
| 172 |
self.logger.error("❌ Model test failed")
|
| 173 |
self.model_loaded = False
|
| 174 |
|
| 175 |
except Exception as e:
|
| 176 |
+
self.logger.error(f"❌ Error loading Hugging Face Spaces optimized model: {e}")
|
| 177 |
self.model_loaded = False
|
| 178 |
|
| 179 |
def process_query(
|
|
|
|
| 277 |
role = "User" if msg["role"] == "user" else "Assistant"
|
| 278 |
conversation_context += f"{role}: {msg['content']}\n"
|
| 279 |
|
|
|
|
| 280 |
system_prompt = f"""<|system|>
|
| 281 |
You are Saem's Tunes AI assistant - the intelligent helper for a comprehensive music education and streaming platform.
|
| 282 |
SAEM'S TUNES PLATFORM OVERVIEW:
|
| 283 |
+
🎵 Music Streaming: High-quality audio streaming with advanced processing
|
| 284 |
+
📚 Education: Structured courses, interactive lessons, learning paths
|
| 285 |
+
👥 Community: Social features, collaborations, user profiles
|
| 286 |
+
🎨 Creator Tools: Music upload, analytics, promotion tools
|
| 287 |
+
💎 Premium: Enhanced features, offline listening, exclusive content
|
| 288 |
+
📱 Mobile App: Full-featured mobile experience
|
| 289 |
PLATFORM STATISTICS:
|
| 290 |
- Total Tracks: {context.get('stats', {}).get('track_count', 0)}
|
| 291 |
- Total Artists: {context.get('stats', {}).get('artist_count', 0)}
|
|
|
|
| 520 |
"conversations_active": len(self.conversation_history),
|
| 521 |
"cache_size": len(self.response_cache),
|
| 522 |
"optimized_performance": True,
|
| 523 |
+
"cpu_threads": 1,
|
| 524 |
+
"low_vram_mode": True,
|
| 525 |
+
"hugging_face_spaces_optimized": True
|
| 526 |
}
|
| 527 |
|
| 528 |
def clear_cache(self, user_id: Optional[str] = None):
|
|
|
|
| 559 |
"cache_hit_rate": round(cache_hit_rate, 2),
|
| 560 |
"performance_optimized": True,
|
| 561 |
"response_speed": "fast",
|
| 562 |
+
"memory_usage": "ultra-low",
|
| 563 |
+
"hugging_face_spaces_compatible": True
|
| 564 |
}
|
| 565 |
|
| 566 |
def switch_model(
|
|
|
|
| 571 |
max_response_length: int = 150,
|
| 572 |
temperature: float = 0.6,
|
| 573 |
top_p: float = 0.85,
|
| 574 |
+
context_window: int = 512
|
| 575 |
) -> bool:
|
| 576 |
"""Dynamically switch between different optimized models"""
|
| 577 |
try:
|
|
|
|
| 612 |
"file": "tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf",
|
| 613 |
"size_gb": 0.7,
|
| 614 |
"speed": "fastest",
|
| 615 |
+
"use_case": "General queries, fast responses",
|
| 616 |
+
"hugging_face_compatible": True
|
| 617 |
},
|
| 618 |
{
|
| 619 |
"name": "Phi-2",
|
|
|
|
| 621 |
"file": "phi-2.Q4_K_M.gguf",
|
| 622 |
"size_gb": 1.6,
|
| 623 |
"speed": "balanced",
|
| 624 |
+
"use_case": "Complex reasoning, education focus",
|
| 625 |
+
"hugging_face_compatible": False
|
| 626 |
},
|
| 627 |
{
|
| 628 |
"name": "Qwen-1.8B-Chat",
|
|
|
|
| 630 |
"file": "qwen1.5-1.8b-chat-q4_k_m.gguf",
|
| 631 |
"size_gb": 1.1,
|
| 632 |
"speed": "fast",
|
| 633 |
+
"use_case": "Conversational, user interactions",
|
| 634 |
+
"hugging_face_compatible": False
|
| 635 |
}
|
| 636 |
]
|
| 637 |
|
| 638 |
+
def optimize_performance(self, level: str = "hugging_face") -> Dict[str, Any]:
|
| 639 |
"""Apply performance optimization profiles"""
|
| 640 |
optimizations = {
|
| 641 |
+
"hugging_face": {
|
| 642 |
"max_response_length": 100,
|
| 643 |
"temperature": 0.5,
|
| 644 |
"n_threads": 1,
|
| 645 |
+
"n_batch": 64,
|
| 646 |
+
"context_window": 512
|
| 647 |
+
},
|
| 648 |
+
"maximum_speed": {
|
| 649 |
+
"max_response_length": 80,
|
| 650 |
+
"temperature": 0.4,
|
| 651 |
+
"n_threads": 1,
|
| 652 |
+
"n_batch": 32,
|
| 653 |
+
"context_window": 256
|
| 654 |
},
|
| 655 |
"balanced": {
|
| 656 |
"max_response_length": 150,
|
| 657 |
"temperature": 0.6,
|
| 658 |
+
"n_threads": 1,
|
| 659 |
+
"n_batch": 64,
|
| 660 |
+
"context_window": 512
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 661 |
}
|
| 662 |
}
|
| 663 |
|
| 664 |
if level not in optimizations:
|
| 665 |
+
level = "hugging_face"
|
| 666 |
|
| 667 |
config = optimizations[level]
|
| 668 |
self.max_response_length = config["max_response_length"]
|
| 669 |
self.temperature = config["temperature"]
|
| 670 |
+
self.context_window = config["context_window"]
|
| 671 |
|
| 672 |
if self.model_loaded and self.model:
|
| 673 |
self.model.n_threads = config["n_threads"]
|
| 674 |
self.model.n_batch = config["n_batch"]
|
| 675 |
|
| 676 |
+
self.logger.info(f"🎯 Applied {level} performance optimization for Hugging Face Spaces")
|
| 677 |
|
| 678 |
return {
|
| 679 |
"optimization_level": level,
|
| 680 |
"config_applied": config,
|
| 681 |
+
"current_performance": "hugging_face_optimized"
|
| 682 |
}
|
| 683 |
|
| 684 |
def get_conversation_analytics(self, conversation_id: str) -> Dict[str, Any]:
|
|
|
|
| 772 |
else:
|
| 773 |
self.logger.error("❌ AI system emergency restart failed")
|
| 774 |
|
|
|
|
|
|
|
| 775 |
def create_model_selector(
|
| 776 |
supabase_integration: AdvancedSupabaseIntegration,
|
| 777 |
security_system: AdvancedSecuritySystem,
|
| 778 |
monitor: ComprehensiveMonitor,
|
| 779 |
+
model_preference: str = "hugging_face"
|
| 780 |
) -> SaemsTunesAISystem:
|
| 781 |
+
"""Factory function to create AI system with Hugging Face Spaces optimized configuration"""
|
| 782 |
|
| 783 |
model_configs = {
|
| 784 |
+
"hugging_face": {
|
| 785 |
"model_name": "TinyLlama-1.1B-Chat",
|
| 786 |
"model_repo": "TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF",
|
| 787 |
"model_file": "tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf",
|
| 788 |
"max_response_length": 100,
|
| 789 |
"temperature": 0.5,
|
| 790 |
+
"context_window": 512
|
| 791 |
+
},
|
| 792 |
+
"maximum_speed": {
|
| 793 |
+
"model_name": "TinyLlama-1.1B-Chat",
|
| 794 |
+
"model_repo": "TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF",
|
| 795 |
+
"model_file": "tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf",
|
| 796 |
+
"max_response_length": 80,
|
| 797 |
+
"temperature": 0.4,
|
| 798 |
+
"context_window": 256
|
| 799 |
},
|
| 800 |
"balanced": {
|
| 801 |
"model_name": "TinyLlama-1.1B-Chat",
|
| 802 |
"model_repo": "TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF",
|
| 803 |
"model_file": "tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf",
|
| 804 |
+
"max_response_length": 120,
|
| 805 |
"temperature": 0.6,
|
| 806 |
+
"context_window": 512
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 807 |
}
|
| 808 |
}
|
| 809 |
|
| 810 |
+
config = model_configs.get(model_preference, model_configs["hugging_face"])
|
| 811 |
|
| 812 |
ai_system = SaemsTunesAISystem(
|
| 813 |
supabase_integration=supabase_integration,
|
|
|
|
| 828 |
"monitoring_ready": ai_system.monitor.is_ready(),
|
| 829 |
"model_file_exists": os.path.exists(ai_system.model_path) if ai_system.model_path else False,
|
| 830 |
"sufficient_memory": check_system_memory(),
|
| 831 |
+
"cache_clean": len(ai_system.response_cache) < 1000,
|
| 832 |
+
"hugging_face_optimized": True
|
| 833 |
}
|
| 834 |
|
| 835 |
all_passed = all(checks.values())
|
|
|
|
| 847 |
try:
|
| 848 |
import psutil
|
| 849 |
memory = psutil.virtual_memory()
|
| 850 |
+
return memory.available > (256 * 1024 * 1024) # 256MB minimum for Hugging Face Spaces
|
| 851 |
except ImportError:
|
| 852 |
+
return True
|
| 853 |
|
| 854 |
def generate_recommendations(checks: Dict[str, bool]) -> List[str]:
|
| 855 |
"""Generate recommendations based on system check results"""
|
| 856 |
recommendations = []
|
| 857 |
|
| 858 |
if not checks["model_loaded"]:
|
| 859 |
+
recommendations.append("Restart AI system to reload model with Hugging Face Spaces optimization")
|
| 860 |
|
| 861 |
if not checks["supabase_connected"]:
|
| 862 |
recommendations.append("Check Supabase connection configuration")
|
| 863 |
|
| 864 |
if not checks["sufficient_memory"]:
|
| 865 |
+
recommendations.append("Hugging Face Spaces memory optimization applied")
|
| 866 |
|
| 867 |
if not checks["cache_clean"]:
|
| 868 |
recommendations.append("Clear response cache to free memory")
|
| 869 |
|
| 870 |
+
return recommendations if recommendations else ["Hugging Face Spaces optimized and ready"]
|
| 871 |
|
|
|
|
| 872 |
__all__ = [
|
| 873 |
'SaemsTunesAISystem',
|
| 874 |
'create_model_selector',
|