FoundationAgents/MetaGPT · error · ValueError
Missing query bundle in extra info.
Error message
Missing query bundle in extra info.
What it means
ObjectSortPostprocessor._postprocess_nodes requires a QueryBundle because it sorts nodes independently of query similarity; llama-index calls postprocessors with query_bundle derived from the query string. If retrieval is invoked without a query (e.g. retrieval from an explicit node list, or a custom pipeline that passes query_bundle=None), this ValueError fires.
Source
Thrown at metagpt/rag/rankers/object_ranker.py:35
Assumes nodes is list of ObjectNode with score.
"""
field_name: str = Field(..., description="field name of the object, field's value must can be compared.")
order: Literal["desc", "asc"] = Field(default="desc", description="the direction of order.")
top_n: int = 5
@classmethod
def class_name(cls) -> str:
return "ObjectSortPostprocessor"
def _postprocess_nodes(
self,
nodes: list[NodeWithScore],
query_bundle: Optional[QueryBundle] = None,
) -> list[NodeWithScore]:
"""Postprocess nodes."""
if query_bundle is None:
raise ValueError("Missing query bundle in extra info.")
if not nodes:
return []
self._check_metadata(nodes[0].node)
sort_key = lambda node: json.loads(node.node.metadata["obj_json"])[self.field_name]
return self._get_sort_func()(self.top_n, nodes, key=sort_key)
def _check_metadata(self, node: ObjectNode):
try:
obj_dict = json.loads(node.metadata.get("obj_json"))
except Exception as e:
raise ValueError(f"Invalid object json in metadata: {node.metadata}, error: {e}")
if self.field_name not in obj_dict:
raise ValueError(f"Field '{self.field_name}' not found in object: {obj_dict}")
View on GitHub (pinned to 11cdf466d0)
Solutions
- Always call retriever.retrieve("your query text") or query_engine.query(...) so a QueryBundle is built and passed through
- If driving the postprocessor manually, construct QueryBundle(query_str) and pass it as query_bundle
- Guard custom pipelines: skip or no-op the object ranker when no query string is available
Example fix
// before
nodes = retriever.retrieve(None) # ValueError inside ObjectSortPostprocessor
// after
from llama_index.core import QueryBundle
nodes = retriever.retrieve("sort products by price") Defensive patterns
Strategy: validation
Validate before calling
if not query_str:
raise ValueError("a non-empty query string is required when the object ranker is in the pipeline")
nodes = retriever.retrieve(query_str) Try / catch
try:
nodes = retriever.retrieve(query)
except ValueError as e:
if "Missing query bundle" in str(e):
from llama_index.core import QueryBundle
nodes = ranker.postprocess_nodes(retriever.retrieve_nodes_for_query(QueryBundle(query)), query_bundle=Bundle(query))
raise Prevention
- Always pass a non-empty query string through retrieve/query so llama-index builds a QueryBundle
- In custom pipelines, construct QueryBundle(query_str) explicitly before postprocessing
- Skip query-independent postprocessors in flows that legitimately have no query
When it happens
Trigger: Retriever.retrieve(...) called with no query argument so llama-index forwards query_bundle=None into the postprocessor; integrating ObjectSortPostprocessor into a query engine that was constructed without a query transformer that produces a QueryBundle.
Common situations: Using the object ranker in a custom llama-index pipeline or retriever that calls _postprocess_nodes directly; calling retriever.retrieve() with empty/None query during testing; embedding-only retrieval flows that skip query construction.
Related errors
- Must provide either `input_dir` or `input_files`.
- `llama-index-postprocessor-colbert-rerank` package not found
- `llama-index-postprocessor-cohere-rerank` package not found,
- `llama-index-postprocessor-flag-embedding-reranker` package
- Content column not found in DataFrame.
AI-assisted analysis of FoundationAgents/MetaGPT@11cdf466d0 (2026-08-14).
Data as JSON: /api/errors/4a0541748e1cc696.
Report an issue: GitHub.