|
import requests |
|
|
|
KALEMAT_BASE_URL = "https://api.kalimat.dev/search" |
|
FN_NAME = "search_quran" |
|
|
|
|
|
class SearchQuran: |
|
|
|
def __init__(self, kalimat_api_key): |
|
self.api_key = kalimat_api_key |
|
self.base_url = KALEMAT_BASE_URL |
|
|
|
def get_function_description(self): |
|
return { |
|
"name": FN_NAME, |
|
"description": "Search the Qur'an for relevant verses. Returns a list of verses. Multiple verses may be relevant.", |
|
"parameters": { |
|
"type": "object", |
|
"properties": { |
|
"query": { |
|
"type": "string", |
|
"description": "The topic to search the Qur'an for ", |
|
}, |
|
}, |
|
"required": ["query"], |
|
}, |
|
} |
|
|
|
def get_fn_name(self): |
|
return FN_NAME |
|
|
|
def run(self, query: str, num_results: int = 5): |
|
|
|
headers = {"x-api-key": self.api_key} |
|
payload = { |
|
"query": query, |
|
"numResults": num_results, |
|
"getText": 1, |
|
} |
|
|
|
response = requests.get(self.base_url, headers=headers, params=payload) |
|
|
|
if response.status_code != 200: |
|
raise Exception(f"Request failed with status {response.status_code}") |
|
|
|
return response.json() |
|
|
|
def pp_ayah(self, ayah): |
|
ayah_num = ayah["id"] |
|
ayah_ar = "Not retrieved" |
|
if "text" in ayah: |
|
ayah_ar = ayah["text"] |
|
ayah_en = "Not retrieved" |
|
if "en_text" in ayah: |
|
ayah_en = ayah["en_text"] |
|
result = ( |
|
f"Ayah: {ayah_num}\nArabic Text: {ayah_ar}\n\nEnglish Text: {ayah_en}\n\n" |
|
) |
|
return result |
|
|
|
def run_as_list(self, query: str, num_results: int = 10): |
|
print(f'Searching quran for "{query}"') |
|
results = self.run(query, num_results) |
|
return [self.pp_ayah(r) for r in results] |
|
|
|
def run_as_string(self, query: str, num_results: int = 10, getText: int = 1): |
|
results = self.run(query, num_results, getText) |
|
rstring = "\n".join([self.pp_ayah(r) for r in results]) |
|
return rstring |
|
|