@meridianlabs/log-viewer 0.3.193 → 0.3.196

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.
Files changed (37) hide show
  1. package/lib/app/log-view/LogView.d.ts.map +1 -1
  2. package/lib/app/log-view/tabs/InfoTab.d.ts +3 -1
  3. package/lib/app/log-view/tabs/InfoTab.d.ts.map +1 -1
  4. package/lib/app/log-view/tabs/JsonTab.d.ts +2 -2
  5. package/lib/app/log-view/tabs/JsonTab.d.ts.map +1 -1
  6. package/lib/app/log-view/tabs/TaskTab.d.ts +3 -1
  7. package/lib/app/log-view/tabs/TaskTab.d.ts.map +1 -1
  8. package/lib/app/navbar/Navbar.d.ts.map +1 -1
  9. package/lib/app/plan/PlanCard.d.ts +1 -0
  10. package/lib/app/plan/PlanCard.d.ts.map +1 -1
  11. package/lib/app/samples/SampleDisplay.d.ts.map +1 -1
  12. package/lib/app/samples/chat/ChatMessageRow.d.ts +1 -1
  13. package/lib/app/samples/chat/ChatMessageRow.d.ts.map +1 -1
  14. package/lib/app/samples/chat/ChatView.d.ts.map +1 -1
  15. package/lib/app/samples/chat/ChatViewVirtualList.d.ts.map +1 -1
  16. package/lib/app/samples/chat/tools/ToolCallView.d.ts +2 -2
  17. package/lib/app/samples/chat/tools/ToolCallView.d.ts.map +1 -1
  18. package/lib/app/samples/chat/tools/ToolOutput.d.ts +2 -2
  19. package/lib/app/samples/chat/tools/ToolOutput.d.ts.map +1 -1
  20. package/lib/app/samples/sampleLimit.d.ts +2 -2
  21. package/lib/app/samples/sampleLimit.d.ts.map +1 -1
  22. package/lib/app/samples/transcript/SampleLimitEventView.d.ts.map +1 -1
  23. package/lib/app/samples/transcript/TranscriptFilter.d.ts.map +1 -1
  24. package/lib/app/samples/transcript/hooks.d.ts +2 -0
  25. package/lib/app/samples/transcript/hooks.d.ts.map +1 -1
  26. package/lib/app/types.d.ts +2 -2
  27. package/lib/app/types.d.ts.map +1 -1
  28. package/lib/client/api/client-api.d.ts.map +1 -1
  29. package/lib/client/api/static-http/fetch.d.ts.map +1 -1
  30. package/lib/client/api/types.d.ts +7 -1
  31. package/lib/client/api/types.d.ts.map +1 -1
  32. package/lib/client/remote/remoteLogFile.d.ts.map +1 -1
  33. package/lib/index.js +125 -78
  34. package/lib/index.js.map +1 -1
  35. package/lib/state/sampleUtils.d.ts.map +1 -1
  36. package/lib/styles/index.css +13 -14
  37. package/package.json +1 -1
package/lib/index.js CHANGED
@@ -16820,12 +16820,54 @@ const resolveAttachments = (value2, attachments, onFailedResolve) => {
16820
16820
  }
16821
16821
  return value2;
16822
16822
  };
