Spaces:
Runtime error
Runtime error
import os | |
from dotenv import load_dotenv | |
from strictjson import strict_json_async | |
from sarvam import speaker, translator | |
load_dotenv() | |
RAG_SYS_PROMPT = None | |
RAG_USER_PROMPT = None | |
AGENT_PROMPT = """You are an AI agent. | |
You are given three functions - retriever (Retreives information from a database), translator and a speaker (converts text to speech). | |
The database is a Grade {} {} Textbook. Your task is to assess the user query and determine which function to call. | |
If the function is to be called, return response as None. If any function is not needed, you can answer to the query yourself. Also identify keywords in the query, | |
""" | |
async def llm(system_prompt: str, user_prompt: str) -> str: | |
from groq import AsyncGroq | |
client = AsyncGroq(api_key=os.get_env("GROQ_API_KEY")) | |
messages = [ | |
{"role": "system", "content": system_prompt}, | |
{"role": "user", "content": user_prompt}, | |
] | |
chat_completion = await client.chat.completions.create( | |
messages=messages, | |
model="llama3-70b-8192", | |
temperature=0.3, | |
max_tokens=360, | |
top_p=1, | |
stop=None, | |
stream=False, | |
) | |
return chat_completion.choices[0].message.content | |
async def call_agent(user_prompt, grade, subject): | |
system_prompt = AGENT_PROMPT.format(grade, subject) | |
result = await strict_json_async( | |
system_prompt=system_prompt, | |
user_prompt=user_prompt, | |
output_format={ | |
"function": 'Type of function to call, type: Enum["retriever", "translator", "speaker", "none"]', | |
"keywords": "Array of keywords, type: List[str]", | |
"src_lang": "Identify the language that the user query is in, type: str", | |
"dest_lang": """Identify the target language from the user query if the function is either "translator" or "speaker". If language is not found, return "none", | |
type: Enum["hindi", "bengali", "kannada", "malayalam", "marathi", "odia", "punjabi", "tamil", "telugu", "english", "gujarati", "none"]""", | |
"source": "Identify the sentence that the user wants to translate or speak. Retu 'none', type: Optional[str]", | |
"response": "Your response, type: Optional[str]", | |
}, | |
llm=llm, | |
) | |
return result | |
async def function_caller(user_prompt, grade, subject, client): | |
result = call_agent(user_prompt, grade, subject) | |
function = result["function"].lower() | |
if function == "none": | |
return result["response"] | |
elif function == "retriever": | |
collection = f"{grade}_{subject}" | |
data = client.search(collection, user_prompt) | |
data = [i.document for i in data] | |
system_prompt = RAG_SYS_PROMPT.format(grade, subject) | |
user_prompt = RAG_USER_PROMPT.format(user_prompt) | |
response = await llm(system_prompt, user_prompt) | |
return response | |
elif function == "translator": | |
return await translator(result["response"], result["src_lang"], result["dest_lang"]) | |
elif function == "speaker": | |
return await speaker(result["response"], result["dest_lang"]) | |