@vezlo/ai-validator
Version:
AI Response Validator - Automated accuracy checking, hallucination prevention, and confidence scoring for AI responses
69 lines • 2.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConfidenceScorer = void 0;
class ConfidenceScorer {
calculateConfidence(accuracyResult, contextResult, hallucinationResult, sources) {
// Define weights for different factors
const weights = {
accuracy: 0.35,
context: 0.25,
hallucination: 0.30,
sourceQuality: 0.10
};
// Calculate individual scores
const accuracyScore = accuracyResult.verification_rate;
const contextScore = contextResult.source_relevance;
const hallucinationScore = 1 - hallucinationResult.risk; // Invert risk to get score
const sourceQualityScore = this.calculateSourceQuality(sources);
// Calculate weighted confidence score
const confidenceScore = (accuracyScore * weights.accuracy) +
(contextScore * weights.context) +
(hallucinationScore * weights.hallucination) +
(sourceQualityScore * weights.sourceQuality);
console.log('→ Confidence Score:', (confidenceScore * 100).toFixed(1) + '%', '(Accuracy:', (accuracyScore * 100).toFixed(0) + '%,', 'Context:', (contextScore * 100).toFixed(0) + '%,', 'Hallucination:', (hallucinationScore * 100).toFixed(0) + '%)\n');
// Determine confidence level
let level;
if (confidenceScore >= 0.8) {
level = 'high';
}
else if (confidenceScore >= 0.5) {
level = 'medium';
}
else {
level = 'low';
}
return {
confidence_score: Math.round(confidenceScore * 100) / 100, // Round to 2 decimal places
level,
breakdown: {
accuracy_score: Math.round(accuracyScore * 100) / 100,
context_score: Math.round(contextScore * 100) / 100,
hallucination_score: Math.round(hallucinationScore * 100) / 100,
source_quality: Math.round(sourceQualityScore * 100) / 100
}
};
}
calculateSourceQuality(sources) {
if (sources.length === 0) {
return 0;
}
let totalQuality = 0;
for (const source of sources) {
let quality = 0.5; // Base quality
// Length factor (longer content is generally better)
if (source.content.length > 100)
quality += 0.2;
if (source.content.length > 500)
quality += 0.2;
// Title factor
if (source.title && source.title.length > 0)
quality += 0.1;
// Cap at 1.0
quality = Math.min(quality, 1.0);
totalQuality += quality;
}
return totalQuality / sources.length;
}
}
exports.ConfidenceScorer = ConfidenceScorer;
//# sourceMappingURL=ConfidenceScorer.js.map