experience_case.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435
  1. """Experience case model (for knowledge base / similar case retrieval)."""
  2. import json
  3. from datetime import datetime
  4. from sqlalchemy import Column, Integer, String, Text, DateTime, Float
  5. from ..database import Base
  6. class ExperienceCase(Base):
  7. """A structured experience case for similarity retrieval."""
  8. __tablename__ = "experience_cases"
  9. id = Column(Integer, primary_key=True, index=True)
  10. source_plan_id = Column(String(100), default="")
  11. topology = Column(String(20), default="SSSR", index=True)
  12. model_path = Column(String(500), default="")
  13. params_json = Column(Text, default="{}") # JSON: parameter values
  14. metrics_json = Column(Text, default="{}") # JSON: metric values
  15. boundary_json = Column(Text, default="{}") # JSON: boundary conditions snapshot
  16. conclusion = Column(Text, default="") # Human/AI generated conclusion
  17. tags = Column(String(500), default="") # Comma-separated tags
  18. rating = Column(Integer, default=0) # 0-5, expert rating
  19. created_at = Column(DateTime, default=datetime.utcnow)
  20. def get_params(self) -> dict:
  21. try:
  22. return json.loads(self.params_json) if self.params_json else {}
  23. except (json.JSONDecodeError, TypeError):
  24. return {}
  25. def get_metrics(self) -> dict:
  26. try:
  27. return json.loads(self.metrics_json) if self.metrics_json else {}
  28. except (json.JSONDecodeError, TypeError):
  29. return {}