demo-project / app.py
samiasohail25gmailcom's picture
Create app.py
c7de61d verified
import streamlit as st
from transformers import pipeline
from sentence_transformers import SentenceTransformer
import faiss
import json
import random
import os
# ----------------- DATA SECTION -----------------
# Quran + Hadith sample data (You can expand later)
quran_data = [
{
"source": "Surah Al-Baqarah, Ayah 2",
"text": "This is the Book about which there is no doubt, a guidance for those conscious of Allah."
},
{
"source": "Surah Al-Ikhlas, Ayah 1",
"text": "Say, 'He is Allah, [who is] One.'"
}
]
hadith_data = [
{
"source": "Sahih Bukhari, Book 2, Hadith 13",
"text": "None of you will have faith till he wishes for his brother what he likes for himself."
},
{
"source": "Sahih Muslim, Book 1, Hadith 1",
"text": "Actions are judged by intentions."
}
]
# ----------------- EMBEDDING + FAISS -----------------
@st.cache_resource
def build_index(passages):
model = SentenceTransformer('all-MiniLM-L6-v2')
texts = [p['text'] for p in passages]
embeddings = model.encode(texts)
index = faiss.IndexFlatL2(embeddings.shape[1])
index.add(embeddings)
return model, index, passages
model, index, passages = build_index(quran_data + hadith_data)
def retrieve_passages(query, k=3):
query_vec = model.encode([query])
scores, idxs = index.search(query_vec, k)
return [passages[i] for i in idxs[0]]
# ----------------- TRANSLATION -----------------
@st.cache_resource
def load_translators():
trans_ur = pipeline("translation", model="Helsinki-NLP/opus-mt-en-ur")
trans_ar = pipeline("translation", model="Helsinki-NLP/opus-mt-en-ar")
return trans_ur, trans_ar
translator_ur, translator_ar = load_translators()
def translate(text, lang):
if lang == "Urdu":
return translator_ur(text)[0]['translation_text']
elif lang == "Arabic":
return translator_ar(text)[0]['translation_text']
return text
# ----------------- DAILY VERSES -----------------
def get_random_ayah():
return random.choice(quran_data)
def get_random_hadith():
return random.choice(hadith_data)
# ----------------- STREAMLIT UI -----------------
st.set_page_config(page_title="Noor-e-Hidayat", layout="centered")
st.title("πŸ•ŠοΈ Noor-e-Hidayat – Your Islamic AI Assistant")
lang = st.selectbox("🌐 Choose Language", ["English", "Urdu", "Arabic"])
st.markdown("---")
st.subheader("πŸ” Ask Noor-e-Hidayat")
query = st.text_input("Type your question related to Qur’an, Hadith, or Islamic guidance...")
if query:
results = retrieve_passages(query)
for r in results:
st.markdown(f"πŸ“– **{r['source']}**")
st.write(translate(r['text'], lang))
st.markdown("---")
st.subheader("πŸ“œ Ayah of the Day")
ayah = get_random_ayah()
st.info(f"**{ayah['source']}**\n\n{translate(ayah['text'], lang)}")
st.subheader("πŸ“œ Hadith of the Day")
hadith = get_random_hadith()
st.success(f"**{hadith['source']}**\n\n{translate(hadith['text'], lang)}")
st.markdown("---")
st.caption("βš™οΈ Powered by Transformers, Sentence-BERT, and FAISS β€’ Built with ❀️ using Streamlit")