Spaces:
Sleeping
Sleeping
| """ | |
| Prompt Management System for AumCore AI | |
| Version: 4.0.0 | |
| Author: AumCore AI | |
| Location: /app/modules/prompt_manager.py | |
| """ | |
| import json | |
| import os | |
| from typing import Dict, List, Optional, Any | |
| from datetime import datetime | |
| from enum import Enum | |
| from dataclasses import dataclass, field | |
| import hashlib | |
| class ConversationStyle(Enum): | |
| """Different conversation styles""" | |
| CONCISE = "concise" # Short, direct answers | |
| DETAILED = "detailed" # Thorough explanations | |
| TECHNICAL = "technical" # Code-focused, precise | |
| FRIENDLY = "friendly" # Casual, conversational | |
| PROFESSIONAL = "professional" # Formal, business-like | |
| class LanguageCode(Enum): | |
| """Supported language codes""" | |
| ENGLISH = "en" | |
| HINDI = "hi" | |
| SPANISH = "es" | |
| FRENCH = "fr" | |
| GERMAN = "de" | |
| JAPANESE = "ja" | |
| class PromptConfig: | |
| """Configuration for generating prompts""" | |
| language: LanguageCode = LanguageCode.ENGLISH | |
| style: ConversationStyle = ConversationStyle.CONCISE | |
| username: Optional[str] = None | |
| context_length: int = 5 # Number of previous messages to include | |
| include_code_examples: bool = False | |
| temperature: float = 0.7 | |
| max_response_length: int = 1000 | |
| class AumCorePromptManager: | |
| """ | |
| Advanced Prompt Management System | |
| Handles multi-language prompts, conversation context, and response optimization | |
| """ | |
| def __init__(self, prompts_dir: str = "data/prompts"): | |
| self.prompts_dir = prompts_dir | |
| self._prompt_cache: Dict[str, str] = {} | |
| self._conversation_history: List[Dict] = [] | |
| self._load_base_prompts() | |
| # Create prompts directory if it doesn't exist | |
| os.makedirs(self.prompts_dir, exist_ok=True) | |
| def _load_base_prompts(self): | |
| """Load base system prompts for all languages and styles""" | |
| self._base_prompts = { | |
| "system": { | |
| "en": { | |
| "concise": """You are {name}, an AI assistant. Answer directly and clearly.""", | |
| "detailed": """You are {name}, an advanced AI assistant. Provide comprehensive, well-explained responses with examples when helpful.""", | |
| "technical": """You are {name}, an AI specializing in programming and technology. Provide precise, code-focused answers with best practices.""", | |
| "friendly": """You are {name}, a friendly AI assistant. Be conversational, helpful, and approachable in your responses.""", | |
| "professional": """You are {name}, a professional AI assistant. Maintain formal tone, accuracy, and clarity in all responses.""" | |
| }, | |
| "hi": { | |
| "concise": """आप {name} हैं, एक AI सहायक। सीधे और स्पष्ट उत्तर दें।""", | |
| "detailed": """आप {name} हैं, एक उन्नत AI सहायक। विस्तृत, समझदार उत्तर दें और आवश्यक होने पर उदाहरण दें।""", | |
| "technical": """आप {name} हैं, प्रोग्रामिंग और तकनीक में विशेषज्ञ AI। सटीक, कोड-केंद्रित उत्तर दें और बेस्ट प्रैक्टिस बताएं।""", | |
| "friendly": """आप {name} हैं, एक मित्रवत AI सहायक। बातचीत के अंदाज में, सहायक और आसानी से संपर्क करने योग्य रहें।""", | |
| "professional": """आप {name} हैं, एक पेशेवर AI सहायक। औपचारिक शैली, सटीकता और स्पष्टता बनाए रखें।""" | |
| } | |
| }, | |
| "greeting": { | |
| "en": { | |
| "morning": "Good morning! I'm {name}. How can I assist you today?", | |
| "afternoon": "Good afternoon! I'm {name}. What can I help you with?", | |
| "evening": "Good evening! I'm {name}. How may I be of service?", | |
| "general": "Hello! I'm {name}. How can I help you?" | |
| }, | |
| "hi": { | |
| "morning": "सुप्रभात! मैं {name} हूँ। आज आपकी कैसे सहायता कर सकता हूँ?", | |
| "afternoon": "नमस्ते! मैं {name} हूँ। आपकी क्या सहायता कर सकता हूँ?", | |
| "evening": "शुभ संध्या! मैं {name} हूँ। मैं आपकी कैसे सेवा कर सकता हूँ?", | |
| "general": "नमस्ते! मैं {name} हूँ। मैं आपकी कैसे सहायता कर सकता हूँ?" | |
| } | |
| }, | |
| "error_responses": { | |
| "en": { | |
| "no_code_request": "I don't see a specific code request. Could you clarify what you need?", | |
| "confused_context": "I want to make sure I understand correctly. Could you rephrase your question?", | |
| "technical_help": "I'd be happy to help with technical questions. What specifically do you need?" | |
| }, | |
| "hi": { | |
| "no_code_request": "मुझे कोई विशिष्ट कोड अनुरोध नहीं दिख रहा। क्या आप स्पष्ट कर सकते हैं कि आपको क्या चाहिए?", | |
| "confused_context": "मैं सुनिश्चित करना चाहता हूँ कि मैं सही समझ रहा हूँ। क्या आप अपना प्रश्न दोबारा कह सकते हैं?", | |
| "technical_help": "मैं तकनीकी प्रश्नों में मदद करने में खुशी होगी। आपको विशेष रूप से क्या चाहिए?" | |
| } | |
| } | |
| } | |
| def _get_cache_key(self, config: PromptConfig, category: str) -> str: | |
| """Generate cache key for prompt""" | |
| key_data = f"{category}:{config.language.value}:{config.style.value}:{config.username}" | |
| return hashlib.md5(key_data.encode()).hexdigest() | |
| def get_system_prompt(self, | |
| language: str = "en", | |
| username: str = None, | |
| style: str = "concise") -> str: | |
| """ | |
| Get system prompt for AI interaction | |
| Args: | |
| language: Language code (en, hi, etc.) | |
| username: Optional username for personalization | |
| style: Conversation style (concise, detailed, technical, friendly, professional) | |
| Returns: | |
| System prompt string | |
| """ | |
| # Normalize inputs | |
| lang = language.lower() if language else "en" | |
| style_key = style.lower() if style else "concise" | |
| # Get name part | |
| name_part = f"{username}'s AI" if username else "AumCore AI" | |
| # Get base prompt | |
| try: | |
| base_prompt = self._base_prompts["system"][lang][style_key] | |
| except KeyError: | |
| # Fallback to English concise | |
| base_prompt = self._base_prompts["system"]["en"]["concise"] | |
| # Format with name | |
| return base_prompt.format(name=name_part) | |
| def get_context_aware_prompt(self, | |
| user_message: str, | |
| language: str = "en", | |
| username: str = None, | |
| previous_messages: List[Dict] = None) -> str: | |
| """ | |
| Get prompt with conversation context awareness | |
| Args: | |
| user_message: Current user message | |
| language: Language code | |
| username: Optional username | |
| previous_messages: List of previous conversation messages | |
| Returns: | |
| Context-aware prompt string | |
| """ | |
| system_prompt = self.get_system_prompt(language, username, "friendly") | |
| # Build context if available | |
| context_part = "" | |
| if previous_messages and len(previous_messages) > 0: | |
| context_part = "\n\nPrevious conversation:\n" | |
| for msg in previous_messages[-5:]: # Last 5 messages | |
| role = msg.get("role", "user") | |
| content = msg.get("content", "") | |
| context_part += f"{role}: {content}\n" | |
| # Analyze message for special handling | |
| message_lower = user_message.lower() | |
| if "code" in message_lower or "program" in message_lower or "python" in message_lower: | |
| style = "technical" | |
| elif len(user_message.split()) < 4: # Very short message | |
| style = "concise" | |
| else: | |
| style = "detailed" | |
| # Add style instruction | |
| style_instruction = "" | |
| if style == "technical": | |
| style_instruction = "Focus on providing accurate code and technical explanations." | |
| elif style == "concise": | |
| style_instruction = "Keep the response brief and to the point." | |
| final_prompt = f"""{system_prompt} | |
| {style_instruction} | |
| {context_part} | |
| Current user message: {user_message} | |
| Please respond appropriately based on the context and message.""" | |
| return final_prompt | |
| def get_greeting(self, | |
| language: str = "en", | |
| username: str = None, | |
| time_of_day: str = None) -> str: | |
| """ | |
| Get appropriate greeting based on time of day | |
| Args: | |
| language: Language code | |
| username: Optional username | |
| time_of_day: Specific time of day (morning, afternoon, evening) | |
| Returns: | |
| Greeting message | |
| """ | |
| lang = language.lower() if language else "en" | |
| # Determine time of day if not provided | |
| if not time_of_day: | |
| hour = datetime.now().hour | |
| if 5 <= hour < 12: | |
| time_of_day = "morning" | |
| elif 12 <= hour < 17: | |
| time_of_day = "afternoon" | |
| elif 17 <= hour < 22: | |
| time_of_day = "evening" | |
| else: | |
| time_of_day = "general" | |
| # Get greeting template | |
| try: | |
| greeting_templates = self._base_prompts["greeting"][lang] | |
| template = greeting_templates.get(time_of_day, greeting_templates["general"]) | |
| except KeyError: | |
| # Fallback to English | |
| greeting_templates = self._base_prompts["greeting"]["en"] | |
| template = greeting_templates.get(time_of_day, greeting_templates["general"]) | |
| name_part = f"{username}'s AI" if username else "AumCore AI" | |
| return template.format(name=name_part) | |
| def detect_response_style_needed(self, user_message: str) -> Dict: | |
| """ | |
| Analyze user message to determine appropriate response style | |
| Args: | |
| user_message: User's input text | |
| Returns: | |
| Dictionary with style recommendations | |
| """ | |
| message_lower = user_message.lower() | |
| words = user_message.split() | |
| analysis = { | |
| "language": "en", # Default, will be detected elsewhere | |
| "style": "detailed", | |
| "needs_code": False, | |
| "is_technical": False, | |
| "is_casual": False, | |
| "word_count": len(words) | |
| } | |
| # Check for technical/code requests | |
| code_keywords = ["code", "program", "function", "script", "algorithm", | |
| "python", "javascript", "java", "html", "css", "sql", | |
| "error", "bug", "debug", "compile", "syntax"] | |
| if any(keyword in message_lower for keyword in code_keywords): | |
| analysis["needs_code"] = True | |
| analysis["is_technical"] = True | |
| analysis["style"] = "technical" | |
| # Check for casual conversation | |
| casual_keywords = ["hi", "hello", "hey", "how are you", "what's up", | |
| "thanks", "thank you", "please", "ok", "okay"] | |
| if any(keyword in message_lower for keyword in casual_keywords): | |
| analysis["is_casual"] = True | |
| analysis["style"] = "friendly" | |
| # Check for very short messages | |
| if len(words) <= 3: | |
| analysis["style"] = "concise" | |
| # Check for complex questions | |
| question_words = ["how", "what", "why", "when", "where", "which", "explain", "describe"] | |
| if any(user_message.strip().startswith(word) for word in question_words): | |
| analysis["style"] = "detailed" | |
| return analysis | |
| def save_custom_prompt(self, | |
| category: str, | |
| language: str, | |
| style: str, | |
| prompt_text: str): | |
| """ | |
| Save custom prompt to file | |
| Args: | |
| category: Prompt category (system, greeting, error_responses) | |
| language: Language code | |
| style: Prompt style | |
| prompt_text: Custom prompt text | |
| """ | |
| custom_file = os.path.join(self.prompts_dir, "custom_prompts.json") | |
| # Load existing or create new | |
| if os.path.exists(custom_file): | |
| with open(custom_file, 'r', encoding='utf-8') as f: | |
| custom_prompts = json.load(f) | |
| else: | |
| custom_prompts = {} | |
| # Update structure | |
| if category not in custom_prompts: | |
| custom_prompts[category] = {} | |
| if language not in custom_prompts[category]: | |
| custom_prompts[category][language] = {} | |
| custom_prompts[category][language][style] = prompt_text | |
| # Save back | |
| with open(custom_file, 'w', encoding='utf-8') as f: | |
| json.dump(custom_prompts, f, indent=2, ensure_ascii=False) | |
| # Clear cache | |
| self._prompt_cache.clear() | |
| def add_to_conversation_history(self, role: str, content: str): | |
| """ | |
| Add message to conversation history | |
| Args: | |
| role: 'user' or 'assistant' | |
| content: Message content | |
| """ | |
| self._conversation_history.append({ | |
| "role": role, | |
| "content": content, | |
| "timestamp": datetime.now().isoformat() | |
| }) | |
| # Keep only last 20 messages | |
| if len(self._conversation_history) > 20: | |
| self._conversation_history = self._conversation_history[-20:] | |
| def get_conversation_summary(self) -> str: | |
| """ | |
| Get summary of recent conversation | |
| Returns: | |
| Conversation summary string | |
| """ | |
| if not self._conversation_history: | |
| return "No recent conversation." | |
| summary = f"Recent conversation ({len(self._conversation_history)} messages):\n" | |
| for msg in self._conversation_history[-5:]: # Last 5 messages | |
| role = msg["role"] | |
| content_preview = msg["content"][:50] + "..." if len(msg["content"]) > 50 else msg["content"] | |
| summary += f"{role}: {content_preview}\n" | |
| return summary | |
| def clear_conversation_history(self): | |
| """Clear all conversation history""" | |
| self._conversation_history = [] | |
| # Global instance for easy import | |
| prompt_manager = AumCorePromptManager() | |
| # Backward compatibility functions | |
| def get_system_prompt(language: str = "en", username: str = None) -> str: | |
| """ | |
| Legacy compatibility function | |
| Args: | |
| language: Language code | |
| username: Optional username | |
| Returns: | |
| System prompt string | |
| """ | |
| return prompt_manager.get_system_prompt(language, username) | |
| # Module exports | |
| __all__ = [ | |
| 'AumCorePromptManager', | |
| 'PromptConfig', | |
| 'ConversationStyle', | |
| 'LanguageCode', | |
| 'prompt_manager', | |
| 'get_system_prompt' | |
| ] | |
| # ============================================ | |
| # MODULE REGISTRATION FOR APPPY | |
| # ============================================ | |
| def register_module(app, client, username): | |
| """ | |
| Required function for ModuleManager to load this module | |
| """ | |
| print("✅ Prompt Manager module registered with FastAPI") | |
| # You can add route registration here if needed | |
| # Example: | |
| # @app.get("/prompt-manager/status") | |
| # async def status(): | |
| # return {"module": "prompt_manager", "status": "active"} | |
| return { | |
| "module": "prompt_manager", | |
| "status": "registered", | |
| "version": __version__, | |
| "description": "Advanced prompt management system" | |
| } | |
| # ============================================ | |
| # MODULE REGISTRATION FOR APPPY | |
| # ============================================ | |
| def register_module(app, client, username): | |
| """ | |
| Required function for ModuleManager to load this module | |
| """ | |
| print("✅ Code Intelligence module registered with FastAPI") | |
| return { | |
| "module": "code_intelligence", | |
| "status": "registered", | |
| "version": __version__, | |
| "description": "Advanced code analysis and intelligence system" | |
| } | |
| __version__ = "4.0.0" | |
| __author__ = "AumCore AI" |