Makes ai rule generation content work good.

This commit is contained in:
Bryce
2025-08-10 21:21:02 -07:00
parent 47a63d2eab
commit 0dac428217
12 changed files with 2129 additions and 8 deletions

View File

@@ -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