import { EvaluationLogger } from 'weave';
// 간단한 데이터셋 생성
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'] },
];
// 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 };
});
// Weave의 EvaluationLogger를 사용하여 모델 평가
async function evaluateModel(
model: (question: string) => Promise<string>,
modelName: string,
dataset: DatasetExample[]
): Promise<void> {
// 토큰 사용량을 캡처하려면 모델 호출 전에 EvaluationLogger를 초기화하세요
// 비용 추적을 위해 Serverless Inference에서 특히 중요합니다
// 모델 이름을 유효한 형식으로 변환합니다 (영숫자가 아닌 문자는 밑줄로 대체)
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) {
// 모델 예측 결과 가져오기
const output = await model(example.question);
// 예측 결과 로깅
const predLogger = evalLogger.logPrediction(
{ question: example.question },
output
);
// 출력 채점
const score = await accuracyScorer({
expected: example.expected || '',
output: output,
expected_one_of: example.expected_one_of
});
// 점수 로깅
predLogger.logScore('accuracy', score.score);
// 이 예측에 대한 로깅 완료
predLogger.finish();
}
// 요약 로깅 - Weave가 정확도 점수를 자동으로 집계합니다
await evalLogger.logSummary();
console.log(`Evaluation complete for ${modelName} (logged as: ${safeModelName}). View results in the Weave UI.`);
}
// 여러 모델 비교 - 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);
}
// Weave UI에서 Evals 탭으로 이동하여 모델 간 결과를 비교하세요