|
""" |
|
Enhanced setup script with more comprehensive knowledge base |
|
""" |
|
|
|
import os |
|
import sys |
|
from pathlib import Path |
|
import numpy as np |
|
import faiss |
|
import pickle |
|
from sentence_transformers import SentenceTransformer |
|
from typing import List, Dict |
|
|
|
sys.path.append(os.path.dirname(os.path.abspath(__file__))) |
|
|
|
|
|
WISDOM_DATABASE = [ |
|
|
|
{ |
|
"text": "The mind is restless and difficult to restrain, but it is subdued by practice.", |
|
"source": "Bhagavad Gita", |
|
"chapter": "6.35", |
|
"tags": ["mind", "practice", "discipline"] |
|
}, |
|
{ |
|
"text": "Set thy heart upon thy work, but never on its reward.", |
|
"source": "Bhagavad Gita", |
|
"chapter": "2.47", |
|
"tags": ["work", "detachment", "karma"] |
|
}, |
|
{ |
|
"text": "The soul is neither born, and nor does it die.", |
|
"source": "Bhagavad Gita", |
|
"chapter": "2.20", |
|
"tags": ["soul", "eternal", "death"] |
|
}, |
|
|
|
|
|
{ |
|
"text": "The season of failure is the best time for sowing the seeds of success.", |
|
"source": "Autobiography of a Yogi", |
|
"tags": ["failure", "success", "growth"] |
|
}, |
|
{ |
|
"text": "Live quietly in the moment and see the beauty of all before you.", |
|
"source": "Autobiography of a Yogi", |
|
"tags": ["present", "beauty", "mindfulness"] |
|
}, |
|
|
|
|
|
{ |
|
"text": "Realize deeply that the present moment is all you have.", |
|
"source": "The Power of Now", |
|
"tags": ["present", "awareness", "now"] |
|
}, |
|
{ |
|
"text": "The primary cause of unhappiness is never the situation but your thoughts about it.", |
|
"source": "The Power of Now", |
|
"tags": ["unhappiness", "thoughts", "perception"] |
|
}, |
|
{ |
|
"text": "Life will give you whatever experience is most helpful for the evolution of your consciousness.", |
|
"source": "The Power of Now", |
|
"tags": ["life", "experience", "consciousness"] |
|
}, |
|
|
|
|
|
{ |
|
"text": "When we are no longer able to change a situation, we are challenged to change ourselves.", |
|
"source": "Man's Search for Meaning", |
|
"tags": ["change", "adaptation", "growth"] |
|
}, |
|
{ |
|
"text": "Those who have a 'why' to live, can bear with almost any 'how'.", |
|
"source": "Man's Search for Meaning", |
|
"tags": ["purpose", "meaning", "resilience"] |
|
}, |
|
|
|
|
|
{ |
|
"text": "You do not rise to the level of your goals. You fall to the level of your systems.", |
|
"source": "Atomic Habits", |
|
"tags": ["goals", "systems", "habits"] |
|
}, |
|
{ |
|
"text": "Every action you take is a vote for the type of person you wish to become.", |
|
"source": "Atomic Habits", |
|
"tags": ["identity", "actions", "becoming"] |
|
}, |
|
{ |
|
"text": "Habits are the compound interest of self-improvement.", |
|
"source": "Atomic Habits", |
|
"tags": ["habits", "improvement", "compound"] |
|
}, |
|
|
|
|
|
{ |
|
"text": "You have power over your mind - not outside events. Realize this, and you will find strength.", |
|
"source": "Meditations", |
|
"tags": ["control", "mind", "strength"] |
|
}, |
|
{ |
|
"text": "The best revenge is not to be like your enemy.", |
|
"source": "Meditations", |
|
"tags": ["revenge", "character", "virtue"] |
|
}, |
|
{ |
|
"text": "What we cannot bear removes us from life; what remains can be borne.", |
|
"source": "Meditations", |
|
"tags": ["endurance", "life", "strength"] |
|
}, |
|
|
|
|
|
{ |
|
"text": "When I let go of what I am, I become what I might be.", |
|
"source": "Tao Te Ching", |
|
"tags": ["letting go", "becoming", "potential"] |
|
}, |
|
{ |
|
"text": "The journey of a thousand miles begins with a single step.", |
|
"source": "Tao Te Ching", |
|
"tags": ["journey", "beginning", "action"] |
|
}, |
|
{ |
|
"text": "Knowing others is intelligence; knowing yourself is true wisdom.", |
|
"source": "Tao Te Ching", |
|
"tags": ["self-knowledge", "wisdom", "intelligence"] |
|
}, |
|
|
|
|
|
{ |
|
"text": "Between stimulus and response there is a space. In that space is our power to choose our response.", |
|
"source": "7 Habits of Highly Effective People", |
|
"tags": ["choice", "response", "freedom"] |
|
}, |
|
{ |
|
"text": "Begin with the end in mind.", |
|
"source": "7 Habits of Highly Effective People", |
|
"tags": ["vision", "planning", "purpose"] |
|
}, |
|
|
|
|
|
{ |
|
"text": "Becoming is better than being.", |
|
"source": "Mindset", |
|
"tags": ["growth", "becoming", "fixed mindset"] |
|
}, |
|
{ |
|
"text": "The view you adopt for yourself profoundly affects the way you lead your life.", |
|
"source": "Mindset", |
|
"tags": ["perspective", "self-view", "life"] |
|
}, |
|
|
|
|
|
{ |
|
"text": "The wound is the place where the Light enters you.", |
|
"source": "Rumi", |
|
"tags": ["pain", "growth", "transformation"] |
|
}, |
|
{ |
|
"text": "Yesterday I was clever, so I wanted to change the world. Today I am wise, so I am changing myself.", |
|
"source": "Rumi", |
|
"tags": ["change", "wisdom", "self"] |
|
}, |
|
{ |
|
"text": "Do not dwell in the past, do not dream of the future, concentrate the mind on the present moment.", |
|
"source": "Buddha", |
|
"tags": ["present", "past", "future"] |
|
} |
|
] |
|
|
|
def setup_comprehensive_knowledge_base(): |
|
"""Setup knowledge base with all wisdom texts""" |
|
print("Setting up comprehensive knowledge base...") |
|
|
|
|
|
data_dir = Path("data") |
|
faiss_dir = data_dir / "faiss_index" |
|
books_dir = data_dir / "books" |
|
|
|
for dir_path in [data_dir, faiss_dir, books_dir]: |
|
dir_path.mkdir(exist_ok=True) |
|
|
|
|
|
print("Loading sentence transformer model...") |
|
embedder = SentenceTransformer('all-MiniLM-L6-v2') |
|
|
|
|
|
texts = [] |
|
metadata = [] |
|
|
|
for item in WISDOM_DATABASE: |
|
texts.append(item["text"]) |
|
metadata.append({ |
|
"source": item["source"], |
|
"chapter": item.get("chapter", ""), |
|
"tags": item.get("tags", []) |
|
}) |
|
|
|
|
|
print(f"Creating embeddings for {len(texts)} wisdom passages...") |
|
embeddings = embedder.encode(texts, show_progress_bar=True) |
|
|
|
|
|
dimension = embeddings.shape[1] |
|
|
|
|
|
faiss.normalize_L2(embeddings) |
|
|
|
|
|
index = faiss.IndexFlatIP(dimension) |
|
index.add(embeddings.astype('float32')) |
|
|
|
|
|
print("Saving knowledge base...") |
|
faiss.write_index(index, str(faiss_dir / "index.faiss")) |
|
|
|
with open(faiss_dir / "passages.pkl", 'wb') as f: |
|
pickle.dump(texts, f) |
|
|
|
with open(faiss_dir / "metadata.pkl", 'wb') as f: |
|
pickle.dump(metadata, f) |
|
|
|
print(f"β
Knowledge base setup complete!") |
|
print(f" - Total passages: {len(texts)}") |
|
print(f" - Embedding dimension: {dimension}") |
|
print(f" - Index type: Cosine similarity (normalized L2)") |
|
|
|
|
|
print("\nCreating placeholder book files...") |
|
book_files = [ |
|
"bhagavad_gita.txt", |
|
"autobiography_of_a_yogi.txt", |
|
"the_power_of_now.txt", |
|
"mans_search_for_meaning.txt", |
|
"atomic_habits.txt", |
|
"meditations.txt", |
|
"tao_te_ching.txt", |
|
"dhyana_vahini.txt", |
|
"7_habits.txt", |
|
"mindset.txt", |
|
"prema_vahini.txt", |
|
"prasnothara_vahini.txt" |
|
] |
|
|
|
for book_file in book_files: |
|
filepath = books_dir / book_file |
|
if not filepath.exists(): |
|
with open(filepath, 'w', encoding='utf-8') as f: |
|
f.write(f"Placeholder for {book_file}\nAdd full text here.") |
|
|
|
print("β
Setup complete! You can now run the main application.") |
|
print("\nTo add full books:") |
|
print("1. Replace placeholder files in data/books/ with full text") |
|
print("2. Re-run this script to update the knowledge base") |
|
|
|
if __name__ == "__main__": |
|
setup_comprehensive_knowledge_base() |