Spaces:
Sleeping
Sleeping
Commit History
-
Put the loading indicator beside Revision
Cyprien +1: Claude Opus 5 (1M context)Drops the Group and panel.css from the previous attempt: the footer row it built read as a stray line between cards rather than as part of the panel. The indicator is now a narrow Markdown inside the pickers row, straight after the two dropdowns -- Gradio wraps adjacent inputs into one form block, so this sits against that card's edge, next to the Revision menu it reports on. The repo date goes back to its own line below, where it was. The narrow slot gets its own shorter wording -- "Loading…", "Ready . 11 ms", "Failed" -- since the button labels stay long enough to read on their own. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>6a2ee52 -
Move both actions together, take over on a new pick, show it in the panel
Cyprien +1: Claude Opus 5 (1M context)Three things, all the same underlying point: the picker panel is where the model changes, so that is where the state of the model belongs. Both buttons now say what is happening. _actions took a label for Classify and hardcoded Evaluate's, so only one of the two ever reported the wait even though they gate on the same weights; it now takes one busy label and applies it to both, and hands each its own label back when ready. Picking again mid-download takes over instead of being ignored. Gradio drops a submission made while one is pending -- trigger_mode is "once" for everything except .change, so the .then(warm) chain was silently discarding the new pick, and the buttons would then unlock for a model nobody had selected. With "multiple" and no concurrency limit the new pick starts at once, and warm records what the session is waiting on: a load that finds itself superseded returns without yielding, leaving the buttons to whoever is current. Keyed by session_hash, so two visitors picki…538f6c3 -
Fetch the picked model up front, with Classify dead until it lands
Cyprien +1: Claude Opus 5 (1M context)Clicking Classify used to mean "download the model, then maybe run inference", with nothing on screen saying which was happening -- and the ms reading next to the prediction quietly included the download, so the first number of a session was a network measurement dressed as a latency. Both action buttons now start disabled and load() runs up front: on page load, on picking a model, and on picking a commit. Classify reads "Downloading the model..." and is greyed while it runs, so a click is only ever inference, and the timer starts after load so the ms means what it says. The wiring keeps it to one warm per pick. model.change updates the revision menu and then warms, so it reads the revision the switch just chose rather than the old repo's commit -- a sha from the previous repo would 404. The revision menu warms on .input rather than .change, because .change also fires on the programmatic update model.change just made, and on the 30s refresh, either of which would re-warm and flicker …71a9867 -
Put the interface in English, and timestamps in Paris time
Cyprien +1: Claude Opus 5 (1M context)Every label, tab, button, table header and status string is English now, plus the README and the Space card frontmatter that names it publicly. What stays French is the data: the sample transcript, the examples and the dataset are French because the callers are, and the model is trained on that -- an English placeholder would suggest an input the classifier never saw. The README says so once, so the mix is not read as an oversight. The confusion matrix headers and the "actual ..." row labels now derive from LABEL_NAMES instead of restating it, lowercased where they sit inside a phrase, so renaming a display name cannot leave a stale header behind. config.stamp converts to Europe/Paris and prints %Z, so the reader sees CEST or CET rather than having to know which applies -- a summer commit reads 15:13 CEST where it used to read 13:13 UTC. Naive input is treated as UTC, which is what the Hub sends. tzdata becomes a direct dependency: it already arrived transitively through pandas, so n…b42781c -
Timestamp every revision entry, and say "latest" not "dernier"
Cyprien +1: Claude Opus 5 (1M context)The main entry read "main (dernier)" with no date while the commit rows carried one, so the option that actually tracks the tip was the only one you could not date. It now reports the tip commit's timestamp, and the label is English -- "latest" reads as the ref-that-moves, like a latest tag. Commit rows were %Y-%m-%d only, which is not enough resolution here: the two top commits of the MiniLM repo are 2 seconds apart, so a whole training run was indistinguishable from the one before it. Every row now carries date and time through a single config.stamp, which the model line under the pickers uses too -- three timestamps, one format, all UTC. Labels changed but values did not, so a selected sha survives the refresh. Empty repo degrades to a bare "main (latest)" with no dangling separator. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>f25fee8 -
Default to the newest backbone and show when it was pushed
Cyprien +1: Claude Opus 5 (1M context)The startup model was repos[0] of an alphabetically sorted list, so the default never moved off breakdown-risk-granite-* however recently another backbone had trained. model_repos now returns {repo: last_modified}, keyed alphabetically so the dropdown stays scannable, and the initial value is max() over the timestamps. Revision default is unchanged, so the pair is "newest backbone @ its tip". A line under the pickers names that date and follows the selection, which makes the default legible -- and exposes the caveat that last_modified is repo-level, so a README push moves the default too. list_models sort is what makes the Hub populate last_modified at all, but newest() uses max() rather than trusting the response order, since hub 1.x dropped the direction argument. That API is also why the floor moves to huggingface-hub>=1: on 0.x the key was "lastModified" and descending order needed direction=-1. Resolved versions are untouched, hub stays at 1.25.1. Co-Authored-By: Claude Opus 5 …787b0b5 -
Resolve refs to commits so nothing serves a stale model or split
Cyprien +1: Claude Opus 5 (1M context)load(repo, 'main') was lru_cached on the literal 'main', pinning whichever commit was current at first use. Refs now resolve to a sha per call and the caches key on the sha. Same for the test split, which grew 46 -> 51 rows in two days. Reports name both commits, and a Timer refreshes the pickers. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>9668975
-
Batch the evaluation so progress actually streams
Cyprien +1: Claude Opus 5 (1M context)The handler emitted one progress event then blocked in a single predict() over the whole split, so the UI froze. Inference now runs in batches and evaluation.run takes a track() wrapper; only handlers knows it is progress.tqdm. Batched output matches the single call to 6e-8. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>b64175d -
Model and revision pickers, test-set evaluation tab, app/ package
Cyprien +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>759bf41 -
Docker SDK + uv lockfile; load the SetFit pieces without setfit
Cyprien +1: Claude Opus 5 (1M context)gradio 6 requires transformers>=5, which setfit 1.1 cannot import. A SetFit model is a SentenceTransformer plus a pickled logistic head, so app.py loads those directly. Same 45/46 on the test split. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>d27824a -
Pin transformers<5: setfit 1.1 needs default_logdir
Cyprien +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>1d487ef -
Gradio demo for the breakdown-risk SetFit classifier
Cyprien +1: Claude Opus 5 (1M context)Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>976c02a -
initial commit
Verified signaturee3dd7f9