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