import os import requests KALEMAT_BASE_URL = "https://api.kalimat.dev/search" FN_NAME = "search_hadith" class SearchHadith: 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 Hadith for relevant narrations. Returns a list of hadith. Multiple hadith may be relevant.", "parameters": { "type": "object", "properties": { "query": { "type": "string", "description": "The topic to search the Hadith for ", }, }, "required": ["query"], }, } def get_fn_name(self): return FN_NAME def run(self, query: str, numResults: int = 5): headers = {"x-api-key": self.api_key} payload = { "query": query, "numResults": numResults, "indexes": '["sunnah_lk"]', "getText": 2, } 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} {response.text}" ) return response.json() def pp_hadith(self, h): en = h["en_text"] grade = h["grade_en"].strip() if grade: grade = f"\nGrade: {grade}\n" src = f"Collection: {h['source_book']} Chapter: {h['chapter_number']} Hadith: {h['hadith_number']} LK id: {h['id']}" result = f"{src}\n{en}\n{grade}" # print(f'Hadith is: {result}') return result def run_as_list(self, query: str, num_results: int = 3): print(f'Searching hadith for "{query}"') results = self.run(query, num_results) return [self.pp_hadith(r) for r in results] def run_as_string(self, query: str, num_results: int = 3): results = self.run(query, num_results) rstring = "\n".join([self.pp_ayah(r) for r in results]) return rstring