|
|
import openai |
|
|
import numpy as np |
|
|
import pandas as pd |
|
|
from flask import Flask, request, jsonify |
|
|
from sklearn.ensemble import RandomForestRegressor |
|
|
from sklearn.model_selection import train_test_split |
|
|
|
|
|
|
|
|
app = Flask(__name__) |
|
|
|
|
|
|
|
|
openai.api_key = "YOUR_API_KEY_HERE" |
|
|
|
|
|
|
|
|
learners_data = {} |
|
|
materials = { |
|
|
"beginner": ["Intro to AI", "Basic Math", "Learning Techniques"], |
|
|
"intermediate": ["Data Structures", "Algorithms", "Intro to Machine Learning"], |
|
|
"advanced": ["Deep Learning", "Neural Networks", "Optimization Techniques"] |
|
|
} |
|
|
questions_data = { |
|
|
"beginner": ["What is AI?", "Define machine learning.", "Explain a basic algorithm."], |
|
|
"intermediate": ["Describe a data structure.", "Explain sorting algorithms.", "What is a neural network?"], |
|
|
"advanced": ["Explain backpropagation.", "Describe the optimization process in deep learning.", "What is reinforcement learning?"] |
|
|
} |
|
|
|
|
|
|
|
|
def initialize_prediction_model(): |
|
|
data = pd.read_csv('sample_user_data.csv') |
|
|
X = data[['progress', 'test_scores', 'interactions']].values |
|
|
y = data['final_score'].values |
|
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) |
|
|
model = RandomForestRegressor() |
|
|
model.fit(X_train, y_train) |
|
|
return model |
|
|
|
|
|
performance_model = initialize_prediction_model() |
|
|
|
|
|
|
|
|
def generate_response(prompt): |
|
|
response = openai.Completion.create( |
|
|
engine="text-davinci-003", |
|
|
prompt=prompt, |
|
|
max_tokens=100 |
|
|
) |
|
|
return response.choices[0].text.strip() |
|
|
|
|
|
|
|
|
def curate_content(user_id): |
|
|
progress = learners_data.get(user_id, {}).get("progress", 0) |
|
|
if progress < 30: |
|
|
return materials["beginner"] |
|
|
elif 30 <= progress < 70: |
|
|
return materials["intermediate"] |
|
|
else: |
|
|
return materials["advanced"] |
|
|
|
|
|
|
|
|
def generate_adaptive_question(user_id): |
|
|
progress = learners_data.get(user_id, {}).get("progress", 0) |
|
|
if progress < 30: |
|
|
question = np.random.choice(questions_data["beginner"]) |
|
|
elif 30 <= progress < 70: |
|
|
question = np.random.choice(questions_data["intermediate"]) |
|
|
else: |
|
|
question = np.random.choice(questions_data["advanced"]) |
|
|
return question |
|
|
|
|
|
|
|
|
def generate_feedback(user_id): |
|
|
performance = learners_data.get(user_id, {}).get("test_scores", []) |
|
|
if not performance: |
|
|
return "Please complete some assessments to receive feedback." |
|
|
|
|
|
avg_score = np.mean(performance) |
|
|
if avg_score > 80: |
|
|
return "Excellent! You are mastering the content well." |
|
|
elif 50 <= avg_score <= 80: |
|
|
return "Good job! Keep going and review the areas where you scored lower." |
|
|
else: |
|
|
return "It looks like you're struggling in some areas. Try reviewing the basics and work on practice problems." |
|
|
|
|
|
|
|
|
def predict_performance(user_id): |
|
|
user_data = learners_data.get(user_id, {}) |
|
|
progress = user_data.get("progress", 0) |
|
|
test_scores = user_data.get("test_scores", [0]) |
|
|
avg_score = np.mean(test_scores) |
|
|
interactions = user_data.get("interactions", 0) |
|
|
|
|
|
prediction = performance_model.predict([[progress, avg_score, interactions]]) |
|
|
return prediction[0] |
|
|
|
|
|
|
|
|
@app.route('/register', methods=['POST']) |
|
|
def register_user(): |
|
|
user_id = request.json['user_id'] |
|
|
learners_data[user_id] = {"progress": 0, "test_scores": [], "interactions": 0} |
|
|
return jsonify({"status": "success", "message": f"User {user_id} registered."}) |
|
|
|
|
|
@app.route('/content', methods=['GET']) |
|
|
def get_content(): |
|
|
user_id = request.args.get('user_id') |
|
|
if user_id in learners_data: |
|
|
content = curate_content(user_id) |
|
|
return jsonify({"content": content}) |
|
|
else: |
|
|
return jsonify({"status": "error", "message": "User not found."}) |
|
|
|
|
|
@app.route('/question', methods=['GET']) |
|
|
def get_question(): |
|
|
user_id = request.args.get('user_id') |
|
|
if user_id in learners_data: |
|
|
question = generate_adaptive_question(user_id) |
|
|
learners_data[user_id]["interactions"] += 1 |
|
|
return jsonify({"question": question}) |
|
|
else: |
|
|
return jsonify({"status": "error", "message": "User not found."}) |
|
|
|
|
|
@app.route('/submit_answer', methods=['POST']) |
|
|
def submit_answer(): |
|
|
user_id = request.json['user_id'] |
|
|
score = request.json['score'] |
|
|
|
|
|
if user_id in learners_data: |
|
|
learners_data[user_id]["test_scores"].append(score) |
|
|
learners_data[user_id]["progress"] += 10 |
|
|
return jsonify({"status": "success", "message": "Answer submitted."}) |
|
|
else: |
|
|
return jsonify({"status": "error", "message": "User not found."}) |
|
|
|
|
|
@app.route('/feedback', methods=['GET']) |
|
|
def get_feedback(): |
|
|
user_id = request.args.get('user_id') |
|
|
if user_id in learners_data: |
|
|
feedback = generate_feedback(user_id) |
|
|
return jsonify({"feedback": feedback}) |
|
|
else: |
|
|
return jsonify({"status": "error", "message": "User not found."}) |
|
|
|
|
|
@app.route('/predict_performance', methods=['GET']) |
|
|
def performance_prediction(): |
|
|
user_id = request.args.get('user_id') |
|
|
if user_id in learners_data: |
|
|
prediction = predict_performance(user_id) |
|
|
return jsonify({"predicted_performance": prediction}) |
|
|
else: |
|
|
return jsonify({"status": "error", "message": "User not found."}) |
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
app.run(debug=True) |
|
|
|