""" Concept: Flask + HTML Integration - Spiritual Path Assessment Tool This app helps users discover which religious or spiritual path aligns with their beliefs, values, lifestyle, and background through an interactive questionnaire. """ from flask import Flask, render_template, request, jsonify, session, redirect, url_for import json import os import warnings from dotenv import load_dotenv import together # Updated import warnings.filterwarnings("ignore") load_dotenv() app = Flask(__name__) app.secret_key = 'spiritual-journey-finder-2024' # File to store user data USERS_FILE = 'users_data.json' # Together API for chatbot TOGETHER_API_KEY = os.getenv("TOGETHER_API_KEY") together.api_key = TOGETHER_API_KEY client = together if TOGETHER_API_KEY else None # Assessment Questions QUESTIONS = [ # ... keep all your questions exactly as before ... ] # Religion Descriptions RELIGIONS = { # ... keep all your religions exactly as before ... } def load_users(): if os.path.exists(USERS_FILE): with open(USERS_FILE, 'r') as f: return json.load(f) return {} def save_users(users): with open(USERS_FILE, 'w') as f: json.dump(users, f, indent=2) def calculate_results(answers): scores = {} for answer in answers: question = next((q for q in QUESTIONS if q["id"] == answer["question_id"]), None) if question and answer["answer"] in question["options"]: points = question["options"][answer["answer"]] for religion, score in points.items(): scores[religion] = scores.get(religion, 0) + score sorted_scores = sorted(scores.items(), key=lambda x: x[1], reverse=True) recommendations = [] for religion_key, score in sorted_scores[:3]: if religion_key in RELIGIONS: religion_info = RELIGIONS[religion_key].copy() religion_info["score"] = score religion_info["percentage"] = round((score / (len(answers) * 3)) * 100) recommendations.append(religion_info) return recommendations # --- Flask routes (login, signup, home, logout, assessment routes) --- # Keep all your existing routes unchanged @app.route("/chat", methods=["POST"]) def chat(): if 'username' not in session: return jsonify({"success": False, "message": "Not logged in"}) if not client: return jsonify({"success": False, "message": "Chat service not configured. Please set TOGETHER_API_KEY."}) data = request.json user_message = data.get('message', '').strip() religion_name = data.get('religion', '') chat_history = data.get('history', []) if not user_message or not religion_name: return jsonify({"success": False, "message": "Message and religion required"}) # Find religion details religion_data = None for key, value in RELIGIONS.items(): if value['name'] == religion_name: religion_data = value break if not religion_data: return jsonify({"success": False, "message": "Religion not found"}) # Create context-aware system prompt system_prompt = f"""You're a spiritual guide for {religion_data['name']}. Info: {religion_data['description']} | Practices: {religion_data['practices']} | Beliefs: {religion_data['core_beliefs']} Rules: Keep 30-50 words, be respectful, use * for bullet points (format: "Text: * item * item"), answer directly.""" messages = [{"role": "system", "content": system_prompt}] for msg in chat_history[-5:]: messages.append({"role": msg["role"], "content": msg["content"]}) messages.append({"role": "user", "content": user_message}) try: response = together.chat.completions.create( model="meta-llama/Meta-Llama-3-8B-Instruct-Lite", messages=messages, max_tokens=80, temperature=0.7, ) bot_response = response.output[0].content[0].text # ✅ Correctly indented return jsonify({ "success": True, "response": bot_response }) except Exception as e: return jsonify({ "success": False, "message": f"Chat error: {str(e)}" }) if __name__ == "__main__": app.run(debug=True, port=5001)