Makes ai rule generation content work good.
This commit is contained in:
@@ -6,6 +6,7 @@ from datetime import datetime
|
||||
from flask_login import UserMixin
|
||||
|
||||
import uuid
|
||||
import hashlib
|
||||
|
||||
Base = declarative_base()
|
||||
db = SQLAlchemy(model_class=Base)
|
||||
@@ -65,4 +66,34 @@ class ProcessedEmail(Base):
|
||||
folder = db.relationship('Folder', backref=db.backref('processed_emails', lazy=True))
|
||||
|
||||
def __repr__(self):
|
||||
return f'<ProcessedEmail {self.email_uid} for folder {self.folder_name}>'
|
||||
return f'<ProcessedEmail {self.email_uid} for folder {self.folder_name}>'
|
||||
|
||||
class AIRuleCache(Base):
|
||||
"""Cache for AI-generated rules to improve performance and reduce API calls."""
|
||||
__tablename__ = 'ai_rule_cache'
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
|
||||
folder_name = db.Column(db.String(255), nullable=False)
|
||||
folder_type = db.Column(db.String(20), nullable=False)
|
||||
rule_text = db.Column(db.Text, nullable=False)
|
||||
rule_metadata = db.Column(db.JSON) # Quality score, model info, etc.
|
||||
cache_key = db.Column(db.String(64), unique=True, nullable=False) # MD5 hash of inputs
|
||||
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
||||
expires_at = db.Column(db.DateTime, nullable=False)
|
||||
is_active = db.Column(db.Boolean, default=True)
|
||||
|
||||
user = db.relationship('User', backref=db.backref('ai_rule_cache', lazy=True))
|
||||
|
||||
def __repr__(self):
|
||||
return f'<AIRuleCache {self.folder_name} for user {self.user_id}>'
|
||||
|
||||
@staticmethod
|
||||
def generate_cache_key(folder_name: str, folder_type: str, rule_type: str = 'single', rule_text: str = '') -> str:
|
||||
"""Generate a unique cache key based on inputs."""
|
||||
input_string = f"{folder_name}:{folder_type}:{rule_type}:{rule_text}"
|
||||
return hashlib.md5(input_string.encode()).hexdigest()
|
||||
|
||||
def is_expired(self) -> bool:
|
||||
"""Check if cache entry is expired."""
|
||||
return datetime.utcnow() > self.expires_at
|
||||
Reference in New Issue
Block a user