Commit Graph
55 Commits
Author SHA1 Message Date
EthanfelandClaude Opus 4.8 588d6b0243 chore: untrack pre-existing plan docs swept in by git add -A
These docs/plans/2026-03/04-*.md were untracked local notes from earlier sessions
that an over-broad 'git add -A' committed. Untrack them (kept on disk) to restore
the prior state; this session's 2026-06-22 design doc stays.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 12:51:08 +02:00
EthanfelandClaude Opus 4.8 785983d13f fix(merge): revert automatic sum_preserve; style preservation is preserve-flag only
A real 3-LoRA merge (characters/concept, no style) oversaturated badly (energy
2.52x vs main's 1.02x): additive stacking is wrong for a balanced multi-LoRA blend.
The analyzer cannot tell 'preserve this style' from 'blend these characters' — both
are orthogonal — so additive must never be auto-selected; it has to be user intent.

- Revert _decide_prefix_mode: orthogonal groups blend by default again
  (weighted_average / SLERP), exactly like main. No auto sum_preserve.
- Make the preserve flag a general overlay in _merge_diffs: blend the non-preserved
  LoRAs with the chosen mode, then add each preserved LoRA's full delta on top
  (works for weighted_average/slerp/ties; still exempt from sparsification + TIES
  sign-election). Skip the exact-linear fast path when the stack has a preserve flag.
- Remove the standalone sum_preserve mode, its exact-linear handling,
  _ORTHO_SUM_HEADROOM, and the sum+ report/legend/strategy-count display.
- Tests: SumPreserveMergeTests -> PrefixModeRoutingTests (asserts additive is never
  auto-selected); add preserve-overlay-on-weighted_average tests. 299 pass.
- Docs (Merge-Algorithms, Tips) + design-doc postmortem updated; algo note reworded.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 11:53:36 +02:00
EthanfelandClaude Opus 4.8 044f680ef7 fix(merge): use sum_preserve for orthogonal groups in ALL strategy sets
Real run showed the first cut didn't fix it by default: the applied config was
the 'full' strategy (SLERP, energy 1.22x), while the style-preserving sum_preserve
config (no_slerp/basic, energy 1.91x) ranked LOWER and wasn't applied. Cause: the
Phase-2 scorer (_score_merge_result) is effective_rank*0.4 + (1-norm_cv)*0.3 +
sparsity_fit*0.3 — no magnitude/energy term, and (1-norm_cv) rewards uniform norms,
which is exactly SLERP's magnitude-flattening. So the scorer structurally prefers
the style-flattening merge over the style-preserving one.

SLERP is strictly worse than sum_preserve for orthogonal groups anyway (it rotates
two independent directions into a 45-degree blend that loses both, vs keeping each
in its own subspace), so orthogonal non-opposing groups now use sum_preserve in ALL
strategy sets — the AutoTuner's top config preserves the style by default, no manual
selection. SLERP is retained for its real sweet spot: non-orthogonal, similar-
direction (cos ~0.25-0.5) low-conflict groups in the full set.

Tests: orthogonal/full -> sum_preserve; non-orthogonal-aligned/full -> slerp;
non-orthogonal-aligned/no_slerp -> weighted_average. 304 pass. Docs + algo note updated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 11:27:47 +02:00
EthanfelandClaude Opus 4.8 54fb127f37 docs+chore: document sum_preserve + preserve flag; bump algo 1.11.0, registry 1.8.0
- Merge-Algorithms: new Sum-Preserve section + overview row; weighted_average
  caveat (the /Σw convex-fraction trap) and orthogonal->sum_preserve routing note
- Nodes: preserve toggle on LoRA Stack + LoRA Stack (Dynamic)
- Tips: new 'my style LoRA disappears' troubleshooting entry
- AUTOTUNER_ALGO_VERSION 1.10.2 -> 1.11.0 (orthogonal candidate merges/scores
  change), invalidating stale cached/community rankings
- registry version 1.7.5 -> 1.8.0

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 11:08:20 +02:00
EthanfelandClaude Opus 4.8 cdb14d6a01 feat(merge): per-LoRA preserve flag to protect tagged style LoRAs in conflict merges
Adds a 'preserve' toggle to LoRAStack and LoRAStackDynamic (advanced). A LoRA
tagged preserve=True is exempt from the two mechanisms that delete a style in a
conflict merge:
  - sparsification (DARE/DELLA/conflict-aware): its diff is never trimmed/dropped
  - TIES sign-election: instead of being zeroed where it holds the minority sign,
    its full contribution is added on top of the TIES-merged content

Plumbed as a 6th stack-tuple field / dict key through _normalize_stack,
_merge_one_group -> _merge_diffs(preserve_flags=...), and the IS_CHANGED cache
keys + LoRAConflictEditor tuple rebuilds (so toggling it invalidates caches and
survives the editor). LoRAStackDynamic JS migration extended 8->9 widgets/slot
(preserve appended at each slot tail; legacy 7- and 8-slot saves re-padded).

The auto-strength exclusion from the design was descoped (single uniform scale is
baked into the linear path + group-cache replay; the reduction is mild/floor-bounded).

7 new tests (PreserveFlagTests); conflict-editor tuple test updated to 6-tuple; 302 pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 11:05:34 +02:00
EthanfelandClaude Opus 4.8 418be13847 feat(merge): bounded-additive sum_preserve mode to keep style LoRAs from washing out
Per-prefix merging routes orthogonal groups to weighted_average, which divides
by Sum-of-weights and collapses each LoRA to a convex fraction. A style LoRA set
to strength 2 still lands below 1x its delta (s/(s+s') asymptotes to 1.0), so the
style vanishes while the heavier content LoRA survives -- confirmed against a real
Flux run (prodigy at 0.67x vs additive's 1.82x) and a deep-research wave.

Add 'sum_preserve': result = Sum(w_i d_i) at full strength, then a per-group energy
cap of headroom (1.5) x strongest single contribution. Two orthogonal LoRAs combine
to ~1.41x and pass through un-capped (style preserved); three equal ones hit ~1.73x
and scale back to 1.5x (no oversaturation). The cap is per-group and independent of
the global auto-strength floor, so it can't be defeated by the orthogonal-floor clamp
the way a raw weighted_sum flip would be.

Route orthogonal, non-opposing groups (no_slerp/basic strategy sets) to sum_preserve;
'full' keeps the video-tuned SLERP path. Opposing groups keep weighted_average.
Reuses the exact-linear fast path (folds the cap as a scalar from Pass-1 norms) so
full-rank Flux patches stay low-rank. Report/legend/strategy-counts updated.

11 new tests (SumPreserveMergeTests); 295 pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 10:52:22 +02:00
EthanfelandClaude Opus 4.8 d51c3918dc feat(arch): add Anima (CircleStone Labs / Cosmos-Predict2 DiT) support
Anima is a 2B anime text-to-image DiT that reuses NVIDIA Cosmos-Predict2's
denoiser (split QKV, 28 blocks) with a Qwen3 text encoder + unique llm_adapter.
Verified key forms against live HF files (circlestone-labs/Anima model + real
LoRAs from deadman44/dummy9996).

- Detector 'anima' placed BEFORE ACE-Step/Wan/LTX (its blocks.N.self_attn.q_proj
  + Qwen3 lora_te_layers_N otherwise collide). Discriminators: unique llm_adapter,
  Cosmos triple adaln_modulation_{self_attn,cross_attn,mlp}, GPT2 mlp.layer1/2,
  {self_attn,cross_attn}.output_proj.
- Normalizer -> canonical diffusion_model.blocks.N.*: handles ComfyUI/diffusion-pipe
  (passthrough), Kohya lora_unet_* (underscore->dot restore), diffusers
  transformer_blocks.attn1/attn2.to_* (best effort). Split QKV, no fuse/refuse.
- dit preset; arch label 'Anima (Cosmos-Predict2 DiT)'. README + wiki updated.
- 7 tests (detection on all 3 forms + no ACE/Wan/LTX collision; normalization
  convergence). 284 passing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 02:11:45 +02:00
EthanfelandClaude Opus 4.8 abe111d6f9 feat(key-filter): add audio_only / no_audio modes
Extend the per-LoRA key_filter (LoRA Stack + Stack Dynamic) with audio_only and
no_audio, so audio-video models (LTX-2, ACE-Step) can route audio vs video layers
per LoRA without a new field. A layer is 'audio' when 'audio' appears in its LoRA
prefix or resolved model key (audio_embeddings_connector, audio_adaln_single,
audio_patchify_proj, audio_proj_out, av_ca_audio_*, per-block audio sublayers).
Applied at the same two filter sites as shared_only/unique_only. Use cases: merge
two LTX LoRAs keeping one's sound (others -> no_audio); audio LoRA + video LoRA
(audio_only + no_audio). Tests + README/wiki updated; 275 passing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 18:13:02 +02:00
EthanfelandClaude Opus 4.8 487385cf60 docs: sync README + wiki to v1.7 (new nodes, params, architectures)
Bring the documentation up to date with the 1.7.0 / algo 1.10.2 state:
- README: document Conflict Editor, Merge Formula, Metadata Reader, Extract
  from Model, Combination Generator; fill param gaps (clip_strength_multiplier,
  dare_dampening, scoring_svd/device/formula, memory_mode, record_dataset,
  output_strength=-1 auto); clarify HunyuanVideo is dit-preset-only (not auto-detected).
- Wiki: add 7 missing nodes to Nodes.md; fix stale option lists (scoring_svd 4
  modes, memory_mode auto_ignore_strength, community_cache upload_only); add
  acestep_dit + Ideogram 4 to architecture tables; fix Home arch count (8->9);
  replace obsolete quality-level/profile names (enhanced+/maximum -> refine+/full,
  classic/v1.2 -> basic/full strategy sets).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 15:19:02 +02:00
EthanfelandClaude Fable 5 8b7a04e8ad docs(research): batch-2 adversarial verification of math-validation claims
Re-verified the 10 load-bearing claims with 2 adversarial votes each
(source-fidelity + independent refutation, 20 agents). 7 upheld, 3
disputed — all shipped code changes survive; disputes were attribution
errors, now corrected:

- Mean-source-norm calibration is from the Pico paper (arXiv 2604.16826
  "Crowded in B-Space"), not KnOTS — corrected throughout
- k/D chance baseline + canonical-correlation identity are
  first-principles facts (proven in-vote: Bjorck-Golub principal
  angles; Haar-uniform expectation), not statements of the Pico paper

Appends an addendum with the full tally and the load-bearing caveats:
J1/J0 bias vanishes at rho=0 (MC-verified at 4M samples); the 0.239
multi-SLERP collapse figure was MergeKit's tangent-space multislerp
(Karcher change independently justified via Buss & Fillmore 2001);
stable rank <-> quality is non-monotone (CART bell curve, AdaRank) —
keep the one-sided cap, never maximize rank; DELLA epsilon-convention
difference between paper and official repo.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 05:58:38 +02:00
EthanfelandClaude Fable 5 0f8a97c368 fix(autotuner): math validation HIGH fixes — excess-conflict baseline, Karcher mean
From the deep-research math validation (docs/research/2026-06-11-math-validation.md):

1. Excess conflict compared a magnitude-WEIGHTED mismatch ratio
   (min(|a|,|b|) weights) against the UNWEIGHTED arccos(rho)/pi
   expectation (Sheppard / degree-0 arc-cosine kernel). The two are not
   the same statistic (Cho & Saul: J1 != J0 angular dependence), and for
   correlated LoRAs mismatches concentrate on small-magnitude positions,
   so the weighted ratio sat systematically below the baseline — real
   conflict was under-detected (excess clamped to 0), biasing decisions
   away from TIES. Now: unweighted mismatch fraction AND correlation
   computed on the same noise-floored position set, baseline
   arccos(rho_strong)/pi. Weighted ratio kept as a separate metric.

2. slerp mode for N>=3 diffs replaced iterative pairwise SLERP with a
   weighted Karcher (Frechet) mean on the unit hypersphere (chordal-mean
   init, log/exp-map iteration, existing norm correction). Iterative
   multi-SLERP is order-dependent and collapses empirically (scores
   below plain linear averaging at m=5; Karcher 0.610 vs multi-SLERP
   0.239). N=2 keeps standard SLERP (the Karcher mean reduces to it).

Bump AUTOTUNER_ALGO_VERSION 1.7.0 -> 1.8.0 and ANALYSIS_CACHE_VERSION
1.7.1 -> 1.8.0 (pair metrics and merge behavior changed). Adds the full
cited validation report and 8 tests: identical/negated/independent
vectors give zero excess, count-concentrated conflict now detected
(old formula provably clamped it to 0), Karcher order-independence,
symmetric-direction, weight-pull, and N=2 SLERP regression (244 pass).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 02:27:24 +02:00
EthanfelandClaude Fable 5 8ad35ac475 feat(autotuner): batch 4 — record_dataset wiring, merge-on-write, identity guard
- Wire the documented record_dataset option: new widget on the AutoTuner
  node calls _save_tuner_dataset_entry after each full sweep (the
  function existed, was tested, and was documented in the wiki — but
  nothing ever called it). Wiki wording aligned: entries are recorded
  on full sweeps only, cache/memory replays don't append.

- Merge-on-write for shared cache files: lora/pair/analysis cache saves
  and the content-hash cache re-read the on-disk state and overlay the
  caller's keys (caller wins; None never clobbers a real lora entry;
  analysis entries are remapped to the caller's stack order first).
  Entries are content-derived so same-key collisions hold equivalent
  data — this removes cross-process lost updates without resorting to
  cross-platform file locking. The GC's prune save passes merge=False
  so dead keys aren't resurrected.

- Model/clip identity tracking via weakrefs (_track_model_identity):
  bare id() comparison could alias a new object reusing a freed
  object's address and serve a stale cached merge; the guard now also
  detects clip swaps and id reuse. Shared by optimize_merge and
  auto_tune.

- _extract_block_name is lru_cached (pure function, called per prefix
  per smoothing pass with two regex evaluations) and drops its local
  re import.

Adds 3 test classes (235 total pass).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 15:35:33 +02:00
EthanfelandClaude Opus 4.7 e5b7d4dfe9 feat(combinator): add rerun_source=original_progress filter
When rerun_mode=True and rerun_source='original_progress', restrict the
shuffled combo list to hashes present in the original combo_progress.json
before iteration. Lets the backfill rerun replay exactly the combos that
were processed originally, ignoring any LoRAs added since and any combos
that were never run.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 16:41:49 +02:00
EthanfelandClaude Opus 4.7 9e85ba178a feat(autotuner): add community_cache='upload_only' mode
Runs the full local sweep and uploads the resulting config to the HF
community cache, but never replays HF cache hits. Intended for backfill
reruns that need to re-publish enriched configs without being
short-circuited by the existing cached (unenriched) entry.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 16:03:42 +02:00
EthanfelandClaude Opus 4.7 a131ff9280 docs: add HF-enrichment skip task to combinator rerun plan
Task 2: during rerun mode, check HF for a matching enriched config
(any candidate carries per_prefix_decisions); if found, mark the combo
complete and advance. Adds per-instance caches for the HF file list
and per-combo results so the extra traffic is bounded.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 15:25:31 +02:00
EthanfelandClaude Opus 4.7 744efb2477 docs: add combinator rerun_mode toggle plan
Small side plan: temporary BOOLEAN input on LoRACombinationGenerator that
routes progress tracking to combo_progress_rerun.json, enabling a full
re-run of the 400-combo collection to backfill per-prefix decisions
once Phase A of the estimator plan lands. To be reverted after use.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 13:58:50 +02:00
EthanfelandClaude Opus 4.7 4d1892a2f0 docs: add estimator pre-node implementation plan
Task-by-task TDD plan for the case-based retrieval estimator. Covers
per-prefix decision capture (Phase A), feature extractor + index builder,
LoRAEstimator runtime, and the ComfyUI node surface.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 13:51:15 +02:00
EthanfelandClaude Opus 4.7 251e298d27 docs: estimator pre-node design
k-NN retrieval over HF community cache, emits tuner_data for the
existing optimizer replay path. Per-prefix instrumentation lands
first, dataset gets re-collected, estimator ships with both global
and per-prefix retrieval.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-21 13:43:33 +02:00
EthanfelandClaude Opus 4.6 dd48cc33c8 docs: add LoRA Combination Generator implementation plan
4 tasks: core logic tests, static methods, ComfyUI node interface,
stop mechanism verification. TDD approach throughout.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-19 12:18:08 +02:00
EthanfelandClaude Opus 4.6 014e15aa34 docs: add LoRA Combination Generator design
Node that exhaustively generates all 2/3-way LoRA combinations for
AutoTuner dataset collection. Uses seed-based deterministic shuffle
with lightweight completion tracking.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-19 12:15:59 +02:00
EthanfelandClaude Opus 4.6 abe3433e16 docs: replace exclusive cross-attention claim with v1.5 paper quote
The doc previously stated voice identity enters "exclusively" through
cross-attention, which was an inference not supported by any source.
Replace with the actual quote from the ACE-Step 1.5 paper and clarify
that voice info propagates through self-attention/MLP after injection.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 17:19:38 +02:00
EthanfelandClaude Opus 4.6 10bf36ada4 docs: fix node name references in ACE-Step recommendations
Use actual node names (LoRA Stack, LoRA Optimizer, LoRA AutoTuner)
instead of nonexistent "ZImage LoRA Merger node". Broaden recommendations
to cover all ACE-Step LoRA merges, not just vocal + music.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 13:14:57 +02:00
EthanfelandClaude Opus 4.6 fe9becfe73 feat: add ACE-Step 1.5 merge optimization for voice preservation
Add dedicated architecture support for ACE-Step music generation model LoRAs
with optimizations informed by the v1.5 hybrid attention architecture — cross-
attention is the primary voice-identity pathway (always global, attending to
timbre+lyric+text conditioning), while self-attention alternates sliding window
(local timbre) and global GQA (long-range structure).

Changes:
- New `acestep_dit` preset: wider orthogonal band (0.30), higher TIES threshold
  (0.35), full magnitude preservation (floor 1.0) — biases toward SLERP over
  TIES to prevent voice signal trimming in cross-attn layers
- Fix `to_out` → `o_proj` normalization bug (was producing `out_proj`)
- Add v1.0 detection and normalization (transformer_blocks, speaker_embedder,
  lyric_encoder mapped to v1.5 canonical form)
- Refine WAN detection to exclude transformer_blocks (prevents v1.0 misdetect)
- Add `acestep_dit` to all architecture_preset UI dropdowns
- 25 new tests (detection, normalization, preset)
- Technical reference doc with architecture analysis and design rationale

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-14 12:59:13 +02:00
EthanfelandClaude Sonnet 4.6 860af94257 docs: add implementation plan for dynamic stacker enable/disable + right-click UX
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 11:54:57 +02:00
EthanfelandClaude Sonnet 4.6 f9bc343468 docs: add design for dynamic stacker enable/disable, remove, reorder
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 11:52:13 +02:00
EthanfelandClaude Sonnet 4.6 4bf9fb279a docs: add Community Cache wiki page
New page covers how it works, privacy model, setup, file structure,
score-based replacement, cache hit log examples, version compatibility,
and troubleshooting. Wired into sidebar and home page.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 15:36:06 +02:00
EthanfelandClaude Sonnet 4.6 3b4a574355 feat: drop download_only — community cache is upload_and_download only
Removes the passive download_only option to encourage contribution.
Users who want community results need to also contribute back.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 15:27:19 +02:00
EthanfelandClaude Sonnet 4.6 620399d3c1 feat: add community_cache — HF-backed shared analysis results
Replaces dead record_dataset param with community_cache dropdown
(disabled / download_only / upload_and_download).

Downloads are anonymous via urllib; uploads require HF_TOKEN and
huggingface_hub. LoRA filenames are never shared — content hashes
(SHA256[:16]) are used as keys. Per-LoRA/pair conflict metrics and
winning merge configs are shared; network errors fall back silently to
the full local sweep.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 13:39:56 +02:00
EthanfelandClaude Sonnet 4.6 91f514e291 docs: document memory_mode, selection, output_mode, and caching infrastructure
- Add memory_mode, selection, output_mode to AutoTuner entries in Nodes.md
- Add output_mode, memory_mode, selection sections to Configuration-Guide
- Add AutoTuner Caching Infrastructure section covering all three cache types
  (.memory.json, .analysis.json, .analysis.partial.json) and how to clear them
- Add 3 troubleshooting entries for cache-related issues in Tips-and-Troubleshooting
- Update speed tip to mention memory_mode=auto

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 20:20:44 +02:00
EthanfelandClaude Sonnet 4.6 f91d7ccf9d docs: fix 3 bugs in pair/lora cache plan
- Task 4: guard min(participating) against empty set
- Task 5: add CPU path hit check before executor.submit
- Task 5/6: guard pair extraction with entry is not None

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 17:56:50 +02:00
EthanfelandClaude Sonnet 4.6 3c22d1c0e5 docs: add pair/lora cache implementation plan
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 17:50:25 +02:00
EthanfelandClaude Sonnet 4.6 810f858ec4 docs: add pair/lora cache design for cross-run analysis reuse
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 17:43:22 +02:00
EthanfelandClaude Sonnet 4.6 4ca73e93e5 docs: add analysis resume implementation plan
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 16:38:59 +02:00
EthanfelandClaude Sonnet 4.6 90c5f9e774 docs: add analysis resume design and unignore docs/plans
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03 16:37:07 +02:00
EthanfelandClaude Opus 4.6 4b97d7cacf docs: update AutoTuner sub-merge plan with reviewed bug fixes
Incorporates 7 fixes from code review:
- Bug 1: normalize_keys="disabled" for recursive outer call
- Bug 2: clip_strength_multiplier in at_kwargs
- Bug 4: update active_loras when formula resolves to single item
- Bug 6: _suppress_pbar for sub-merge progress bars
- Bug 7: document evaluator exclusion from sub-merges
- Bug 8: save/restore _detected_arch around recursive call
- Bug 9: _skip_qkv_refusion on single-LoRA path

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:17:55 +01:00
EthanfelandClaude Opus 4.6 c197f21444 docs: add AutoTuner per sub-merge implementation plan
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:10:05 +01:00
EthanfelandClaude Opus 4.6 557b532556 docs: add AutoTuner per sub-merge design document
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:07:47 +01:00
EthanfelandClaude Opus 4.6 4b605d01f4 docs: add merge formula implementation plan
5-task plan: parser, passthrough node, tree executor,
optimize_merge integration, and verification.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 15:59:17 +01:00
EthanfelandClaude Opus 4.6 cb4fc4e27e docs: add merge formula design document
Hierarchical merge topology via text formula expression.
Users define merge order (e.g., "(1+2) + 3") to prevent
style LoRAs from being drowned out by character LoRA majority.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 15:56:03 +01:00
EthanfelandClaude Opus 4.6 ae0d804bba docs: add contributors to technical report
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 00:29:05 +01:00
EthanfelandClaude Opus 4.6 4ae79d0c9e docs: add v2 workflow, rename Legacy, update wiki for Settings nodes
- Add example_workflows/LoRa Optimizer v2.json for the new node layout
- Rename LoRA Optimizer (Advanced) → (Legacy) across all wiki pages
- Document Settings nodes (Merge, Optimizer, AutoTuner) in Nodes.md
- Add Settings and Compatibility Analyzer workflows to Workflows.md
- Add decision_smoothing, smooth_slerp_gate, scoring_speed/formula,
  and Settings node architecture to Configuration-Guide.md
- Update How-It-Works.md node registry and variant descriptions
- Rename patch_compression non_ties → smart in all references
- Update Home.md feature table (8 architectures, settings nodes)
- Add zit_example_1.png asset
- Update SVG assets (timeline, pipeline, bridge, ties, merge-use-cases)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:56:19 +01:00
EthanfelandClaude Opus 4.6 b273cd8cf9 docs: remove all calibration_data references from documentation
Clean up README, wiki Nodes, How-It-Works, and maintainer sync docs
to reflect removal of calibration_data feature.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 19:00:55 +01:00
EthanfelandClaude Opus 4.6 7959ce81fd merge: integrate PR #1 correctness refactor into test branch
Merges srv1n's correctness refactor (PR #1) with conflict resolution
to preserve our recent setting renames and fixes while incorporating
their core improvements:

- Target-key grouping: analysis/merge operates on resolved model weights
  instead of raw LoRA prefixes, fixing trainer-specific aliasing bugs
- Exact low-rank linear patches: lossless linear merges for weighted_sum
  and weighted_average when no nonlinear ops are needed
- Excess conflict metric: sign disagreement beyond statistical expectation
  (cosine-sim aware), replacing raw conflict ratio in decisions
- Subspace overlap: measures how much LoRA weight perturbations align
- Block smoothing: reduces noisy per-prefix mode flips
- Activation-aware calibration scoring for Phase 2 quality evaluation
- ACE-Step architecture support
- Soft LoKr/LoHa imports for graceful degradation
- RS-LoRA compensation re-enabled with safe heuristic
- 519-line test suite (19 tests, all passing)

Conflict resolution kept our:
- Setting renames (merge_refinement, patch_compression, strategy_set)
- Qwen-Image detection fix
- LoRACompatibilityAnalyzer node
- Conflict-mode masking in _apply_conflict_modes (PR's approach)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 14:19:34 +01:00
EthanfelandClaude Opus 4.6 63f54f73a4 docs: add merge strategy guide and update README setting references
Add educational SVG/PNG diagram explaining orthogonal vs conflicting vs
aligned LoRA relationships and when to change merge settings. Update all
README references to use new setting names (merge_refinement,
patch_compression, strategy_set, additive).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 13:19:13 +01:00
srv1n 15eb41a758 Remove local paths from maintainer note 2026-03-08 16:13:13 +05:30
srv1n 561249f096 Tighten reviewer-facing maintainer note 2026-03-08 16:08:59 +05:30
srv1n dad533a4f3 Expand maintainer handoff summary 2026-03-08 16:06:52 +05:30
srv1n be7cb96f1e Sync correctness refactor onto upstream dfd3920 2026-03-08 16:02:45 +05:30
EthanfelandClaude Opus 4.6 38d288659c docs: add AutoTuner diff cache design
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 02:38:52 +01:00
EthanfelandClaude Opus 4.6 b47736e1cf docs: add wiki pages and bump version to 1.2.2
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 01:39:14 +01:00