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}>'
|