# utils/helpers.py """ Helper utility functions """ import json import os import random from datetime import datetime from zoneinfo import ZoneInfo from langchain_community.document_loaders import PyPDFDirectoryLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_google_genai import GoogleGenerativeAIEmbeddings from langchain_community.vectorstores import FAISS from dotenv import load_dotenv load_dotenv() GEMINI_API_KEY = os.getenv('GEMINI_API_KEY') def create_vector_store(): """ Checks if a vector store index exists. If not, it creates one from the PDFs in the knowledge_base folder. """ persist_directory = '/tmp/faiss_index' if os.path.exists(persist_directory): print("--- Knowledge base (FAISS index) already exists. Loading... ---") return # Check if there are files to process if not os.path.exists("./knowledge_base") or not os.listdir("./knowledge_base"): print("--- 'knowledge_base' folder is empty or does not exist. Skipping index creation. ---") return print("--- Creating new knowledge base... ---") loader = PyPDFDirectoryLoader("./knowledge_base/") documents = loader.load() if not documents: print("--- No documents could be loaded. Skipping index creation. ---") return print(f"--- Loaded {len(documents)} document(s). Splitting text... ---") text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100) docs = text_splitter.split_documents(documents) print(f"--- Creating embeddings and vector store. This may take a moment... ---") embeddings = GoogleGenerativeAIEmbeddings(model="models/embedding-001", google_api_key=GEMINI_API_KEY) db = FAISS.from_documents(docs, embeddings) db.save_local(persist_directory) print("--- Knowledge base created successfully. ---") def load_quotes(): """Load inspirational quotes from Gita/Vedas""" quotes_file = 'data/quotes.json' default_quotes = [ "विद्या ददाति विनयं - Knowledge gives humility", "योग: कर्मसु कौशलम् - Yoga is skill in action", "श्रेयान्स्वधर्मो विगुण: - Better is one's own dharma though imperfectly performed", "कर्मण्येवाधिकारस्ते - You have the right to perform action", "विद्या धनं सर्व धन प्रधानम् - Knowledge is the supreme wealth", "सत्यमेव जयते - Truth alone triumphs", "तमसो मा ज्योतिर्गमय - Lead me from darkness to light", "अहिंसा परमो धर्म: - Non-violence is the supreme virtue" ] if not os.path.exists(quotes_file): os.makedirs('data', exist_ok=True) with open(quotes_file, 'w', encoding='utf-8') as f: json.dump(default_quotes, f, indent=2, ensure_ascii=False) return default_quotes try: with open(quotes_file, 'r', encoding='utf-8') as f: return json.load(f) except: return default_quotes def get_greeting(): """ Returns a time-of-day appropriate greeting in English and Hindi, specifically for the Indian Standard Time (IST) timezone. """ # Define the Indian Standard Time timezone ist_timezone = ZoneInfo("Asia/Kolkata") # Get the current time in the IST timezone current_time_ist = datetime.now(ist_timezone) current_hour = current_time_ist.hour if 5 <= current_hour < 12: return "☀️ सुप्रभात (Good Morning)! Ready to start the day?" elif 12 <= current_hour < 17: return "☀️ नमस्कार (Good Afternoon)! Time for a study session?" elif 17 <= current_hour < 21: return "🌇 शुभ संध्या (Good Evening)! Wrapping up your studies?" else: return "🌙 शुभ रात्रि (Good Night)! Late night study session?" def format_indian_text(text, add_emojis=True): """Format text with Indian cultural elements""" if add_emojis: # Add relevant emojis based on content if any(word in text.lower() for word in ['drug', 'medicine', 'pharmaceutical']): text = f"💊 {text}" elif any(word in text.lower() for word in ['study', 'learn', 'education']): text = f"📚 {text}" elif any(word in text.lower() for word in ['quiz', 'test', 'exam']): text = f"❓ {text}" elif any(word in text.lower() for word in ['memory', 'remember', 'mnemonic']): text = f"🧠 {text}" return text