{"repo": "anusurisanthosh/ai-based-marks-prediction", "files": {"app.py": {"a9240f23b2842d04e4c80e8b8a882eca247ce857": {"t": 1785747501.6460605, "n": 35437, "h": "3110dbb70fe2b38b", "c": "from flask import Flask, request, jsonify, session\r\nfrom flask_cors import CORS\r\nimport numpy as np\r\nimport pickle\r\nfrom datetime import datetime, timedelta\r\nimport hashlib\r\nimport re\r\nfrom collections import defaultdict\r\nimport json\r\nimport os\r\nfrom openai import OpenAI\r\n\r\napp = Flask(__name__)\r\napp.secret_key = 'sk-d529a94cef32444ca243bc2385dad5c5' # Required for session\r\nCORS(app)\r\n\r\n# DeepSeek API Integration - Add this block after imports and before app = Flask(__name__)\r\n\r\n# Initialize DeepSeek Client\r\nDEEPSEEK_API_KEY = \"your-deepseek-api-key-here\" # Replace with your actual API key\r\ndeepseek_client = OpenAI(\r\n api_key=DEEPSEEK_API_KEY,\r\n base_url=\"https://api.deepseek.com\"\r\n)\r\n\r\n# DeepSeek AI Features\r\nclass DeepSeekAI:\r\n @staticmethod\r\n def get_study_advice(student_data):\r\n \"\"\"Generate personalized study advice using DeepSeek\"\"\"\r\n try:\r\n response = deepseek_client.chat.completions.create(\r\n model=\"deepseek-chat\",\r\n messages=[\r\n {\"role\": \"system\", \"content\": \"You are an expert educational advisor. Provide concise, actionable study advice.\"},\r\n {\"role\": \"user\", \"content\": f\"Student has {student_data['marks']}% marks, studies {student_data['hours']} hours/day, weak in {', '.join(student_data.get('weak_subjects', ['general']))}. Give 3 specific tips.\"}\r\n ],\r\n temperature=0.7,\r\n max_tokens=300\r\n )\r\n return response.choices[0].message.content\r\n except Exception as e:\r\n return f\"AI advice temporarily unavailable. Error: {str(e)}\"\r\n \r\n @staticmethod\r\n def explain_topic(topic, complexity=\"medium\"):\r\n \"\"\"Explain any educational topic using DeepSeek\"\"\"\r\n try:\r\n response = deepseek_client.chat.completions.create(\r\n model=\"deepseek-chat\",\r\n messages=[\r\n {\"role\": \"system\", \"content\": f\"You are a teacher explaining concepts at {complexity} difficulty level.\"},\r\n {\"role\": \"user\", \"content\": f\"Explain {topic} in simple terms with examples.\"}\r\n ],\r\n temperature=0.5,\r\n max_tokens=400\r\n )\r\n return response.choices[0].message.content\r\n except Exception as e:\r\n return f\"Unable to explain topic. Error: {str(e)}\"\r\n \r\n @staticmethod\r\n def generate_mock_questions(subject, topic, num_questions=5):\r\n \"\"\"Generate practice questions using DeepSeek\"\"\"\r\n try:\r\n response = deepseek_client.chat.completions.create(\r\n model=\"deepseek-chat\",\r\n messages=[\r\n {\"role\": \"system\", \"content\": \"You are an exam paper creator. Generate relevant practice questions.\"},\r\n {\"role\": \"user\", \"content\": f\"Generate {num_questions} practice questions for {subject} - {topic}. Include answers.\"}\r\n ],\r\n temperature=0.8,\r\n max_tokens=600\r\n )\r\n return response.choices[0].message.content\r\n except Exception as e:\r\n return f\"Unable to generate questions. Error: {str(e)}\"\r\n\r\n# DeepSeek API Routes - Add these BEFORE your existing routes\r\n\r\n@app.route('/deepseek/advice', methods=['POST'])\r\ndef deepseek_advice():\r\n data = request.get_json()\r\n advice = DeepSeekAI.get_study_advice({\r\n 'marks': data.get('marks', 70),\r\n 'hours': data.get('study_hours', 3),\r\n 'weak_subjects': data.get('weak_subjects', [])\r\n })\r\n return jsonify({\"ai_advice\": advice})\r\n\r\n@app.route('/deepseek/explain', methods=['POST'])\r\ndef deepseek_explain():\r\n data = request.get_json()\r\n explanation = DeepSeekAI.explain_topic(data['topic'], data.get('complexity', 'medium'))\r\n return jsonify({\"explanation\": explanation})\r\n\r\n@app.route('/deepseek/questions', methods=['POST'])\r\ndef deepseek_questions():\r\n data = request.get_json()\r\n questions = DeepSeekAI.generate_mock_questions(data['subject'], data['topic'], data.get('count', 5))\r\n return jsonify({\"questions\": questions})\r\n\r\nmodel = pickle.load(open(\"model.pkl\", \"rb\"))\r\n# In-memory storage (replace with database in production)\r\nstudent_data = {}\r\nstudy_plans = {}\r\nperformance_history = defaultdict(list)\r\nstudy_sessions = defaultdict(list)\r\nlearning_resources = {}\r\npeer_groups = defaultdict(list)\r\nnotifications = defaultdict(list)\r\n\r\nclass StudentAnalytics:\r\n @staticmethod\r\n def calculate_improvement_rate(student_id):\r\n \"\"\"Track student's improvement over time\"\"\"\r\n history = performance_history[student_id]\r\n if len(history) < 2:\r\n return 0\r\n improvements = []\r\n for i in range(1, len(history)):\r\n improvement = history[i]['marks'] - history[i-1]['marks']\r\n improvements.append(improvement)\r\n return np.mean(improvements)\r\n \r\n @staticmethod\r\n def predict_risk_level(marks, attendance):\r\n \"\"\"Predict if student is at risk of failing\"\"\"\r\n if marks < 35 and attendance < 60:\r\n return \"High Risk - Immediate Intervention Needed\"\r\n elif marks < 45 or attendance < 70:\r\n return \"Medium Risk - Needs Attention\"\r\n elif marks < 60:\r\n return \"Low Risk - On Track\"\r\n else:\r\n return \"Good Standing - Excellent Performance\"\r\n\r\n@app.route('/predict', methods=['POST'])\r\ndef predict():\r\n data = request.get_json()\r\n \r\n # Advanced feature 1: Comprehensive prediction with confidence score\r\n features = np.array([[\r\n data['hours_studied'],\r\n data['previous_marks'],\r\n data['attendance']\r\n ]])\r\n \r\n prediction = model.predict(features)[0]\r\n \r\n # Add confidence interval (simulated - would need model's uncertainty)\r\n confidence = min(95, 70 + (data['attendance'] * 0.3) + (data['hours_studied'] * 2))\r\n \r\n # Calculate required improvement\r\n target_marks = data.get('target_marks', 75)\r\n required_improvement = max(0, target_marks - prediction)\r\n \r\n return jsonify({\r\n \"predicted_marks\": float(prediction),\r\n \"confidence_score\": f\"{confidence:.1f}%\",\r\n \"required_hours_to_improve\": f\"{required_improvement / 2:.1f} hours\",\r\n \"risk_level\": StudentAnalytics.predict_risk_level(prediction, data['attendance'])\r\n })\r\n\r\n@app.route('/generate_study_plan', methods=['POST'])\r\ndef generate_study_plan():\r\n data = request.get_json()\r\n student_id = data['student_id']\r\n \r\n current_marks = data['current_marks']\r\n target_marks = data['target_marks']\r\n days_until_exam = data['days_until_exam']\r\n weak_subjects = data.get('weak_subjects', [])\r\n \r\n # Calculate required improvement\r\n marks_gap = target_marks - current_marks\r\n \r\n # More realistic study hours calculation\r\n if marks_gap <= 0:\r\n required_hours = 5 # Maintenance mode\r\n elif marks_gap <= 10:\r\n required_hours = 15\r\n elif marks_gap <= 20:\r\n required_hours = 30\r\n elif marks_gap <= 30:\r\n required_hours = 50\r\n else:\r\n required_hours = 70\r\n \r\n # Daily hours with minimum 1 hour, maximum 6 hours\r\n daily_hours = max(1, min(6, required_hours / max(1, days_until_exam)))\r\n \r\n # Create detailed, useful schedule\r\n schedule = []\r\n study_methods = [\r\n \"šŸ“– Read theory and make notes\",\r\n \"āœļø Practice problems from textbooks\",\r\n \"šŸŽÆ Take topic-wise quizzes\",\r\n \"šŸ“ Solve previous year papers\",\r\n \"šŸ‘„ Group study and discussion\",\r\n \"šŸŽ„ Watch video tutorials\",\r\n \"šŸ“Š Create mind maps and summaries\",\r\n \"⚔ Speed practice with timer\"\r\n ]\r\n \r\n topics_by_day = {\r\n 0: [\"Fundamentals & Basics\", \"Core Concepts\"],\r\n 1: [\"Problem Solving\", \"Application-based questions\"],\r\n 2: [\"Complex Problems\", \"Case Studies\"],\r\n 3: [\"Revision & Practice Tests\", \"Weak Areas Focus\"],\r\n 4: [\"Advanced Topics\", \"Time Management Practice\"],\r\n 5: [\"Full Length Mock Test\", \"Error Analysis\"],\r\n 6: [\"Quick Revision\", \"Final Touches\"]\r\n }\r\n \r\n for day in range(min(14, days_until_exam)): # Show 14 days plan\r\n # Distribute weak subjects across days\r\n focus_subjects = []\r\n if weak_subjects:\r\n subject_idx = day % len(weak_subjects)\r\n focus_subjects = [weak_subjects[subject_idx]]\r\n if day % 3 == 0 and len(weak_subjects) > 1:\r\n focus_subjects.append(weak_subjects[(subject_idx + 1) % len(weak_subjects)])\r\n else:\r\n focus_subjects = [\"Complete Syllabus Review\"]\r\n \r\n # Morning, afternoon, evening split\r\n morning_hours = round(daily_hours * 0.4, 1)\r\n afternoon_hours = round(daily_hours * 0.3, 1)\r\n evening_hours = round(daily_hours * 0.3, 1)\r\n \r\n day_plan = {\r\n \"day\": day + 1,\r\n \"total_hours\": round(daily_hours, 1),\r\n \"schedule\": {\r\n \"morning\": {\r\n \"hours\": morning_hours,\r\n \"task\": f\"Study {focus_subjects[0]} - {study_methods[day % len(study_methods)]}\",\r\n \"best_time\": \"7:00 AM - 9:00 AM (Peak focus hours)\"\r\n },\r\n \"afternoon\": {\r\n \"hours\": afternoon_hours,\r\n \"task\": f\"Practice {focus_subjects[0]} problems & revision\",\r\n \"best_time\": \"2:00 PM - 4:00 PM\"\r\n },\r\n \"evening\": {\r\n \"hours\": evening_hours,\r\n \"task\": f\"Review weak concepts & take mini test\" if day % 2 == 0 else f\"Group study/Doubt clearing\",\r\n \"best_time\": \"6:00 PM - 8:00 PM\"\r\n }\r\n },\r\n \"study_technique\": study_methods[day % len(study_methods)],\r\n \"daily_goal\": f\"Master {focus_subjects[0]} topic {((day // len(weak_subjects)) + 1) if weak_subjects else day + 1}\",\r\n \"break_schedule\": \"25 min study → 5 min break (Pomodoro technique)\",\r\n \"practice_test\": day in [3, 7, 11] # Practice test every 4th day\r\n }\r\n \r\n # Add mock test on specific days\r\n if day in [5, 10, 13] and days_until_exam > 7:\r\n day_plan[\"mock_test\"] = {\r\n \"time\": \"10:00 AM - 1:00 PM\",\r\n \"duration\": \"3 hours\",\r\n \"focus\": \"Full syllabus simulation\"\r\n }\r\n \r\n schedule.append(day_plan)\r\n \r\n # Calculate weekly targets\r\n weekly_hours = daily_hours * 7\r\n expected_improvement = min(marks_gap, daily_hours * 2.5) # 2.5 marks improvement per daily hour\r\n \r\n # Generate motivational message based on effort\r\n if daily_hours >= 4:\r\n motivation = f\"šŸ”„ Intensive schedule! Study {daily_hours} hours daily. Take care of your health and take regular breaks!\"\r\n elif daily_hours >= 2:\r\n motivation = f\"šŸ’Ŗ Good pace! {daily_hours} hours daily is achievable. Consistency is key to success!\"\r\n else:\r\n motivation = f\"šŸ“š Light schedule - {daily_hours} hours daily. Stay consistent and gradually increase study time!\"\r\n \r\n study_plans[student_id] = {\r\n \"generated_date\": datetime.now().isoformat(),\r\n \"target_marks\": target_marks,\r\n \"current_marks\": current_marks,\r\n \"days_until_exam\": days_until_exam,\r\n \"daily_hours\": round(daily_hours, 1),\r\n \"weekly_hours\": round(weekly_hours, 1),\r\n \"expected_improvement\": round(expected_improvement, 1),\r\n \"weak_subjects_focus\": weak_subjects,\r\n \"schedule\": schedule\r\n }\r\n \r\n # Create summary\r\n summary = f\"\"\"\r\n šŸ“Š STUDY PLAN SUMMARY:\r\n • Daily study time: {round(daily_hours, 1)} hours\r\n • Weekly commitment: {round(weekly_hours, 1)} hours\r\n • Expected improvement: +{round(expected_improvement, 1)} marks\r\n • Focus subjects: {', '.join(weak_subjects) if weak_subjects else 'Complete syllabus'}\r\n \r\n šŸŽÆ RECOMMENDED ROUTINE:\r\n šŸŒ… Morning ({round(daily_hours * 0.4, 1)}h): New concepts & theory\r\n ā˜€ļø Afternoon ({round(daily_hours * 0.3, 1)}h): Practice problems\r\n šŸŒ™ Evening ({round(daily_hours * 0.3, 1)}h): Revision & tests\r\n \r\n šŸ’” TIPS FOR SUCCESS:\r\n • Use Pomodoro technique (25 min study + 5 min break)\r\n • Take a 15 min break after every 2 hours\r\n • Stay hydrated and get 7-8 hours of sleep\r\n • Review what you studied before sleeping\r\n \"\"\"\r\n \r\n return jsonify({\r\n \"study_plan\": study_plans[student_id],\r\n \"daily_hours\": round(daily_hours, 1),\r\n \"weekly_hours\": round(weekly_hours, 1),\r\n \"motivational_message\": motivation,\r\n \"detailed_summary\": summary,\r\n \"success_prediction\": \"High\" if daily_hours >= 3 and days_until_exam >= 14 else \"Medium\" if daily_hours >= 2 else \"Needs more effort\"\r\n })\r\n# Advanced feature 3: Peer Comparison & Ranking\r\n@app.route('/peer_comparison', methods=['POST'])\r\ndef peer_comparison():\r\n data = request.get_json()\r\n student_id = data['student_id']\r\n current_marks = data['current_marks']\r\n \r\n # Simulate peer data (in real app, fetch from database)\r\n peer_average = 65\r\n peer_top = 92\r\n peer_bottom = 34\r\n \r\n percentile = min(99, max(1, (current_marks - peer_bottom) / (peer_top - peer_bottom) * 100))\r\n \r\n return jsonify({\r\n \"your_marks\": current_marks,\r\n \"class_average\": peer_average,\r\n \"top_performer\": peer_top,\r\n \"your_percentile\": f\"{percentile:.1f}th\",\r\n \"rank\": f\"Top {100 - percentile:.0f}%\" if percentile > 50 else f\"Bottom {percentile:.0f}%\",\r\n \"gap_to_average\": peer_average - current_marks,\r\n \"gap_to_top\": peer_top - current_marks\r\n })\r\n\r\n# Advanced feature 4: Smart Notifications & Reminders\r\n@app.route('/set_reminder', methods=['POST'])\r\ndef set_reminder():\r\n data = request.get_json()\r\n student_id = data['student_id']\r\n reminder_type = data['type'] # 'study', 'break', 'exam', 'assignment'\r\n reminder_time = data['time'] # ISO format datetime\r\n \r\n notifications[student_id].append({\r\n \"id\": hashlib.md5(f\"{student_id}{reminder_time}\".encode()).hexdigest()[:8],\r\n \"type\": reminder_type,\r\n \"time\": reminder_time,\r\n \"message\": data.get('message', f\"Time for {reminder_type}!\"),\r\n \"created_at\": datetime.now().isoformat(),\r\n \"status\": \"pending\"\r\n })\r\n \r\n return jsonify({\r\n \"status\": \"reminder_set\",\r\n \"reminder_id\": notifications[student_id][-1]['id'],\r\n \"message\": \"Reminder set successfully! You'll be notified at the specified time.\"\r\n })\r\n\r\n@app.route('/get_notifications/', methods=['GET'])\r\ndef get_notifications(student_id):\r\n pending = [n for n in notifications[student_id] if n['status'] == 'pending']\r\n return jsonify({\r\n \"notifications\": pending,\r\n \"unread_count\": len(pending)\r\n })\r\n\r\n# Advanced feature 5: Performance Analytics Dashboard\r\n@app.route('/performance_analytics', methods=['POST'])\r\ndef performance_analytics():\r\n data = request.get_json()\r\n student_id = data['student_id']\r\n \r\n history = performance_history[student_id]\r\n \r\n if len(history) < 2:\r\n return jsonify({\"message\": \"Not enough data for analytics. Take more tests!\"})\r\n \r\n marks_trend = [h['marks'] for h in history]\r\n improvement_rate = StudentAnalytics.calculate_improvement_rate(student_id)\r\n \r\n # Calculate consistency score\r\n consistency = 100 - (np.std(marks_trend) / np.mean(marks_trend) * 100)\r\n \r\n # Predict future performance\r\n recent_trend = marks_trend[-3:] if len(marks_trend) >= 3 else marks_trend\r\n predicted_next = np.mean(recent_trend) + improvement_rate\r\n \r\n return jsonify({\r\n \"performance_trend\": marks_trend,\r\n \"improvement_rate\": f\"{improvement_rate:+.1f} marks per test\",\r\n \"consistency_score\": f\"{consistency:.1f}%\",\r\n \"best_performance\": max(marks_trend),\r\n \"worst_performance\": min(marks_trend),\r\n \"predicted_next_score\": min(100, max(0, predicted_next)),\r\n \"trend_direction\": \"šŸ“ˆ Improving\" if improvement_rate > 0 else \"šŸ“‰ Declining\" if improvement_rate < 0 else \"āž”ļø Stable\"\r\n })\r\n\r\n# Advanced feature 6: Smart Resource Recommendation\r\n@app.route('/recommend_resources', methods=['POST'])\r\ndef recommend_resources():\r\n data = request.get_json()\r\n marks = data['marks']\r\n weak_areas = data.get('weak_areas', [])\r\n \r\n resources = {\r\n \"beginner\": [\r\n {\"title\": \"Basic Concepts - Video Series\", \"type\": \"video\", \"duration\": \"2 hours\", \"link\": \"#\"},\r\n {\"title\": \"Practice Problems - Easy Level\", \"type\": \"practice\", \"difficulty\": \"easy\", \"link\": \"#\"},\r\n {\"title\": \"Study Guide for Beginners\", \"type\": \"pdf\", \"pages\": 20, \"link\": \"#\"}\r\n ],\r\n \"intermediate\": [\r\n {\"title\": \"Advanced Problem Solving\", \"type\": \"video\", \"duration\": \"3 hours\", \"link\": \"#\"},\r\n {\"title\": \"Mock Tests - Medium Difficulty\", \"type\": \"practice\", \"difficulty\": \"medium\", \"link\": \"#\"},\r\n {\"title\": \"Concept Deep Dive\", \"type\": \"article\", \"read_time\": \"30 min\", \"link\": \"#\"}\r\n ],\r\n \"advanced\": [\r\n {\"title\": \"Expert Level Challenges\", \"type\": \"practice\", \"difficulty\": \"hard\", \"link\": \"#\"},\r\n {\"title\": \"Previous Year Papers\", \"type\": \"test\", \"questions\": 100, \"link\": \"#\"},\r\n {\"title\": \"Quick Revision Notes\", \"type\": \"pdf\", \"pages\": 10, \"link\": \"#\"}\r\n ]\r\n }\r\n \r\n if marks < 50:\r\n level = \"beginner\"\r\n elif marks < 75:\r\n level = \"intermediate\"\r\n else:\r\n level = \"advanced\"\r\n \r\n # Add personalized recommendations based on weak areas\r\n personalized = []\r\n for area in weak_areas:\r\n personalized.append({\r\n \"topic\": area,\r\n \"resource\": f\"Special focus on {area} - Targeted Practice Set\",\r\n \"priority\": \"High\"\r\n })\r\n \r\n return jsonify({\r\n \"your_level\": level,\r\n \"recommended_resources\": resources[level],\r\n \"personalized_focus\": personalized,\r\n \"estimated_improvement\": \"15-20 marks\" if level == \"beginner\" else \"5-10 marks\" if level == \"intermediate\" else \"2-5 marks\"\r\n })\r\n\r\n@app.route('/deepseek/smart_recommendations', methods=['POST'])\r\ndef smart_recommendations():\r\n \"\"\"AI-powered smart recommendations with roadmap based on remaining days\"\"\"\r\n data = request.get_json()\r\n \r\n weak_subject = data.get('weak_subject', '')\r\n current_marks = data.get('current_marks', 50)\r\n target_marks = data.get('target_marks', 80)\r\n days_remaining = data.get('days_remaining', 30)\r\n study_hours_per_day = data.get('study_hours_per_day', 3)\r\n \r\n # Calculate priority and urgency\r\n marks_gap = target_marks - current_marks\r\n urgency_level = \"High\" if days_remaining < 15 else \"Medium\" if days_remaining < 30 else \"Low\"\r\n required_hours_per_topic = max(1, (marks_gap / 10) * (30 / max(1, days_remaining)))\r\n \r\n try:\r\n # Generate comprehensive roadmap using DeepSeek\r\n response = deepseek_client.chat.completions.create(\r\n model=\"deepseek-chat\",\r\n messages=[\r\n {\"role\": \"system\", \"content\": \"\"\"You are an expert subject tutor creating personalized study roadmaps. \r\n Provide detailed, actionable plans with specific topics, time allocations, and daily targets.\r\n Format your response with clear sections and bullet points.\"\"\"},\r\n {\"role\": \"user\", \"content\": f\"\"\"\r\n Create a detailed study roadmap for {weak_subject} with these constraints:\r\n \r\n šŸ“Š Student Profile:\r\n - Current marks: {current_marks}%\r\n - Target marks: {target_marks}%\r\n - Days until exam: {days_remaining}\r\n - Available study hours/day: {study_hours_per_day}\r\n - Marks gap to cover: {marks_gap}%\r\n - Urgency level: {urgency_level}\r\n \r\n Please provide:\r\n \r\n 1. **TOPIC BREAKDOWN** - List all major topics in {weak_subject} with priority (High/Medium/Low)\r\n 2. **DAILY ROADMAP** - Day-by-day plan for the next {min(14, days_remaining)} days with specific topics\r\n 3. **TIME ALLOCATION** - How many hours per topic based on {study_hours_per_day} hours/day\r\n 4. **PRACTICE STRATEGY** - Types of problems to solve and mock tests schedule\r\n 5. **RESOURCES** - Specific YouTube channels, websites, books for each topic\r\n 6. **QUICK WINS** - Topics that can improve marks quickly (high weightage, less time)\r\n 7. **REVISION SCHEDULE** - When to revise what topics\r\n \r\n Make it practical and achievable. Focus on high-yield topics first.\r\n \"\"\"}\r\n ],\r\n temperature=0.7,\r\n max_tokens=1500\r\n )\r\n \r\n ai_roadmap = response.choices[0].message.content\r\n \r\n # Also generate a structured JSON roadmap for better frontend display\r\n structured_response = deepseek_client.chat.completions.create(\r\n model=\"deepseek-chat\",\r\n messages=[\r\n {\"role\": \"system\", \"content\": \"You are a structured data generator. Output ONLY valid JSON, no other text.\"},\r\n {\"role\": \"user\", \"content\": f\"\"\"\r\n Generate a JSON object for studying {weak_subject} with:\r\n - days_remaining: {days_remaining}\r\n - daily_hours: {study_hours_per_day}\r\n \r\n Format:\r\n {{\r\n \"weekly_plan\": [\r\n {{\"week\": 1, \"topics\": [\"topic1\", \"topic2\"], \"focus\": \"description\", \"hours\": number}}\r\n ],\r\n \"priority_topics\": [\r\n {{\"name\": \"topic\", \"priority\": \"High\", \"hours_needed\": number, \"weightage\": number}}\r\n ],\r\n \"daily_schedule\": [\r\n {{\"day\": 1, \"topics\": [\"topic1\"], \"practice_hours\": number, \"theory_hours\": number}}\r\n ],\r\n \"resources\": [\r\n {{\"topic\": \"topic\", \"youtube\": [\"channel1\"], \"websites\": [\"url1\"], \"books\": [\"book1\"]}}\r\n ]\r\n }}\r\n Make it realistic for {days_remaining} days.\r\n \"\"\"}\r\n ],\r\n temperature=0.5,\r\n max_tokens=1000\r\n )\r\n \r\n import json\r\n try:\r\n structured_data = json.loads(structured_response.choices[0].message.content)\r\n except:\r\n structured_data = None\r\n \r\n except Exception as e:\r\n # Fallback intelligent response if API fails\r\n ai_roadmap = generate_fallback_roadmap(weak_subject, current_marks, target_marks, days_remaining, study_hours_per_day)\r\n structured_data = None\r\n \r\n # Calculate metrics\r\n recommended_daily_hours = min(6, max(2, study_hours_per_day + (marks_gap / 20)))\r\n estimated_improvement = min(marks_gap, (recommended_daily_hours * days_remaining) / 2)\r\n \r\n return jsonify({\r\n \"subject\": weak_subject,\r\n \"current_marks\": current_marks,\r\n \"target_marks\": target_marks,\r\n \"days_remaining\": days_remaining,\r\n \"marks_gap\": marks_gap,\r\n \"urgency_level\": urgency_level,\r\n \"recommended_daily_hours\": round(recommended_daily_hours, 1),\r\n \"estimated_improvement\": round(estimated_improvement, 1),\r\n \"success_probability\": min(95, 50 + (estimated_improvement / marks_gap * 50) if marks_gap > 0 else 90),\r\n \"ai_roadmap\": ai_roadmap,\r\n \"structured_plan\": structured_data,\r\n \"quick_win_topics\": get_quick_win_topics(weak_subject)\r\n })\r\n\r\ndef generate_fallback_roadmap(subject, current_marks, target_marks, days_remaining, study_hours):\r\n \"\"\"Fallback intelligent roadmap when AI is unavailable\"\"\"\r\n \r\n # Common topics by subject\r\n topics_by_subject = {\r\n \"java\": [\"Variables & Data Types\", \"Control Flow\", \"Arrays\", \"OOP Basics\", \"Inheritance\", \"Polymorphism\", \"Exception Handling\", \"Collections\", \"Multithreading\", \"File I/O\"],\r\n \"python\": [\"Syntax Basics\", \"Data Structures\", \"Functions\", \"OOP\", \"Modules\", \"File Handling\", \"Error Handling\", \"Libraries (NumPy/Pandas)\"],\r\n \"math\": [\"Algebra\", \"Calculus\", \"Trigonometry\", \"Geometry\", \"Statistics\", \"Probability\"],\r\n \"physics\": [\"Mechanics\", \"Thermodynamics\", \"Electromagnetism\", \"Optics\", \"Modern Physics\"],\r\n \"default\": [\"Basic Concepts\", \"Core Topics\", \"Advanced Topics\", \"Problem Solving\", \"Revision\"]\r\n }\r\n \r\n topics = topics_by_subject.get(subject.lower(), topics_by_subject[\"default\"])\r\n \r\n # Calculate priority\r\n marks_gap = target_marks - current_marks\r\n urgency = \"High\" if days_remaining < 15 else \"Medium\" if days_remaining < 30 else \"Low\"\r\n \r\n # Generate roadmap\r\n roadmap = f\"\"\"\r\nšŸŽÆ **SMART STUDY ROADMAP for {subject.upper()}**\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n\r\nšŸ“Š **Current Situation:**\r\n• Current Score: {current_marks}%\r\n• Target Score: {target_marks}%\r\n• Days Left: {days_remaining}\r\n• Marks Needed: {marks_gap}%\r\n• Urgency: {urgency}\r\n\r\nā° **Daily Schedule** ({study_hours} hours/day):\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n\r\n\"\"\"\r\n \r\n # Daily breakdown\r\n hours_per_topic = study_hours / len(topics[:5])\r\n for i, topic in enumerate(topics[:min(5, len(topics))]):\r\n roadmap += f\"**Day {i+1}-{i+2}:** {topic} ({hours_per_topic:.1f} hours)\\n\"\r\n roadmap += f\" • Watch concept videos (1 hour)\\n\"\r\n roadmap += f\" • Practice problems (1 hour)\\n\"\r\n roadmap += f\" • Solve previous year questions (1 hour)\\n\\n\"\r\n \r\n roadmap += f\"\"\"\r\nšŸ“… **WEEK {min(2, days_remaining//7 + 1)} PLAN:**\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n• Days 1-3: Master high-weightage topics\r\n• Days 4-5: Intensive practice sessions\r\n• Day 6: Take mock test\r\n• Day 7: Analyze mistakes and revise weak areas\r\n\r\nšŸŽÆ **QUICK WIN TOPICS** (Score boosters):\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n\"\"\"\r\n \r\n for i, topic in enumerate(topics[:3]):\r\n roadmap += f\"āœ“ {topic} - Can improve by 5-8 marks\\n\"\r\n \r\n roadmap += f\"\"\"\r\nšŸ“š **RECOMMENDED RESOURCES:**\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\n• YouTube: CodeWithHarry, Apna College, FreeCodeCamp\r\n• Practice: LeetCode, HackerRank, GeeksforGeeks\r\n• Books: {subject.upper()} - The Complete Reference\r\n\r\nāœ… **DAILY CHECKLIST:**\r\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\r\nā–” Study {study_hours} hours today\r\nā–” Complete {topics[0]} practice\r\nā–” Solve 10 problems\r\nā–” Revise yesterday's topics\r\nā–” Take a 15-min break every 2 hours\r\n\r\nšŸ’Ŗ **MOTIVATION:**\r\nYou need to improve {marks_gap}% in {days_remaining} days.\r\nStudy {study_hours} hours daily with focus - it's achievable!\r\n\"\"\"\r\n \r\n return roadmap\r\n\r\ndef get_quick_win_topics(subject):\r\n \"\"\"Get quick win topics for a subject\"\"\"\r\n quick_wins = {\r\n \"java\": [\"Arrays & Loops\", \"Exception Handling\", \"String Manipulation\"],\r\n \"python\": [\"Lists & Dictionaries\", \"Functions\", \"String Operations\"],\r\n \"math\": [\"Algebra\", \"Probability\", \"Statistics\"],\r\n \"physics\": [\"Laws of Motion\", \"Thermodynamics Basics\", \"Electricity\"]\r\n }\r\n return quick_wins.get(subject.lower(), [\"Core Concepts\", \"Problem Solving Basics\", \"Important Formulas\"])\r\n\r\n# Advanced feature 7: Study Time Tracker & Productivity Analysis\r\n@app.route('/track_study_session', methods=['POST'])\r\ndef track_study_session():\r\n data = request.get_json()\r\n student_id = data['student_id']\r\n \r\n session = {\r\n \"date\": datetime.now().isoformat(),\r\n \"duration_minutes\": data['duration'],\r\n \"subject\": data['subject'],\r\n \"productivity_rating\": data.get('productivity', 5), # 1-10\r\n \"breaks_taken\": data.get('breaks', 0),\r\n \"topics_covered\": data.get('topics', [])\r\n }\r\n \r\n study_sessions[student_id].append(session)\r\n \r\n # Calculate weekly stats\r\n week_sessions = [s for s in study_sessions[student_id] \r\n if datetime.fromisoformat(s['date']) > datetime.now() - timedelta(days=7)]\r\n \r\n total_hours = sum(s['duration_minutes'] for s in week_sessions) / 60\r\n avg_productivity = np.mean([s['productivity_rating'] for s in week_sessions]) if week_sessions else 0\r\n \r\n return jsonify({\r\n \"session_logged\": True,\r\n \"weekly_total_hours\": f\"{total_hours:.1f}\",\r\n \"average_productivity\": f\"{avg_productivity:.1f}/10\",\r\n \"study_streak\": len(week_sessions),\r\n \"recommendation\": \"Great consistency!\" if len(week_sessions) >= 5 else \"Try to study more regularly\"\r\n })\r\n\r\n# Advanced feature 8: Gamification & Achievement Badges\r\n@app.route('/get_achievements/', methods=['GET'])\r\ndef get_achievements(student_id):\r\n history = performance_history[student_id]\r\n sessions = study_sessions[student_id]\r\n \r\n achievements = []\r\n \r\n # Perfect attendance streak\r\n if len(history) >= 5:\r\n achievements.append({\"badge\": \"šŸ† Consistent Performer\", \"earned\": True})\r\n \r\n # Improvement milestone\r\n if len(history) >= 2 and history[-1]['marks'] > history[0]['marks'] + 20:\r\n achievements.append({\"badge\": \"šŸ“ˆ Rapid Improver\", \"earned\": True})\r\n \r\n # Study marathon\r\n total_study_hours = sum(s['duration_minutes'] for s in sessions) / 60\r\n if total_study_hours > 20:\r\n achievements.append({\"badge\": \"⚔ Study Marathoner\", \"earned\": True})\r\n \r\n # Excellence badge\r\n if any(h['marks'] >= 90 for h in history):\r\n achievements.append({\"badge\": \"🌟 Excellence Award\", \"earned\": True})\r\n \r\n return jsonify({\r\n \"achievements\": achievements,\r\n \"points\": len(achievements) * 100,\r\n \"next_milestone\": \"Study 10 more hours\" if total_study_hours < 30 else \"Score 95+ in next test\"\r\n })\r\n\r\n# Advanced feature 9: Parent/Teacher Report Generator\r\n@app.route('/generate_report', methods=['POST'])\r\ndef generate_report():\r\n data = request.get_json()\r\n student_id = data['student_id']\r\n report_type = data.get('type', 'summary') # summary, detailed, weekly\r\n \r\n history = performance_history[student_id]\r\n sessions = study_sessions[student_id]\r\n \r\n if len(history) == 0:\r\n return jsonify({\"error\": \"No data available for report\"})\r\n \r\n avg_marks = np.mean([h['marks'] for h in history])\r\n trend = \"improving\" if len(history) >= 2 and history[-1]['marks'] > history[-2]['marks'] else \"needs improvement\"\r\n \r\n report = {\r\n \"student_id\": student_id,\r\n \"generated_on\": datetime.now().isoformat(),\r\n \"report_type\": report_type,\r\n \"summary\": {\r\n \"average_marks\": f\"{avg_marks:.1f}\",\r\n \"total_tests\": len(history),\r\n \"performance_trend\": trend,\r\n \"total_study_hours\": f\"{sum(s['duration_minutes'] for s in sessions) / 60:.1f}\",\r\n \"risk_level\": StudentAnalytics.predict_risk_level(avg_marks, 70) # Assuming 70% attendance\r\n },\r\n \"recommendations\": [\r\n \"Focus on weak areas identified in analytics\",\r\n \"Maintain consistent study schedule\",\r\n \"Take regular practice tests\"\r\n ],\r\n \"teacher_notes\": data.get('teacher_notes', \"Student is showing promising progress.\")\r\n }\r\n \r\n # Save report (in production, save to file/database)\r\n report_filename = f\"report_{student_id}_{datetime.now().strftime('%Y%m%d')}.json\"\r\n \r\n return jsonify({\r\n \"report\": report,\r\n \"download_link\": f\"/download_report/{report_filename}\",\r\n \"shareable\": True\r\n })\r\n\r\n# Advanced feature 10: AI-Powered Exam Strategy Planner\r\n@app.route('/exam_strategy', methods=['POST'])\r\ndef exam_strategy():\r\n data = request.get_json()\r\n \r\n exam_date = datetime.fromisoformat(data['exam_date'])\r\n days_left = (exam_date - datetime.now()).days\r\n \r\n syllabus_covered = data.get('syllabus_covered', 50) # percentage\r\n strong_topics = data.get('strong_topics', [])\r\n weak_topics = data.get('weak_topics', [])\r\n \r\n # Create time allocation strategy\r\n total_study_hours = days_left * data.get('daily_study_hours', 4)\r\n \r\n # Pareto principle: 80% focus on weak areas, 20% on strong\r\n weak_hours = total_study_hours * 0.8\r\n strong_hours = total_study_hours * 0.2\r\n \r\n strategy = {\r\n \"days_until_exam\": days_left,\r\n \"total_study_hours_available\": total_study_hours,\r\n \"focus_strategy\": {\r\n \"weak_areas\": {\r\n \"hours\": weak_hours,\r\n \"topics\": weak_topics,\r\n \"strategy\": \"Deep dive, concept clearing, extensive practice\"\r\n },\r\n \"strong_areas\": {\r\n \"hours\": strong_hours,\r\n \"topics\": strong_topics,\r\n \"strategy\": \"Quick revision, advanced problems\"\r\n }\r\n },\r\n \"weekly_breakdown\": [],\r\n \"exam_day_tips\": [\r\n \"Get 7-8 hours of sleep before exam\",\r\n \"Reach exam center 30 minutes early\",\r\n \"Read all questions before starting\",\r\n \"Allocate time per section wisely\"\r\n ]\r\n }\r\n \r\n # Create weekly schedule\r\n for week in range(min(4, days_left // 7 + 1)):\r\n week_strategy = {\r\n \"week\": week + 1,\r\n \"focus\": \"Weak topics\" if week < 2 else \"Mixed revision\",\r\n \"mock_tests\": week >= 1,\r\n \"mock_tests_count\": 2 if week >= 2 else 1\r\n }\r\n strategy[\"weekly_breakdown\"].append(week_strategy)\r\n \r\n return jsonify({\r\n \"exam_strategy\": strategy,\r\n \"confidence_score\": min(90, 50 + (syllabus_covered / 2) + (days_left / 2)),\r\n \"success_prediction\": \"High chance of success\" if syllabus_covered > 70 and days_left > 30 else \"Needs dedicated effort\"\r\n })\r\n\r\n# Helper endpoint to record test results\r\n@app.route('/record_test_result', methods=['POST'])\r\ndef record_test_result():\r\n data = request.get_json()\r\n student_id = data['student_id']\r\n marks = data['marks']\r\n subject = data.get('subject', 'general')\r\n \r\n performance_history[student_id].append({\r\n \"date\": datetime.now().isoformat(),\r\n \"marks\": marks,\r\n \"subject\": subject\r\n })\r\n \r\n return jsonify({\r\n \"status\": \"recorded\",\r\n \"total_tests\": len(performance_history[student_id]),\r\n \"average\": np.mean([h['marks'] for h in performance_history[student_id]])\r\n })\r\n\r\n@app.route('/')\r\ndef home():\r\n return jsonify({\r\n \"message\": \"Advanced Student Performance Prediction System\",\r\n \"version\": \"2.0\",\r\n \"features\": [\r\n \"Smart Predictions with Confidence Scores\",\r\n \"Personalized Study Plans\",\r\n \"Peer Comparison & Analytics\",\r\n \"Smart Notifications\",\r\n \"Performance Dashboard\",\r\n \"Resource Recommendations\",\r\n \"Study Time Tracker\",\r\n \"Gamification & Badges\",\r\n \"Report Generation\",\r\n \"Exam Strategy Planner\"\r\n ],\r\n \"status\": \"operational\"\r\n })\r\n\r\nif __name__ == '__main__':\r\n app.run(debug=True)"}}}}