Develop - #797
Open
cristian-tamblay wants to merge 366 commits into
Open
Conversation
…ate ScoreRing for score visualization, streamline profile handling, and enhance layout for improved user experience
… elevation and transition effects for improved visual feedback, enhance highlighting behavior for newly added run cards
Deleting a downloaded component from the selector button or the models side bar icon now opens a confirmation modal instead of deleting immediately, reusing DeleteConfirmationModal with a per-component message (all five locales).
…ession header and update translations for model count in multiple languages
…e delete handling to navigate back to session overview if the deleted run is currently open
…r improved visibility and adjust layout for better alignment
…action buttons for better user experience
React bubbles events through the component tree even for portaled modals, so confirming a component deletion from within a clickable model row also fired the row's onClick and opened the configure dialog. Stop propagation on the modal content.
… layout for improved alignment and responsiveness
…me with run.name for improved clarity
…eader and consolidate Run All button for improved usability
The delete button in the component download control now shows the download size (Delete download ({{size}})), keeping the size visible after a component is downloaded. Added deleteWithSize to all five locales.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…DashAI into feat/benchmarkv2
…aching improvements
…ded dataset (all original columns) instead of the input-only
… and type detection
…g and missing value normalization
Clicking the delete icon opened the confirmation modal without the mouse leaving the row, so the hover popover stayed anchored and visible after deletion. Clear the hover on any row click via a capture phase handler, which fires even for the action icon that stops propagation.
…loaded The per row train button in the model comparison table ignored download status. Disable it (with a tooltip) when the run's model still needs downloading, using the shared live download state so it enables once the download finishes.
…iew, enhance ModelsRightBar, and update RunCard for improved user experience and layout consistency
Update the snapshot_download assertions for the new ignore_patterns, add save_pretrained to the opus DummyTokenizer (the base save persists the tokenizer now), and make the jobs test registry module scoped so DummyModel is registered before the module scoped run fixtures create runs.
…idation handling in PrepareDatasetStep
…n ModelsTableSelectMetric; update no completed runs message in ResultsGraphs
… and ResultsGraphs; improve card order handling in ResultsGraphsPlot
… improved UX and clarity
…tion logic across components
…proved responsiveness
…ove translations across multiple languages
Add 10 new explainers and model specific explainability mixins
…atibility Add model specific explainer compatibility and inherited compatibility resolution
…ation-redesign Session visualization redesign
The explainer job ran trained_model.prepare_dataset on the instances and on the background splits before calling the explainer. Text explainers perturb the raw text and query model.predict, which applies the model preparation itself, so with a bag of words model the raw text column was already gone and predict revectorized a count column, raising a feature name mismatch in sklearn. Align the job with the prediction job, which passes raw columns straight to predict. Explainers that hand plain frames to SHAP, DiCE or the scikit-learn inspection helpers (those calls bypass the model preparation) now move their own data into the model feature space with the new prepare_model_input helper. NearestCounterfactual kept feeding a prepared split to predict, which prepared it twice and broke one hot models; it now keeps the raw split for predict and the prepared one for the candidate frame.
TfIdfLogRegTextClassificationModel.prepare_output rebuilt the dataset from the encoded values alone, which dropped the DashAI type metadata. Explainers read the class names from that type, so LimeText and TokenAblation raised KeyError on the target column when explaining a run of this model. Encode in place with modify_table and type the column as Categorical whose categories follow the label encoder order, which is the class index order of the model predictions.
Add ColumnArithmetic, ColumnConcat and TypeCast converters
…ctionResultsTab components
…nput Fix model input handling in explainers
Fix target column typing in TF-IDF model output preparation
Fix task selection cards cutting off text with dynamic equal-height sizing
…d-spacing Fix run tabs spacing and label alignment
Fix/remove libomp
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.
Summary
Release of dashAI 0.9.7 to production. This merge brings 308 commits and 29 merged PRs accumulated in
developsince 0.9.6.The main themes are: an explicit download system for components that pull external weights, a typed artifact format shared by explainers and explorers, a large expansion of the explainability catalog (regression, text and image explainers), a redesign of the model session / run results UI, and the migration of the whole Python toolchain from
setup.py+requirements*.txttopyproject.toml+uv.lock.Type of Change
Changes (by file)
Component downloads (#764)
DashAI/back/dependencies/downloads/downloadable.py: newDadableMixin. Each downloadable component owns<COMPONENT_PATH>/<ClassName>and downloads, reports progress and deletes its own artifacts. No shared cache.DashAI/back/dependencies/downloads/nested.py: walks a paractorydoes, so nestedcomponent_field` children that also need a download are discovered.DashAI/back/job/component_download_job.py: new job type soey queue with progress reporting.DashAI/back/api/api_v1/endpoints/components.py: newGET/POST/DELETE /component/{name}/downloadandPOST /component/downloads/required.DashAI/back/api/api_v1/endpoints/runs.py, `.../generative_on and session creation on the required components beingdownloaded.DashAI/back/dependencies/registry/component_registry.py,oad status tracking andCOMPONENT_PATH` config.DashAI/back/dependencies/job_queues/huey_job_queue.py,DashAI/back/job/base_job.py:report_progresssupport plus the progress columns it needs.DashAI/front/src/components/models/model/ComponentDownloadControl.jsx,ModelDownloadStatusIcon.jsx,ModelListItem.jsx,src/api/component.ts:download button, progress and status icon in the model picker.
Typed render artifacts (#766)
DashAI/back/core/artifacts.py: new artifact format (plotl plusgroupedselectors).normalize_artifacts` upgrades thelegacy explainer/explorer shapes, so old pickled explanations, saved explorations and legacy plugins keep working.DashAI/back/exploration/explorers/andped artifacts.DashAI/front/src/components/shared/ArtifactRenderer.jsx,ArtifactViewer.jsx,TableArtifact.jsx,PlotActions.jsx,src/utils/downloadArtifact.js,src/types/artifact.ts: rendering, grouping and export (PNG /Explainability (#767, #768, #779, #780)
contrastive_shap.py,dice_counterfactual.py,lime_text.py,token_ablation.py,grad_cam.py,occlusion_saliency.py, plus regression variantsregression_kernel_shap.py,regression_partial_dependence.py,regression_permutation_feature_importance.py.DashAI/back/explainability/explainers/image_explainer_utils.py,DashAI/back/models/image_explainable_model.py: shared helpers for image explainers.DashAI/back/explainability/model_input.py: explainers now odel input (fixes explainers that assumed already-encodedfeatures).DashAI/back/api/api_v1/endpoints/explainers.py: explainer/, plot overrides, per-explanation input dataset.DashAI/back/models/tfidf_logreg_text_classification_model.py: keeps the target column typed so tf-idf models can be explained.ExplainersSidebar.jsx,ExplainerInstanceTable.jsx,RowSelectionModeToggle.jsx,LazyExplainerCard.jsx,ExplanationInfo.jsx,SelectDatasetStep.jsx,explainerCache.js.Model session / run results redesign (#778, #781, #782)
DashAI/front/src/components/models/RunResults.jsxsplit intorunResults/ResultsTabsHeader.jsx,ExplainerResultsTab.jsx,PredictionResultsTab.jsx,useRunResultsData.js.ModelCardCompact.jsx,ModelDetailView.jsx,RunInfoSidebar.jsx,RunEditDialog.jsx,RunEditForm.jsx,hooks/useRunEditForm.js,SessionInfoContent.jsx,ManualPredictionsTable.jsx,ParamtionContent.jsx.ModelParamBlock.jsxremoved.PillTabs.jsx,PillToggleButtonGroup.jsx,RunStatusDot.jsx,InfoModal.jsx,utils/runStatus.js,utils/chartColors.js.threeSectionLayout/OptionBox.jsx,SelectOptionMenu.jsx: no longer clip.LiveMetricsChart.jsx,HyperparameterPlots.jsx,ModelComparisonTable.jsx,pages/results/components/*: chart and comparison rework.Packaging and CI (#756)
pyproject.toml+uv.lockreplacesetup.py,requirements.txt,requirements-cpu.txt,requirements-cuda.txt,requirements-dev.txt,requirements-plugins.txtandMANIFEST.inentries..github/workflows/publish.yml,build-test.yaml,db-migrations.yaml,docs.yaml,pre-commit.yaml: useastral-sh/setup-uv@v6,uv sync --locked,uv build,uvx twine.Dockerfile,Dockerfile.cuda,update-server.sh: uv-based installs.pyproject.tomlbumped to0.9.7.New components
DashAI/back/models/pymc/bart_regression.py: BART regressioDashAI/back/metrics/classification/matthews_corrcoef.py(feat: add Matthews correlation coefficient classification metric #758) andbalanced_accuracy.py.DashAI/back/converters/simple_converters/:column_arithmenumeric_expansion.py,type_cast.py, plus thefeature_engineering` category.DashAI/back/models/hugging_face/opus_mt_en_roa_transformer.former.pyreplaceopus_mt_en_pt_transformer.py(Add en-roa and roa-en Opus-MT translation models #752).DashAI/back/models/hugging_face/gguf_text_generation_base.py: shared base for GGUF text generation.Removals
DashAI/back/services/scoring_service.pyandDashAI/back/api/api_v1/endpoints/scoring.pyremoved, router unregistered inapi.py.DashAI/back/models/scikit_learn/xgboost_classifier.pyand ved: theirlibompdependency breaks the macOS and Windowsinstallers (Fix/remove libomp #785).docs/docs/deep-dive/benchmark.mdreplaced by `comparison.mMigrations
DashAI/alembic/versions/: 5 new revisions (9a1b2c3d4e5fa7d2c9e4f1b0model name on parameter history,b2c3d4e5f6a7input dataset path on local explainer,c4e8a1d20f3bexplainer name nullable,e0f00f71ba44merge head).Bug fixes
DashAI/back/converters/scikit_learn/simple_imputer.py,sklearn_wrapper.py: imputer parameter handling (Enhance SimpleImputer and SklearnWrapper #761).DashAI/back/job/predict_job.py: predictions save the colum.SaveDatasetModal.jsx: block saving an empty dataset (Fix notebook save empty dataset #749)ScopeStepConverter.jsx: converter scope button layout (Modify ItemsList.jsx to make it more reusable #75RunCard.jsx: run card highlight auto-clears (Add auto-clear for selected run ID after highlighting run card #748).DashAI/back/models/scikit_learn/svc.py: shortened description (Reduce description length for SVC multilingual support #747).generative/CreateSessionContext.jsx,SessionBar.jsx: sesInfoNotebookModal.jsx/ EDA metadata modal overflow (Fix EDA metadata toggle cut off in Save as Dataset modal #753).Docs and i18n
docs/docs/deep-dive/comparison.md(and itsi18n/currentpage against Weka and similar tools.docs/docs/build/dev-setup.md: uv-based setup instructions.docs/static/institutions/institutions.json+ FCFM logo (Back/initial db #7README.rstupdated.common,models,explainers,datasets,generative,prediction.Tests
ComponentDownloadControl.test.jsx,ModelDownloadStatusIcon.test.jsx,component.test.ts,downloadArtifact.test.js.---## Testing- Run
uv run alembic upgrade headagainst a 0.9.6 database as apply cleanly (the merge revisione0f00f71ba44joins twoheads).- Verify that a model requiring weights (any HuggingFace or diload control, downloads with progress, and that starting a runor a generative session without the download is blocked with a- Open an explanation and an exploration created before this rartifact shapes still render throughnormalize_artifacts.- Check the packaged installers (Windows.exe, macOS.dmg,unch, since the packaging toolchain changed and XGBoost/LightGBMwere dropped for that reason.---## Notes- Anyone with a local checkout needs to re-sync their environmc(add--extra cpuon machines without an NVIDIA GPU). Theoldrequirements*.txt` files are gone./api/v1/scoringendpoint was removed. Any external con