Skip to content

Develop - #797

Open
cristian-tamblay wants to merge 366 commits into
productionfrom
develop
Open

Develop#797
cristian-tamblay wants to merge 366 commits into
productionfrom
develop

Conversation

@cristian-tamblay

Copy link
Copy Markdown
Member

Summary

Release of dashAI 0.9.7 to production. This merge brings 308 commits and 29 merged PRs accumulated in develop since 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*.txt to pyproject.toml + uv.lock.


Type of Change

  • Backend change
  • Frontend change
  • CI / Workflow change
  • Build / Packaging change
  • Bug fix
  • Documentation

Changes (by file)

Component downloads (#764)

  • DashAI/back/dependencies/downloads/downloadable.py: new DadableMixin. 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: new GET/POST/DELETE /component/{name}/download and POST /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 and COMPONENT_PATH` config.
  • DashAI/back/dependencies/job_queues/huey_job_queue.py, DashAI/back/job/base_job.py: report_progress support plus the progress columns it needs.
  • All HuggingFace models, ControlNets, Stable Diffusion, PixAron classifiers now declare their download metadata.
  • 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 plus groupedselectors).normalize_artifacts` upgrades thelegacy explainer/explorer shapes, so old pickled explanations, saved explorations and legacy plugins keep working.
  • All explorers under 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)

  • New explainers: contrastive_shap.py, dice_counterfactual.py, lime_text.py, token_ablation.py, grad_cam.py,occlusion_saliency.py, plus regression variants regression_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.
  • Frontend: 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.jsx split into runResults/ResultsTabsHeader.jsx, ExplainerResultsTab.jsx, PredictionResultsTab.jsx,
    useRunResultsData.js.
  • New ModelCardCompact.jsx, ModelDetailView.jsx, RunInfoSidebar.jsx, RunEditDialog.jsx, RunEditForm.jsx, hooks/useRunEditForm.js,
    SessionInfoContent.jsx, ManualPredictionsTable.jsx, ParamtionContent.jsx. ModelParamBlock.jsx removed.
  • Shared primitives: 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.lock replace setup.py, requirements.txt, requirements-cpu.txt, requirements-cuda.txt, requirements-dev.txt,
    requirements-plugins.txt and MANIFEST.in entries.
  • .github/workflows/publish.yml, build-test.yaml, db-migrations.yaml, docs.yaml, pre-commit.yaml: use astral-sh/setup-uv@v6, uv sync --locked, uv build, uvx twine.
  • Dockerfile, Dockerfile.cuda, update-server.sh: uv-based installs.
  • pyproject.toml bumped to 0.9.7.

New components

Removals

  • DashAI/back/services/scoring_service.py and DashAI/back/api/api_v1/endpoints/scoring.py removed, router unregistered in api.py.
  • DashAI/back/models/scikit_learn/xgboost_classifier.py and ved: their libomp dependency breaks the macOS and Windowsinstallers (Fix/remove libomp #785).
  • docs/docs/deep-dive/benchmark.md replaced by `comparison.m

Migrations

  • DashAI/alembic/versions/: 5 new revisions (9a1b2c3d4e5f a7d2c9e4f1b0 model name on parameter history, b2c3d4e5f6a7input dataset path on local explainer, c4e8a1d20f3b explainer name nullable, e0f00f71ba44 merge head).

Bug fixes

Docs and i18n

  • docs/docs/deep-dive/comparison.md (and its i18n/current page 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 #7
  • README.rst updated.
  • Translations updated for en, es, pt, de, zh across common, models, explainers, datasets, generative, prediction.

Tests

  • ~40 new backend test files covering downloads, artifacts, exthe new models/metrics.
  • New frontend tests: ComponentDownloadControl.test.jsx, ModelDownloadStatusIcon.test.jsx, component.test.ts, downloadArtifact.test.js.

---## Testing- Run uv run alembic upgrade head against a 0.9.6 database as apply cleanly (the merge revision e0f00f71ba44 joins 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 through normalize_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.

  • XGBoost and LightGBM are no longer bundled. Existing runs thoducible on 0.9.7.
  • The /api/v1/scoring endpoint was removed. Any external con

Creylay and others added 30 commits July 9, 2026 14:17
…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
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
…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>
…ded dataset (all original columns) instead of the input-only
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.
Creylay and others added 30 commits July 27, 2026 15:55
…n ModelsTableSelectMetric; update no completed runs message in ResultsGraphs
… and ResultsGraphs; improve card order handling in ResultsGraphsPlot
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
…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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants