MyPharmaAI / utils /helpers.py
Ajey95
Restore app source files without FAISS index
f39ba75
# 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