run-llama/llama_index · error · ValueError
Invalid filter condition: {filter_condition}
Error message
Invalid filter condition: {filter_condition} What it means
The final guard in the filter closure built by `build_metadata_filter_fn`: after evaluating all individual filters, their boolean results are combined according to `filter_condition`, but only FilterCondition.AND, OR, and NOT are implemented. Any other value — typically a raw string like "and", None, or an enum member unknown to this version — falls through to `raise ValueError(f"Invalid filter condition: {filter_condition}")`. As with the operator error, string-instead-of-enum is the most common cause.
Source
Thrown at llama-index-core/llama_index/core/vector_stores/utils.py:191
)
else:
filter_matches = _process_filter_match(
operator=filter_.operator,
value=filter_.value,
metadata_value=metadata_value,
)
filter_matches_list.append(filter_matches)
if filter_condition == FilterCondition.AND:
return all(filter_matches_list)
if filter_condition == FilterCondition.OR:
return any(filter_matches_list)
if filter_condition == FilterCondition.NOT:
# Match when none of the filters match.
return not any(filter_matches_list)
raise ValueError(f"Invalid filter condition: {filter_condition}")
return filter_fn
# TODO: Deprecated conversion functions
def legacy_metadata_dict_to_node(
metadata: dict, text_key: str = DEFAULT_TEXT_KEY
) -> Tuple[dict, dict, dict]:
"""Common logic for loading Node data from metadata dict."""
# make a copy first
if metadata is None:
metadata = {}
else:
metadata = metadata.copy()
# load node_info from json string
node_info_str = metadata.pop("node_info", "")
if node_info_str == "":View on GitHub (pinned to afd0fef371)
Solutions
- Pass the enum: `condition=FilterCondition.AND` (from `llama_index.core.vector_stores.types` / `llama_index.core.vector_stores`).
- Convert strings explicitly for config-driven code: `FilterCondition("and")` with error handling.
- Always set a condition explicitly instead of None.
- Keep llama-index-core and integration packs version-aligned.
Example fix
# before f = MetadataFilters(filters=[...], condition="and") # after from llama_index.core.vector_stores import FilterCondition f = MetadataFilters(filters=[...], condition=FilterCondition.AND)
Defensive patterns
Strategy: type-guard
Validate before calling
from llama_index.core.vector_stores import FilterCondition
def coerce_condition(cond):
if isinstance(cond, FilterCondition):
return cond
try:
return FilterCondition(cond)
except ValueError:
raise ValueError(f"unknown condition {cond!r}; valid: {[c.value for c in FilterCondition]}") Type guard
def is_valid_condition(cond) -> bool:
from llama_index.core.vector_stores import FilterCondition
return isinstance(cond, FilterCondition) and cond in list(FilterCondition) Try / catch
try:
result = store.query(query)
except ValueError as e:
if "Invalid filter condition" in str(e):
raise ValueError("pass FilterCondition.AND/OR/NOT enum, not strings") from e
raise Prevention
- Always set condition explicitly with the FilterCondition enum.
- Parse condition strings from config via FilterCondition(value).
- Add a filter-schema validator for config- or LLM-driven filter construction.
When it happens
Trigger: Creating `MetadataFilters(filters=[...], condition="and")` or `condition=None` and running the query against a client-side-filtering store; passing a condition enum from a newer/older llama-index version than the one evaluating it.
Common situations: Config files or LLM tool schemas that supply condition as a string; version skew between llama-index-core and integration packages emitting different FilterCondition members; defaulting condition to None and relying on an implicit AND that this code path does not apply.
Related errors
- Invalid operator: {operator}
- Cannot filter stores that were persisted without metadata. P
- Vector Store only supports exact match filters. Please use E
- Both metadata_value and value should be strings to be used w
- Both metadata_value and value should be strings to be used w
AI-assisted analysis of run-llama/llama_index@afd0fef371 (2026-08-15).
Data as JSON: /api/errors/907cde043d64de2b.
Report an issue: GitHub.