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
- Restrict tag comparators to =, !=, LIKE, ILIKE, e.g. "tags.env = 'prod'"
- Replace unsupported operators with several = queries joined client-side, or use LIKE patterns
- 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
- Use only =, !=, LIKE, ILIKE for tag filters
- Fix typos like '==' before sending filters
- Restrict range operators to client-side filtering of search results
- Reuse a single validated filter-builder for all model search calls
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
- At least one location must be specified for searching traces
- Resource type {resource_type!r} does not support tag filteri
- INVALID_PARAMETER_VALUE
- Invalid comparator '{comparator}' not one of '{cls.VALID_STR
- The `requestPreview` parameter must be a string.
AI-assisted analysis of mlflow/mlflow@6a27f2decc (2026-08-29).
Data as JSON: /api/errors/03e552ec60eb8b9e.
Report an issue: GitHub.