Spaces:
Sleeping
Sleeping
import random | |
import re | |
from huggingface_hub import InferenceClient | |
# Initialize the InferenceClient with your Hugging Face API token | |
client = InferenceClient( | |
model="HuggingFaceH4/zephyr-7b-beta", # Specify your model here | |
token="your_huggingface_api_token" # Replace with your actual token | |
) | |
# Multilingual greetings dictionary | |
greetings = { | |
"en": ["hello", "hi", "hey", "good morning", "good afternoon", "good evening"], | |
"fr": ["bonjour", "salut", "coucou", "bonsoir"], | |
"am": ["ሰላም", "ሰላም እንደምን", "እንዴት"] | |
} | |
def is_greeting(query: str, lang: str) -> bool: | |
""" | |
Check if the user's query is a greeting in the specified language. | |
""" | |
greet_list = greetings.get(lang, greetings["en"]) | |
# Convert to lowercase for non-Amharic languages | |
if lang != "am": | |
query = query.lower() | |
return any(query.startswith(greet) for greet in greet_list) | |
def generate_dynamic_out_of_scope_message(language: str) -> str: | |
""" | |
Generate a dynamic out-of-scope message using the Hugging Face Inference API. | |
""" | |
# Define language-specific system prompts | |
system_prompts = { | |
"en": ( | |
"You are a helpful chatbot specializing in agriculture and agro-investment. " | |
"A user has asked a question unrelated to these topics. " | |
"Generate a friendly and intelligent out-of-scope response in English, encouraging the user to ask about agriculture or agro-investment." | |
), | |
"fr": ( | |
"Vous êtes un chatbot utile spécialisé dans l'agriculture et les investissements agroalimentaires. " | |
"Un utilisateur a posé une question sans rapport avec ces sujets. " | |
"Générez une réponse amicale et intelligente en français, encourageant l'utilisateur à poser des questions sur l'agriculture ou les investissements agroalimentaires." | |
), | |
"am": ( | |
"እርስዎ በግብርናና በአገልግሎት ስርዓተ-ቢዝነስ ውስጥ የሚሰራ እገዛ የሚሰጥ ቻትቦት ነው። " | |
"ተጠቃሚው ከእነዚህ ጉዳዮች ውጪ ጥያቄ አቀርቧል። " | |
"በአማርኛ የተሰጠ የውጭ ክፍል ምላሽ ይፍጠሩ፣ ተጠቃሚውን ለግብርና ወይም ለአገልግሎት ስርዓተ-ቢዝነስ ጥያቄዎች ለመጠየቅ ያበረታታ።" | |
) | |
} | |
prompt = system_prompts.get(language, system_prompts["en"]) | |
messages = [{"role": "system", "content": prompt}] | |
# Call the model to generate the response | |
response = client.chat_completion( | |
messages, | |
max_tokens=80, | |
temperature=0.7, | |
top_p=0.95, | |
) | |
# Extract the generated message content | |
try: | |
out_message = response.choices[0].message.content | |
except AttributeError: | |
out_message = str(response) | |
return out_message.strip() | |
def is_domain_query(query: str) -> bool: | |
""" | |
Determine if the query is related to agriculture or agro-investment. | |
""" | |
domain_keywords = [ | |
"agriculture", "farming", "crop", "agro", "investment", "soil", | |
"irrigation", "harvest", "organic", "sustainable", "agribusiness", | |
"livestock", "agroalimentaire", "agriculture durable" | |
] | |
return any(re.search(r"\b" + keyword + r"\b", query, re.IGNORECASE) for keyword in domain_keywords) | |
def handle_user_query(query: str, lang: str = "en") -> str: | |
""" | |
Process the user's query and provide an appropriate response. | |
""" | |
if is_greeting(query, lang): | |
return random.choice(greetings.get(lang, greetings["en"])).capitalize() + "!" | |
elif is_domain_query(query): | |
# Here you would integrate your domain-specific response generation | |
return "This is a domain-specific question. Processing accordingly..." | |
else: | |
return generate_dynamic_out_of_scope_message(lang) | |
# Example usage | |
user_query = "Tell me about space travel." | |
response = handle_user_query(user_query, lang="en") | |
print(response) |