fix(chat): use code block language tag to detect Vega-Lite specs for rendering (#25843)
This commit is contained in:
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
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user