ZhuLinsen/daily_stock_analysis · warning · HTTPException

validation_failed

validation_failed

Error message

System configuration validation failed

What it means

Raised by POST /system/config/generation-backends/status/preview when service.preview_generation_backend_status raises ConfigValidationError while checking unsaved draft values. Returns 400 'validation_failed' with the structured exc.issues list attached — this is a functional validation response, not a server fault.

Source

Thrown at api/v1/endpoints/system_config.py:247

        400: {"description": "Validation failed", "model": SystemConfigValidationErrorResponse},
        500: {"description": "Internal server error", "model": ErrorResponse},
    },
    summary="Preview generation backend status",
    description="Run a side-effect-free cheap check against unsaved settings draft values.",
)
def preview_generation_backend_status(
    request: GenerationBackendStatusPreviewRequest,
    service: SystemConfigService = Depends(get_system_config_service),
) -> GenerationBackendStatusResponse:
    """Return generation backend status for unsaved draft values."""
    try:
        payload = service.preview_generation_backend_status(
            items=[item.model_dump() for item in request.items],
            mask_token=request.mask_token,
        )
        return GenerationBackendStatusResponse.model_validate(payload)
    except ConfigValidationError as exc:
        raise HTTPException(
            status_code=400,
            detail={
                "error": "validation_failed",
                "message": "System configuration validation failed",
                "issues": exc.issues,
            },
        )
    except Exception as exc:
        logger.error("Failed to preview generation backend status: %s", exc, exc_info=True)
        raise HTTPException(
            status_code=500,
            detail={
                "error": "internal_error",
                "message": "Failed to preview generation backend status",
            },
        )

View on GitHub (pinned to 5159bd72e8)

Solutions

  1. Read the 'issues' array in the 400 body — each entry identifies which draft item field failed
  2. Fix the flagged fields in the request items and re-POST the preview
  3. Do not treat this as retryable; it is deterministic input validation

Example fix

// before
const res = await fetch(url, {method:'POST', body: JSON.stringify({items: [{backend_id: '', ...}]})});
// after
const res = await fetch(url, {method:'POST', body: JSON.stringify({items: [{backend_id: 'openai', ...}]})});
if (res.status === 400) { const {detail} = await res.json(); showIssues(detail.issues); }
Defensive patterns

Strategy: validation

Validate before calling

// Validate drafts minimally client-side before preview:
items.every(i => i.backend_id && typeof i === 'object')

Type guard

function hasValidationIssues(d) {
  return d?.detail?.error === 'validation_failed' && Array.isArray(d.detail.issues);
}

Try / catch

const body = await res.json();
if (res.status === 400 && body.detail?.error === 'validation_failed') {
  showIssues(body.detail.issues); // structured, per-field
}

Prevention

When it happens

Trigger: Submitting draft generation backend items (e.g. a backend entry with an empty API key, invalid model name, or unknown backend_id) to the preview endpoint; the service validates drafts before computing status.

Common situations: User editing backend config in the settings UI and previewing before save; automation posting incomplete draft payloads; masked token misuse (wrong mask_token) when editing secrets.

Related errors


AI-assisted analysis of ZhuLinsen/daily_stock_analysis@5159bd72e8 (2026-08-15). Data as JSON: /api/errors/ec019805ed6a15ba. Report an issue: GitHub.