{"record":{"id":"14182b68854f2dab","repo":"datawhalechina/hello-agents","slug":"unsupported-latency-mode-latency-mode","errorCode":null,"errorMessage":"Unsupported latency_mode: {latency_mode}","messagePattern":"Unsupported latency_mode: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"Co-creation-projects/healer-666-Academic-Data-Agent/src/data_analysis_agent/agent_runner.py","lineNumber":361,"sourceCode":"                    line += f\" | {url}\"\n                if snippet:\n                    line += f\" | {snippet}\"\n                result_lines.append(line)\n            if result_lines:\n                parts.append(\"Top search results:\\n\" + \"\\n\".join(result_lines))\n            if len(results) > 3:\n                parts.append(f\"... {len(results) - 3} more result(s) omitted.\")\n        return \"\\n\\n\".join(parts)\n\n    if text:\n        parts.append(f\"Observation text:\\n{_truncate_text(text, 1200)}\")\n    return \"\\n\\n\".join(parts)\n\n\ndef _resolve_latency_mode(latency_mode: str) -> str:\n    normalized_mode = latency_mode.strip().lower()\n    if normalized_mode not in {\"auto\", \"quality\", \"fast\"}:\n        raise ValueError(f\"Unsupported latency_mode: {latency_mode}\")\n    return normalized_mode\n\n\ndef _resolve_vision_review_mode(vision_review_mode: str) -> str:\n    normalized_mode = vision_review_mode.strip().lower()\n    if normalized_mode not in {\"off\", \"auto\", \"on\"}:\n        raise ValueError(f\"Unsupported vision_review_mode: {vision_review_mode}\")\n    return normalized_mode\n\n\ndef _is_small_simple_dataset(data_context: DataContextSummary) -> bool:\n    try:\n        file_size_bytes = data_context.absolute_path.stat().st_size\n    except OSError:\n        file_size_bytes = 0\n    rows, cols = data_context.shape\n    return file_size_bytes <= 512 * 1024 and rows <= 2000 and cols <= 50\n","sourceCodeStart":343,"sourceCodeEnd":379,"githubUrl":"https://github.com/datawhalechina/hello-agents/blob/606a07d341a47be773fab7f4b71177f53f96b2c3/Co-creation-projects/healer-666-Academic-Data-Agent/src/data_analysis_agent/agent_runner.py#L343-L379","documentation":"`_resolve_latency_mode` normalizes the latency_mode parameter (strip + lowercase) and raises ValueError if it is not one of the allowed enum values {'auto', 'quality', 'fast'}. It is a strict API-contract guard for the agent runner's latency/cost trade-off setting.","triggerScenarios":"Passing latency_mode='balanced', 'HIGH' (ok after normalization... actually 'high' still not allowed), 'turbo', None (AttributeError on .strip instead), or a typo like 'fasr' to the analysis run API; only 'auto', 'quality', 'fast' (case-insensitive) pass.","commonSituations":"Callers copying a mode name from a different tool's docs, config files edited by hand with typos, or client code sending the field when it was never set (None → .strip() crashes before validation).","solutions":["Set latency_mode to one of 'auto', 'quality', or 'fast' (case-insensitive; surrounding whitespace is tolerated).","If the field is optional on your side, omit it entirely rather than sending None/empty.","Harden the resolver: `if not latency_mode: return 'auto'` before stripping, to give None a sane default."],"exampleFix":"// before\nnormalized_mode = latency_mode.strip().lower()\nif normalized_mode not in {\"auto\", \"quality\", \"fast\"}:\n    raise ValueError(f\"Unsupported latency_mode: {latency_mode}\")\n\n# after\nnormalized_mode = (latency_mode or \"auto\").strip().lower()\nif normalized_mode not in {\"auto\", \"quality\", \"fast\"}:\n    raise ValueError(f\"Unsupported latency_mode: {latency_mode}\")","handlingStrategy":"type-guard","validationCode":"LATENCY_MODES = {\"auto\", \"quality\", \"fast\"}\n\ndef validate_latency_mode(mode: str | None) -> str:\n    normalized = (mode or \"auto\").strip().lower()\n    if normalized not in LATENCY_MODES:\n        raise ValueError(f\"latency_mode must be one of {sorted(LATENCY_MODES)}, got {mode!r}\")\n    return normalized","typeGuard":"from typing import Literal\n\nLatencyMode = Literal[\"auto\", \"quality\", \"fast\"]\n\ndef is_latency_mode(value: object) -> TypeGuard[LatencyMode]:\n    return isinstance(value, str) and value.strip().lower() in {\"auto\", \"quality\", \"fast\"}","tryCatchPattern":"try:\n    run_analysis(data_path, latency_mode=mode)\nexcept ValueError as e:\n    if \"latency_mode\" in str(e):\n        mode = \"auto\"  # fall back to default and re-run\n        run_analysis(data_path, latency_mode=mode)\n    else:\n        raise","preventionTips":["Define the allowed modes as a shared constant/enum used by both client and server.","Never send None — omit the field to use the default.","Validate enums at the API boundary, not deep in the runner."],"tags":["validation","enum","valueerror","configuration","python"],"backgroundTag":null,"analyzedSha":"606a07d341a47be773fab7f4b71177f53f96b2c3","analyzedAt":"2026-08-14T22:57:27.446Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}