File size: 4,757 Bytes
f39ba75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# 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