Repository navigation
v0.6.0
Compare: v0.5.1...v0.6.0
A conversation-first workspace replaces the job-centred interface: you describe an analysis in plain language, and the assistant says what it will do, runs it and shows the result in the same message. v0.6.0-alpha.1 was a preview with the backend contracts and the Workspace.
Added
- Workspace. One message per analysis: the assistant's intent, the plan steps with their times and Cancel, then a result card, an interpretation and follow-up suggestions. A failed analysis keeps its steps open, with the reason in plain words and fixes as buttons.
- Proposals. When no built-in analysis fits, the assistant proposes one (Run · Change · Explain), and the analysis that runs is marked Composed by the assistant. NDMI, NBR, SAVI and NDBI are composed even without an assistant. The new
algorithms/band-mathandalgorithms/band-math-changeaccept only numbers, band names, arithmetic operators and parentheses. - Result cards for index, change, classification, field-boundary and statistics results, with a legend, the source line, km² statistics, and On map · GeoTIFF · PNG · GeoPackage · Details.
- Conversation replies stream as markdown and never start a job. Dates in the prompt pick the file ("NDVI for 1 June").
- Composer: +, From map, From library and drag-and-drop, with attachment chips that show the sensor, bands, resolution, size and dates.
- The bundled Kakhovka sample attaches with one click (
POST /v1/sample). - A Preparing model step with the download size and time left when a model's weights are missing.
- New screens:
- the landing page at
/; - Capabilities, six tiers computed from the live server state;
- Map mode, with the imagery panel, region presets, drawing and Send to chat, result layers with legends, and a Compare swipe (building on pull requests #51 by nik4nd and #35 by NataliaGon);
- the Library, analyses and files in one table;
- Result detail (
/app/results/:id), with readable download names such aswater-change_ndwi_2023-06-01_2023-06-09.tif; - Settings for operators (
/app/settings: Assistant, Models, Access, Data sources, Server), saved to an overrides file, never to.env.
- the landing page at
- Sessions and sign-in. Every visitor starts as a guest: 5 analyses an hour, with work kept for 24 hours in that browser. GitHub sign-in makes an allowlisted address a member (no limit, work kept on any browser) or an operator (also Settings and every owner's jobs). A guest's work moves to the account on sign-in.
- Public demo deployment:
docker compose --profile demowithdocker-compose.demo.yml. It pre-installs the model weights, rate-limits each client IP in nginx, publishes no backend port and removes guest data on a schedule. The runbook isdocs/DEPLOY_DEMO.md. - Look and accessibility: a new visual language with light and dark themes, self-hosted Inter and IBM Plex Mono fonts, phone (390 px) and tablet (834 px) layouts, and keyboard and screen-reader support.
- New endpoints:
GET /v1/jobs/{id}/events,POST /v1/jobs/{id}/confirm,DELETE /v1/jobs/{id},GET /v1/jobs/{id}/statistics.csv,POST /v1/sample,DELETE /v1/files/{id},GET /v1/session,GET /v1/auth/status,GET /v1/auth/github/login,GET /v1/auth/github/callback,POST /v1/auth/logout,GETandPUT /v1/settings,POST /v1/settings/assistant/testandGET /v1/tiles/{z}/{x}/{y}. - The University of Maryland seal in the landing page's footer, next to the MMDA and University of Geneva logos.
Changed
- Breaking: every response sets a signed
dt4lc_sessioncookie, and a client that does not send it back is a new guest on every request. API scripts must keep a cookie jar (curl -c jar -b jar). - Breaking:
POST /v1/chatis the conversation endpoint. It streams markdown replies and never plans or runs a job, so theplanning,plan_ready,executingandcompleteframes are gone. Analyses go throughPOST /v1/jobsand its event stream. - Breaking:
GET /v1/capabilitiesreturns{summary, assistant, offline, banner, tiers}for the caller instead of{instances: [...]}.GET /v1/modelsstill lists the models. - Breaking: a composed plan stops at
proposaluntilPOST /v1/jobs/{id}/confirm, andPOST /v1/executerefuses an unconfirmed one with 409CONFIRMATION_REQUIRED. - Breaking:
/v1/planand/v1/executeanswer conversation and file-less prompts with 422 (NOT_AN_ANALYSIS, ormissing_input) instead of 500. - Breaking: result statistics are keyed by band code (
B2, …) instead ofband_<n>, each date's change index is clipped to [−1, 1], artifact references gainsize_bytesanddownload_name(theirurlends in&name=), and every finished job has acard. Older jobs are returned as stored. - Map tiles are warped to Web Mercator, and multi-band rasters render in true colour by default.
- The v0.5 routes (
/chat,/dashboard,/map,/jobs,/jobs/:jobId,/data,/models,/settings) redirect to the new screens under/app. CITATION.cffand the README give the licence asAGPL-3.0-or-later(version 3 or any later version), aspyproject.tomldoes.- From this release on,
release/vX.Y.Zis merged intodev, anddevintomaster, with merge commits, never squashed, somasterkeeps every commit with its author. The detailed v0.5.x history stays on therelease/v0.5.0andrelease/v0.5.1branches.
Removed
- The v0.5 pages: Chat, the Dashboard page, the Jobs page with its job details, the Data page and the Models page. The Workspace takes over chat and the dashboard, the Library jobs and data, and Result detail the job details. Capabilities shows each model's state, and operators pre-download models in Settings → Models.
Fixed
- Tiles of areas outside a raster are transparent.
- The map panels no longer overlap (#67, bug 4).
- The map credits the oblast boundaries in its attribution control ("Oblast boundaries: OCHA / HDX, CC BY-IGO 3.0"), as their licence requires, and
THIRD_PARTY_LICENSES.mdgives their source and licence.
Security
- Jobs, events, statistics, deletes, downloads, tiles and files of another owner answer 404. Jobs and uploads from before v0.6.0 have no owner and are visible to operators only.
- Attachments on
POST /v1/jobsandPOST /v1/chatmust be the caller's own upload, sample copy or job output, or a file that belongs to no one, such as an Earth Engine export. A path outside the server's roots answers 403, and a missing file or another owner's 404, before the guest quota counts the request. - A guest's sixth analysis in an hour (
POST /v1/jobs, counted at confirm for proposals, andPOST /v1/execute) answers 429GUEST_QUOTA. - Model download, cancel and delete need a member or an operator (403
MODEL_GATED). On the demo, only operators download.
Upgrading from 0.5.1
- Local installs now start everyone as a guest. On a single-user machine, set
DEV_ROLE=operator(ormember), configure GitHub sign-in with yourself inOPERATOR_EMAILS, or raiseGUEST_ANALYSES_PER_HOURandGUEST_SESSION_HOURS. - Set
SESSION_SECRET, or every session resets when the server restarts. Behind HTTPS, setSESSION_COOKIE_SECURE=true. - Existing jobs and uploads are kept, without an owner: operators see them, and the guest cleanup never removes them. The job database migrates itself on start.
- The new variables are all in
.env.example, with comments. - Settings changes go to
resources/.cache/settings.json(DT4LC_SETTINGS_PATH) and take precedence over.env, so back the file up with the job database. - Docker: rebuild both images (
docker compose up -d --build), and rundocker compose downbefore switching between the default and the demo stack.
Container Images
Both images are published to GitHub Container Registry. Pull with:
docker pull ghcr.io/ipt-mmda/dt4lc/backend:0.6.0
docker pull ghcr.io/ipt-mmda/dt4lc/frontend:0.6.0Run with Docker Compose
The compose file builds the images from source:
git clone --branch v0.6.0 https://github.com/IPT-MMDA/dt4lc.git
cd dt4lc
cp .env.example .env # API keys are optional; without them the bundled Ollama model is used
docker compose --profile ollama up -d # UI at http://localhost, API docs at http://localhost/docs