| """ |
| 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() |