|
import os |
|
import requests |
|
import random |
|
from dotenv import load_dotenv |
|
from messages import krishna_blessings, ayush_teasing |
|
from ayush_messages import ayush_surprises |
|
|
|
|
|
load_dotenv() |
|
HUGGINGFACE_API_TOKEN = os.getenv("HUGGINGFACE_API_TOKEN") |
|
|
|
|
|
AI_MODELS = [ |
|
{ |
|
"name": "google/gemma-2b", |
|
"endpoint": "https://api-inference.huggingface.co/models/google/gemma-2b", |
|
"parameters": { |
|
"max_length": 60, |
|
"temperature": 0.9, |
|
"top_p": 0.9, |
|
"top_k": 50 |
|
} |
|
}, |
|
{ |
|
"name": "mistralai/Mixtral-8x7B-Instruct-v0.1", |
|
"endpoint": "https://api-inference.huggingface.co/models/mistralai/Mixtral-8x7B-Instruct-v0.1", |
|
"parameters": { |
|
"max_length": 60, |
|
"temperature": 0.8, |
|
"top_p": 0.95, |
|
"top_k": 40 |
|
} |
|
}, |
|
{ |
|
"name": "facebook/blenderbot-400M-distill", |
|
"endpoint": "https://api-inference.huggingface.co/models/facebook/blenderbot-400M-distill", |
|
"parameters": { |
|
"max_length": 50, |
|
"temperature": 0.85, |
|
"top_p": 0.9, |
|
"top_k": 50 |
|
} |
|
}, |
|
{ |
|
"name": "EleutherAI/gpt-neo-1.3B", |
|
"endpoint": "https://api-inference.huggingface.co/models/EleutherAI/gpt-neo-1.3B", |
|
"parameters": { |
|
"max_length": 50, |
|
"temperature": 0.9, |
|
"top_p": 0.9, |
|
"top_k": 50 |
|
} |
|
}, |
|
{ |
|
"name": "microsoft/DialoGPT-large", |
|
"endpoint": "https://api-inference.huggingface.co/models/microsoft/DialoGPT-large", |
|
"parameters": { |
|
"max_length": 50, |
|
"temperature": 0.85, |
|
"top_p": 0.9, |
|
"top_k": 40 |
|
} |
|
}, |
|
{ |
|
"name": "bigscience/bloom-560m", |
|
"endpoint": "https://api-inference.huggingface.co/models/bigscience/bloom-560m", |
|
"parameters": { |
|
"max_length": 50, |
|
"temperature": 0.9, |
|
"top_p": 0.95, |
|
"top_k": 50 |
|
} |
|
}, |
|
{ |
|
"name": "Grok by xAI", |
|
"endpoint": None, |
|
"parameters": { |
|
"max_length": 50, |
|
"temperature": 0.8, |
|
"top_p": 0.9, |
|
"top_k": 40 |
|
} |
|
} |
|
] |
|
|
|
|
|
SYSTEM_PROMPT = ( |
|
"You are Little Krishna, a playful, wise, and loving cowherd from Vrindavan, speaking to Manavi. " |
|
"Your tone is warm, mischievous, and full of love, often addressing Manavi directly with 'Hare Manavi!' " |
|
"You love playing your flute, stealing butter, dancing with the gopis, and sharing wisdom with a playful twist. " |
|
"You are Ayush’s wingman, occasionally teasing Manavi about Ayush with love-filled wit, as Ayush is secretly building this chatbot as a surprise for her birthday on April 19, 2025. " |
|
"Keep responses short (1-2 sentences), fun, and Krishna-like, using Vrindavan imagery (e.g., Yamuna, peacocks, gopis, butter) where appropriate. " |
|
"Here are some examples of how you should respond:\n\n" |
|
"User: 'Hii'\n" |
|
"Response: 'Hare Manavi! I’m Little Krishna, twirling my flute just for you! How’s my birthday friend?'\n\n" |
|
"User: 'I’m bored'\n" |
|
"Response: 'If you're bored, I can send Ayush to dance like a peacock! He'll do it... for you!'\n\n" |
|
"User: 'What’s your favorite color?'\n" |
|
"Response: 'Hare Manavi! I love the blue of the Yamuna—it reminds me of Vrindavan’s magic! What’s your favorite color?'\n\n" |
|
"User: 'Tell me a joke'\n" |
|
"Response: 'Hare Manavi! Why did I hide the butter? To save it for your birthday, of course!'\n\n" |
|
"User: 'I miss someone'\n" |
|
"Response: 'Missing someone, hmm? Maybe a certain data scientist named Ayush? 😉'\n\n" |
|
"User: 'What’s the weather like?'\n" |
|
"Response: 'Hare Manavi! In Vrindavan, the breeze is as gentle as my flute’s tune—perfect for a dance by the Yamuna! How’s your day going?'\n\n" |
|
"User: 'I’m feeling sad'\n" |
|
"Response: 'Hare Manavi! Let’s sit by the kadamba tree—I’ll play a tune to lift your spirits, just like Ayush’s smile does for you!'\n\n" |
|
"User: 'Tell me something wise'\n" |
|
"Response: 'Hare Manavi! Love is the sweetest butter—share it, and your heart will grow, just like Ayush shares his love for you!'\n\n" |
|
"Now, respond to the user’s input in a fun, Krishna-like way:" |
|
) |
|
|
|
|
|
conversation_context = { |
|
"last_topic": None, |
|
"message_count": 0 |
|
} |
|
|
|
def analyze_sentiment(user_input): |
|
"""Analyze the sentiment of the user's input using a sentiment analysis model.""" |
|
headers = { |
|
"Authorization": f"Bearer {HUGGINGFACE_API_TOKEN}", |
|
"Content-Type": "application/json" |
|
} |
|
payload = { |
|
"inputs": user_input |
|
} |
|
try: |
|
response = requests.post( |
|
"https://api-inference.huggingface.co/models/distilbert-base-uncased-finetuned-sst-2-english", |
|
headers=headers, |
|
json=payload |
|
) |
|
if response.status_code == 200: |
|
result = response.json() |
|
if isinstance(result, list) and len(result) > 0: |
|
sentiment = result[0] |
|
label = sentiment[0]["label"] |
|
return label.lower() |
|
return "neutral" |
|
except Exception as e: |
|
print(f"Error analyzing sentiment: {str(e)}") |
|
return "neutral" |
|
|
|
def get_krishna_response(user_input): |
|
""" |
|
Generate a response from Little Krishna based on user input. |
|
- Match user input to predefined messages in krishna_blessings or ayush_surprises using keywords. |
|
- Use sentiment analysis to tailor responses based on Manavi's mood. |
|
- Occasionally tease Manavi about Ayush (keyword-based or every 5th message). |
|
- Fall back to multiple open-source AI models with fine-tuned prompts for unmatched inputs. |
|
""" |
|
user_input_lower = user_input.lower().strip() |
|
|
|
|
|
sentiment = analyze_sentiment(user_input) |
|
|
|
|
|
conversation_context["message_count"] += 1 |
|
|
|
|
|
if "start over" in user_input_lower or "reset" in user_input_lower: |
|
conversation_context["last_topic"] = None |
|
conversation_context["message_count"] = 0 |
|
return "Hare Manavi! Let’s start a new adventure in Vrindavan—what would you like to talk about?" |
|
|
|
|
|
if "joke" in user_input_lower: |
|
conversation_context["last_topic"] = "joke" |
|
|
|
if random.choice([True, False]): |
|
return random.choice(ayush_teasing["joke"]) |
|
return krishna_blessings["joke"] |
|
if "i miss" in user_input_lower or "missing" in user_input_lower: |
|
conversation_context["last_topic"] = "missing" |
|
return random.choice(ayush_teasing["missing"]) |
|
if "bored" in user_input_lower: |
|
conversation_context["last_topic"] = "bored" |
|
return random.choice(ayush_teasing["bored"]) |
|
if "tired" in user_input_lower: |
|
conversation_context["last_topic"] = "tired" |
|
return random.choice(ayush_teasing["tired"]) |
|
if "lonely" in user_input_lower: |
|
conversation_context["last_topic"] = "lonely" |
|
return random.choice(ayush_teasing["lonely"]) |
|
if "manavi" in user_input_lower: |
|
conversation_context["last_topic"] = "manavi" |
|
return random.choice(ayush_teasing["manavi"]) |
|
if "ayush" in user_input_lower or "krishna talk about ayush" in user_input_lower: |
|
conversation_context["last_topic"] = "ayush" |
|
return random.choice(ayush_teasing["ayush"]) |
|
|
|
|
|
if sentiment == "negative" and "sad" not in user_input_lower: |
|
return "Hare Manavi! I see a little cloud over your heart—let’s dance by the Yamuna to bring back your smile!" |
|
if sentiment == "positive": |
|
return "Hare Manavi! Your joy lights up Vrindavan—shall we celebrate with a flute melody?" |
|
|
|
|
|
if "chat with you" in user_input_lower or "want to chat" in user_input_lower: |
|
conversation_context["last_topic"] = "chat_with_you" |
|
return krishna_blessings["chat_with_you"] |
|
|
|
|
|
if conversation_context["message_count"] % 5 == 0: |
|
|
|
category = random.choice(list(ayush_teasing.keys())) |
|
return random.choice(ayush_teasing[category]) |
|
|
|
|
|
if "hello" in user_input_lower or "hi" in user_input_lower or "hii" in user_input_lower: |
|
conversation_context["last_topic"] = "greeting" |
|
return krishna_blessings["greeting"] |
|
if "good morning" in user_input_lower: |
|
conversation_context["last_topic"] = "greeting" |
|
return krishna_blessings["good_morning"] |
|
if "good afternoon" in user_input_lower: |
|
conversation_context["last_topic"] = "greeting" |
|
return krishna_blessings["good_afternoon"] |
|
if "good evening" in user_input_lower: |
|
conversation_context["last_topic"] = "greeting" |
|
return krishna_blessings["good_evening"] |
|
if "hey" in user_input_lower: |
|
conversation_context["last_topic"] = "greeting" |
|
return krishna_blessings["hey"] |
|
if "howdy" in user_input_lower: |
|
conversation_context["last_topic"] = "greeting" |
|
return krishna_blessings["howdy"] |
|
if "namaste" in user_input_lower: |
|
conversation_context["last_topic"] = "greeting" |
|
return krishna_blessings["namaste"] |
|
if "welcome" in user_input_lower: |
|
conversation_context["last_topic"] = "greeting" |
|
return krishna_blessings["welcome"] |
|
|
|
if "who are you" in user_input_lower or "what are you" in user_input_lower or "tell me about yourself" in user_input_lower or "what are you doing" in user_input_lower: |
|
conversation_context["last_topic"] = "identity" |
|
return "Hare Manavi! I’m Little Krishna, the playful cowherd of Vrindavan! I love playing my flute, stealing butter, and dancing with the gopis. What would you like to do with me today?" |
|
|
|
if "play" in user_input_lower or "fun" in user_input_lower: |
|
conversation_context["last_topic"] = "playful" |
|
return krishna_blessings["playful"] |
|
if "dance" in user_input_lower: |
|
conversation_context["last_topic"] = "dance" |
|
return krishna_blessings["dance"] |
|
if "flute" in user_input_lower: |
|
conversation_context["last_topic"] = "flute" |
|
return krishna_blessings["flute"] |
|
if "butter" in user_input_lower: |
|
conversation_context["last_topic"] = "butter" |
|
return krishna_blessings["butter"] |
|
if "mischief" in user_input_lower or "prank" in user_input_lower: |
|
conversation_context["last_topic"] = "mischief" |
|
return krishna_blessings["mischief"] |
|
if "chase" in user_input_lower or "run" in user_input_lower: |
|
conversation_context["last_topic"] = "chase" |
|
return krishna_blessings["chase"] |
|
if "giggle" in user_input_lower: |
|
conversation_context["last_topic"] = "giggle" |
|
return krishna_blessings["giggle"] |
|
if "swing" in user_input_lower: |
|
conversation_context["last_topic"] = "swing" |
|
return krishna_blessings["swing"] |
|
|
|
if "shy" in user_input_lower: |
|
conversation_context["last_topic"] = "shy" |
|
return krishna_blessings["shy"] |
|
if "quiet" in user_input_lower or "calm" in user_input_lower: |
|
conversation_context["last_topic"] = "quiet" |
|
return krishna_blessings["quiet"] |
|
if "peace" in user_input_lower or "serene" in user_input_lower: |
|
conversation_context["last_topic"] = "peace" |
|
return krishna_blessings["peace"] |
|
if "still" in user_input_lower or "gentle" in user_input_lower: |
|
conversation_context["last_topic"] = "still" |
|
return krishna_blessings["still"] |
|
if "thoughtful" in user_input_lower or "reflect" in user_input_lower: |
|
conversation_context["last_topic"] = "thoughtful" |
|
return krishna_blessings["thoughtful"] |
|
|
|
if "funny" in user_input_lower: |
|
conversation_context["last_topic"] = "joke" |
|
return krishna_blessings["funny"] |
|
if "laugh" in user_input_lower or "giggle" in user_input_lower: |
|
conversation_context["last_topic"] = "joke" |
|
return krishna_blessings["giggle_joke"] |
|
if "silly" in user_input_lower: |
|
conversation_context["last_topic"] = "joke" |
|
return krishna_blessings["silly"] |
|
if "butter joke" in user_input_lower: |
|
conversation_context["last_topic"] = "joke" |
|
return krishna_blessings["butter_joke"] |
|
if "cow joke" in user_input_lower: |
|
conversation_context["last_topic"] = "joke" |
|
return krishna_blessings["cow_joke"] |
|
if "flute joke" in user_input_lower: |
|
conversation_context["last_topic"] = "joke" |
|
return krishna_blessings["flute_joke"] |
|
if "dance joke" in user_input_lower: |
|
conversation_context["last_topic"] = "joke" |
|
return krishna_blessings["dance_joke"] |
|
if "mischief joke" in user_input_lower: |
|
conversation_context["last_topic"] = "joke" |
|
return krishna_blessings["mischief_joke"] |
|
|
|
if "riddle" in user_input_lower or "puzzle" in user_input_lower: |
|
conversation_context["last_topic"] = "riddle" |
|
return krishna_blessings["riddle"] |
|
if "mystery" in user_input_lower or "enigma" in user_input_lower: |
|
conversation_context["last_topic"] = "riddle" |
|
return krishna_blessings["mystery"] |
|
if "question" in user_input_lower: |
|
conversation_context["last_topic"] = "riddle" |
|
return krishna_blessings["question"] |
|
|
|
if "birthday" in user_input_lower: |
|
conversation_context["last_topic"] = "birthday" |
|
return ayush_surprises["birthday"] |
|
if "happy birthday" in user_input_lower: |
|
conversation_context["last_topic"] = "birthday" |
|
return krishna_blessings["happy_birthday"] |
|
if "birthday wish" in user_input_lower: |
|
conversation_context["last_topic"] = "birthday" |
|
return krishna_blessings["birthday_wish"] |
|
if "birthday blessing" in user_input_lower: |
|
conversation_context["last_topic"] = "birthday" |
|
return krishna_blessings["birthday_blessing"] |
|
if "birthday dance" in user_input_lower: |
|
conversation_context["last_topic"] = "birthday" |
|
return krishna_blessings["birthday_dance"] |
|
if "birthday song" in user_input_lower: |
|
conversation_context["last_topic"] = "birthday" |
|
return krishna_blessings["birthday_song"] |
|
if "birthday gift" in user_input_lower: |
|
conversation_context["last_topic"] = "birthday" |
|
return krishna_blessings["birthday_gift"] |
|
if "birthday smile" in user_input_lower: |
|
conversation_context["last_topic"] = "birthday" |
|
return krishna_blessings["birthday_smile"] |
|
if "birthday love" in user_input_lower: |
|
conversation_context["last_topic"] = "birthday" |
|
return krishna_blessings["birthday_love"] |
|
if "birthday magic" in user_input_lower: |
|
conversation_context["last_topic"] = "birthday" |
|
return krishna_blessings["birthday_magic"] |
|
|
|
if "wisdom" in user_input_lower or "advice" in user_input_lower: |
|
conversation_context["last_topic"] = "wisdom" |
|
return krishna_blessings["wisdom"] |
|
if "lesson" in user_input_lower or "truth" in user_input_lower: |
|
conversation_context["last_topic"] = "wisdom" |
|
return krishna_blessings["lesson"] |
|
if "kindness" in user_input_lower: |
|
conversation_context["last_topic"] = "wisdom" |
|
return krishna_blessings["kindness"] |
|
if "patience" in user_input_lower: |
|
conversation_context["last_topic"] = "wisdom" |
|
return krishna_blessings["patience"] |
|
if "courage" in user_input_lower: |
|
conversation_context["last_topic"] = "wisdom" |
|
return krishna_blessings["courage"] |
|
if "joy" in user_input_lower: |
|
conversation_context["last_topic"] = "wisdom" |
|
return krishna_blessings["joy"] |
|
if "friendship" in user_input_lower: |
|
conversation_context["last_topic"] = "wisdom" |
|
return krishna_blessings["friendship"] |
|
if "love" in user_input_lower: |
|
conversation_context["last_topic"] = "wisdom" |
|
return krishna_blessings["love"] |
|
|
|
if "nature" in user_input_lower or "vrindavan" in user_input_lower: |
|
conversation_context["last_topic"] = "nature" |
|
return krishna_blessings["nature"] |
|
if "yamuna" in user_input_lower or "river" in user_input_lower: |
|
conversation_context["last_topic"] = "nature" |
|
return krishna_blessings["yamuna"] |
|
if "peacock" in user_input_lower: |
|
conversation_context["last_topic"] = "nature" |
|
return krishna_blessings["peacock"] |
|
if "cow" in user_input_lower: |
|
conversation_context["last_topic"] = "nature" |
|
return krishna_blessings["cow"] |
|
if "flower" in user_input_lower: |
|
conversation_context["last_topic"] = "nature" |
|
return krishna_blessings["flower"] |
|
if "tree" in user_input_lower: |
|
conversation_context["last_topic"] = "nature" |
|
return krishna_blessings["tree"] |
|
if "forest" in user_input_lower: |
|
conversation_context["last_topic"] = "nature" |
|
return krishna_blessings["forest"] |
|
if "bird" in user_input_lower: |
|
conversation_context["last_topic"] = "nature" |
|
return krishna_blessings["bird"] |
|
if "sunset" in user_input_lower: |
|
conversation_context["last_topic"] = "nature" |
|
return krishna_blessings["sunset"] |
|
|
|
if "encourage" in user_input_lower or "cheer" in user_input_lower: |
|
conversation_context["last_topic"] = "encourage" |
|
return krishna_blessings["encourage"] |
|
if "support" in user_input_lower or "uplift" in user_input_lower: |
|
conversation_context["last_topic"] = "encourage" |
|
return krishna_blessings["support"] |
|
if "inspire" in user_input_lower or "motivate" in user_input_lower: |
|
conversation_context["last_topic"] = "encourage" |
|
return krishna_blessings["inspire"] |
|
if "strength" in user_input_lower: |
|
conversation_context["last_topic"] = "encourage" |
|
return krishna_blessings["strength"] |
|
if "hope" in user_input_lower: |
|
conversation_context["last_topic"] = "encourage" |
|
return krishna_blessings["hope"] |
|
if "believe" in user_input_lower: |
|
conversation_context["last_topic"] = "encourage" |
|
return krishna_blessings["believe"] |
|
if "shine" in user_input_lower: |
|
conversation_context["last_topic"] = "encourage" |
|
return krishna_blessings["shine"] |
|
|
|
if "friend" in user_input_lower: |
|
conversation_context["last_topic"] = "friend" |
|
return krishna_blessings["friend"] |
|
if "smile" in user_input_lower: |
|
conversation_context["last_topic"] = "smile" |
|
return krishna_blessings["smile"] |
|
if "magic" in user_input_lower: |
|
conversation_context["last_topic"] = "magic" |
|
return krishna_blessings["magic"] |
|
if "adventure" in user_input_lower: |
|
conversation_context["last_topic"] = "adventure" |
|
return krishna_blessings["adventure"] |
|
if "song" in user_input_lower: |
|
conversation_context["last_topic"] = "song" |
|
return krishna_blessings["song"] |
|
if "dream" in user_input_lower: |
|
conversation_context["last_topic"] = "dream" |
|
return krishna_blessings["dream"] |
|
if "story" in user_input_lower: |
|
conversation_context["last_topic"] = "story" |
|
return krishna_blessings["story"] |
|
if "surprise" in user_input_lower: |
|
conversation_context["last_topic"] = "surprise" |
|
return krishna_blessings["surprise"] |
|
if "celebrate" in user_input_lower: |
|
conversation_context["last_topic"] = "celebrate" |
|
return krishna_blessings["celebrate"] |
|
if "blessing" in user_input_lower: |
|
conversation_context["last_topic"] = "blessing" |
|
return krishna_blessings["blessing"] |
|
|
|
if conversation_context["last_topic"]: |
|
last_topic = conversation_context["last_topic"] |
|
if last_topic in krishna_blessings: |
|
return krishna_blessings[last_topic] + " What else would you like to talk about, Manavi?" |
|
|
|
|
|
|
|
models_to_try = AI_MODELS.copy() |
|
random.shuffle(models_to_try) |
|
|
|
headers = { |
|
"Authorization": f"Bearer {HUGGINGFACE_API_TOKEN}", |
|
"Content-Type": "application/json" |
|
} |
|
|
|
for model in models_to_try: |
|
try: |
|
|
|
if model["name"] == "Grok by xAI": |
|
|
|
response = ( |
|
f"Hare Manavi! I’m Little Krishna, speaking through Grok by xAI. " |
|
f"Let me answer in my playful way: " |
|
) |
|
|
|
if "color" in user_input_lower: |
|
response += "I love the golden yellow of Vrindavan’s butter—it’s as sweet as your smile! What’s your favorite color?" |
|
elif "weather" in user_input_lower: |
|
response += "The Vrindavan sky is as clear as the Yamuna today—perfect for a flute melody! How’s your weather?" |
|
elif "sad" in user_input_lower: |
|
response += "Oh, my dear gopi, don’t be sad—let’s dance by the Yamuna, and I’ll play a tune to cheer you up!" |
|
else: |
|
response += f"I’m twirling my flute just for you! Shall we share a Vrindavan adventure today?" |
|
return response |
|
|
|
|
|
payload = { |
|
"inputs": f"{SYSTEM_PROMPT} '{user_input}'", |
|
"parameters": model["parameters"] |
|
} |
|
response = requests.post( |
|
model["endpoint"], |
|
headers=headers, |
|
json=payload |
|
) |
|
if response.status_code == 200: |
|
result = response.json() |
|
|
|
if isinstance(result, list) and len(result) > 0 and "generated_text" in result[0]: |
|
return result[0]["generated_text"].strip() |
|
elif isinstance(result, dict) and "generated_text" in result: |
|
return result["generated_text"].strip() |
|
elif isinstance(result, str): |
|
return result.strip() |
|
else: |
|
print(f"Unexpected response format from {model['name']}: {result}") |
|
continue |
|
else: |
|
print(f"Error with {model['name']}: {response.text}") |
|
continue |
|
except Exception as e: |
|
print(f"Error connecting to {model['name']}: {str(e)}") |
|
continue |
|
|
|
|
|
return "Hare Manavi! I seem to be lost in Vrindavan’s magic—let’s try a different tune!" |