| |
| """ |
| Stack 2.9 - Full Enhanced Version with All Features |
| """ |
| import os |
| os.environ['HF_HUB_DISABLE_PROGRESS_BARS'] = '1' |
| os.environ['TOKENIZERS_PARALLELISM'] = 'false' |
|
|
| import sys |
| from pathlib import Path |
| sys.path.insert(0, str(Path(__file__).parent / "src")) |
|
|
| import torch |
|
|
| |
| from enhancements.nlp import IntentDetector, EntityRecognizer |
| from enhancements.knowledge_graph import RAGEngine |
| from enhancements.emotional_intelligence import SentimentAnalyzer, EmpathyEngine |
| from enhancements.collaboration import ConversationStateManager |
| from enhancements.learning import FeedbackCollector, PerformanceMonitor |
| from enhancements.technical import DevOpsTools, CodeAnalyzer, DebuggingAssistant |
| from enhancements import get_config |
|
|
| |
| model_path = Path("/Users/walidsobhi/stack-2-9-final-model") |
|
|
| print("=" * 50) |
| print("Stack 2.9 - Enhanced Edition") |
| print("=" * 50) |
|
|
| |
| print("\n[1/4] Loading NLP modules...") |
| intent_detector = IntentDetector() |
| entity_recognizer = EntityRecognizer() |
| print(" ✓ Intent Detection") |
| print(" ✓ Entity Recognition") |
|
|
| print("\n[2/4] Loading Knowledge Graph...") |
| rag_engine = RAGEngine() |
| rag_engine.add_document("intro", "Stack 2.9 is an AI coding assistant trained on code and technical content") |
| rag_engine.add_document("commands", "Commands: help, debug, analyze, devops, quit") |
| print(" ✓ RAG Engine") |
|
|
| print("\n[3/4] Loading Emotional Intelligence...") |
| sentiment_analyzer = SentimentAnalyzer() |
| empathy_engine = EmpathyEngine() |
| print(" ✓ Sentiment Analysis") |
| print(" ✓ Empathy Engine") |
|
|
| print("\n[4/4] Loading Technical Capabilities...") |
| devops_tools = DevOpsTools() |
| code_analyzer = CodeAnalyzer() |
| debugging_assistant = DebuggingAssistant() |
| print(" ✓ DevOps Tools") |
| print(" ✓ Code Analyzer") |
| print(" ✓ Debugging Assistant") |
|
|
| |
| conversation_manager = ConversationStateManager() |
| feedback_collector = FeedbackCollector() |
| performance_monitor = PerformanceMonitor() |
|
|
| print("\n" + "=" * 50) |
|
|
| |
| print("\nLoading model...") |
| from transformers import AutoModelForCausalLM, AutoTokenizer |
|
|
| model = AutoModelForCausalLM.from_pretrained( |
| str(model_path), |
| torch_dtype=torch.float16, |
| device_map="cpu", |
| local_files_only=True |
| ) |
|
|
| tokenizer = AutoTokenizer.from_pretrained( |
| str(model_path), |
| local_files_only=True |
| ) |
| tokenizer.pad_token = "<|endoftext|>" |
|
|
| if torch.cuda.is_available(): |
| model = model.to("cuda") |
|
|
| |
| conversation_manager.create_session() |
| performance_monitor.increment_session_count() |
|
|
| print("✓ Stack 2.9 Ready!\n") |
|
|
| |
| def demo_feature(name, func): |
| print(f"\n--- {name} ---") |
| try: |
| result = func() |
| print(result) |
| except Exception as e: |
| print(f"Error: {e}") |
|
|
| |
| while True: |
| try: |
| print("\n" + "=" * 40) |
| print("Commands: test, debug <error>, analyze <code>, devops, quit") |
| user_input = input("\nYou: ").strip() |
|
|
| if not user_input: |
| continue |
|
|
| if user_input.lower() in ['quit', 'exit', 'q']: |
| break |
|
|
| |
| if user_input.lower() == 'test': |
| print("\n=== TESTING ALL ENHANCEMENTS ===\n") |
|
|
| |
| demo_feature("Intent Detection", lambda: intent_detector.detect_intent("Write a function to calculate fibonacci")) |
|
|
| |
| demo_feature("Entity Recognition", lambda: entity_recognizer.recognize_entities("My email is test@example.com")) |
|
|
| |
| demo_feature("Sentiment Analysis", lambda: sentiment_analyzer.analyze_sentiment("I'm frustrated with this bug")) |
|
|
| |
| demo_feature("RAG Context", lambda: rag_engine.retrieve_as_context("what can you do", 200)) |
|
|
| |
| sample_code = "def hello():\n print('hello')\n x = 1" |
| demo_feature("Code Analysis", lambda: code_analyzer.get_code_summary(sample_code)) |
|
|
| |
| demo_feature("DevOps - Docker", lambda: devops_tools.generate_dockerfile("python", "3.11")) |
|
|
| |
| demo_feature("Debugging", lambda: debugging_assistant.analyze_error("NameError: name 'x' is not defined")) |
|
|
| print("\n=== ALL TESTS COMPLETE ===") |
| continue |
|
|
| |
| if user_input.lower().startswith("debug "): |
| error = user_input[6:] |
| analysis = debugging_assistant.analyze_error(error) |
| print(f"\nError Type: {analysis['error_type']}") |
| print(f"Description: {analysis['description']}") |
| print("\nCommon Causes:") |
| for cause in analysis['common_causes']: |
| print(f" - {cause}") |
| print("\nSuggested Fixes:") |
| for fix in analysis['suggested_fixes']: |
| print(f" - {fix}") |
| continue |
|
|
| |
| if user_input.lower().startswith("analyze "): |
| code = user_input[8:] |
| summary = code_analyzer.get_code_summary(code) |
| print(f"\nLanguage: {summary['language']}") |
| print(f"Lines of Code: {summary['complexity']['lines_of_code']}") |
| print(f"Complexity: {summary['complexity']['cyclomatic_complexity']}") |
| print(f"Maintainability: {summary['maintainability_index']:.1f}/100") |
| if summary['issues']: |
| print("Issues:") |
| for issue in summary['issues'][:3]: |
| print(f" - {issue['type']}: {issue['message']}") |
| continue |
|
|
| |
| if user_input.lower().startswith("devops"): |
| parts = user_input.split() |
| if len(parts) > 1: |
| template = devops_tools.generate_dockerfile(parts[1] if len(parts) > 1 else "python") |
| else: |
| template = devops_tools.generate_dockerfile() |
| print(f"\n{template}") |
| continue |
|
|
| |
| |
| intent = intent_detector.detect_intent(user_input) |
|
|
| |
| sentiment = sentiment_analyzer.analyze_sentiment(user_input) |
|
|
| |
| rag_context = rag_engine.retrieve_as_context(user_input, 300) |
|
|
| |
| prompt_parts = ["You are Stack 2.9, an expert AI coding assistant."] |
|
|
| if rag_context: |
| prompt_parts.append(f"Context: {rag_context}") |
|
|
| |
| if sentiment['sentiment'] == 'negative': |
| prompt_parts.append("Be empathetic and understanding.") |
| elif sentiment['sentiment'] == 'positive': |
| prompt_parts.append("Be enthusiastic and helpful.") |
|
|
| prompt_parts.append(f"\n\nUser: {user_input}\nAssistant:") |
|
|
| full_prompt = "\n".join(prompt_parts) |
|
|
| |
| inputs = tokenizer(full_prompt, return_tensors='pt') |
| if torch.cuda.is_available(): |
| inputs = inputs.to("cuda") |
|
|
| outputs = model.generate( |
| **inputs, |
| max_new_tokens=150, |
| temperature=0.4, |
| pad_token_id=tokenizer.eos_token_id |
| ) |
|
|
| response = tokenizer.decode(outputs[0], skip_special_tokens=True) |
|
|
| if "Assistant:" in response: |
| response = response.split("Assistant:")[-1].strip() |
|
|
| |
| if sentiment['sentiment'] == 'negative': |
| response = empathy_engine.generate_empathetic_response(user_input, response) |
|
|
| print(f"\n[Intent: {intent['intent']}] [Sentiment: {sentiment['sentiment']}]") |
| print(f"AI: {response}") |
|
|
| |
| performance_monitor.increment_message_count() |
|
|
| except KeyboardInterrupt: |
| break |
|
|
| |
| stats = performance_monitor.get_session_stats() |
| print(f"\n\nSession Stats: {stats['total_messages']} messages") |
| print("Stack 2.9 Enhanced - Session Complete!") |