diff --git a/agent/tools/retrieval.py b/agent/tools/retrieval.py index 0ccf056a29..02cb3e2ce6 100644 --- a/agent/tools/retrieval.py +++ b/agent/tools/retrieval.py @@ -142,6 +142,11 @@ class Retrieval(ToolBase, ABC): return DocMetadataService.get_flatted_meta_by_kbs(kb_ids) def _resolve_manual_filter(flt: dict) -> dict: + # Return a new dict instead of mutating `flt` in place. The + # caller passes filters straight out of self._param.meta_data_filter, + # so mutating them would replace the variable reference with its + # resolved value and every subsequent invocation (e.g. inside an + # Iteration component) would reuse that stale value. pat = re.compile(self.variable_ref_patt) s = flt.get("value", "") out_parts = [] @@ -167,8 +172,9 @@ class Retrieval(ToolBase, ABC): last = m.end() out_parts.append(s[last:]) - flt["value"] = "".join(out_parts) - return flt + resolved = dict(flt) + resolved["value"] = "".join(out_parts) + return resolved chat_mdl = None if self._param.meta_data_filter.get("method") in ["auto", "semi_auto"]: