|
import os |
|
import aiohttp |
|
from dotenv import load_dotenv |
|
|
|
load_dotenv() |
|
|
|
async def query_rag_api(question): |
|
""" |
|
Asynchronously query the RAG API for answer and contexts. |
|
|
|
Args: |
|
question (str): The user's question. |
|
|
|
Returns: |
|
dict: Answer, contexts, or error message. |
|
|
|
Note: |
|
Replace API_ENDPOINT with the actual endpoint of your Hugging Face Space |
|
(e.g., https://<your-space-id>.hf.space/ask) after deployment. |
|
""" |
|
|
|
API_ENDPOINT = "https://huggingface.co/spaces/samim2024/testing:8000/ask" |
|
api_key = os.getenv("HUGGINGFACEHUB_API_TOKEN") |
|
|
|
if not api_key: |
|
return {"error": "HUGGINGFACEHUB_API_TOKEN not set", "answer": "", "contexts": []} |
|
|
|
headers = {"Content-Type": "application/json"} |
|
payload = {"question": question} |
|
|
|
try: |
|
async with aiohttp.ClientSession() as session: |
|
async with session.post( |
|
API_ENDPOINT, |
|
json=payload, |
|
headers=headers, |
|
timeout=10 |
|
) as response: |
|
response_dict = await response.json() |
|
if response_dict.get("error"): |
|
return {"error": response_dict["error"], "answer": "", "contexts": []} |
|
return { |
|
"answer": response_dict.get("answer", ""), |
|
"contexts": response_dict.get("contexts", []) |
|
} |
|
except Exception as e: |
|
return {"error": f"API call failed: {str(e)}", "answer": "", "contexts": []} |