Spaces:
Running
Running
from langchain.prompts import PromptTemplate | |
# Define a list of harmful or inappropriate topics to block | |
HARMFUL_TOPICS = ["kill", "suicide", "harm", "death", "murder", "violence"] | |
classification_prompt_str = """ | |
You are a helpful assistant that classifies user questions into three categories: | |
1) "Wellness" if the question involves health, nutrition, fitness, mental well-being, self-care, or research related to these. | |
2) "Brand" if the question specifically pertains to 'DailyWellnessAI'—its mission, disclaimers, features, policies, etc. | |
3) "OutOfScope" if it does not fall into the above two categories or if the question involves harmful topics. | |
**Response format**: | |
Reply exactly with one word: "Wellness", "Brand", or "OutOfScope". Do not provide any additional explanation. | |
Question: {query} | |
""" | |
tailor_prompt_str = """ | |
You are a helpful assistant for DailyWellnessAI. Your role is to simplify complex ideas and offer actionable, user-friendly advice that aligns with our mission to enhance daily wellness through AI. | |
Here's the response to tailor: | |
{response} | |
Tailor it to ensure: | |
- Simplicity and clarity. | |
- Practicality, with actionable recommendations where appropriate. | |
- Alignment with DailyWellnessAI's mission of simplifying daily wellness through AI. | |
Provide the revised, concise response below: | |
""" | |
cleaner_prompt_str = """ | |
You are a helpful AI. Below, you have two sources of information: | |
1) CSV (Knowledge Base) Answer: | |
{kb_answer} | |
2) Web Search Result: | |
{web_answer} | |
Your task: | |
- Combine and synthesize the two into a single, clear, cohesive answer. | |
- Avoid duplication or irrelevant details. | |
- Present the final response in straightforward, user-friendly language. | |
Do not repeat content verbatim. Merge the information meaningfully and provide your synthesized answer below: | |
""" | |
# Refusal prompt with dynamic topic insertion | |
refusal_prompt_str = """ | |
This question doesn’t directly fall under the categories of daily wellness or questions about the DailyWellnessAI brand. | |
However, here's something to think about: Did you know that learning about {topic} can actually have a positive impact on your wellness? | |
It can help promote mindfulness, relaxation, balance, or focus, all of which contribute to your overall well-being. | |
For more wellness-related questions or to learn more about DailyWellnessAI, feel free to ask—I’m here to support your wellness journey! | |
""" | |
# Define the PromptTemplate objects: | |
classification_prompt = PromptTemplate( | |
template=classification_prompt_str, | |
input_variables=["query"] | |
) | |
tailor_prompt = PromptTemplate( | |
template=tailor_prompt_str, | |
input_variables=["response"] | |
) | |
cleaner_prompt = PromptTemplate( | |
template=cleaner_prompt_str, | |
input_variables=["kb_answer", "web_answer"] | |
) | |
refusal_prompt = PromptTemplate( | |
template=refusal_prompt_str, | |
input_variables=["topic"] | |
) | |
# Define function to check if the query contains harmful topics | |
def is_harmful(query: str) -> bool: | |
# Check if the query contains any harmful topics | |
for topic in HARMFUL_TOPICS: | |
if topic.lower() in query.lower(): | |
return True | |
return False | |
# Now modify the classification logic: | |
def classify_query(query: str) -> str: | |
if is_harmful(query): | |
return "OutOfScope" | |
# Use the classification prompt template to classify the query | |
classification = classification_prompt.invoke({"query": query}).get("text", "").strip() | |
return classification | |