# agents/mnemonic_agent.py """ Mnemonic Creation Agent - Creates memory aids and tricks using Generative AI. """ import re from .agent_helpers import format_history_for_prompt class MnemonicAgent: def __init__(self, gemini_model=None): """ Initializes the agent with the Gemini model. Args: gemini_model: An instance of the Gemini model client. """ self.model = gemini_model def _extract_topic(self, query: str) -> str: """A simple helper to extract the core topic from the user's query.""" # Remove common phrases used to request mnemonics patterns = [ r"make a mnemonic for", r"create a mnemonic for", r"give me a mnemonic for", r"mnemonic for", r"memory aid for" ] topic = query.lower() for p in patterns: topic = re.sub(p, "", topic) # Clean up any extra whitespace return topic.strip() def process_query(self, query: str, file_context: str = "", chat_history: list = None): """ Processes a query to generate a mnemonic. Args: query (str): The user's full query (e.g., "Give me a mnemonic for glycolysis steps"). file_context (str): Optional context from uploaded files. chat_history (list): The history of the conversation. Returns: dict: A dictionary containing the response message and agent metadata. """ if not self.model: return {'message': "🧠 My creative circuits are offline! The Gemini API key is missing.", 'agent_used': 'mnemonic_creation', 'status': 'error_no_api_key'} history_for_prompt = format_history_for_prompt(chat_history) topic = self._extract_topic(query) context_section = f"---\nCONTEXT FROM KNOWLEDGE BASE:\n{file_context}\n---" if file_context else "" prompt = f"""You are "Mnemonic Master," a creative AI that creates memorable mnemonics for B.Pharmacy students. **CRITICAL INSTRUCTION FOR CITATIONS:** When you use information from the KNOWLEDGE BASE CONTEXT, you MUST cite the source at the end of the relevant sentence using the format `[Source: filename, Page: page_number]`. get the topic from {topic} CONVERSATION HISTORY: {context_section} {history_for_prompt} CURRENT TASK: User: {query} Based on the CURRENT TASK and conversation history, generate a clever mnemonic (acronym, rhyme, or story). If the user is asking for a modification of a previous mnemonic, adjust it accordingly. Explain how the mnemonic works. Be encouraging and fun! with emojis and like tenali ramakrishna """ try: response = self.model.generate_content(prompt) return {'message': response.text, 'agent_used': 'mnemonic_creation', 'status': 'success'} except Exception as e: print(f"Mnemonic Agent Error: {e}") return {'message': f"My creative spark fizzled out. Error: {e}", 'agent_used': 'mnemonic_creation', 'status': 'error_api_call'} # def process_query(self, query: str, file_context: str = "",chat_history: list = None): # """ # Processes a query to generate a mnemonic. # Args: # query (str): The user's full query (e.g., "Give me a mnemonic for glycolysis steps"). # file_context (str): Optional context from uploaded files (usually not needed for mnemonics). # Returns: # dict: A dictionary containing the response message and agent metadata. # """ # # Fallback response if the AI model is not configured # if not self.model: # return { # 'message': "🧠 **Mnemonic Master**\n\nMy creative circuits are offline! The Gemini API key is missing, so I can't generate mnemonics right now. Please configure the API key to enable this feature.", # 'agent_type': 'mnemonic_creation', # 'status': 'error_no_api_key' # } # topic = self._extract_topic(query) # if not topic: # return { # 'message': "Please tell me what topic you need a mnemonic for! For example, try 'mnemonic for Krebs cycle intermediates'.", # 'agent_type': 'mnemonic_creation', # 'status': 'error_no_topic' # } # # --- NEW LOGIC --- # task_description = f"Generate a clever mnemonic for the B.Pharmacy topic: **{topic.title()}**." # if file_context: # task_description += f"\n\nIf relevant, you can use the following text from the student's uploaded notes for context:\n---\n{file_context}\n---" # # Construct a specialized prompt for the Gemini model # prompt = f""" # You are "Mnemonic Master," a creative and witty AI that excels at creating memorable mnemonics for B.Pharmacy students in India. # **Your Task:** # {task_description} # **Topic:** "{topic}" # **Instructions:** # 1. **Analyze the Topic:** Identify the key items to be memorized (e.g., steps, drug names, classifications). # 2. **Create the Mnemonic:** Design a creative acronym, rhyme, or short, vivid story. # 3. **Explain It:** Clearly state the mnemonic and then explain how it maps to the concepts. # 4. **Tone:** Be encouraging, fun, and use emojis! The language should be simple and relatable. # **Example Output Format:** # 🧠 **Mnemonic for [Topic Name]** # Here's a fun way to remember it! # **The Mnemonic:** # "[The actual acronym or rhyme]" # **How it works:** # * **[Letter 1]** stands for [Concept 1] # * **[Letter 2]** stands for [Concept 2] # * ...and so on! # Keep up the great work! You've got this! 💪 # """ # try: # # Generate content using the AI model # ai_response = self.model.generate_content(prompt,chat_history) # return { # 'message': ai_response.text, # 'agent_used': 'mnemonic_creation', # 'status': 'success' # } # except Exception as e: # print(f"Mnemonic Agent Error: {e}") # return { # 'message': f"Oh no! My creative spark fizzled out. I ran into an error: {str(e)}", # 'agent_type': 'mnemonic_creation', # 'status': 'error_api_call' # }