mudler/LocalAI · error · ValueError

{name} must be a number

Error message

{name} must be a number

What it means

Raised by require_float() in the longcat-video backend when a numeric option cannot be parsed with float(). TypeError (None, containers) and ValueError (unparseable strings like 'fast') are re-raised as this message with the original exception chained.

Source

Thrown at backend/python/longcat-video/longcat_utils.py:109


def require_int(value, name, minimum=None, maximum=None):
    try:
        parsed = int(value)
    except (TypeError, ValueError) as err:
        raise ValueError(f"{name} must be an integer") from err
    if minimum is not None and parsed < minimum:
        raise ValueError(f"{name} must be at least {minimum}")
    if maximum is not None and parsed > maximum:
        raise ValueError(f"{name} must be at most {maximum}")
    return parsed


def require_float(value, name, minimum=None, maximum=None):
    try:
        parsed = float(value)
    except (TypeError, ValueError) as err:
        raise ValueError(f"{name} must be a number") from err
    if minimum is not None and parsed < minimum:
        raise ValueError(f"{name} must be at least {minimum}")
    if maximum is not None and parsed > maximum:
        raise ValueError(f"{name} must be at most {maximum}")
    return parsed


def attention_overrides(name):
    try:
        return dict(ATTENTION_OVERRIDES[name])
    except KeyError as err:
        choices = ", ".join(ATTENTION_OVERRIDES)
        raise ValueError(f"attention_backend must be one of: {choices}") from err


def _model_name_from_directory(path):
    for filename in ("model_index.json", "config.json"):
        config_path = os.path.join(path, filename)

View on GitHub (pinned to 44413a9d06)

Solutions

  1. Pass a real float/int or a clean numeric string like '0.7'
  2. Normalize locale input before validation (replace ',' with '.')
  3. Default None to the option's default before calling require_float

Example fix

# before
require_float('0,7', 'cfg_scale')  # ValueError: cfg_scale must be a number

# after
require_float('0.7', 'cfg_scale')  # 0.7
Defensive patterns

Strategy: validation

Validate before calling

def coerce_float(value, default=None):
    if value is None:
        return default
    try:
        return float(value)
    except (TypeError, ValueError):
        return None

scale = coerce_float(opts.get('cfg_scale'), 0.7)

Type guard

def is_float_like(v) -> bool:
    if isinstance(v, bool):
        return False
    if isinstance(v, (int, float)):
        return True
    if isinstance(v, str):
        try:
            float(v)
            return True
        except ValueError:
            return False
    return False

Try / catch

try:
    value = require_float(raw, 'cfg_scale')
except ValueError as err:
    logger.warning('invalid option: %s', err)
    value = DEFAULT

Prevention

When it happens

Trigger: Calling an option routed through require_float with None, a non-numeric string ('high'), or a malformed number ('1,5' with a comma separator from locale-formatted input).

Common situations: Locale-formatted decimal strings, YAML values that parse as strings instead of numbers, or null passed from JSON payloads for optional float fields.

Related errors


AI-assisted analysis of mudler/LocalAI@44413a9d06 (2026-08-15). Data as JSON: /api/errors/d434e8bd9f2f464c. Report an issue: GitHub.