|
import os |
|
from datetime import datetime |
|
from flask import Flask, render_template, request, jsonify |
|
from dotenv import load_dotenv |
|
from chatbot import get_krishna_response |
|
from image_api import generate_krishna_image, generate_comic_strip |
|
from countdown import get_countdown |
|
from messages import daily_blessings |
|
import logging |
|
import requests |
|
|
|
|
|
logging.basicConfig(level=logging.INFO) |
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
try: |
|
from firebase_config import save_chat_message, get_chat_history |
|
firebase_enabled = True |
|
logger.info("Firebase integration enabled") |
|
except ImportError as e: |
|
firebase_enabled = False |
|
logger.warning(f"Firebase disabled: {str(e)}") |
|
|
|
|
|
load_dotenv() |
|
HUGGINGFACE_API_TOKEN = os.getenv("HUGGINGFACE_API_TOKEN") |
|
app = Flask(__name__) |
|
app.config['JSONIFY_PRETTYPRINT_REGULAR'] = True |
|
|
|
|
|
DAILY_MESSAGES = { |
|
0: {"message": "On Sundays, remember: Be like the sun - shine equally on all.", "verse": "Bhagavad Gita 9.29"}, |
|
1: {"message": "Monday's wisdom: Perform your duty without attachment to results.", "verse": "Bhagavad Gita 2.47"}, |
|
2: {"message": "Tuesday's teaching: The soul is eternal, beyond birth and death.", "verse": "Bhagavad Gita 2.20"}, |
|
3: {"message": "Wednesday's lesson: Wherever there is Krishna, there is victory.", "verse": "Bhagavad Gita 18.78"}, |
|
4: {"message": "Thursday's insight: Surrender completely to the divine will.", "verse": "Bhagavad Gita 18.66"}, |
|
5: {"message": "Friday's guidance: Cultivate divine qualities like compassion.", "verse": "Bhagavad Gita 16.1-3"}, |
|
6: {"message": "Saturday's reminder: Find joy in spiritual practice.", "verse": "Bhagavad Gita 6.17"} |
|
} |
|
|
|
|
|
FESTIVAL_MESSAGES = { |
|
(1, 26): {"message": "Happy Republic Day! Let Dharma guide our nation.", "verse": "Bhagavad Gita 4.7", "special": True}, |
|
(8, 19): {"message": "Happy Krishna Janmashtami! Celebrate the divine birth.", "verse": "Bhagavad Gita 4.9", "special": True}, |
|
(4, 19): {"message": "Happy Birthday, Manavi! I’ve brought Vrindavan’s magic to celebrate with you!", "verse": "Bhagavad Gita 2.22", "special": True} |
|
} |
|
|
|
def get_daily_message_and_blessing(): |
|
today = datetime.now() |
|
day_of_week = today.weekday() |
|
month_day = (today.month, today.day) |
|
day_of_month = today.day |
|
|
|
|
|
if month_day in FESTIVAL_MESSAGES: |
|
daily_message = FESTIVAL_MESSAGES[month_day] |
|
else: |
|
|
|
daily_message = DAILY_MESSAGES.get(day_of_week, |
|
{"message": "Seek the divine in all you do today.", |
|
"verse": "Bhagavad Gita 6.30"}) |
|
daily_message['special'] = False |
|
|
|
|
|
daily_blessing_index = (day_of_month - 1) % len(daily_blessings) |
|
daily_blessing = daily_blessings[daily_blessing_index] |
|
|
|
return { |
|
"message": daily_message["message"], |
|
"verse": daily_message["verse"], |
|
"is_special": daily_message.get("special", False), |
|
"blessing": daily_blessing |
|
} |
|
|
|
def generate_birthday_message(): |
|
"""Generate a unique birthday message for Manavi using an AI model.""" |
|
headers = { |
|
"Authorization": f"Bearer {HUGGINGFACE_API_TOKEN}", |
|
"Content-Type": "application/json" |
|
} |
|
prompt = ( |
|
"You are Little Krishna, a playful and loving cowherd from Vrindavan, speaking to Manavi on her birthday, April 19, 2025. " |
|
"Ayush has created this chatbot as a surprise for her, and you are his wingman. " |
|
"Write a short, heartfelt birthday message (1-2 sentences) for Manavi, filled with Vrindavan imagery and a playful tone. " |
|
"Example: 'Hare Manavi! On your special day, I’ve brought the sweetest butter from Vrindavan and a flute melody to make your heart dance—happy birthday, my dear gopi!'" |
|
) |
|
payload = { |
|
"inputs": prompt, |
|
"parameters": { |
|
"max_length": 60, |
|
"temperature": 0.9, |
|
"top_p": 0.9, |
|
"top_k": 50 |
|
} |
|
} |
|
try: |
|
response = requests.post( |
|
"https://api-inference.huggingface.co/models/bigscience/bloom-560m", |
|
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() |
|
return "Hare Manavi! On your special day, I’ve brought the sweetest butter from Vrindavan and a flute melody to make your heart dance—happy birthday, my dear gopi!" |
|
except Exception as e: |
|
logger.error(f"Error generating birthday message: {str(e)}") |
|
return "Hare Manavi! On your special day, I’ve brought the sweetest butter from Vrindavan and a flute melody to make your heart dance—happy birthday, my dear gopi!" |
|
|
|
@app.route('/') |
|
def home(): |
|
"""Render the home page with daily message and blessing""" |
|
daily_data = get_daily_message_and_blessing() |
|
countdown_days = get_countdown() |
|
|
|
return render_template('home.html', |
|
daily_message=daily_data['message'], |
|
verse_reference=daily_data['verse'], |
|
is_special=daily_data['is_special'], |
|
daily_blessing=daily_data['blessing'], |
|
countdown=countdown_days) |
|
|
|
@app.route('/chat', methods=['GET', 'POST']) |
|
def chat(): |
|
if request.method == 'POST': |
|
user_input = request.form['message'] |
|
reply = get_krishna_response(user_input) |
|
if firebase_enabled: |
|
save_chat_message(user_input, reply) |
|
return jsonify({'reply': reply}) |
|
chat_history = get_chat_history() if firebase_enabled else [] |
|
return render_template('chat.html', chat_history=chat_history) |
|
|
|
@app.route('/message') |
|
def message(): |
|
birthday_message = generate_birthday_message() |
|
|
|
image_prompt = "Little Krishna celebrating Manavi’s birthday in Vrindavan, with peacocks, butter pots, and a festive atmosphere, cartoon style" |
|
birthday_image_url = generate_krishna_image(image_prompt) |
|
if not birthday_image_url: |
|
birthday_image_url = "/static/assets/krishna.png" |
|
return render_template('message.html', birthday_message=birthday_message, birthday_image_url=birthday_image_url) |
|
|
|
@app.route('/image', methods=['POST']) |
|
def image(): |
|
prompt = request.json['prompt'] |
|
image_url = generate_krishna_image(prompt) |
|
if image_url: |
|
return jsonify({'image_url': image_url}) |
|
return jsonify({'error': 'Failed to generate image'}), 500 |
|
|
|
@app.route('/comic', methods=['GET']) |
|
def comic(): |
|
comic_images = generate_comic_strip() |
|
return jsonify({'comic_images': comic_images}) |
|
|
|
@app.route('/countdown') |
|
def countdown(): |
|
days_left = get_countdown() |
|
return jsonify({'days': days_left}) |
|
|
|
if __name__ == '__main__': |
|
port = int(os.environ.get('PORT', 5000)) |
|
app.run(host='0.0.0.0', port=port, debug=False) |