Bootstrap architecture rules from task history

This commit is contained in:
CoolBoy
2026-08-12 08:41:07 +08:00
parent 7ec875563e
commit d8ed7fa1c2
12 changed files with 653 additions and 63 deletions

View File

@@ -32,6 +32,28 @@ MODEL_ARCHITECTURES_NOT_SUPPORTED_PATTERN = re.compile(
r"(?:are|is)\s+not\s+supported\s+for\s+now",
re.IGNORECASE,
)
SUBMITTED_FRAMEWORK_PATTERN = re.compile(
r"\[submit\]\s*framework\s*:\s*(?P<framework>[A-Za-z0-9_.-]{1,80})",
re.IGNORECASE,
)
TARGET_DOCKER_IMAGE_PATTERN = re.compile(
r"\[submit\]\s*docker_image\s*:\s*(?P<image>\S{1,500})",
re.IGNORECASE,
)
FRAMEWORK_IMAGE_MARKERS = (
("vllm-customized", ("vllm-customized", "vllm_customized")),
("vllm_fix_tokenizer", ("vllm-fix-tokenizer", "vllm_fix_tokenizer")),
("sentence-transformers", ("sentence-transformers", "sentence_transformers")),
("sherpa-onnx", ("sherpa-onnx", "sherpa_onnx")),
("llamacpp", ("llamacpp", "llama-cpp", "llama.cpp")),
("vllm-mlu", ("vllm-mlu", "vllm_mlu")),
("vllm-016", ("vllm-016", "vllm_016")),
("diffusers", ("diffusers",)),
("transformers", ("transformers",)),
("sglang", ("sglang",)),
("funasr", ("funasr",)),
("vllm", ("vllm",)),
)
def fetch_and_classify_failure_log(
@@ -111,6 +133,10 @@ def classify_failure_archive(
result["failureUnsupportedArchitectures"] = unsupported_architectures
if unsupported_model_types:
result["failureUnsupportedModelTypes"] = unsupported_model_types
detected_framework, framework_source = _extract_submitted_framework(runtime_log)
if detected_framework:
result["failureDetectedFramework"] = detected_framework
result["failureDetectedFrameworkSource"] = framework_source
if classification.needs_llm and llm_classifier is not None and llm_classifier.enabled:
llm_decision = llm_classifier.classify_failure(
task_context=dict(task_context or {}),
@@ -137,6 +163,22 @@ def classify_failure_archive(
return result
def _extract_submitted_framework(runtime_log: str) -> tuple[str | None, str | None]:
"""Recover only explicit or unambiguous target-framework evidence."""
explicit = SUBMITTED_FRAMEWORK_PATTERN.search(runtime_log)
if explicit:
return explicit.group("framework").strip(), "submit_framework"
image_match = TARGET_DOCKER_IMAGE_PATTERN.search(runtime_log)
if image_match is None:
return None, None
target_image = image_match.group("image").strip().casefold()
for framework, markers in FRAMEWORK_IMAGE_MARKERS:
if any(marker in target_image for marker in markers):
return framework, "target_docker_image"
return None, None
def _extract_error_lines(runtime_log: str) -> list[str]:
selected: list[str] = []
for raw_line in runtime_log.splitlines():