File size: 4,666 Bytes
25732fb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

db = SQLAlchemy()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    
    knowledge_states = db.relationship('KnowledgeState', backref='user', lazy=True)
    learning_sessions = db.relationship('LearningSession', backref='user', lazy=True)
    quiz_attempts = db.relationship('QuizAttempt', backref='user', lazy=True)

class Topic(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    category = db.Column(db.String(50), nullable=False)
    difficulty = db.Column(db.String(20), nullable=False)
    description = db.Column(db.Text)
    prerequisites = db.Column(db.String(200))  # Comma-separated topic IDs
    
    knowledge_states = db.relationship('KnowledgeState', backref='topic', lazy=True)

class KnowledgeState(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    topic_id = db.Column(db.Integer, db.ForeignKey('topic.id'), nullable=False)
    knowledge_level = db.Column(db.Float, default=0.0)  # Changed from 0.5 to 0.0
    confidence = db.Column(db.Float, default=0.0)  # Changed from 0.5 to 0.0
    last_practiced = db.Column(db.DateTime, default=datetime.utcnow)
    practice_count = db.Column(db.Integer, default=0)
    updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)

class LearningSession(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    topic_id = db.Column(db.Integer, db.ForeignKey('topic.id'), nullable=False)
    content = db.Column(db.Text, nullable=False)
    difficulty = db.Column(db.String(20))
    duration = db.Column(db.Integer)  # in seconds
    created_at = db.Column(db.DateTime, default=datetime.utcnow)

class QuizAttempt(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
    topic_id = db.Column(db.Integer, db.ForeignKey('topic.id'), nullable=False)
    question = db.Column(db.Text, nullable=False)
    user_answer = db.Column(db.Text)
    correct_answer = db.Column(db.Text)
    is_correct = db.Column(db.Boolean)
    difficulty = db.Column(db.String(20))
    time_taken = db.Column(db.Integer)  # in seconds
    created_at = db.Column(db.DateTime, default=datetime.utcnow)

class AgentKnowledge(db.Model):
    """Stores learned patterns and strategies for each agent"""
    id = db.Column(db.Integer, primary_key=True)
    agent_type = db.Column(db.String(50))  # teaching, assessment, etc.
    knowledge_type = db.Column(db.String(50))  # strategy, template, rule
    content = db.Column(db.JSON)
    effectiveness_score = db.Column(db.Float, default=0.5)
    usage_count = db.Column(db.Integer, default=0)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)

class AgentMessage(db.Model):
    """Communication between agents"""
    id = db.Column(db.Integer, primary_key=True)
    from_agent = db.Column(db.String(50))
    to_agent = db.Column(db.String(50))
    message_type = db.Column(db.String(50))  # request, response, notification
    content = db.Column(db.JSON)
    status = db.Column(db.String(20))  # pending, processed, failed
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    processed_at = db.Column(db.DateTime)

class AgentPerformance(db.Model):
    """Track agent effectiveness over time"""
    id = db.Column(db.Integer, primary_key=True)
    agent_id = db.Column(db.String(50))
    action_type = db.Column(db.String(50))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    success_metric = db.Column(db.Float)  # User performance after agent action
    api_calls_used = db.Column(db.Integer, default=0)
    execution_time_ms = db.Column(db.Integer)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)

class ContentLibrary(db.Model):
    """Pre-generated content to reduce API calls"""
    id = db.Column(db.Integer, primary_key=True)
    topic_id = db.Column(db.Integer, db.ForeignKey('topic.id'))
    content_type = db.Column(db.String(50))  # lesson, quiz, hint
    difficulty = db.Column(db.String(20))
    content = db.Column(db.Text)
    meta_data = db.Column(db.JSON)
    quality_score = db.Column(db.Float, default=0.5)
    usage_count = db.Column(db.Integer, default=0)