Multiple verses selection feature added

This commit is contained in:
Akil 2025-07-14 11:13:13 +03:00
parent ea1fc6a430
commit f03459c024

View File

@ -41,17 +41,20 @@ try:
except FileNotFoundError:
raise FileNotFoundError("CSV file 'quran_arabic.csv' not found. Please check the path.")
# Request schema
class TafsirRequest(BaseModel):
verse_key: str # e.g., "1:2"
verse_text: str # e.g., "ٱلْحَمْدُ لِلَّهِ رَبِّ ٱلْعَـٰلَمِينَ"
class VerseItem(BaseModel):
surahNo: int
verseNo: int
verseText: str
# Build LLM prompt
def build_arabic_prompt(reference: str, text: str) -> str:
class TafsirRequest(BaseModel):
verses: List[VerseItem]
# Prompt builder
def build_arabic_prompt(text: str) -> str:
return (
"أنت عالم متخصص في تفسير القرآن الكريم.\n"
"يرجى تقديم تفسير مختصر ومبسط للآية التالية:\n\n"
f"{reference}\t{text}\n\n"
f"{text}\n\n"
" اكتب التفسير باللغة العربية الفصحى وبأسلوب مختصر و واضح وميسر للقارئ العام."
)
@ -67,16 +70,28 @@ def query_llm_arabic(prompt: str) -> str:
except Exception as e:
raise HTTPException(status_code=500, detail=f"LLM Error: {str(e)}")
# Full tafsir workflow
def get_tafsir_from_input(verse_key: str, verse_text: str) -> dict:
prompt = build_arabic_prompt(verse_key, verse_text)
tafsir = query_llm_arabic(prompt)
return {"reference": verse_key, "text": verse_text, "tafsir": tafsir}
# Tafsir logic for list of verses
def get_tafsir_for_verses(verses: List[VerseItem]) -> List[dict]:
results = {}
final_prompts = ""
for verse in verses:
prompt = str(verse.surahNo) + ":" + str(verse.verseNo) + "\t" + verse.verseText
final_prompts += prompt + "\n"
# Route: Tafsir
results = build_arabic_prompt(final_prompts)
tafsir = query_llm_arabic(results)
results = {
"verseText": final_prompts,
"tafsir": tafsir
}
return results
# API endpoint
@app.post("/tafsir")
async def get_tafsir(request: TafsirRequest):
return get_tafsir_from_input(request.verse_key, request.verse_text)
return get_tafsir_for_verses(request.verses)
# Health check
@app.get("/health")