mirror of
https://github.com/calesthio/OpenMontage.git
synced 2026-08-05 15:20:40 +08:00
Three routing defects in video_selector, none previously covered by tests (REVIEW §8 #3, #5, #7); plus the routing-test coverage itself (#10). #3 Seedance dedup race tool_by_provider keyed by provider STRING, so two tools legitimately sharing provider="seedance" (seedance_video=fal, seedance_replicate) collided — only the first-registered was ever selectable; the other was invisible to the selector regardless of rank. Key selectable tools by NAME instead; ranking picks the best of the shared-provider backends. #5 preferred_provider had no score-gap gate The selector returned the preferred provider on the first ranking match no matter how far below the top it scored (the comment claimed "unless drastically worse" but nothing enforced it). Add a configurable preferred_provider_gap (default 0.15): honor the preference only when its best ranked tool is within the gap of the overall top, else yield to the top-ranked provider. #7 fallback_tools appended image_selector unconditionally The motion-required prohibition lived only in director skills, so a direct caller could silently fall back to an image-only tool for an image_to_video / reference_to_video brief. Add input-aware fallback_tools_for(inputs) that drops image_selector for motion-required operations; keep the static fallback_tools property (with image_selector) for external consumers / contracts. #10 routing coverage First routing tests for video_selector: dedup reachability, the gap gate (honored / ignored / configurable), motion-aware fallback, and estimate_cost / estimate_runtime delegation. 13 tests, scoring patched for determinism so they test routing logic, not the scorer. Full tools + contracts suite green (638 passed, 6 skipped). Refs: docs/REVIEW-image-to-video-voice.md §8 #3, #5, #7, #10 Co-Authored-By: Claude <noreply@anthropic.com>