def expand_query_safely(parsed, new_keywords: list[str], max_keywords: int = 15): try: expanded = parsed.model_copy(deep=True) except AttributeError: import copy as _copy expanded = _copy.deepcopy(parsed) originals = list(expanded.retrieval.anchor_keywords or []) additions = [k for k in new_keywords if k not in originals] combined = originals + additions if len(combined) > max_keywords: kept_originals = originals[:max_keywords] room = max_keywords - len(kept_originals) combined = kept_originals + additions[-room:] if room > 0 else kept_originals expanded.retrieval.anchor_keywords = combined return expanded