16823
+ const expandRefs = (refs, pool) => refs.flatMap(([start2, end_exclusive]) => pool.slice(start2, end_exclusive));
16824
+ const resolveEventRefs = (events, msgPool, callPool) => {
16825
+ return events.map((event) => {
16826
+ if (event.event !== "model") return event;
16827
+ const resolved = Array.isArray(event.input_refs) ? {
16828
+ ...event,
16829
+ input: expandRefs(
16830
+ event.input_refs,
16831
+ msgPool
16832
+ ),
16833
+ input_refs: null
16834
+ } : event;
16835
+ if (!resolved.call || !Array.isArray(resolved.call.call_refs))
16836
+ return resolved;
16837
+ return {
16838
+ ...resolved,
16839
+ call: {
16840
+ ...resolved.call,
16841
+ request: {
16842
+ ...resolved.call.request,
16843
+ [resolved.call.call_key || "messages"]: expandRefs(
16844
+ resolved.call.call_refs,
16845
+ callPool
16846
+ )
16847
+ },
16848
+ call_refs: null,
16849
+ call_key: null
16850
+ }
16851
+ };
16852
+ });
16853
+ };
16854
+ const resolvePools = (sample2) => {
16855
+ const { message_pool, call_pool } = sample2;
16856
+ if (!message_pool?.length && !call_pool?.length) return sample2;
16857
+ return {
16858
+ ...sample2,
16859
+ events: resolveEventRefs(sample2.events, message_pool, call_pool),
16860
+ message_pool: [],
16861
+ call_pool: []
16862
+ };
16863
+ };
16823
16864
  const resolveSample$1 = (sample2) => {
16824
16865
  sample2 = { ...sample2 };
16825
16866
  if (sample2.transcript) {
16826
16867
  sample2.events = sample2.transcript.events;
16827
16868
  sample2.attachments = sample2.transcript.content;
16828
16869
  }
16870
+ sample2 = resolvePools(sample2);
16829
16871
  sample2.attachments = sample2.attachments || {};
16830
16872
  sample2.input = resolveAttachments(sample2.input, sample2.attachments);
16831
16873
  sample2.messages = resolveAttachments(sample2.messages, sample2.attachments);
@@ -97841,6 +97883,9 @@ const openRemoteLogFile = async (api2, url, concurrency) => {
97841
97883
  results: header2.results,
97842
97884
  stats: header2.stats,
97843
97885
  error: header2.error,
97886
+ tags: header2.tags,
97887
+ metadata: header2.metadata,
97888
+ log_updates: header2.log_updates,
97844
97889
  sampleSummaries
97845
97890
  };
97846
97891
  return result2;
@@ -97965,6 +98010,9 @@ const clientApi = (api2, log_file, debug2 = false) => {
97965
98010
  results: parsed.results,
97966
98011
  stats: parsed.stats,
97967
98012
  error: parsed.error,
98013
+ tags: parsed.tags,
98014
+ metadata: parsed.metadata,
98015
+ log_updates: parsed.log_updates,
97968
98016
  sampleSummaries
97969
98017
  };
97970
98018
  }
@@ -98268,21 +98316,9 @@ const fetchManifest = async (log_dir) => {
98268
98316
  const parsed = await asyncJsonParse(text2);
98269
98317
  return { raw: text2, parsed };
98270
98318
  };
98271
- const handle404 = (response) => {
98272
- return response.status === 404;
98273
- };
98274
- const logs = await fetchFile(
98275
- log_dir + "/listing.json",
98276
- parseListing,
98277
- handle404
98278
- );
98279
- if (logs) {
98280
- return logs;
98281
- }
98282
98319
  return await fetchFile(
98283
- "./listing.json",
98284
- parseListing,
98285
- handle404
98320
+ log_dir + "/listing.json",
98321
+ parseListing
98286
98322
  );
98287
98323
  };
