# 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()