fix(chat): use code block language tag to detect Vega-Lite specs for rendering (#25843)

This commit is contained in:
G30 authored and GitHub committed 2026-06-29 02:07:11 -05:00
1 parent c3394288bb
commit 964a098a4b
2 files changed
+15 -3

No files matched your search

@@ -379,7 +379,7 @@
(token?.raw ?? '').slice(-4).includes('```') (token?.raw ?? '').slice(-4).includes('```')
) { ) {
try { try {
renderHTML = await renderVegaVisualization(code); renderHTML = await renderVegaVisualization(code, lang);
} catch (error) { } catch (error) {
console.error('Failed to render Vega visualization:', error); console.error('Failed to render Vega visualization:', error);
const errorMsg = error instanceof Error ? error.message : String(error); const errorMsg = error instanceof Error ? error.message : String(error);
+14 -2
View File
@@ -2000,11 +2000,23 @@ export const renderMermaidDiagram = async (
} }
}; };
export const renderVegaVisualization = async (spec: string, i18n?: any) => { export const renderVegaVisualization = async (spec: string, lang: string = '', i18n?: any) => {
const vega = await import('vega'); const vega = await import('vega');
const parsedSpec = JSON.parse(spec); const parsedSpec = JSON.parse(spec);
const hasVegaLiteKeys =
'mark' in parsedSpec ||
'encoding' in parsedSpec ||
'layer' in parsedSpec ||
'hconcat' in parsedSpec ||
'vconcat' in parsedSpec ||
'repeat' in parsedSpec ||
'facet' in parsedSpec;
const isVegaLite =
lang === 'vega-lite' ||
(parsedSpec.$schema && parsedSpec.$schema.includes('vega-lite')) ||
hasVegaLiteKeys;
let vegaSpec = parsedSpec; let vegaSpec = parsedSpec;
if (parsedSpec.$schema && parsedSpec.$schema.includes('vega-lite')) { if (isVegaLite) {
const vegaLite = await import('vega-lite'); const vegaLite = await import('vega-lite');
vegaSpec = vegaLite.compile(parsedSpec).spec; vegaSpec = vegaLite.compile(parsedSpec).spec;
} }