98288
98324
  const fetchJsonFile = async (file, handleError2) => {
@@ -99448,6 +99484,8 @@ const ToolOutput = ({ output: output2, className: className2 }) => {
99448
99484
  const key2 = `tool-output-${idx}`;
99449
99485
  if (out.type === "text") {
99450
99486
  outputs.push(/* @__PURE__ */ jsxRuntimeExports.jsx(ToolTextOutput, { text: out.text }, key2));
99487
+ } else if (out.type === "document") {
99488
+ outputs.push(/* @__PURE__ */ jsxRuntimeExports.jsx(ContentDocumentView, { id: key2, document: out }, key2));
99451
99489
  } else {
99452
99490
  if (out.image.startsWith("data:")) {
99453
99491
  outputs.push(
@@ -100211,12 +100249,7 @@ const resolveToolMessage = (toolMessage) => {
100211
100249
  }
100212
100250
  ]
100213
100251
  };
100214
- } else if (con.type === "text") {
100215
- return {
100216
- content: [con],
100217
- type: "tool"
100218
- };
100219
- } else if (con.type === "image") {
100252
+ } else if (["text", "image", "document"].includes(con.type)) {
100220
100253
  return {
100221
100254
  content: [con],
100222
100255
  type: "tool"
@@ -100346,7 +100379,7 @@ const styles$1j = {
100346
100379
  container: container$k
100347
100380
  };
100348
100381
  const ChatMessageRow = ({
100349
- parentName,
100382
+ id,
100350
100383
  number: number2,
100351
100384
  resolvedMessage,
100352
100385
  toolCallStyle,
@@ -100379,7 +100412,7 @@ const ChatMessageRow = ({
100379
100412
  /* @__PURE__ */ jsxRuntimeExports.jsx(
100380
100413
  ChatMessage,
100381
100414
  {
100382
- id: `${parentName}-chat-messages`,
100415
+ id: `${id}-chat-messages`,
100383
100416
  message: resolvedMessage.message,
100384
100417
  toolMessages: resolvedMessage.toolMessages,
100385
100418
  indented: indented2,
@@ -100404,7 +100437,7 @@ const ChatMessageRow = ({
100404
100437
  /* @__PURE__ */ jsxRuntimeExports.jsx(
100405
100438
  ChatMessage,
100406
100439
  {
100407
- id: `${parentName}-chat-messages`,
100440
+ id: `${id}-chat-messages`,
100408
100441
  message: resolvedMessage.message,
100409
100442
  toolMessages: resolvedMessage.toolMessages,
100410
100443
  indented: indented2,
@@ -100515,10 +100548,11 @@ const ChatView = ({
100515
100548
  });
100516
100549
  const result2 = /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: clsx(className2), children: collapsedMessages.map((msg, index) => {
100517
100550
  const number2 = collapsedMessages.length > 1 && numbered ? index + 1 : void 0;
100551
+ const rowId = (id || "chat-view") + `-msg-${index}`;
100518
100552
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
100519
100553
  ChatMessageRow,
100520
100554
  {
100521
- parentName: id || "chat-view",
100555
+ id: rowId,
100522
100556
  number: number2,
100523
100557
  resolvedMessage: msg,
100524
100558
  indented: indented2,
@@ -106577,7 +106611,7 @@ const ViewerOptionsPopover = ({
106577
106611
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: clsx(styles$1d.fullWidth, styles$1d.fullWidthPadded), children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: styles$1d.logDir, children: logDir2 }) }),
106578
106612
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: clsx(styles$1d.spacer) }),
106579
106613
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: clsx("text-style-label", "text-style-secondary"), children: "Version" }),
106580
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: clsx(), children: "0.3.193-0-gc78b82115" }),
106614
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: clsx(), children: "0.3.196-0-ged6b90e25" }),
106581
106615
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: clsx("text-style-label", "text-style-secondary"), children: "Schema" }),
106582
106616
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: clsx(), children: DB_VERSION }),
106583
106617
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: clsx(styles$1d.spacer) }),
@@ -106730,8 +106764,14 @@ const Navbar = ({
106730
106764
  breadcrumbsEnabled
106731
106765
  }) => {
106732
106766
  const logDir2 = useStore((state) => state.logs.logDir);
106733
- const baseLogDir = dirname(logDir2 || "");
106734
- const baseLogName = basename(logDir2 || "");
106767
+ const displayDir = logDir2 === "." ? basename(
106768
+ window.location.pathname.substring(
106769
+ 0,
106770
+ window.location.pathname.lastIndexOf("/")
106771
+ )
106772
+ ) : logDir2 || "";
106773
+ const baseLogDir = dirname(displayDir);
106774
+ const baseLogName = basename(displayDir);
106735
106775
  const pathContainerRef = useRef(null);
106736
106776
  const backUrl = fnNavigationUrl(
106737
106777
  ensureTrailingSlash(dirname(currentPath || "")),
@@ -167002,10 +167042,11 @@ const ChatViewVirtualListComponent = memo(
167002
167042
  const renderRow = useCallback(
167003
167043
  (index, item2) => {
167004
167044
  const number2 = collapsedMessages.length > 1 && numbered ? index + 1 : void 0;
167045
+ const rowId = `${id}-msg-${index}`;
167005
167046
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
167006
167047
  ChatMessageRow,
167007
167048
  {
167008
- parentName: id || "chat-virtual-list",
167049
+ id: rowId,
167009
167050
  number: number2,
167010
167051
  resolvedMessage: item2,
167011
167052
  indented: indented2,
@@ -167863,12 +167904,19 @@ const useTranscriptFilter = () => {
167863
167904
  const setDefaultFilter = useCallback(() => {
167864
167905
  setFilteredEventTypes([...kDefaultExcludeEvents]);
167865
167906
  }, [setFilteredEventTypes]);
167907
+ const setNoneFilter = useCallback(() => {
167908
+ setFilteredEventTypes(Object.keys(eventTypes));
167909
+ }, [setFilteredEventTypes]);
167866
167910
  const isDefaultFilter = useMemo(() => {
167867
167911
  return filtered.length === kDefaultExcludeEvents.length && [...filtered].every((type) => kDefaultExcludeEvents.includes(type));
167868
167912
  }, [filtered]);
167869
167913
  const isDebugFilter = useMemo(() => {
167870
167914
  return filtered.length === 0;
167871
167915
  }, [filtered]);
167916
+ const isNoneFilter = useMemo(() => {
167917
+ const allTypes = Object.keys(eventTypes);
167918
+ return filtered.length === allTypes.length && allTypes.every((type) => filtered.includes(type));
167919
+ }, [filtered]);
167872
167920
  const arrangedEventTypes = useCallback((columns = 1) => {
167873
167921
  const keys = Object.keys(eventTypes);
167874
167922
  const sortedKeys = keys.sort((a, b) => {
@@ -167903,8 +167951,10 @@ const useTranscriptFilter = () => {
167903
167951
  filtered,
167904
167952
  isDefaultFilter,
167905
167953
  isDebugFilter,
167954
+ isNoneFilter,
167906
167955
  setDefaultFilter,
167907
167956
  setDebugFilter,
167957
+ setNoneFilter,
167908
167958
  filterEventType,
167909
167959
  eventTypes,
167910
167960
  arrangedEventTypes
@@ -167928,8 +167978,10 @@ const TranscriptFilterPopover = ({
167928
167978
  const {
167929
167979
  isDefaultFilter,
167930
167980
  isDebugFilter,
167981
+ isNoneFilter,
167931
167982
  setDefaultFilter,
167932
167983
  setDebugFilter,
167984
+ setNoneFilter,
167933
167985
  filterEventType,
167934
167986
  eventTypes: eventTypes2,
167935
167987
  filtered,
@@ -167968,6 +168020,18 @@ const TranscriptFilterPopover = ({
167968
168020
  onClick: () => setDebugFilter(),
167969
168021
  children: "Debug"
167970
168022
  }
168023
+ ),
168024
+ "|",
168025
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
168026
+ "a",
168027
+ {
168028
+ className: clsx(
168029
+ styles$U.link,
168030
+ isNoneFilter ? styles$U.selected : void 0
168031
+ ),
168032
+ onClick: () => setNoneFilter(),
168033
+ children: "None"
168034
+ }
167971
168035
  )
167972
168036
  ] }),
167973
168037
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: clsx(styles$U.grid, "text-size-smaller"), children: arrangedEventTypes(2).map((eventType) => {
@@ -180569,7 +180633,7 @@ const SampleDisplay = ({
180569
180633
  const toggleCollapsedMode = useCallback(() => {
180570
180634
  setCollapsedMode(isCollapsed(collapsedMode) ? "expanded" : "collapsed");
180571
180635
  }, [collapsedMode, setCollapsedMode]);
180572
- const { isDebugFilter, isDefaultFilter } = useTranscriptFilter();
180636
+ const { isDebugFilter, isDefaultFilter, isNoneFilter } = useTranscriptFilter();
180573
180637
  const api2 = useStore((state) => state.api);
180574
180638
  const downloadFiles = useStore((state) => state.capabilities.downloadFiles);
180575
180639
  const tools2 = [];
@@ -180632,7 +180696,7 @@ const SampleDisplay = ({
180632
180696
  );
180633
180697
  }
180634
180698
  if (selectedTab === kSampleTranscriptTabId) {
180635
- const label2 = isDebugFilter ? "Debug" : isDefaultFilter ? "Default" : "Custom";
180699
+ const label2 = isNoneFilter ? "None" : isDebugFilter ? "Debug" : isDefaultFilter ? "Default" : "Custom";
180636
180700
  tools2.push(
180637
180701
  /* @__PURE__ */ jsxRuntimeExports.jsx(
180638
180702
  ToolButton,
@@ -181691,9 +181755,10 @@ const PlanCard = ({
181691
181755
  evalSpec,
181692
181756
  evalPlan,
181693
181757
  scores: scores2,
181758
+ metadata: metadataProp,
181694
181759
  scrollRef
181695
181760
  }) => {
181696
- const metadata2 = evalSpec?.metadata || {};
181761
+ const metadata2 = metadataProp || {};
181697
181762
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
181698
181763
  /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { children: [
181699
181764
  /* @__PURE__ */ jsxRuntimeExports.jsx(CardHeader, { label: "Summary" }),
@@ -181719,7 +181784,7 @@ const PlanCard = ({
181719
181784
  ] })
181720
181785
  ] });
181721
181786
  };
181722
- const useInfoTabConfig = (evalSpec, evalPlan, evalError, evalResults, evalStatus) => {
181787
+ const useInfoTabConfig = (evalSpec, evalPlan, evalError, evalResults, evalStatus, metadata2) => {
181723
181788
  const scrollRef = useRef(null);
181724
181789
  const totalSampleCount = useTotalSampleCount();
181725
181790
  return useMemo(() => {
@@ -181734,6 +181799,7 @@ const useInfoTabConfig = (evalSpec, evalPlan, evalError, evalResults, evalStatus
181734
181799
  evalError,
181735
181800
  evalResults,
181736
181801
  evalStatus,
181802
+ metadata: metadata2,
181737
181803
  sampleCount: totalSampleCount,
181738
181804
  scrollRef
181739
181805
  },
@@ -181745,6 +181811,7 @@ const useInfoTabConfig = (evalSpec, evalPlan, evalError, evalResults, evalStatus
181745
181811
  evalError,
181746
181812
  evalResults,
181747
181813
  evalStatus,
181814
+ metadata2,
181748
181815
  totalSampleCount
181749
181816
  ]);
181750
181817
  };
@@ -181753,6 +181820,7 @@ const InfoTab = ({
181753
181820
  evalPlan,
181754
181821
  evalResults,
181755
181822
  evalStatus,
181823
+ metadata: metadata2,
181756
181824
  sampleCount,
181757
181825
  scrollRef
181758
181826
  }) => {
@@ -181772,6 +181840,7 @@ const InfoTab = ({
181772
181840
  evalSpec,
181773
181841
  evalPlan,
181774
181842
  scores: evalResults?.scores,
181843
+ metadata: metadata2,
181775
181844
  scrollRef
181776
181845
  }
181777
181846
  ) })
@@ -181816,19 +181885,11 @@ const styles$n = {
181816
181885
  jsonTab
181817
181886
  };
181818
181887
  const kJsonMaxSize = 1e7;
181819
- const useJsonTabConfig = (evalVersion, evalStatus, evalSpec, evalPlan, evalError, evalResults, evalStats) => {
181888
+ const useJsonTabConfig = (logDetails) => {
181820
181889
  const selectedLogFile = useStore((state) => state.logs.selectedLogFile);
181821
181890
  const selectedTab = useStore((state) => state.app.tabs.workspace);
181822
181891
  return useMemo(() => {
181823
- const evalHeader = {
181824
- version: evalVersion,
181825
- status: evalStatus,
181826
- eval: evalSpec,
181827
- plan: evalPlan,
181828
- error: evalError,
181829
- results: evalResults,
181830
- stats: evalStats
181831
- };
181892
+ const { sampleSummaries: _, ...header2 } = logDetails ?? {};
181832
181893
  return {
181833
181894
  id: kLogViewJsonTabId,
181834
181895
  label: "JSON",
@@ -181836,7 +181897,7 @@ const useJsonTabConfig = (evalVersion, evalStatus, evalSpec, evalPlan, evalError
181836
181897
  component: JsonTab,
181837
181898
  componentProps: {
181838
181899
  logFile: selectedLogFile,
181839
- json: JSON.stringify(evalHeader, null, 2),
181900
+ json: JSON.stringify(header2, null, 2),
181840
181901
  selected: selectedTab === kLogViewJsonTabId
181841
181902
  },
181842
181903
  tools: () => [
@@ -181853,17 +181914,7 @@ const useJsonTabConfig = (evalVersion, evalStatus, evalSpec, evalPlan, evalError
181853
181914
  )
181854
181915
  ]
181855
181916
  };
181856
- }, [
181857
- selectedLogFile,
181858
- evalVersion,
181859
- evalStatus,
181860
- evalSpec,
181861
- evalPlan,
181862
- evalError,
181863
- evalResults,
181864
- evalStats,
181865
- selectedTab
181866
- ]);
181917
+ }, [selectedLogFile, logDetails, selectedTab]);
181867
181918
  };
181868
181919
  const copyFeedback = (e) => {
181869
181920
  const textEl = e.currentTarget.querySelector(".task-btn-copy-content");
@@ -203209,13 +203260,13 @@ const SampleStatusIcon = ({ status: status2 }) => {
203209
203260
  const colorClass = status2 === "error" ? styles$i.error : status2 === "cancelled" ? styles$i.cancelled : styles$i.success;
203210
203261
  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: styles$i.statusCell, children: /* @__PURE__ */ jsxRuntimeExports.jsx("i", { className: clsx(icon2, colorClass) }) });
203211
203262
  };
203212
- const mainLayout = "_mainLayout_1s8x3_1";
203213
- const samplesListGrid = "_samplesListGrid_1s8x3_7";
203214
- const cell = "_cell_1s8x3_44";
203215
- const wrapAnywhere = "_wrapAnywhere_1s8x3_48";
203216
- const noLeft = "_noLeft_1s8x3_52";
203217
- const score = "_score_1s8x3_56";
203218
- const centered = "_centered_1s8x3_63";
203263
+ const mainLayout = "_mainLayout_1pg7l_1";
203264
+ const samplesListGrid = "_samplesListGrid_1pg7l_7";
203265
+ const cell = "_cell_1pg7l_43";
203266
+ const wrapAnywhere = "_wrapAnywhere_1pg7l_47";
203267
+ const noLeft = "_noLeft_1pg7l_51";
203268
+ const score = "_score_1pg7l_55";
203269
+ const centered = "_centered_1pg7l_62";
203219
203270
  const styles$h = {
203220
203271
  mainLayout,
203221
203272
  samplesListGrid,
@@ -203857,7 +203908,7 @@ const grid$1 = "_grid_er9fb_1";
203857
203908
  const styles$e = {
203858
203909
  grid: grid$1
203859
203910
  };
203860
- const useTaskTabConfig = (evalSpec, evalStats, earlyStopping) => {
203911
+ const useTaskTabConfig = (evalSpec, evalStats, earlyStopping, tags2) => {
203861
203912
  return useMemo(() => {
203862
203913
  return {
203863
203914
  id: kLogViewTaskTabId,
@@ -203867,15 +203918,17 @@ const useTaskTabConfig = (evalSpec, evalStats, earlyStopping) => {
203867
203918
  componentProps: {
203868
203919
  evalSpec,
203869
203920
  evalStats,
203870
- earlyStopping
203921
+ earlyStopping,
203922
+ tags: tags2
203871
203923
  }
203872
203924
  };
203873
- }, [evalSpec, evalStats, earlyStopping]);
203925
+ }, [evalSpec, evalStats, earlyStopping, tags2]);
203874
203926
  };
203875
203927
  const TaskTab = ({
203876
203928
  evalSpec,
203877
203929
  evalStats,
203878
- earlyStopping
203930
+ earlyStopping,
203931
+ tags: tags2
203879
203932
  }) => {
203880
203933
  Object.entries(evalSpec?.config || {}).forEach((entry) => {
203881
203934
  entry[0];
@@ -203902,8 +203955,8 @@ const TaskTab = ({
203902
203955
  taskInformation["Inspect"] = names;
203903
203956
  }
203904
203957
  }
203905
- if (evalSpec?.tags) {
203906
- taskInformation["tags"] = evalSpec?.tags.join(", ");
203958
+ if (tags2 && tags2.length > 0) {
203959
+ taskInformation["tags"] = tags2.join(", ");
203907
203960
  }
203908
203961
  if (evalSpec?.sandbox) {
203909
203962
  if (Array.isArray(evalSpec?.sandbox)) {
@@ -205109,28 +205162,22 @@ const LogView = () => {
205109
205162
  selectedLogDetails?.plan,
205110
205163
  selectedLogDetails?.error,
205111
205164
  selectedLogDetails?.results,
205112
- selectedLogDetails?.status
205165
+ selectedLogDetails?.status,
205166
+ selectedLogDetails?.metadata
205113
205167
  );
205114
205168
  const errorTabConfig = useErrorTabConfig(selectedLogDetails?.error);
205115
205169
  const taskTabConfig = useTaskTabConfig(
205116
205170
  evalSpec,
205117
205171
  selectedLogDetails?.stats,
205118
- selectedLogDetails?.results?.early_stopping
205172
+ selectedLogDetails?.results?.early_stopping,
205173
+ selectedLogDetails?.tags
205119
205174
  );
205120
205175
  const modelsTabConfig = useModelsTab(
205121
205176
  evalSpec,
205122
205177
  selectedLogDetails?.stats,
205123
205178
  selectedLogDetails?.status
205124
205179
  );
205125
- const jsonTabConfig = useJsonTabConfig(
205126
- selectedLogDetails?.version,
205127
- selectedLogDetails?.status,
205128
- evalSpec,
205129
- selectedLogDetails?.plan,
205130
- selectedLogDetails?.error,
205131
- selectedLogDetails?.results,
205132
- selectedLogDetails?.stats
205133
- );
205180
+ const jsonTabConfig = useJsonTabConfig(selectedLogDetails);
205134
205181
  const tabs2 = {
205135
205182
  ...samplesTabConfig ? { samples: samplesTabConfig } : {},
205136
205183
  task: taskTabConfig,