tdgbench-studio / scripts /validate-artifact-comparison.js
othmanekabal's picture
Restore KGGen across TDGBench Studio
5d33755 verified
Raw History Blame Contribute Delete
5.01 kB
const fs=require('fs');
const vm=require('vm');
const context={
normKey:value=>String(value).trim().toLowerCase().replace(/[^a-z0-9]+/g,'_').replace(/^_|_$/g,''),
esc:value=>String(value).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'),
lbMetricIndex:metric=>({accuracy:0,macro_f1:1,recall:2,precision:3})[metric],
lbMetricLabel:index=>['Accuracy','Macro-F1','Recall','Precision'][index]
};
vm.createContext(context);
['assets/js/data/catalog.js','assets/js/data/leaderboard-data.js','assets/js/domain/artifact-results.js','assets/js/core/state.js','assets/js/pages/leaderboard-artifacts.js'].forEach(file=>vm.runInContext(fs.readFileSync(file,'utf8'),context));
if(context.S.lb.artifactModels.has('RGCN'))throw new Error('RGCN ne doit pas être présélectionné sans résultat importé.');
const imported=context.artifactRowsFromRaw([
{dataset:'dbpedia',graph:'cg',model:'SAGEConv',partition:'test',metric:'f1_macro',mean:.61,std_split:.02,std_seed:.01,initial_embedding_model:'sentence-transformers/all-MiniLM-L6-v2'},
{dataset:'dbpedia',graph:'GT2KG_tdg',model:'SAGEConv',partition:'test',metric:'f1_macro',mean:.55,std_split:.03,std_seed:.02,initial_embedding_model:'sentence-transformers/all-MiniLM-L6-v2'}
],'final_results.json');
if(imported.length!==2)throw new Error('Les artefacts long format ne sont pas lus.');
if(imported[0].graph!=='curated'||imported[1].graph!=='tdg')throw new Error('Les alias de graphes DBpedia sont incorrects.');
context.LB_ARTIFACTS.rows=imported;
context.S.lb.dataset='dbpedia';
context.S.lb.artifactMetric='macro_f1';
context.S.lb.artifactEmbedding='sbert';
context.S.lb.artifactModels=new Set(['SAGEConv','GCN','RGCN','RotatEGCN_attn']);
context.S.lb.artifactGraphs=new Set(['curated','tdg']);
const data=context.artifactChartData(context.S.lb);
if(data.categories.length!==2||data.series.length!==4)throw new Error('La sélection graphes/modèles est incorrecte.');
const sage=data.series.find(series=>series[0]==='SAGEConv');
const gcn=data.series.find(series=>series[0]==='GCN');
if(!sage||!data.value(data.categories[0],sage).imported)throw new Error('GraphSAGE importé est absent.');
if(!gcn||!data.value(data.categories[0],gcn))throw new Error('Les références intégrées sont absentes.');
['grouped','panels','slope'].forEach(view=>{
context.S.lb.artifactView=view;
const html=context.artifactVisualization(context.S.lb);
if(!html.includes('artifact-chart')||!html.includes('GraphSAGE'))throw new Error('Visualisation '+view+' invalide.');
});
const kggen=context.artifactRowsFromRaw([
{dataset:'biomed',graph:'KGGEN',model:'GCN',partition:'test',metric:'f1_macro',mean:.51,std_split:.02,std_seed:.01,initial_embedding_model:'sentence-transformers/all-MiniLM-L6-v2'},
{dataset:'biomed',graph:'KGGEN',model:'RGCN',partition:'test',metric:'f1_macro',mean:.58,std_split:.03,std_seed:.02,initial_embedding_model:'sentence-transformers/all-MiniLM-L6-v2'}
],'final_results.json');
context.LB_ARTIFACTS.rows=kggen;
context.S.lb.dataset='biomed';
context.S.lb.artifactKind='graphs';
context.S.lb.artifactModels=new Set(['GCN','RGCN']);
context.S.lb.artifactGraphs=new Set(['umls','gt2kg','kggen']);
const kggenOptions=context.artifactGraphOptions('biomed');
if(!kggenOptions.some(graph=>graph[0]==='kggen'&&graph[1]==='KG-GEN'))throw new Error('KGGen officiel est absent des graphes comparables.');
const kggenData=context.artifactChartData(context.S.lb);
if(kggenData.categories.length!==2||kggenData.series.length!==3)throw new Error('La comparaison UMLS/GT2KG/KGGen est incorrecte.');
const kggenSeries=kggenData.series.find(series=>series[0]==='kggen');
if(!kggenSeries||!kggenData.value(kggenData.categories[0],kggenSeries).imported)throw new Error('Les mesures KGGen importées sont absentes.');
const legacy=context.artifactRowsFromRaw([{
kg_name:'KG_GEN_kg',model_name:'RotatEGCN_attn',hidden_channels:256,
test_acc_mean:.5944,test_acc_std:.0223,test_f1_mean:.5799,test_f1_std:.0332
}],'best_by_graph_model.csv');
if(legacy.length!==2||legacy[0].dataset!=='biomed'||legacy[0].graph!=='kggen')throw new Error('Le format historique KGGen n’est pas reconnu.');
if(legacy[1].metric!=='macro_f1'||legacy[1].stdSeed!==.0332)throw new Error('Les métriques historiques KGGen sont incorrectes.');
const selectedLegacy=context.selectLeaderboardArtifactFiles([
{name:'all_results.json',webkitRelativePath:'KG_GEN_graph/all_results.json'},
{name:'all_results_summary.csv',webkitRelativePath:'KG_GEN_graph/all_results_summary.csv'},
{name:'best_by_graph_model.csv',webkitRelativePath:'KG_GEN_graph/best_by_graph_model.csv'},
{name:'summary_KG_GEN_kg__GCN__h64.csv',webkitRelativePath:'KG_GEN_graph/KG_GEN_kg/GCN/h64/summary_KG_GEN_kg__GCN__h64.csv'}
]);
if(selectedLegacy.length!==1||selectedLegacy[0].name!=='best_by_graph_model.csv')throw new Error('Le dossier historique KGGen ne sélectionne pas le bon agrégat.');
console.log('Comparaison d’artefacts valide : import, fusion et trois visualisations.');