You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
 
 

47 lines
1.5 KiB

from django.db import models
from django.contrib.auth import get_user_model
import uuid
import secrets
User = get_user_model()
class MasterKey(models.Model):
key_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
key_value = models.CharField(max_length=255, unique=True)
description = models.CharField(max_length=255, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
last_used = models.DateTimeField(null=True, blank=True)
is_active = models.BooleanField(default=True)
permissions = models.JSONField(default=list)
def __str__(self):
return f"Master Key: {self.key_id}"
@classmethod
def generate_key(cls, description="", permissions=None):
"""Generate a new secure master key"""
if permissions is None:
permissions = []
# Generate a secure random token
key_value = secrets.token_urlsafe(64)
return cls.objects.create(
key_value=key_value,
description=description,
permissions=permissions
)
class AiModel(models.Model):
name = models.CharField(max_length=255)
class Conversation(models.Model):
title = models.CharField(max_length=255)
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="conversations")
class Message(models.Model):
content = models.TextField()
role = models.CharField(max_length=255)
conversation = models.ForeignKey(Conversation, on_delete=models.CASCADE, related_name="messages")