File size: 4,292 Bytes
6d6b815
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
99
100
101
102
103
104
105
106
107
108
109
from app import db
from datetime import datetime
import json
from flask_login import UserMixin

class ThorClone(db.Model):
    """Model for Thor clones in the database"""
    id = db.Column(db.Integer, primary_key=True)
    clone_name = db.Column(db.String(100), unique=True, nullable=False)
    base_version = db.Column(db.String(100))
    description = db.Column(db.Text)
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    modified_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    is_active = db.Column(db.Boolean, default=False)
    capabilities = db.Column(db.Text)  # JSON string of capabilities
    
    def get_capabilities(self):
        """Parse and return capabilities as a dictionary"""
        try:
            return json.loads(self.capabilities) if self.capabilities else {}
        except:
            return {}
    
    def set_capabilities(self, capabilities_dict):
        """Convert dictionary to JSON and store"""
        self.capabilities = json.dumps(capabilities_dict)
    
    def __repr__(self):
        return f"<ThorClone {self.clone_name}>"

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password_hash = db.Column(db.String(256))
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    
    # One-to-many relationship with conversations
    conversations = db.relationship('Conversation', backref='user', lazy='dynamic')
    
    # One-to-one relationship with settings
    settings = db.relationship('UserSettings', backref='user', uselist=False)
    
    def __repr__(self):
        return f'<User {self.username}>'

class Conversation(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    title = db.Column(db.String(100), default="New Conversation")
    created_at = db.Column(db.DateTime, default=datetime.utcnow)
    
    # One-to-many relationship with messages
    messages = db.relationship('Message', backref='conversation', lazy='dynamic')
    
    def __repr__(self):
        return f'<Conversation {self.id} - {self.title}>'

class Message(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    conversation_id = db.Column(db.Integer, db.ForeignKey('conversation.id'))
    is_user = db.Column(db.Boolean, default=True)  # True if from user, False if from AI
    content = db.Column(db.Text, nullable=False)
    timestamp = db.Column(db.DateTime, default=datetime.utcnow)
    
    def __repr__(self):
        sender = "User" if self.is_user else "AI"
        return f'<Message {self.id} from {sender}>'

class UserSettings(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), unique=True)
    
    # AI safety and ethics settings (all default to True for safety)
    content_filter_enabled = db.Column(db.Boolean, default=True)
    ethics_check_enabled = db.Column(db.Boolean, default=True)
    permission_required = db.Column(db.Boolean, default=True)
    
    # Model preferences
    preferred_model = db.Column(db.String(100), default="gpt2")
    
    # Advanced settings stored as JSON
    advanced_settings = db.Column(db.Text, default='{}')
    
    def get_advanced_settings(self):
        """Parse and return advanced settings as a dictionary"""
        try:
            return json.loads(self.advanced_settings)
        except:
            return {}
    
    def set_advanced_settings(self, settings_dict):
        """Convert dictionary to JSON and store"""
        self.advanced_settings = json.dumps(settings_dict)
    
    def __repr__(self):
        return f'<UserSettings for user_id {self.user_id}>'

class ModelCache(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    model_name = db.Column(db.String(100), unique=True, nullable=False)
    source_url = db.Column(db.String(255))
    local_path = db.Column(db.String(255))
    downloaded_at = db.Column(db.DateTime, default=datetime.utcnow)
    last_used = db.Column(db.DateTime, default=datetime.utcnow)
    
    def __repr__(self):
        return f'<ModelCache {self.model_name}>'