Shivaaaahdjdnd/code_analysis
0
1from flask import Flask, request, jsonify2from flask_cors import CORS3import os4from coding_analyzer import CodingAnalyzer5from config import config6 7app = Flask(__name__)8if config.server.cors_enabled:9 CORS(app)10 11# Initialize the coding analyzer (loads model at startup)12analyzer = CodingAnalyzer()13 14 15@app.route('/api/batch-analysis', methods=['POST'])16def batch_analyze_solutions():17 """18 Batch coding analysis endpoint.19 20 Request body:21 {22 "submissions": [23 {24 "question": "Problem statement",25 "user_code": "User solution",26 "correct_solution": "Reference solution",27 "language": "python", (optional, default: python)28 "difficulty": "easy", (optional, default: medium)29 "test_cases": [ (optional)30 {"input": [...], "expected_output": "..."}31 ]32 }33 ]34 }35 """36 try:37 data = request.get_json()38 39 if not data or 'submissions' not in data or not isinstance(data['submissions'], list):40 return jsonify({'error': 'Missing or invalid submissions array'}), 40041 42 submissions = data['submissions']43 44 if len(submissions) == 0:45 return jsonify({'error': 'Submissions array is empty'}), 40046 47 if len(submissions) > 10:48 return jsonify({'error': 'Maximum 10 submissions allowed per request'}), 40049 50 results = []51 total_score = 052 53 for idx, submission in enumerate(submissions):54 required_fields = ['question', 'user_code', 'correct_solution']55 missing_fields = [f for f in required_fields if f not in submission]56 57 if missing_fields:58 results.append({59 'submission_id': idx + 1,60 'status': 'error',61 'error': f'Missing required fields: {missing_fields}'62 })63 continue64 65 try:66 question = submission['question']67 user_code = submission['user_code']68 correct_solution = submission['correct_solution']69 language = submission.get('language', 'python')70 difficulty = submission.get('difficulty', 'medium')71 test_cases = submission.get('test_cases', None)72 73 analysis_result = analyzer.analyze_solution(74 question=question,75 user_code=user_code,76 correct_solution=correct_solution,77 language=language,78 difficulty=difficulty,79 test_cases=test_cases80 )81 82 analysis_result['submission_id'] = idx + 183 analysis_result['question_title'] = (84 question[:50] + '...' if len(question) > 50 else question85 )86 87 results.append(analysis_result)88 total_score += analysis_result.get('overall_score', 0)89 90 except Exception as e:91 results.append({92 'submission_id': idx + 1,93 'status': 'error',94 'error': str(e)95 })96 97 successful = [r for r in results if r.get('status') != 'error']98 avg_score = total_score / len(successful) if successful else 099 100 return jsonify({101 'status': 'completed',102 'total_submissions': len(submissions),103 'average_score': round(avg_score, 2),104 'results': results105 })106 107 except Exception as e:108 return jsonify({'error': str(e)}), 500109 110 111@app.route('/health', methods=['GET'])112def health_check():113 model_loaded = analyzer.pipe is not None114 return jsonify({115 'status': 'healthy',116 'service': 'Qwen2.5-1.5B Coding Analysis System',117 'model': config.model.model_name,118 'ai_enabled': model_loaded119 })120 121 122if __name__ == '__main__':123 print("๐ Starting Qwen2.5-1.5B Coding Analysis Server...")124 print(f"๐ Server: http://{config.server.host}:{config.server.port}")125 print(f"๐ค AI Model: {config.model.model_name}")126 print("=" * 60)127 128 app.run(129 debug=config.server.debug,130 host=config.server.host,131 port=config.server.port132 )