import { EvaluationLogger } from 'weave';
// Créer un jeu de données simple
interface DatasetExample {
question: string;
expected?: string;
expected_one_of?: string[];
}
const dataset: DatasetExample[] = [
{ question: 'What is 2 + 2?', expected: '4' },
{ question: 'What is the capital of France?', expected: 'Paris' },
{ question: 'Name a primary color', expected_one_of: ['red', 'blue', 'yellow'] },
];
// Définir un scorer
const accuracyScorer = weave.op(function accuracyScorer(args: {
expected: string;
output: string;
expected_one_of?: string[];
}): { correct: boolean; score: number } {
const outputClean = args.output.trim().toLowerCase();
let isCorrect: boolean;
if (args.expected_one_of) {
isCorrect = args.expected_one_of.some(option =>
outputClean.includes(option.toLowerCase())
);
} else {
isCorrect = outputClean.includes(args.expected.toLowerCase());
}
return { correct: isCorrect, score: isCorrect ? 1.0 : 0.0 };
});
// Évaluer un modèle à l'aide de l'EvaluationLogger de Weave
async function evaluateModel(
model: (question: string) => Promise<string>,
modelName: string,
dataset: DatasetExample[]
): Promise<void> {
// Initialiser EvaluationLogger AVANT d'appeler le modèle pour capturer l'utilisation des tokens
// Ceci est particulièrement important pour W&B Inference afin de suivre les coûts
// Convertir le nom du modèle en un format valide (remplacer les caractères non alphanumériques par des underscores)
const safeModelName = modelName.replace(/\//g, '_').replace(/-/g, '_').replace(/\./g, '_');
const evalLogger = new EvaluationLogger({
name: 'inference_evaluation',
model: { name: safeModelName },
dataset: 'qa_dataset'
});
for (const example of dataset) {
// Obtenir la prédiction du modèle
const output = await model(example.question);
// Enregistrer la prédiction
const predLogger = evalLogger.logPrediction(
{ question: example.question },
output
);
// Scorer la sortie
const score = await accuracyScorer({
expected: example.expected || '',
output: output,
expected_one_of: example.expected_one_of
});
// Enregistrer le score
predLogger.logScore('accuracy', score.score);
// Terminer l'enregistrement pour cette prédiction
predLogger.finish();
}
// Enregistrer le résumé - Weave agrège automatiquement les scores de précision
await evalLogger.logSummary();
console.log(`Evaluation complete for ${modelName} (logged as: ${safeModelName}). View results in the Weave UI.`);
}
// Comparer plusieurs modèles - une fonctionnalité clé du framework d'évaluation de Weave
const modelsToCompare = [
{ model: llamaModel, name: 'meta-llama/Llama-3.1-8B-Instruct' },
{ model: deepseekModel, name: 'deepseek-ai/DeepSeek-V3.1' },
];
for (const { model, name } of modelsToCompare) {
await evaluateModel(model, name, dataset);
}
// Dans l'interface Weave, accédez à l'onglet Evals pour comparer les résultats entre les modèles