v1.0 - Version stable: multi-PC, détection UI-DETR-1, 3 modes exécution
- Frontend v4 accessible sur réseau local (192.168.1.40) - Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard) - Ollama GPU fonctionnel - Self-healing interactif - Dashboard confiance Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,6 +21,8 @@ class Workflow(db.Model):
|
||||
id = db.Column(db.String(64), primary_key=True)
|
||||
name = db.Column(db.String(255), nullable=False)
|
||||
description = db.Column(db.Text, nullable=True)
|
||||
tags_json = db.Column(db.Text, nullable=True) # JSON array de tags pour le matching
|
||||
trigger_examples_json = db.Column(db.Text, nullable=True) # JSON array d'exemples de déclenchement
|
||||
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
||||
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
is_active = db.Column(db.Boolean, default=True)
|
||||
@@ -31,12 +33,44 @@ class Workflow(db.Model):
|
||||
executions = db.relationship('Execution', backref='workflow', lazy='dynamic',
|
||||
cascade='all, delete-orphan')
|
||||
|
||||
@property
|
||||
def tags(self) -> List[str]:
|
||||
"""Retourne les tags comme liste"""
|
||||
if not self.tags_json:
|
||||
return []
|
||||
try:
|
||||
return json.loads(self.tags_json)
|
||||
except json.JSONDecodeError:
|
||||
return []
|
||||
|
||||
@tags.setter
|
||||
def tags(self, value: List[str]):
|
||||
"""Définit les tags depuis une liste"""
|
||||
self.tags_json = json.dumps(value) if value else None
|
||||
|
||||
@property
|
||||
def trigger_examples(self) -> List[str]:
|
||||
"""Retourne les exemples de déclenchement comme liste"""
|
||||
if not self.trigger_examples_json:
|
||||
return []
|
||||
try:
|
||||
return json.loads(self.trigger_examples_json)
|
||||
except json.JSONDecodeError:
|
||||
return []
|
||||
|
||||
@trigger_examples.setter
|
||||
def trigger_examples(self, value: List[str]):
|
||||
"""Définit les exemples depuis une liste"""
|
||||
self.trigger_examples_json = json.dumps(value) if value else None
|
||||
|
||||
def to_dict(self) -> Dict[str, Any]:
|
||||
"""Sérialise le workflow complet"""
|
||||
return {
|
||||
'id': self.id,
|
||||
'name': self.name,
|
||||
'description': self.description,
|
||||
'tags': self.tags,
|
||||
'triggerExamples': self.trigger_examples,
|
||||
'created_at': self.created_at.isoformat() if self.created_at else None,
|
||||
'updated_at': self.updated_at.isoformat() if self.updated_at else None,
|
||||
'steps': [step.to_dict() for step in self.steps.order_by(Step.order).all()],
|
||||
|
||||
Reference in New Issue
Block a user