Let the Apply tab score with the centred vote - #111
Merged
Conversation
The centred smoother existed but nothing could reach it. Scoring a video through the GUI still went out through the causal path, so the recipe worth 0.780 -> 0.823 macro F1 on held-out data was available only to someone calling the library directly. Threaded from the Apply tab through ApplyWorker, classify() and LiveInferenceConfig to classify_pose_data. The library default stays off -- an unsmoothed score is the one comparable to cross-validation, and a stored config should not change meaning under its callers -- while the tab defaults it on at one bout. Scoring a recording is exactly the case where reading the frames after each one is free and correct, and making people find a setting to get the better number is how the better number goes unused. The control sits beside the existing causal one rather than replacing it, because they answer different questions: the causal window is what a live overlay would have shown, and reproducing a live run is a legitimate thing to want. 0 reads as "off" so that is reachable. batch_apply now says so when it declines. It falls back to the streaming path for an annotated video, a CNN sequence model or spectral features, and the stream cannot vote on frames it has not reached -- so a fallback silently turned the setting off and cost accuracy rather than just time. Every decline route now logs what it could not do and why, and the fallbacks are routed through one helper so a future one cannot forget. Tested at every link, because none of them fails loudly when it breaks: the worker forwards the value, omitting it leaves the pipeline default alone rather than overriding it with a zero, the config carries it, the tab defaults it on, and it can be switched off.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #110, which added the centred smoother but left nothing able to reach it. Scoring a video through the GUI still went out via the causal path, so the recipe worth 0.780 → 0.823 macro F1 on held-out data was available only by calling the library directly.
What's wired
Apply tab →
ApplyWorker→classify()→LiveInferenceConfig→classify_pose_data.The library default stays off — an unsmoothed score is the one comparable to cross-validation, and a stored config shouldn't change meaning under its callers. The tab defaults it on at one bout (25 frames). Scoring a recording is exactly the case where reading the frames after each one is free and correct, and making people find a setting to get the better number is how the better number goes unused.
The control sits beside the existing causal one rather than replacing it. They answer different questions: the causal window is what a live overlay would have shown, and reproducing a live run is a legitimate thing to want.
0reads as "off" so that stays reachable.The silent-fallback hole
batch_applydeclines to the streaming path for an annotated video, a CNN sequence model, or spectral features — and the stream cannot vote on frames it has not reached. So a fallback quietly turned the setting off, costing accuracy rather than just time, which is the one thing that module's docstring promises it never does ("Never silently degrades").Every decline route now logs what it couldn't do and why, routed through a single helper so a future one can't forget:
Tests
Every link, because none of them fails loudly when it breaks — a dropped setting just scores worse:
2891 passed, 1 skipped; ruff and black clean.
test_delay_node_precisionfails under full-suite load — pre-existing and unrelated: the identical failure reproduces on unmodifiedmainunder the same load, and it passes standalone on both.