From 49080cbae2f340fe90ee5ea94a177ddca6a677bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Luis=20C=C3=B3rdova?= <107780279+Damkohler@users.noreply.github.com> Date: Sat, 19 Sep 2026 09:41:41 -0400 Subject: [PATCH] Make Ollama replace_pairs boundary-safe --- .../jlc_captionforge_ollama_caption_node.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/nodes/caption_nodes/jlc_captionforge_ollama_caption_node.py b/nodes/caption_nodes/jlc_captionforge_ollama_caption_node.py index 4f5a57e..c4b1d13 100644 --- a/nodes/caption_nodes/jlc_captionforge_ollama_caption_node.py +++ b/nodes/caption_nodes/jlc_captionforge_ollama_caption_node.py @@ -202,7 +202,7 @@ import folder_paths from ...engines.captionforge_pipeline_planner_engine import expand_captionforge_runs from ...engines.captionforge_source_identity import file_source_identity, optional_image_identity from ...engines.captionforge_dataset_export import is_dataset_export -from ...engines.captionforge_cleanup import contains_forbidden_phrase +from ...engines.captionforge_cleanup import contains_forbidden_phrase, replace_phrases from ...engines.captionforge_caption_prompt_kit import ( CAPTION_LENGTH_CHOICES, CAPTION_TYPE_CHOICES, @@ -1030,8 +1030,11 @@ def _clean_caption( replacement_rules: list[tuple[str, str]], ) -> tuple[str, str]: text = str(raw or "").strip().strip('"').strip() - for old, new in replacement_rules: - text = text.replace(old, new) + text = replace_phrases( + text, + replacement_rules, + case_insensitive=False, + ) if forbidden_phrases: kept: list[str] = [] @@ -1092,6 +1095,8 @@ def _build_run_config( "cleanup": { "forbidden_phrases": list(forbidden_phrases), "replacement_rules": [list(rule) for rule in replacement_rules], + "replacement_match_mode": "whole_word_or_phrase_boundary", + "replacement_case_insensitive": False, "forbidden_match_mode": "whole_word_or_phrase_boundary", "forbidden_action": "drop_matching_line", },