feat: dynamically clean incompatible architectures
This commit is contained in:
@@ -492,6 +492,34 @@ class CandidatePreflightTests(unittest.TestCase):
|
||||
self.assertFalse(result["failureNeedsLlm"])
|
||||
self.assertEqual(0, classifier.calls)
|
||||
|
||||
def test_fixed_platform_error_extracts_unsupported_model_type(self) -> None:
|
||||
result = classify_failure_archive(
|
||||
make_failure_archive(
|
||||
"MODEL_NOT_SUPPORTED",
|
||||
"Value error, The checkpoint you are trying to load has model type `qwen3_5` "
|
||||
"but Transformers does not recognize this architecture.",
|
||||
"当前框架版本不支持该模型架构,检查框架版本或改用兼容的推理后端。",
|
||||
)
|
||||
)
|
||||
|
||||
self.assertEqual("framework_architecture_unsupported", result["failureCategory"])
|
||||
self.assertEqual(["qwen3_5"], result["failureUnsupportedModelTypes"])
|
||||
|
||||
def test_fixed_runtime_error_extracts_unsupported_architecture_names(self) -> None:
|
||||
result = classify_failure_archive(
|
||||
make_failure_archive(
|
||||
"MODEL_NOT_SUPPORTED",
|
||||
"ValueError: Model architectures ['CogVLMForCausalLM'] are not supported for now. "
|
||||
"Supported architectures: dict_keys(['Qwen2ForCausalLM'])",
|
||||
"当前框架版本不支持该模型架构,检查框架版本或改用兼容的推理后端。",
|
||||
)
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
["CogVLMForCausalLM"],
|
||||
result["failureUnsupportedArchitectures"],
|
||||
)
|
||||
|
||||
def test_generic_unsupported_backend_does_not_create_architecture_feedback(self) -> None:
|
||||
classification = classify_failure_report(
|
||||
"ATTENTION_NOT_SUPPORTED",
|
||||
@@ -663,6 +691,50 @@ class CandidatePreflightTests(unittest.TestCase):
|
||||
|
||||
self.assertEqual({}, report["architectureCompatibilityBlocks"])
|
||||
|
||||
def test_parsed_model_type_builds_dynamic_block_without_saved_model_profile(self) -> None:
|
||||
now = datetime.now(timezone.utc)
|
||||
with tempfile.TemporaryDirectory() as temporary_dir:
|
||||
tracker = OutcomeTracker(Path(temporary_dir) / "outcomes.jsonl")
|
||||
tracker.record_submission(
|
||||
"owner/source",
|
||||
"gpu",
|
||||
"vllm",
|
||||
"text-generation",
|
||||
"task-no-profile",
|
||||
now.isoformat(),
|
||||
)
|
||||
tracker._records[0].update( # noqa: SLF001
|
||||
{
|
||||
"outcome": "failed",
|
||||
"failureCategory": "framework_architecture_unsupported",
|
||||
"failureDeterministic": True,
|
||||
"failureClassificationReason": "explicit_framework_model_unsupported",
|
||||
"failureUnsupportedModelTypes": ["qwen3_5"],
|
||||
}
|
||||
)
|
||||
report = tracker.get_stats_report()
|
||||
|
||||
key = "gpu|vllm|text-generation|model_type:qwen3_5"
|
||||
self.assertIn(key, report["architectureCompatibilityBlocks"])
|
||||
advisor = CandidatePreflightAdvisor(gpu_memory_gib={})
|
||||
advisor.set_feedback_stats(report)
|
||||
assessment = advisor.assess(
|
||||
inspection=ModelInspection(
|
||||
repo_id="unrelated/repository-name",
|
||||
model_config={
|
||||
"model_type": "qwen3_5",
|
||||
"architectures": ["Qwen3_5ForCausalLM"],
|
||||
},
|
||||
),
|
||||
task_type="text-generation",
|
||||
target_gpu="gpu",
|
||||
framework="vllm",
|
||||
config_params="",
|
||||
)
|
||||
|
||||
self.assertFalse(assessment.allowed)
|
||||
self.assertEqual("preflight_learned_architecture_incompatible", assessment.reason)
|
||||
|
||||
def test_outcome_sync_enriches_failure_and_excludes_platform_fault_from_feedback(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as temporary_dir:
|
||||
path = Path(temporary_dir) / "outcomes.jsonl"
|
||||
|
||||
Reference in New Issue
Block a user