@sanity/ailf-studio 1.7.1 → 1.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +104 -79
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6064,7 +6064,7 @@ import {
|
|
|
6064
6064
|
import {
|
|
6065
6065
|
useCallback as useCallback32,
|
|
6066
6066
|
useEffect as useEffect10,
|
|
6067
|
-
useMemo as
|
|
6067
|
+
useMemo as useMemo15,
|
|
6068
6068
|
useState as useState22
|
|
6069
6069
|
} from "react";
|
|
6070
6070
|
import { useClient as useClient10 } from "sanity";
|
|
@@ -6095,8 +6095,21 @@ function findManifestEntry(ref, key) {
|
|
|
6095
6095
|
return ref.entries.find((e) => e.key === key);
|
|
6096
6096
|
}
|
|
6097
6097
|
|
|
6098
|
+
// src/lib/use-test-outputs-artifact.ts
|
|
6099
|
+
import { useMemo as useMemo7 } from "react";
|
|
6100
|
+
|
|
6101
|
+
// src/lib/test-outputs-entry-key.ts
|
|
6102
|
+
var VARIANT_SUFFIX_PATTERN = /\s*\((gold|baseline)\)\s*$/i;
|
|
6103
|
+
function testOutputsEntryKey(taskId, modelId) {
|
|
6104
|
+
const match = VARIANT_SUFFIX_PATTERN.exec(taskId);
|
|
6105
|
+
if (!match) return null;
|
|
6106
|
+
const mode = match[1].toLowerCase();
|
|
6107
|
+
const task = taskId.slice(0, match.index).trim();
|
|
6108
|
+
return `${mode}--${task}--${modelId}`;
|
|
6109
|
+
}
|
|
6110
|
+
|
|
6098
6111
|
// src/lib/useArtifactCache.ts
|
|
6099
|
-
import { useCallback as useCallback15, useRef as useRef5, useState as useState11 } from "react";
|
|
6112
|
+
import { useCallback as useCallback15, useMemo as useMemo6, useRef as useRef5, useState as useState11 } from "react";
|
|
6100
6113
|
function useArtifactCache(opts) {
|
|
6101
6114
|
const { runId, artifactRef, type } = opts;
|
|
6102
6115
|
const cacheRef = useRef5(/* @__PURE__ */ new Map());
|
|
@@ -6104,7 +6117,10 @@ function useArtifactCache(opts) {
|
|
|
6104
6117
|
const [error, setError] = useState11(null);
|
|
6105
6118
|
const inFlight2 = useRef5(/* @__PURE__ */ new Set());
|
|
6106
6119
|
const BULK_KEY = "__bulk__";
|
|
6107
|
-
const availableEntries =
|
|
6120
|
+
const availableEntries = useMemo6(
|
|
6121
|
+
() => artifactRef?.entries?.map((e) => e.key) ?? [],
|
|
6122
|
+
[artifactRef]
|
|
6123
|
+
);
|
|
6108
6124
|
const fetchEntry = useCallback15(
|
|
6109
6125
|
async (key) => {
|
|
6110
6126
|
if (!artifactRef || !runId) return;
|
|
@@ -6159,14 +6175,17 @@ function useArtifactCache(opts) {
|
|
|
6159
6175
|
(key) => cacheRef.current.get(key) ?? null,
|
|
6160
6176
|
[]
|
|
6161
6177
|
);
|
|
6162
|
-
return
|
|
6163
|
-
|
|
6164
|
-
|
|
6165
|
-
|
|
6166
|
-
|
|
6167
|
-
|
|
6168
|
-
|
|
6169
|
-
|
|
6178
|
+
return useMemo6(
|
|
6179
|
+
() => ({
|
|
6180
|
+
status,
|
|
6181
|
+
error,
|
|
6182
|
+
availableEntries,
|
|
6183
|
+
getEntry,
|
|
6184
|
+
fetchEntry,
|
|
6185
|
+
fetchAll
|
|
6186
|
+
}),
|
|
6187
|
+
[status, error, availableEntries, getEntry, fetchEntry, fetchAll]
|
|
6188
|
+
);
|
|
6170
6189
|
}
|
|
6171
6190
|
async function signAndFetch(signingUrl) {
|
|
6172
6191
|
const signingRes = await fetch(signingUrl, {
|
|
@@ -6201,24 +6220,27 @@ function useTestOutputsArtifact(runId, artifactRef) {
|
|
|
6201
6220
|
artifactRef,
|
|
6202
6221
|
type: "testOutputs"
|
|
6203
6222
|
});
|
|
6204
|
-
return {
|
|
6205
|
-
|
|
6206
|
-
|
|
6207
|
-
|
|
6208
|
-
|
|
6209
|
-
|
|
6210
|
-
|
|
6211
|
-
|
|
6212
|
-
|
|
6223
|
+
return useMemo7(() => {
|
|
6224
|
+
const entryKey = (taskId, modelId) => testOutputsEntryKey(taskId, modelId) ?? `${taskId}::${modelId}`;
|
|
6225
|
+
return {
|
|
6226
|
+
status: cache.status,
|
|
6227
|
+
error: cache.error,
|
|
6228
|
+
getOutput: (taskId, modelId) => cache.getEntry(entryKey(taskId, modelId)),
|
|
6229
|
+
fetchOutput: async (taskId, modelId) => {
|
|
6230
|
+
if (!artifactRef) return;
|
|
6231
|
+
if (!artifactRef.layout || artifactRef.layout === "bulk") {
|
|
6232
|
+
await cache.fetchAll();
|
|
6233
|
+
return;
|
|
6234
|
+
}
|
|
6235
|
+
await cache.fetchEntry(entryKey(taskId, modelId));
|
|
6236
|
+
},
|
|
6237
|
+
hasOutput: (taskId, modelId) => {
|
|
6238
|
+
if (!artifactRef) return false;
|
|
6239
|
+
if (!artifactRef.layout || artifactRef.layout === "bulk") return true;
|
|
6240
|
+
return cache.availableEntries.includes(entryKey(taskId, modelId));
|
|
6213
6241
|
}
|
|
6214
|
-
|
|
6215
|
-
|
|
6216
|
-
hasOutput: (taskId, modelId) => {
|
|
6217
|
-
if (!artifactRef) return false;
|
|
6218
|
-
if (!artifactRef.layout || artifactRef.layout === "bulk") return true;
|
|
6219
|
-
return cache.availableEntries.includes(`${taskId}::${modelId}`);
|
|
6220
|
-
}
|
|
6221
|
-
};
|
|
6242
|
+
};
|
|
6243
|
+
}, [cache, artifactRef]);
|
|
6222
6244
|
}
|
|
6223
6245
|
|
|
6224
6246
|
// src/lib/thresholds.ts
|
|
@@ -6262,7 +6284,7 @@ function negativeDocLiftSentiment(count) {
|
|
|
6262
6284
|
}
|
|
6263
6285
|
|
|
6264
6286
|
// src/components/report-detail/AgentBehaviorCard.tsx
|
|
6265
|
-
import { useMemo as
|
|
6287
|
+
import { useMemo as useMemo8, useState as useState12 } from "react";
|
|
6266
6288
|
import { HelpCircleIcon as HelpCircleIcon6, SearchIcon as SearchIcon4 } from "@sanity/icons";
|
|
6267
6289
|
import {
|
|
6268
6290
|
Badge as Badge5,
|
|
@@ -6473,7 +6495,7 @@ function SearchQueryList({
|
|
|
6473
6495
|
truncated
|
|
6474
6496
|
}) {
|
|
6475
6497
|
const [filter, setFilter] = useState12("");
|
|
6476
|
-
const filtered =
|
|
6498
|
+
const filtered = useMemo8(() => {
|
|
6477
6499
|
if (!filter) return queries;
|
|
6478
6500
|
const lower = filter.toLowerCase();
|
|
6479
6501
|
return queries.filter((q) => q.toLowerCase().includes(lower));
|
|
@@ -7146,7 +7168,7 @@ function Pill({
|
|
|
7146
7168
|
import { Box as Box16, Flex as Flex15, Stack as Stack19, Text as Text24 } from "@sanity/ui";
|
|
7147
7169
|
|
|
7148
7170
|
// src/lib/useArtifactListRow.ts
|
|
7149
|
-
import { useCallback as useCallback18, useMemo as
|
|
7171
|
+
import { useCallback as useCallback18, useMemo as useMemo10 } from "react";
|
|
7150
7172
|
|
|
7151
7173
|
// src/lib/useArtifactDetail.ts
|
|
7152
7174
|
import { useCallback as useCallback16, useEffect as useEffect7, useState as useState13 } from "react";
|
|
@@ -7375,7 +7397,7 @@ function useArtifactEntry(type, key) {
|
|
|
7375
7397
|
}
|
|
7376
7398
|
|
|
7377
7399
|
// src/lib/useArtifactPrefetch.ts
|
|
7378
|
-
import { useCallback as useCallback17, useMemo as
|
|
7400
|
+
import { useCallback as useCallback17, useMemo as useMemo9 } from "react";
|
|
7379
7401
|
var NDJSON_TYPES2 = /* @__PURE__ */ new Set([
|
|
7380
7402
|
"traces"
|
|
7381
7403
|
]);
|
|
@@ -7479,7 +7501,7 @@ function useArtifactPrefetch(type) {
|
|
|
7479
7501
|
},
|
|
7480
7502
|
[runId, ref, type]
|
|
7481
7503
|
);
|
|
7482
|
-
return
|
|
7504
|
+
return useMemo9(
|
|
7483
7505
|
() => ({ prefetch, onHover, prefetchWindow, warmAll }),
|
|
7484
7506
|
[prefetch, onHover, prefetchWindow, warmAll]
|
|
7485
7507
|
);
|
|
@@ -7512,7 +7534,7 @@ function useArtifactListRow(type, key, listKeys) {
|
|
|
7512
7534
|
const entry = useArtifactEntry(type, key);
|
|
7513
7535
|
const [full, status, request] = useArtifactDetail(type, key);
|
|
7514
7536
|
const { onHover, prefetchWindow } = useArtifactPrefetch(type);
|
|
7515
|
-
const onMouseEnter =
|
|
7537
|
+
const onMouseEnter = useMemo10(() => onHover(key), [onHover, key]);
|
|
7516
7538
|
const onFocus = useCallback18(() => {
|
|
7517
7539
|
const idx = listKeys.indexOf(key);
|
|
7518
7540
|
if (idx < 0) return;
|
|
@@ -7786,7 +7808,7 @@ function formatShortDate(iso) {
|
|
|
7786
7808
|
}
|
|
7787
7809
|
|
|
7788
7810
|
// src/components/report-detail/JudgmentList.tsx
|
|
7789
|
-
import React2, { useCallback as useCallback21, useEffect as useEffect9, useMemo as
|
|
7811
|
+
import React2, { useCallback as useCallback21, useEffect as useEffect9, useMemo as useMemo11, useRef as useRef6, useState as useState15 } from "react";
|
|
7790
7812
|
import {
|
|
7791
7813
|
ChevronDownIcon,
|
|
7792
7814
|
ChevronRightIcon,
|
|
@@ -8136,11 +8158,7 @@ function testResultKey(taskId, dimension, modelId) {
|
|
|
8136
8158
|
return `${taskId}::${dimension}::${modelId}`;
|
|
8137
8159
|
}
|
|
8138
8160
|
function testOutputsKeyFor(j) {
|
|
8139
|
-
|
|
8140
|
-
if (!match) return null;
|
|
8141
|
-
const mode = match[1].toLowerCase();
|
|
8142
|
-
const task = j.taskId.slice(0, match.index).trim();
|
|
8143
|
-
return `${mode}--${task}--${j.modelId}`;
|
|
8161
|
+
return testOutputsEntryKey(j.taskId, j.modelId);
|
|
8144
8162
|
}
|
|
8145
8163
|
function JudgmentList({
|
|
8146
8164
|
artifactCache,
|
|
@@ -8155,7 +8173,7 @@ function JudgmentList({
|
|
|
8155
8173
|
);
|
|
8156
8174
|
const [scoreBand, setScoreBand] = useState15(null);
|
|
8157
8175
|
const [sortOrder, setSortOrder] = useState15("score-desc");
|
|
8158
|
-
const testResultMap =
|
|
8176
|
+
const testResultMap = useMemo11(() => {
|
|
8159
8177
|
const map = /* @__PURE__ */ new Map();
|
|
8160
8178
|
if (!testResults) return map;
|
|
8161
8179
|
for (const tr of testResults) {
|
|
@@ -8165,15 +8183,15 @@ function JudgmentList({
|
|
|
8165
8183
|
}
|
|
8166
8184
|
return map;
|
|
8167
8185
|
}, [testResults]);
|
|
8168
|
-
const pruned =
|
|
8169
|
-
const dimensionOptions =
|
|
8186
|
+
const pruned = useMemo11(() => pruneNoise(judgments), [judgments]);
|
|
8187
|
+
const dimensionOptions = useMemo11(() => {
|
|
8170
8188
|
const counts = /* @__PURE__ */ new Map();
|
|
8171
8189
|
for (const j of pruned) {
|
|
8172
8190
|
counts.set(j.dimension, (counts.get(j.dimension) ?? 0) + 1);
|
|
8173
8191
|
}
|
|
8174
8192
|
return [...counts.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([key, count]) => ({ key, label: dimensionLabel2(key), count }));
|
|
8175
8193
|
}, [pruned]);
|
|
8176
|
-
const filtered =
|
|
8194
|
+
const filtered = useMemo11(() => {
|
|
8177
8195
|
return pruned.filter((j) => {
|
|
8178
8196
|
if (selectedDimensions.size > 0 && !selectedDimensions.has(j.dimension))
|
|
8179
8197
|
return false;
|
|
@@ -8182,17 +8200,17 @@ function JudgmentList({
|
|
|
8182
8200
|
return true;
|
|
8183
8201
|
});
|
|
8184
8202
|
}, [pruned, selectedDimensions, scoreBand, query]);
|
|
8185
|
-
const grouped =
|
|
8203
|
+
const grouped = useMemo11(
|
|
8186
8204
|
() => groupByArea(filtered, sortOrder),
|
|
8187
8205
|
[filtered, sortOrder]
|
|
8188
8206
|
);
|
|
8189
|
-
const groupedWithStats =
|
|
8207
|
+
const groupedWithStats = useMemo11(
|
|
8190
8208
|
() => grouped.map(
|
|
8191
8209
|
([area, list]) => [area, list, computeGroupStats(list)]
|
|
8192
8210
|
),
|
|
8193
8211
|
[grouped]
|
|
8194
8212
|
);
|
|
8195
|
-
const focusedJudgment =
|
|
8213
|
+
const focusedJudgment = useMemo11(() => {
|
|
8196
8214
|
if (!focus) return null;
|
|
8197
8215
|
return pruned.find((j) => judgmentSlug(j) === focus) ?? null;
|
|
8198
8216
|
}, [pruned, focus]);
|
|
@@ -8238,13 +8256,13 @@ function JudgmentList({
|
|
|
8238
8256
|
});
|
|
8239
8257
|
}, [focusedJudgment]);
|
|
8240
8258
|
const [activeRowSlug, setActiveRowSlug] = useState15(null);
|
|
8241
|
-
const flatSlugs =
|
|
8259
|
+
const flatSlugs = useMemo11(
|
|
8242
8260
|
() => grouped.flatMap(
|
|
8243
8261
|
([, areaJudgments]) => areaJudgments.map((j) => judgmentSlug(j))
|
|
8244
8262
|
),
|
|
8245
8263
|
[grouped]
|
|
8246
8264
|
);
|
|
8247
|
-
const flatKeys =
|
|
8265
|
+
const flatKeys = useMemo11(
|
|
8248
8266
|
() => grouped.flatMap(
|
|
8249
8267
|
([, areaJudgments]) => areaJudgments.map((j) => j.id ?? "")
|
|
8250
8268
|
),
|
|
@@ -8583,7 +8601,7 @@ function JudgmentCard({
|
|
|
8583
8601
|
},
|
|
8584
8602
|
[handleClick]
|
|
8585
8603
|
);
|
|
8586
|
-
const onHoverTestOutputs =
|
|
8604
|
+
const onHoverTestOutputs = useMemo11(
|
|
8587
8605
|
() => testOutputsKey ? testOutputsPrefetch.onHover(testOutputsKey) : null,
|
|
8588
8606
|
[testOutputsPrefetch, testOutputsKey]
|
|
8589
8607
|
);
|
|
@@ -9504,14 +9522,14 @@ function ReportHeader({
|
|
|
9504
9522
|
}
|
|
9505
9523
|
|
|
9506
9524
|
// src/components/report-detail/StrengthsList.tsx
|
|
9507
|
-
import { useMemo as
|
|
9525
|
+
import { useMemo as useMemo14 } from "react";
|
|
9508
9526
|
import { CheckmarkCircleIcon as CheckmarkCircleIcon2, SearchIcon as SearchIcon7 } from "@sanity/icons";
|
|
9509
9527
|
import { Box as Box21, Flex as Flex25, Stack as Stack26, Text as Text34 } from "@sanity/ui";
|
|
9510
9528
|
|
|
9511
9529
|
// src/components/report-detail/AreaScoresGrid.tsx
|
|
9512
9530
|
import React3, {
|
|
9513
9531
|
useCallback as useCallback29,
|
|
9514
|
-
useMemo as
|
|
9532
|
+
useMemo as useMemo12,
|
|
9515
9533
|
useState as useState20
|
|
9516
9534
|
} from "react";
|
|
9517
9535
|
import { WarningOutlineIcon as WarningOutlineIcon2 } from "@sanity/icons";
|
|
@@ -9556,12 +9574,12 @@ function AreaScoresGrid({
|
|
|
9556
9574
|
}) {
|
|
9557
9575
|
const { ref: containerRef, width } = useContainerWidth();
|
|
9558
9576
|
const tier = tableTier(width);
|
|
9559
|
-
const hasActual =
|
|
9577
|
+
const hasActual = useMemo12(
|
|
9560
9578
|
() => scores.some((s) => s.actualScore != null),
|
|
9561
9579
|
[scores]
|
|
9562
9580
|
);
|
|
9563
9581
|
const showLift = isLiteracyMode(mode);
|
|
9564
|
-
const dimKeys =
|
|
9582
|
+
const dimKeys = useMemo12(() => collectDimensionKeys(scores), [scores]);
|
|
9565
9583
|
const [sortField, setSortField] = useState20("score");
|
|
9566
9584
|
const [sortDir, setSortDir] = useState20("desc");
|
|
9567
9585
|
const handleSort = useCallback29(
|
|
@@ -9575,7 +9593,7 @@ function AreaScoresGrid({
|
|
|
9575
9593
|
},
|
|
9576
9594
|
[sortField]
|
|
9577
9595
|
);
|
|
9578
|
-
const sorted =
|
|
9596
|
+
const sorted = useMemo12(() => {
|
|
9579
9597
|
const dir = sortDir === "asc" ? 1 : -1;
|
|
9580
9598
|
return [...scores].sort((a, b) => {
|
|
9581
9599
|
switch (sortField) {
|
|
@@ -9590,7 +9608,7 @@ function AreaScoresGrid({
|
|
|
9590
9608
|
}
|
|
9591
9609
|
});
|
|
9592
9610
|
}, [scores, sortField, sortDir]);
|
|
9593
|
-
const modelScoresByFeature =
|
|
9611
|
+
const modelScoresByFeature = useMemo12(() => {
|
|
9594
9612
|
if (!perModel) return null;
|
|
9595
9613
|
const map = /* @__PURE__ */ new Map();
|
|
9596
9614
|
for (const model of perModel) {
|
|
@@ -10202,7 +10220,7 @@ function Pill2({
|
|
|
10202
10220
|
}
|
|
10203
10221
|
|
|
10204
10222
|
// src/components/report-detail/useModelSelection.ts
|
|
10205
|
-
import { useCallback as useCallback31, useMemo as
|
|
10223
|
+
import { useCallback as useCallback31, useMemo as useMemo13, useState as useState21 } from "react";
|
|
10206
10224
|
function useModelSelection({
|
|
10207
10225
|
scores,
|
|
10208
10226
|
perModel
|
|
@@ -10213,7 +10231,7 @@ function useModelSelection({
|
|
|
10213
10231
|
}, []);
|
|
10214
10232
|
const isExpanded = selection === "expanded";
|
|
10215
10233
|
const hasModels = perModel != null && perModel.length > 1;
|
|
10216
|
-
const resolvedScores =
|
|
10234
|
+
const resolvedScores = useMemo13(() => {
|
|
10217
10235
|
if (isExpanded || selection === null || !perModel) return scores;
|
|
10218
10236
|
const model = perModel.find((m) => m.modelId === selection);
|
|
10219
10237
|
return model?.scores ?? scores;
|
|
@@ -10244,7 +10262,7 @@ function StrengthsList({
|
|
|
10244
10262
|
hasModels,
|
|
10245
10263
|
expandedPerModel
|
|
10246
10264
|
} = useModelSelection({ scores, perModel });
|
|
10247
|
-
const displayedScores =
|
|
10265
|
+
const displayedScores = useMemo14(
|
|
10248
10266
|
() => resolvedScores.filter((s) => s.totalScore >= SCORE_CAUTION),
|
|
10249
10267
|
[resolvedScores]
|
|
10250
10268
|
);
|
|
@@ -10742,17 +10760,17 @@ function ReportDetail({
|
|
|
10742
10760
|
const hasAgentActivity = Boolean(
|
|
10743
10761
|
summary?.agentBehavior && summary.agentBehavior.length > 0
|
|
10744
10762
|
);
|
|
10745
|
-
const tabs =
|
|
10763
|
+
const tabs = useMemo15(
|
|
10746
10764
|
() => [OVERVIEW_TAB, DIAGNOSTICS_TAB, ACTIVITY_TAB],
|
|
10747
10765
|
[]
|
|
10748
10766
|
);
|
|
10749
|
-
const disabledTabs =
|
|
10767
|
+
const disabledTabs = useMemo15(() => {
|
|
10750
10768
|
const set2 = /* @__PURE__ */ new Set();
|
|
10751
10769
|
if (!hasDiagnostics) set2.add("diagnostics");
|
|
10752
10770
|
if (!hasAgentActivity) set2.add("activity");
|
|
10753
10771
|
return set2;
|
|
10754
10772
|
}, [hasDiagnostics, hasAgentActivity]);
|
|
10755
|
-
const currentTab =
|
|
10773
|
+
const currentTab = useMemo15(() => {
|
|
10756
10774
|
const parsed = parseTab(activeTab);
|
|
10757
10775
|
if (disabledTabs.has(parsed)) return "overview";
|
|
10758
10776
|
return tabs.some((t) => t.id === parsed) ? parsed : "overview";
|
|
@@ -11233,11 +11251,12 @@ var SECTION_LABEL_STYLE = {
|
|
|
11233
11251
|
textTransform: "uppercase"
|
|
11234
11252
|
};
|
|
11235
11253
|
var COPYABLE_BLOCK_STYLE = {
|
|
11236
|
-
|
|
11254
|
+
position: "relative"
|
|
11237
11255
|
};
|
|
11238
11256
|
var COPY_BUTTON_SLOT_STYLE = {
|
|
11239
11257
|
float: "right",
|
|
11240
11258
|
marginLeft: 8,
|
|
11259
|
+
marginBottom: 4,
|
|
11241
11260
|
position: "sticky",
|
|
11242
11261
|
top: 0,
|
|
11243
11262
|
zIndex: 1
|
|
@@ -11310,6 +11329,10 @@ function JudgmentDetailDrawer({
|
|
|
11310
11329
|
useEffect12(() => {
|
|
11311
11330
|
setTab("reasoning");
|
|
11312
11331
|
}, [judgment.taskId, judgment.dimension, judgment.modelId]);
|
|
11332
|
+
const [fetchDispatched, setFetchDispatched] = useState24(false);
|
|
11333
|
+
useEffect12(() => {
|
|
11334
|
+
setFetchDispatched(false);
|
|
11335
|
+
}, [judgment.taskId, judgment.dimension, judgment.modelId]);
|
|
11313
11336
|
const inlineOutput = testResult?.responseOutput;
|
|
11314
11337
|
const artifactEntry = artifactCache?.getOutput(
|
|
11315
11338
|
judgment.taskId,
|
|
@@ -11317,19 +11340,21 @@ function JudgmentDetailDrawer({
|
|
|
11317
11340
|
);
|
|
11318
11341
|
const resolvedOutput = inlineOutput ?? artifactEntry?.responseOutput ?? null;
|
|
11319
11342
|
const resolvedTruncated = testResult?.responseOutputTruncated ?? artifactEntry?.responseOutputTruncated ?? false;
|
|
11320
|
-
const
|
|
11321
|
-
const
|
|
11322
|
-
const
|
|
11323
|
-
const
|
|
11343
|
+
const canAttemptFetch = !inlineOutput && !artifactEntry && artifactCache != null;
|
|
11344
|
+
const fetchInFlight = canAttemptFetch && artifactCache?.status === "loading";
|
|
11345
|
+
const fetchFailed = canAttemptFetch && artifactCache?.status === "error";
|
|
11346
|
+
const entryUnavailable = canAttemptFetch && fetchDispatched && !fetchInFlight && !fetchFailed;
|
|
11347
|
+
const hasOutputTab = resolvedOutput != null || canAttemptFetch;
|
|
11324
11348
|
useEffect12(() => {
|
|
11325
|
-
if (tab === "output" &&
|
|
11326
|
-
|
|
11349
|
+
if (tab === "output" && canAttemptFetch && !fetchDispatched) {
|
|
11350
|
+
setFetchDispatched(true);
|
|
11351
|
+
void artifactCache.fetchOutput(judgment.taskId, judgment.modelId);
|
|
11327
11352
|
}
|
|
11328
11353
|
}, [
|
|
11329
11354
|
tab,
|
|
11330
|
-
|
|
11355
|
+
canAttemptFetch,
|
|
11356
|
+
fetchDispatched,
|
|
11331
11357
|
artifactCache,
|
|
11332
|
-
entryKnownToManifest,
|
|
11333
11358
|
judgment.taskId,
|
|
11334
11359
|
judgment.modelId
|
|
11335
11360
|
]);
|
|
@@ -11553,12 +11578,12 @@ function JudgmentDetailDrawer({
|
|
|
11553
11578
|
hidden: tab !== "output",
|
|
11554
11579
|
id: "judgment-panel-output",
|
|
11555
11580
|
children: [
|
|
11556
|
-
!resolvedOutput &&
|
|
11557
|
-
!resolvedOutput &&
|
|
11558
|
-
!resolvedOutput && !entryUnavailable && artifactCache?.status === "error" && /* @__PURE__ */ jsxs42(Text44, { muted: true, size: 1, style: { color: "#f87171" }, children: [
|
|
11581
|
+
!resolvedOutput && fetchInFlight && /* @__PURE__ */ jsx59(Text44, { muted: true, size: 1, children: "Fetching model output\u2026" }),
|
|
11582
|
+
!resolvedOutput && fetchFailed && /* @__PURE__ */ jsxs42(Text44, { muted: true, size: 1, style: { color: "#f87171" }, children: [
|
|
11559
11583
|
"Failed to load model output",
|
|
11560
|
-
artifactCache
|
|
11584
|
+
artifactCache?.error ? `: ${artifactCache.error}` : ""
|
|
11561
11585
|
] }),
|
|
11586
|
+
!resolvedOutput && entryUnavailable && /* @__PURE__ */ jsx59(Text44, { muted: true, size: 1, children: "Model output not available for this entry." }),
|
|
11562
11587
|
resolvedOutput && /* @__PURE__ */ jsxs42(Box28, { style: COPYABLE_BLOCK_STYLE, children: [
|
|
11563
11588
|
/* @__PURE__ */ jsx59(Box28, { style: COPY_BUTTON_SLOT_STYLE, children: /* @__PURE__ */ jsx59(
|
|
11564
11589
|
CopyButton,
|
|
@@ -11733,7 +11758,7 @@ function JudgmentDetailDrawerOutlet({
|
|
|
11733
11758
|
|
|
11734
11759
|
// src/components/ScoreTimeline.tsx
|
|
11735
11760
|
import { Card as Card21, Flex as Flex33, Select as Select2, Stack as Stack35, Text as Text45 } from "@sanity/ui";
|
|
11736
|
-
import { useCallback as useCallback35, useEffect as useEffect14, useMemo as
|
|
11761
|
+
import { useCallback as useCallback35, useEffect as useEffect14, useMemo as useMemo16, useState as useState26 } from "react";
|
|
11737
11762
|
import { useClient as useClient11 } from "sanity";
|
|
11738
11763
|
import { jsx as jsx61, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
11739
11764
|
var CHART_HEIGHT = 220;
|
|
@@ -11774,7 +11799,7 @@ function ScoreTimeline({ mode = null, source = null }) {
|
|
|
11774
11799
|
const [loading, setLoading] = useState26(true);
|
|
11775
11800
|
const [rangeDays, setRangeDays] = useState26(30);
|
|
11776
11801
|
const [selectedArea, setSelectedArea] = useState26(null);
|
|
11777
|
-
const areaNames =
|
|
11802
|
+
const areaNames = useMemo16(() => {
|
|
11778
11803
|
const names = /* @__PURE__ */ new Set();
|
|
11779
11804
|
for (const dp of dataPoints) {
|
|
11780
11805
|
for (const s of dp.scores) {
|
|
@@ -11801,7 +11826,7 @@ function ScoreTimeline({ mode = null, source = null }) {
|
|
|
11801
11826
|
useEffect14(() => {
|
|
11802
11827
|
void fetchData();
|
|
11803
11828
|
}, [fetchData]);
|
|
11804
|
-
const chartPoints =
|
|
11829
|
+
const chartPoints = useMemo16(() => {
|
|
11805
11830
|
const pts = [];
|
|
11806
11831
|
const scored = dataPoints.map((dp) => ({
|
|
11807
11832
|
date: dp.completedAt,
|
|
@@ -11815,7 +11840,7 @@ function ScoreTimeline({ mode = null, source = null }) {
|
|
|
11815
11840
|
});
|
|
11816
11841
|
return pts;
|
|
11817
11842
|
}, [dataPoints, selectedArea]);
|
|
11818
|
-
const avgScore =
|
|
11843
|
+
const avgScore = useMemo16(() => {
|
|
11819
11844
|
if (chartPoints.length === 0) return 0;
|
|
11820
11845
|
return chartPoints.reduce((sum, p) => sum + p.score, 0) / chartPoints.length;
|
|
11821
11846
|
}, [chartPoints]);
|