refactor: add DesignIR distillation pipeline
This commit is contained in:
@@ -21,42 +21,33 @@ class CadRouterTests(unittest.TestCase):
|
||||
return route_module.build_parser().parse_args(list(args))
|
||||
|
||||
def test_routes_gear_to_simplecadapi(self) -> None:
|
||||
result = route_module.route(self.parse("生成一个模数 2 的人字齿轮", "--output", "step"))
|
||||
result = route_module.route(self.parse("生成一个模数 2 的人字齿轮"))
|
||||
self.assertEqual("simplecadapi", result["selected_backend"])
|
||||
|
||||
def test_routes_connecting_rod_to_build123d(self) -> None:
|
||||
result = route_module.route(
|
||||
self.parse("生成中心距 120mm 的发动机连杆", "--output", "step", "--manufacturing", "machining")
|
||||
)
|
||||
result = route_module.route(self.parse("生成中心距 120mm 的发动机连杆"))
|
||||
self.assertEqual("build123d", result["selected_backend"])
|
||||
|
||||
def test_routes_printable_vase_to_cadam(self) -> None:
|
||||
result = route_module.route(
|
||||
self.parse("生成一个带蜂窝纹理的可调参数 3D 打印花瓶", "--output", "stl", "--browser-controls")
|
||||
)
|
||||
self.assertEqual("cadam", result["selected_backend"])
|
||||
self.assertEqual("CADAM", result["project"])
|
||||
self.assertEqual("scripts/cadam_compile.mjs", result["adapter"])
|
||||
|
||||
def test_existing_step_stays_step_first(self) -> None:
|
||||
result = route_module.route(self.parse("修改现有零件的孔径", "--existing-model", "--output", "step"))
|
||||
result = route_module.route(self.parse("修改现有零件的孔径", "--existing-model"))
|
||||
self.assertEqual("build123d", result["selected_backend"])
|
||||
|
||||
def test_scad_output_is_hard_signal(self) -> None:
|
||||
result = route_module.route(self.parse("做一个参数化旋钮", "--output", "scad"))
|
||||
self.assertEqual("cadam", result["selected_backend"])
|
||||
|
||||
def test_every_route_reports_only_runtime_project_roles(self) -> None:
|
||||
result = route_module.route(self.parse("生成一个 40mm 法兰", "--output", "step"))
|
||||
def test_every_route_has_fixed_step_artifact_contract(self) -> None:
|
||||
result = route_module.route(self.parse("做一个参数化旋钮"))
|
||||
self.assertEqual(
|
||||
{"text-to-cad", "SimpleCADAPI", "CADAM"},
|
||||
set(result["project_contributions"]),
|
||||
{
|
||||
"primary_format": "step",
|
||||
"editable_contract": "DesignIR 2.0",
|
||||
},
|
||||
result["artifact_contract"],
|
||||
)
|
||||
|
||||
def test_cadam_probe_finds_sibling_runtime(self) -> None:
|
||||
expected_root = Path(__file__).resolve().parents[5] / "CADAM"
|
||||
if expected_root.is_dir():
|
||||
self.assertTrue(route_module.cadam_runtime_available(expected_root))
|
||||
def test_every_route_reports_only_runtime_project_roles(self) -> None:
|
||||
result = route_module.route(self.parse("生成一个 40mm 法兰"))
|
||||
self.assertEqual(
|
||||
{"text-to-cad", "SimpleCADAPI"},
|
||||
set(result["project_contributions"]),
|
||||
)
|
||||
|
||||
def test_explicit_override_is_respected(self) -> None:
|
||||
result = route_module.route(self.parse("生成一个齿轮", "--backend", "build123d"))
|
||||
@@ -94,8 +85,6 @@ class CadRouterTests(unittest.TestCase):
|
||||
result = route_module.route(
|
||||
self.parse(
|
||||
"根据经验生成一个法兰轴套",
|
||||
"--output",
|
||||
"step",
|
||||
"--experience-library",
|
||||
str(library),
|
||||
"--experience-family",
|
||||
@@ -209,8 +198,6 @@ class CadRouterTests(unittest.TestCase):
|
||||
result = route_module.route(
|
||||
self.parse(
|
||||
"生成一个带法兰轴套和中心通孔",
|
||||
"--output",
|
||||
"step",
|
||||
"--experience-library",
|
||||
str(library),
|
||||
)
|
||||
@@ -273,8 +260,6 @@ class CadRouterTests(unittest.TestCase):
|
||||
result = route_module.route(
|
||||
self.parse(
|
||||
"生成一个带法兰轴套",
|
||||
"--output",
|
||||
"step",
|
||||
"--experience-library",
|
||||
str(library),
|
||||
)
|
||||
@@ -318,8 +303,6 @@ class CadRouterTests(unittest.TestCase):
|
||||
result = route_module.route(
|
||||
self.parse(
|
||||
"Generate a mounting plate with four corner holes",
|
||||
"--output",
|
||||
"step",
|
||||
"--experience-library",
|
||||
str(library),
|
||||
)
|
||||
@@ -336,25 +319,26 @@ class CadRouterTests(unittest.TestCase):
|
||||
[item["id"] for item in context["experiences"]],
|
||||
)
|
||||
|
||||
def test_step_edit_uses_source_and_library_not_private_case(self) -> None:
|
||||
def test_step_edit_uses_private_evidence_and_isolated_designir(self) -> None:
|
||||
result = route_module.route(
|
||||
self.parse(
|
||||
"把中心孔径调整大一些",
|
||||
"--edit-source",
|
||||
"/tmp/source.step",
|
||||
"--output",
|
||||
"step",
|
||||
)
|
||||
)
|
||||
plan = result["design_plan"]
|
||||
self.assertEqual("modify", plan["operation"])
|
||||
self.assertEqual(
|
||||
"direct_step_feature_rebuild",
|
||||
"private_evidence_to_isolated_designir_reconstruction",
|
||||
plan["edit_context"]["modification_mode"],
|
||||
)
|
||||
forbidden = plan["edit_context"]["forbidden_knowledge_sources"]
|
||||
self.assertIn("cad-experience-plugin/parser/output", forbidden)
|
||||
self.assertNotIn("private_case", plan["edit_context"])
|
||||
self.assertIn("teacher STEP during reconstruction", forbidden)
|
||||
self.assertIn(
|
||||
"deterministically extracted private teacher evidence",
|
||||
plan["edit_context"]["allowed_knowledge_sources"],
|
||||
)
|
||||
self.assertEqual(
|
||||
"pending_source_classification", plan["experience_status"]
|
||||
)
|
||||
@@ -368,8 +352,6 @@ class CadRouterTests(unittest.TestCase):
|
||||
"把孔径改为 12mm",
|
||||
"--edit-source",
|
||||
"/tmp/model.py",
|
||||
"--output",
|
||||
"step",
|
||||
)
|
||||
)
|
||||
self.assertEqual(
|
||||
@@ -377,22 +359,21 @@ class CadRouterTests(unittest.TestCase):
|
||||
result["design_plan"]["edit_context"]["modification_mode"],
|
||||
)
|
||||
|
||||
def test_parser_staging_files_are_rejected_as_edit_sources(self) -> None:
|
||||
parser_source = (
|
||||
def test_teacher_vault_is_rejected_as_reconstruction_source(self) -> None:
|
||||
teacher_source = (
|
||||
Path(__file__).resolve().parents[5]
|
||||
/ "cad-experience-plugin"
|
||||
/ "parser"
|
||||
/ "input"
|
||||
/ "designir-pipeline"
|
||||
/ "workspace"
|
||||
/ "teacher"
|
||||
/ "inbox"
|
||||
/ "part.step"
|
||||
)
|
||||
with self.assertRaisesRegex(ValueError, "cannot use"):
|
||||
with self.assertRaisesRegex(ValueError, "cannot read the teacher"):
|
||||
route_module.route(
|
||||
self.parse(
|
||||
"修改这个零件",
|
||||
"--edit-source",
|
||||
str(parser_source),
|
||||
"--output",
|
||||
"step",
|
||||
str(teacher_source),
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user