diff --git a/common/sampling.py b/common/sampling.py index a72dd4f..022030c 100644 --- a/common/sampling.py +++ b/common/sampling.py @@ -325,6 +325,16 @@ def apply_forced_sampler_overrides(params: BaseSamplerRequest): for var, value in overrides.items(): override = value.get("override") - force = unwrap(value.get("force"), False) - if force and override: - setattr(params, var, override) + original_value = getattr(params, var, None) + + # Force takes precedence over additive + # Additive only works on lists and doesn't remove duplicates + if override: + if unwrap(value.get("force"), False): + setattr(params, var, override) + elif ( + unwrap(value.get("additive"), False) + and isinstance(override, list) + and isinstance(original_value, list) + ): + setattr(params, var, override + original_value) diff --git a/sampler_overrides/sample_preset.yml b/sampler_overrides/sample_preset.yml index 88dee47..d91b1a1 100644 --- a/sampler_overrides/sample_preset.yml +++ b/sampler_overrides/sample_preset.yml @@ -14,6 +14,7 @@ max_tokens: stop: override: [] force: false + additive: false token_healing: override: false force: false @@ -104,6 +105,7 @@ ban_eos_token: logit_bias: override: force: false + additive: false # MARK: CFG scale cfg_scale: