mlflow/mlflow · warning · MlflowException

Invalid comparator for tag: {comparator}

Error message

Invalid comparator for tag: {comparator}

What it means

For tag filter expressions (tags.key = 'value' style), only =, !=, LIKE and ILIKE comparators are supported; any other comparator raises an invalid-parameter MlflowException raised via MlflowException.invalid_parameter_value.

Source

Thrown at mlflow/store/model_registry/sqlalchemy_store.py:613

            key = f["key"]
            comparator = f["comparator"]
            value = f["value"]
            if type_ == "attribute":
                if key != "name":
                    raise MlflowException(
                        f"Invalid attribute name: {key}", error_code=INVALID_PARAMETER_VALUE
                    )
                if comparator not in ("=", "!=", "LIKE", "ILIKE"):
                    raise MlflowException(
                        f"Invalid comparator for attribute: {comparator}",
                        error_code=INVALID_PARAMETER_VALUE,
                    )
                attr = getattr(SqlRegisteredModel, key)
                attr_filter = SearchUtils.get_sql_comparison_func(comparator, dialect)(attr, value)
                attribute_filters.append(attr_filter)
            elif type_ == "tag":
                if comparator not in ("=", "!=", "LIKE", "ILIKE"):
                    raise MlflowException.invalid_parameter_value(
                        f"Invalid comparator for tag: {comparator}"
                    )
                if key not in tag_filters:
                    key_filter = SearchUtils.get_sql_comparison_func("=", dialect)(
                        SqlRegisteredModelTag.key, key
                    )
                    tag_filters[key] = [key_filter]
                    tag_filters[key].extend(tag_where_clauses)

                val_filter = SearchUtils.get_sql_comparison_func(comparator, dialect)(
                    SqlRegisteredModelTag.value, value
                )
                tag_filters[key].append(val_filter)
            else:
                raise MlflowException(
                    f"Invalid token type: {type_}", error_code=INVALID_PARAMETER_VALUE
                )

View on GitHub (pinned to 6a27f2decc)

Solutions

  1. Restrict tag comparators to =, !=, LIKE, ILIKE, e.g. "tags.env = 'prod'"
  2. Replace unsupported operators with several = queries joined client-side, or use LIKE patterns
  3. Fix typos such as == to = and validate filters before calling the API

Example fix

// before
client.search_registered_models("tags.env != null or tags.env > 'dev'")
// after
client.search_registered_models("tags.env = 'dev'")
Defensive patterns

Strategy: validation

Validate before calling

import re
ALLOWED = {"=", "!=", "LIKE", "ILIKE"}
# e.g. "tags.env = 'prod'"
m = re.match(r"tags\.([\w.\-]+)\s*(=|!=|LIKE|ILIKE)\s*'(.*)'$", filter_string.strip())
if not m or m.group(2) not in ALLOWED:
    raise ValueError("Tag filters support only =, !=, LIKE, ILIKE")

Try / catch

from mlflow.exceptions import MlflowException
try:
    result = client.search_registered_models(filter_string=f)
except MlflowException as e:
    if 'Invalid comparator for tag' in str(e):
        result = [m for m in client.search_registered_models() if matches_client_side(m, f)]
    else:
        raise

Prevention

When it happens

Trigger: Passing a filter like "tags.env > 'prod'" or "tags."team" IN ('a','b')" to search_registered_models; tag keys with quotes/escapes mis-parsed can also yield unexpected comparator values.

Common situations: Copy-paste from run/experiment search filters which support more operators; template-built filters interpolating operators from configuration; typos like '==' instead of '='.

Related errors


AI-assisted analysis of mlflow/mlflow@6a27f2decc (2026-08-29). Data as JSON: /api/errors/03e552ec60eb8b9e. Report an issue: GitHub.