From 19f535c1be4af6a6f77fab9dba4953c4406ea67e Mon Sep 17 00:00:00 2001 From: abrar Date: Thu, 28 Aug 2025 13:18:22 -0600 Subject: [PATCH 1/7] rename covid meta task --- public/stage-1-covid/config-stage-1.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/stage-1-covid/config-stage-1.json b/public/stage-1-covid/config-stage-1.json index b9fb35d6a4..0f3926b56e 100644 --- a/public/stage-1-covid/config-stage-1.json +++ b/public/stage-1-covid/config-stage-1.json @@ -125,7 +125,7 @@ "initial_selection": ["Greece"] } }, - "covid-metadata": { + "covid-metadata-task": { "type": "react-component", "path": "viz-guardrails/CovidMetadataTask.tsx", "instruction": "Below are four different visualizations (A–D) of COVID-19 data for Norway. Please review each chart and select the one you think is the most useful comparison for Norway.", @@ -3270,7 +3270,7 @@ } ] }, - "covid-metadata", + "covid-metadata-task", "post-study-quant" ] } From 1d639b64f81ddc038391d6b0f6ddb03ca85fb19a Mon Sep 17 00:00:00 2001 From: abrar Date: Thu, 28 Aug 2025 14:31:48 -0600 Subject: [PATCH 2/7] updated metadata standalone condition --- src/public/viz-guardrails/LineChart.tsx | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/public/viz-guardrails/LineChart.tsx b/src/public/viz-guardrails/LineChart.tsx index ae48de039a..e7b89a5b0b 100644 --- a/src/public/viz-guardrails/LineChart.tsx +++ b/src/public/viz-guardrails/LineChart.tsx @@ -351,9 +351,21 @@ export function LineChart({ const clusterRepsDataPath = '/sandbox/data/cluster_representatives.csv'; const subregionRepsDataPath = '/sandbox/data/subregion_representatives.csv'; // ---------------------------- Metadata (hardcoded countries) ---------------------------- // - const metadataCountries = useMemo(() => ( - ['Sweden', 'Latvia', 'Denmark', 'Finland', 'Guernsey'] - ), []); + // Map of related selected countries + const relatedBySelected: Record = { + Greece: ['Cyprus', 'Italy', 'Portugal', 'Spain', 'Croatia'], + Germany: ['Austria', 'Netherlands', 'Belgium', 'Denmark', 'France'], + Belarus: ['Ukraine', 'Russia', 'Serbia', 'Lithuania', 'Moldova'], + Canada: ['United States', 'Australia', 'New Zealand', 'Sweden', 'Norway'], + Tunisia: ['Morocco', 'Algeria', 'Egypt', 'Libya', 'Jordan'], + Norway: ['Germany', 'Denmark', 'Sweden', 'Finland', 'Iceland'], + }; + + const metadataCountries = useMemo(() => { + if (!selection || selection.length === 0) return []; + const match = selection.find((s) => Object.prototype.hasOwnProperty.call(relatedBySelected, s)); + return match ? relatedBySelected[match] : []; + }, [selection]); useEffect(() => { if (guardrail !== 'cluster') return; From 4bc904fbc5d4f598e450c173e91479a595618fe4 Mon Sep 17 00:00:00 2001 From: abrar Date: Thu, 28 Aug 2025 14:33:12 -0600 Subject: [PATCH 3/7] enlist metadata condition --- src/public/viz-guardrails/Selector.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/public/viz-guardrails/Selector.tsx b/src/public/viz-guardrails/Selector.tsx index 30500952b5..b409a09762 100644 --- a/src/public/viz-guardrails/Selector.tsx +++ b/src/public/viz-guardrails/Selector.tsx @@ -49,6 +49,7 @@ export function Selector({ { value: 'percentiles', label: 'Percentiles of All Lines At Each Timestamp' }, { value: 'percentileClosest', label: 'Actual Percentiles Closest' }, { value: 'cluster', label: 'Cluster Rep' }, + { value: 'metadata', label: 'Metadata/Expert sampling' }, { value: 'all', label: 'All' }, ]} /> From 625b61c9fded0460708c9c5c71fd2b387b098b61 Mon Sep 17 00:00:00 2001 From: abrar Date: Mon, 1 Sep 2025 22:16:34 -0600 Subject: [PATCH 4/7] update selection- llm --- src/public/viz-guardrails/LineChart.tsx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/public/viz-guardrails/LineChart.tsx b/src/public/viz-guardrails/LineChart.tsx index e7b89a5b0b..74e68eaaf0 100644 --- a/src/public/viz-guardrails/LineChart.tsx +++ b/src/public/viz-guardrails/LineChart.tsx @@ -351,14 +351,14 @@ export function LineChart({ const clusterRepsDataPath = '/sandbox/data/cluster_representatives.csv'; const subregionRepsDataPath = '/sandbox/data/subregion_representatives.csv'; // ---------------------------- Metadata (hardcoded countries) ---------------------------- // - // Map of related selected countries + // Map of related selected countries (LLM) const relatedBySelected: Record = { - Greece: ['Cyprus', 'Italy', 'Portugal', 'Spain', 'Croatia'], - Germany: ['Austria', 'Netherlands', 'Belgium', 'Denmark', 'France'], - Belarus: ['Ukraine', 'Russia', 'Serbia', 'Lithuania', 'Moldova'], - Canada: ['United States', 'Australia', 'New Zealand', 'Sweden', 'Norway'], - Tunisia: ['Morocco', 'Algeria', 'Egypt', 'Libya', 'Jordan'], - Norway: ['Germany', 'Denmark', 'Sweden', 'Finland', 'Iceland'], + Greece: ['Italy', 'Spain', 'Portugal', 'Cyprus', 'Croatia'], + Germany: ['France', 'Netherlands', 'Austria', 'Sweden', 'Denmark'], + Belarus: ['Russia', 'Ukraine', 'Kazakhstan', 'Moldova', 'Serbia'], + Canada: ['United States', 'United Kingdom', 'Australia', 'New Zealand', 'Germany'], + Tunisia: ['Morocco', 'Algeria', 'Egypt', 'Jordan', 'Lebanon'], + Norway: ['Sweden', 'Denmark', 'Finland', 'Iceland', 'Netherlands'], }; const metadataCountries = useMemo(() => { From d39f8951bc671d0e6ae14e9b23996ec9cb45d443 Mon Sep 17 00:00:00 2001 From: abrar Date: Mon, 1 Sep 2025 22:30:26 -0600 Subject: [PATCH 5/7] add stocks llm selection --- src/public/viz-guardrails/LineChart.tsx | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/public/viz-guardrails/LineChart.tsx b/src/public/viz-guardrails/LineChart.tsx index 74e68eaaf0..96d0b918a8 100644 --- a/src/public/viz-guardrails/LineChart.tsx +++ b/src/public/viz-guardrails/LineChart.tsx @@ -361,11 +361,29 @@ export function LineChart({ Norway: ['Sweden', 'Denmark', 'Finland', 'Iceland', 'Netherlands'], }; + // Map of related selected stocks (LLM) + const relatedBySelectedStocks: Record = { + VZ: ['T', 'TMUS', 'CHTR', 'CMCSA', 'AMT'], + COR: ['MCK', 'CAH', 'CVS', 'WBA', 'HSIC'], + CHD: ['PG', 'CL', 'KMB', 'CLX', 'EL'], + TEL: ['APH', 'GLW', 'ETN', 'HUBB', 'KEYS'], + JKHY: ['FI', 'FIS', 'GPN', 'BR', 'PAYX'], + }; + const metadataCountries = useMemo(() => { if (!selection || selection.length === 0) return []; - const match = selection.find((s) => Object.prototype.hasOwnProperty.call(relatedBySelected, s)); - return match ? relatedBySelected[match] : []; - }, [selection]); + // For the clean_data dataset, use the existing relatedBySelected mapping + if (dataname === 'clean_data') { + const match = selection.find((s) => Object.prototype.hasOwnProperty.call(relatedBySelected, s)); + return match ? relatedBySelected[match] : []; + } + // For the sp500 dataset, use the SP500 mapping + if (dataname === 'sp500_stocks') { + const match = selection.find((s) => Object.prototype.hasOwnProperty.call(relatedBySelectedStocks, s)); + return match ? relatedBySelectedStocks[match] : []; + } + return []; + }, [selection, dataname]); useEffect(() => { if (guardrail !== 'cluster') return; From a2d2a365b6300df15e84f78607bd583672c8d0ff Mon Sep 17 00:00:00 2001 From: abrar Date: Mon, 1 Sep 2025 22:37:18 -0600 Subject: [PATCH 6/7] drop subregions in meta condition --- src/public/viz-guardrails/LineChart.tsx | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/public/viz-guardrails/LineChart.tsx b/src/public/viz-guardrails/LineChart.tsx index 96d0b918a8..5b780c7767 100644 --- a/src/public/viz-guardrails/LineChart.tsx +++ b/src/public/viz-guardrails/LineChart.tsx @@ -975,11 +975,7 @@ export function LineChart({ if (selection) { labels = labels.concat( selection.map((country) => { - let label = country; - if (guardrail === 'metadata' && dataname === 'clean_data') { - const item = items.find((it) => it.name === country); - if (item?.subregion) label = `${country} (${item.subregion})`; - } + const label = country; return { label, y: data.filter((val) => val[parameters.cat_var] === country).slice(-1).map((val) => yScale(val[parameters.y_var]))[0], @@ -1084,13 +1080,8 @@ export function LineChart({ .filter((line) => line !== null) .map((line) => { if (!line) return null; - let label = line.name; - if (dataname === 'clean_data') { - const item = items.find((it) => it.name === line.name); - if (item?.subregion) label = `${line.name} (${item.subregion})`; - } return { - label, + label: line.name, y: yScale(line.lastPoint[1]), color: darkGrayColor, }; From c4f2b5037fc554e129e5349befded35fb39799ba Mon Sep 17 00:00:00 2001 From: abrar Date: Mon, 1 Sep 2025 22:46:20 -0600 Subject: [PATCH 7/7] add percentile closest to newline --- src/public/viz-guardrails/LineChart.tsx | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/public/viz-guardrails/LineChart.tsx b/src/public/viz-guardrails/LineChart.tsx index 5b780c7767..68901f9c96 100644 --- a/src/public/viz-guardrails/LineChart.tsx +++ b/src/public/viz-guardrails/LineChart.tsx @@ -1050,7 +1050,7 @@ export function LineChart({ if (line && line.lastPoint) { const percentile = percentiles[i]; labels.push({ - label: `${line.name} (${percentile}th Percentile)`, + label: `${line.name}\n${percentile}th Percentile`, y: yScale(line.lastPoint[parameters.y_var]), color: darkGrayColor, }); @@ -1092,15 +1092,16 @@ export function LineChart({ labels = labels.filter((l) => typeof l.y === 'number' && !Number.isNaN(l.y)).sort((a, b) => b.y - a.y); - let prevY: number | undefined; - for (const label of labels) { - if (prevY !== undefined) { - const diff = prevY - label.y; - if (diff < min_dist) { - label.y = prevY - min_dist; - } + const labelHeights = labels.map((l) => (l.label.includes('\n') ? 18 : 10)); + for (let i = 0; i < labels.length; i += 1) { + if (i === 0) continue; + const prev = labels[i - 1]; + const cur = labels[i]; + const required = Math.max(labelHeights[i - 1], labelHeights[i], min_dist); + const diff = prev.y - cur.y; + if (diff < required) { + cur.y = prev.y - required; } - prevY = label.y; } return labels; @@ -1129,7 +1130,7 @@ export function LineChart({ // ---------------------------- Render ---------------------------- const labelHtmlPositions = allLabelPositions.map((x, i) => { - const baseName = x.label.split(' (')[0]; + const baseName = x.label.split('\n')[0].split(' (')[0]; const country = items.find((it) => it.name === baseName); const tooltip = country?.longName || undefined; const labelX = width + margin.left - 3; @@ -1508,6 +1509,7 @@ export function LineChart({ color: x.color, background: 'transparent', cursor: x.tooltip ? 'pointer' : 'default', + whiteSpace: 'pre-line', zIndex: 2, userSelect: 'none', padding: 0,