Files
2026-05-25 15:09:42 +08:00

47 lines
1.3 KiB
Python

# IR 版本差异对比服务
import logging
import yaml
from server.core.utils.diff import compute_diff
from server.services.ir_engine.generator import ir_generator
logger = logging.getLogger(__name__)
class IRDiffService:
"""Compare two IR versions and return a structured diff."""
async def diff(self, ir_id_a: str, ir_id_b: str) -> dict:
"""Compute diff between two IR versions."""
ir_a = await ir_generator.get_ir(ir_id_a)
ir_b = await ir_generator.get_ir(ir_id_b)
if not ir_a or not ir_b:
return {"error": "One or both IR versions not found", "diff": {}}
yaml_a = ir_a.get("yaml_content", "")
yaml_b = ir_b.get("yaml_content", "")
try:
data_a = yaml.safe_load(yaml_a)
data_b = yaml.safe_load(yaml_b)
except yaml.YAMLError as e:
return {"error": f"YAML parsing error: {e}", "diff": {}}
diff_result = compute_diff(data_a or {}, data_b or {})
logger.info("IR diff: %d added, %d removed, %d modified",
len(diff_result.get("added", [])),
len(diff_result.get("removed", [])),
len(diff_result.get("modified", [])))
return {
"ir_id_a": ir_id_a,
"ir_id_b": ir_id_b,
"diff": diff_result,
}
ir_diff = IRDiffService()