@ankh-studio/ai-enablement 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +243 -0
- package/dist/analyzers/tech-stack-analyzer.d.ts +63 -0
- package/dist/analyzers/tech-stack-analyzer.d.ts.map +1 -0
- package/dist/analyzers/tech-stack-analyzer.js +401 -0
- package/dist/analyzers/tech-stack-analyzer.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +347 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/collectors/evidence-collector.d.ts +57 -0
- package/dist/collectors/evidence-collector.d.ts.map +1 -0
- package/dist/collectors/evidence-collector.js +386 -0
- package/dist/collectors/evidence-collector.js.map +1 -0
- package/dist/core/assessment-engine.d.ts +76 -0
- package/dist/core/assessment-engine.d.ts.map +1 -0
- package/dist/core/assessment-engine.js +310 -0
- package/dist/core/assessment-engine.js.map +1 -0
- package/dist/generators/adr-generator.d.ts +35 -0
- package/dist/generators/adr-generator.d.ts.map +1 -0
- package/dist/generators/adr-generator.js +339 -0
- package/dist/generators/adr-generator.js.map +1 -0
- package/dist/generators-backup-phase-2/adr-generator.d.ts +31 -0
- package/dist/generators-backup-phase-2/adr-generator.d.ts.map +1 -0
- package/dist/generators-backup-phase-2/adr-generator.js +309 -0
- package/dist/generators-backup-phase-2/adr-generator.js.map +1 -0
- package/dist/llm/coalescer.d.ts +45 -0
- package/dist/llm/coalescer.d.ts.map +1 -0
- package/dist/llm/coalescer.js +258 -0
- package/dist/llm/coalescer.js.map +1 -0
- package/dist/llm/copilot-client.d.ts +53 -0
- package/dist/llm/copilot-client.d.ts.map +1 -0
- package/dist/llm/copilot-client.js +198 -0
- package/dist/llm/copilot-client.js.map +1 -0
- package/dist/llm/prompt-templates.d.ts +24 -0
- package/dist/llm/prompt-templates.d.ts.map +1 -0
- package/dist/llm/prompt-templates.js +255 -0
- package/dist/llm/prompt-templates.js.map +1 -0
- package/dist/llm/response-processor.d.ts +50 -0
- package/dist/llm/response-processor.d.ts.map +1 -0
- package/dist/llm/response-processor.js +321 -0
- package/dist/llm/response-processor.js.map +1 -0
- package/dist/llm/structured-types.d.ts +184 -0
- package/dist/llm/structured-types.d.ts.map +1 -0
- package/dist/llm/structured-types.js +61 -0
- package/dist/llm/structured-types.js.map +1 -0
- package/dist/llm/validation.d.ts +57 -0
- package/dist/llm/validation.d.ts.map +1 -0
- package/dist/llm/validation.js +273 -0
- package/dist/llm/validation.js.map +1 -0
- package/dist/llm-backup-phase-1/coalescer.d.ts +40 -0
- package/dist/llm-backup-phase-1/coalescer.d.ts.map +1 -0
- package/dist/llm-backup-phase-1/coalescer.js +209 -0
- package/dist/llm-backup-phase-1/coalescer.js.map +1 -0
- package/dist/llm-backup-phase-1/copilot-client.d.ts +53 -0
- package/dist/llm-backup-phase-1/copilot-client.d.ts.map +1 -0
- package/dist/llm-backup-phase-1/copilot-client.js +198 -0
- package/dist/llm-backup-phase-1/copilot-client.js.map +1 -0
- package/dist/llm-backup-phase-1/prompt-templates.d.ts +23 -0
- package/dist/llm-backup-phase-1/prompt-templates.d.ts.map +1 -0
- package/dist/llm-backup-phase-1/prompt-templates.js +197 -0
- package/dist/llm-backup-phase-1/prompt-templates.js.map +1 -0
- package/dist/llm-backup-phase-1/response-processor.d.ts +44 -0
- package/dist/llm-backup-phase-1/response-processor.d.ts.map +1 -0
- package/dist/llm-backup-phase-1/response-processor.js +200 -0
- package/dist/llm-backup-phase-1/response-processor.js.map +1 -0
- package/dist/llm-backup-phase-1/validation.d.ts +57 -0
- package/dist/llm-backup-phase-1/validation.d.ts.map +1 -0
- package/dist/llm-backup-phase-1/validation.js +273 -0
- package/dist/llm-backup-phase-1/validation.js.map +1 -0
- package/dist/personas/base-persona.d.ts +28 -0
- package/dist/personas/base-persona.d.ts.map +1 -0
- package/dist/personas/base-persona.js +140 -0
- package/dist/personas/base-persona.js.map +1 -0
- package/dist/personas/consultant-persona.d.ts +25 -0
- package/dist/personas/consultant-persona.d.ts.map +1 -0
- package/dist/personas/consultant-persona.js +288 -0
- package/dist/personas/consultant-persona.js.map +1 -0
- package/dist/personas/persona-factory.d.ts +17 -0
- package/dist/personas/persona-factory.d.ts.map +1 -0
- package/dist/personas/persona-factory.js +53 -0
- package/dist/personas/persona-factory.js.map +1 -0
- package/dist/personas/research-backed-consultant.d.ts +12 -0
- package/dist/personas/research-backed-consultant.d.ts.map +1 -0
- package/dist/personas/research-backed-consultant.js +100 -0
- package/dist/personas/research-backed-consultant.js.map +1 -0
- package/dist/personas-backup-phase-1/base-persona.d.ts +28 -0
- package/dist/personas-backup-phase-1/base-persona.d.ts.map +1 -0
- package/dist/personas-backup-phase-1/base-persona.js +140 -0
- package/dist/personas-backup-phase-1/base-persona.js.map +1 -0
- package/dist/personas-backup-phase-1/consultant-persona.d.ts +24 -0
- package/dist/personas-backup-phase-1/consultant-persona.d.ts.map +1 -0
- package/dist/personas-backup-phase-1/consultant-persona.js +197 -0
- package/dist/personas-backup-phase-1/consultant-persona.js.map +1 -0
- package/dist/personas-backup-phase-1/persona-factory.d.ts +17 -0
- package/dist/personas-backup-phase-1/persona-factory.d.ts.map +1 -0
- package/dist/personas-backup-phase-1/persona-factory.js +53 -0
- package/dist/personas-backup-phase-1/persona-factory.js.map +1 -0
- package/dist/scanners/copilot-feature-scanner.d.ts +55 -0
- package/dist/scanners/copilot-feature-scanner.d.ts.map +1 -0
- package/dist/scanners/copilot-feature-scanner.js +259 -0
- package/dist/scanners/copilot-feature-scanner.js.map +1 -0
- package/dist/scorers/readiness-scorer.d.ts +42 -0
- package/dist/scorers/readiness-scorer.d.ts.map +1 -0
- package/dist/scorers/readiness-scorer.js +279 -0
- package/dist/scorers/readiness-scorer.js.map +1 -0
- package/dist/types/persona.d.ts +69 -0
- package/dist/types/persona.d.ts.map +1 -0
- package/dist/types/persona.js +9 -0
- package/dist/types/persona.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LLM Response Processor
|
|
4
|
+
*
|
|
5
|
+
* Handles structured parsing and validation of LLM responses
|
|
6
|
+
* for adversarial coalescing with deterministic analysis
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ResponseProcessor = void 0;
|
|
10
|
+
class ResponseProcessor {
|
|
11
|
+
static parseCoalescingResponse(llmContent) {
|
|
12
|
+
const enhancedInsights = this.extractSection(llmContent, this.SECTION_PATTERNS.enhancedInsights);
|
|
13
|
+
const adversarialChallenges = this.extractSection(llmContent, this.SECTION_PATTERNS.adversarialChallenges);
|
|
14
|
+
const confidenceAssessment = this.extractSection(llmContent, this.SECTION_PATTERNS.confidenceAssessment);
|
|
15
|
+
return {
|
|
16
|
+
enhancedInsights,
|
|
17
|
+
adversarialChallenges,
|
|
18
|
+
confidenceAssessment: confidenceAssessment[0] || "",
|
|
19
|
+
rawContent: llmContent,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
static parseValidationResponse(llmContent) {
|
|
23
|
+
const resultMatch = llmContent.match(this.VALIDATION_RESULT_PATTERN);
|
|
24
|
+
const notesMatch = llmContent.match(this.VALIDATION_NOTES_PATTERN);
|
|
25
|
+
const isValid = resultMatch ? resultMatch[1]?.toUpperCase() === "PASS" : false;
|
|
26
|
+
const notes = notesMatch ? notesMatch[1]?.trim() || "" : "";
|
|
27
|
+
const issues = this.extractIssues(notes);
|
|
28
|
+
const suggestions = this.extractSuggestions(notes);
|
|
29
|
+
const confidence = this.calculateValidationConfidence(isValid, issues.length);
|
|
30
|
+
return {
|
|
31
|
+
isValid,
|
|
32
|
+
confidence,
|
|
33
|
+
issues,
|
|
34
|
+
suggestions,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
static processEnhancedInsights(enhancedTexts, deterministicInsights) {
|
|
38
|
+
const processedInsights = [];
|
|
39
|
+
enhancedTexts.forEach((enhancedText, index) => {
|
|
40
|
+
if (index < deterministicInsights.length && deterministicInsights[index]) {
|
|
41
|
+
const original = deterministicInsights[index];
|
|
42
|
+
const enhanced = this.createEnhancedInsight(original, enhancedText);
|
|
43
|
+
processedInsights.push(enhanced);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// Create new insight from enhanced text
|
|
47
|
+
const newInsight = this.createNewInsight(enhancedText, index);
|
|
48
|
+
processedInsights.push(newInsight);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return processedInsights;
|
|
52
|
+
}
|
|
53
|
+
static validateResponseStructure(parsed) {
|
|
54
|
+
const issues = [];
|
|
55
|
+
const suggestions = [];
|
|
56
|
+
// Check required sections
|
|
57
|
+
if (parsed.enhancedInsights.length === 0) {
|
|
58
|
+
issues.push("No enhanced insights found");
|
|
59
|
+
suggestions.push("Add at least one enhanced insight");
|
|
60
|
+
}
|
|
61
|
+
if (parsed.adversarialChallenges.length === 0) {
|
|
62
|
+
issues.push("No adversarial challenges found");
|
|
63
|
+
suggestions.push("Add at least one adversarial challenge");
|
|
64
|
+
}
|
|
65
|
+
if (!parsed.confidenceAssessment) {
|
|
66
|
+
issues.push("No confidence assessment provided");
|
|
67
|
+
suggestions.push("Add confidence assessment section");
|
|
68
|
+
}
|
|
69
|
+
// Check content quality
|
|
70
|
+
if (parsed.enhancedInsights.some(insight => insight.length < 20)) {
|
|
71
|
+
issues.push("Some enhanced insights are too brief");
|
|
72
|
+
suggestions.push("Provide more detailed insights");
|
|
73
|
+
}
|
|
74
|
+
if (parsed.adversarialChallenges.some(challenge => challenge.length < 15)) {
|
|
75
|
+
issues.push("Some adversarial challenges are too brief");
|
|
76
|
+
suggestions.push("Provide more substantive challenges");
|
|
77
|
+
}
|
|
78
|
+
const confidence = this.calculateValidationConfidence(issues.length === 0, issues.length);
|
|
79
|
+
return {
|
|
80
|
+
isValid: issues.length === 0,
|
|
81
|
+
confidence,
|
|
82
|
+
issues,
|
|
83
|
+
suggestions,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
static extractSection(content, pattern) {
|
|
87
|
+
const match = content.match(pattern);
|
|
88
|
+
if (!match || !match[1])
|
|
89
|
+
return [];
|
|
90
|
+
return match[1]
|
|
91
|
+
.split("\n")
|
|
92
|
+
.filter(line => line.trim().startsWith("-"))
|
|
93
|
+
.map(line => line.replace(/^-\s*/, "").trim())
|
|
94
|
+
.filter(line => line.length > 0);
|
|
95
|
+
}
|
|
96
|
+
static extractIssues(notes) {
|
|
97
|
+
if (!notes)
|
|
98
|
+
return [];
|
|
99
|
+
const issuePatterns = [
|
|
100
|
+
/missing/gi,
|
|
101
|
+
/not found/gi,
|
|
102
|
+
/incomplete/gi,
|
|
103
|
+
/unclear/gi,
|
|
104
|
+
/vague/gi,
|
|
105
|
+
/insufficient/gi,
|
|
106
|
+
];
|
|
107
|
+
const issues = [];
|
|
108
|
+
issuePatterns.forEach(pattern => {
|
|
109
|
+
if (pattern.test(notes)) {
|
|
110
|
+
issues.push(notes);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
return issues.length > 0 ? issues : [notes];
|
|
114
|
+
}
|
|
115
|
+
static extractSuggestions(notes) {
|
|
116
|
+
const suggestionPatterns = [
|
|
117
|
+
/should/gi,
|
|
118
|
+
/recommend/gi,
|
|
119
|
+
/consider/gi,
|
|
120
|
+
/add/gi,
|
|
121
|
+
/include/gi,
|
|
122
|
+
/provide/gi,
|
|
123
|
+
];
|
|
124
|
+
const suggestions = [];
|
|
125
|
+
suggestionPatterns.forEach(pattern => {
|
|
126
|
+
if (pattern.test(notes)) {
|
|
127
|
+
suggestions.push(notes);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
return suggestions.length > 0 ? suggestions : ["Review response structure"];
|
|
131
|
+
}
|
|
132
|
+
static calculateValidationConfidence(isValid, issueCount) {
|
|
133
|
+
let confidence = isValid ? 0.9 : 0.5;
|
|
134
|
+
confidence -= issueCount * 0.1;
|
|
135
|
+
return Math.max(0, Math.min(1, confidence));
|
|
136
|
+
}
|
|
137
|
+
static createEnhancedInsight(original, enhancedText) {
|
|
138
|
+
return {
|
|
139
|
+
...original,
|
|
140
|
+
description: enhancedText,
|
|
141
|
+
confidence: Math.min(original.confidence + 5, 100), // Slight confidence boost
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
static createNewInsight(enhancedText, index) {
|
|
145
|
+
return {
|
|
146
|
+
id: `llm-enhanced-${Date.now()}-${index}`,
|
|
147
|
+
type: "analysis",
|
|
148
|
+
title: this.extractTitleFromText(enhancedText),
|
|
149
|
+
description: enhancedText,
|
|
150
|
+
evidence: [], // LLM should not add new evidence
|
|
151
|
+
confidence: 70, // Default confidence for new insights
|
|
152
|
+
priority: "medium",
|
|
153
|
+
category: "strategy",
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
static extractTitleFromText(text) {
|
|
157
|
+
// Extract first sentence or create title from first 50 characters
|
|
158
|
+
const sentences = text.split(/[.!?]/);
|
|
159
|
+
const firstSentence = sentences[0]?.trim() || "";
|
|
160
|
+
if (firstSentence.length <= 50) {
|
|
161
|
+
return firstSentence;
|
|
162
|
+
}
|
|
163
|
+
return text.substring(0, 50).trim() + "...";
|
|
164
|
+
}
|
|
165
|
+
static sanitizeResponse(content) {
|
|
166
|
+
// Remove any potentially harmful content
|
|
167
|
+
return content
|
|
168
|
+
.replace(/<script[^>]*>.*?<\/script>/gis, "")
|
|
169
|
+
.replace(/javascript:/gi, "")
|
|
170
|
+
.replace(/on\w+\s*=/gi, "")
|
|
171
|
+
.trim();
|
|
172
|
+
}
|
|
173
|
+
static extractMetrics(parsed) {
|
|
174
|
+
const insightCount = parsed.enhancedInsights.length;
|
|
175
|
+
const challengeCount = parsed.adversarialChallenges.length;
|
|
176
|
+
const averageInsightLength = insightCount > 0
|
|
177
|
+
? parsed.enhancedInsights.reduce((sum, insight) => sum + insight.length, 0) / insightCount
|
|
178
|
+
: 0;
|
|
179
|
+
const averageChallengeLength = challengeCount > 0
|
|
180
|
+
? parsed.adversarialChallenges.reduce((sum, challenge) => sum + challenge.length, 0) / challengeCount
|
|
181
|
+
: 0;
|
|
182
|
+
const hasConfidenceAssessment = parsed.confidenceAssessment.length > 0;
|
|
183
|
+
return {
|
|
184
|
+
insightCount,
|
|
185
|
+
challengeCount,
|
|
186
|
+
averageInsightLength,
|
|
187
|
+
averageChallengeLength,
|
|
188
|
+
hasConfidenceAssessment,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
exports.ResponseProcessor = ResponseProcessor;
|
|
193
|
+
ResponseProcessor.SECTION_PATTERNS = {
|
|
194
|
+
enhancedInsights: /ENHANCED_INSIGHTS:\s*\n([\s\S]*?)(?=\n\n|\n[A-Z_]+:|$)/,
|
|
195
|
+
adversarialChallenges: /ADVERSARIAL_CHALLENGES:\s*\n([\s\S]*?)(?=\n\n|\n[A-Z_]+:|$)/,
|
|
196
|
+
confidenceAssessment: /CONFIDENCE_ASSESSMENT:\s*\n([\s\S]*?)(?=\n\n|\n[A-Z_]+:|$)/,
|
|
197
|
+
};
|
|
198
|
+
ResponseProcessor.VALIDATION_RESULT_PATTERN = /VALIDATION_RESULT:\s*(PASS|FAIL)/i;
|
|
199
|
+
ResponseProcessor.VALIDATION_NOTES_PATTERN = /VALIDATION_NOTES:\s*\n([\s\S]*?)(?=\n\n|\n[A-Z_]+:|$)/;
|
|
200
|
+
//# sourceMappingURL=response-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-processor.js","sourceRoot":"","sources":["../../src/llm-backup-phase-1/response-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evidence-Based Validation Layer
|
|
3
|
+
*
|
|
4
|
+
* Ensures LLM responses remain grounded in deterministic findings
|
|
5
|
+
* and prevents hallucination while maintaining adversarial value
|
|
6
|
+
*/
|
|
7
|
+
import { PersonaInsight } from "../types/persona";
|
|
8
|
+
import { ParsedLLMResponse } from "./response-processor";
|
|
9
|
+
export interface ValidationConfig {
|
|
10
|
+
evidenceThreshold: number;
|
|
11
|
+
confidenceThreshold: number;
|
|
12
|
+
maxNewInsights: number;
|
|
13
|
+
requireEvidenceGrounding: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface ValidationReport {
|
|
16
|
+
isValid: boolean;
|
|
17
|
+
score: number;
|
|
18
|
+
issues: ValidationIssue[];
|
|
19
|
+
metrics: ValidationMetrics;
|
|
20
|
+
recommendations: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface ValidationIssue {
|
|
23
|
+
type: "evidence_drift" | "confidence_inflation" | "hallucination" | "priority_mismatch";
|
|
24
|
+
severity: "low" | "medium" | "high" | "critical";
|
|
25
|
+
description: string;
|
|
26
|
+
affectedInsights: string[];
|
|
27
|
+
suggestion: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ValidationMetrics {
|
|
30
|
+
evidenceOverlap: number;
|
|
31
|
+
confidenceInflation: number;
|
|
32
|
+
priorityAlignment: number;
|
|
33
|
+
newInsightCount: number;
|
|
34
|
+
hallucinationRisk: number;
|
|
35
|
+
}
|
|
36
|
+
export declare class EvidenceValidator {
|
|
37
|
+
private config;
|
|
38
|
+
constructor(config?: Partial<ValidationConfig>);
|
|
39
|
+
validateLLMResponse(parsedResponse: ParsedLLMResponse, deterministicInsights: PersonaInsight[]): ValidationReport;
|
|
40
|
+
private validateEvidenceGrounding;
|
|
41
|
+
private validateConfidenceLevels;
|
|
42
|
+
private validatePriorityAlignment;
|
|
43
|
+
private detectHallucination;
|
|
44
|
+
private validateNewInsights;
|
|
45
|
+
private calculateMetrics;
|
|
46
|
+
private calculateEvidenceOverlap;
|
|
47
|
+
private calculateConfidenceInflation;
|
|
48
|
+
private calculatePriorityAlignment;
|
|
49
|
+
private calculateHallucinationRisk;
|
|
50
|
+
private calculateValidationScore;
|
|
51
|
+
private generateRecommendations;
|
|
52
|
+
private extractEvidenceFromText;
|
|
53
|
+
private parseConfidenceFromAssessment;
|
|
54
|
+
private countPriorityShifts;
|
|
55
|
+
private findContradictions;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/llm-backup-phase-1/validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,gBAAgB,GAAG,sBAAsB,GAAG,eAAe,GAAG,mBAAmB,CAAC;IACxF,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAUlD,mBAAmB,CACjB,cAAc,EAAE,iBAAiB,EACjC,qBAAqB,EAAE,cAAc,EAAE,GACtC,gBAAgB;IAsDnB,OAAO,CAAC,yBAAyB;IA+BjC,OAAO,CAAC,wBAAwB;IA4BhC,OAAO,CAAC,yBAAyB;IAsBjC,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,wBAAwB;IAsBhC,OAAO,CAAC,4BAA4B;IAapC,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,0BAA0B;IAwBlC,OAAO,CAAC,wBAAwB;IAgChC,OAAO,CAAC,uBAAuB;IA4B/B,OAAO,CAAC,uBAAuB;IAmB/B,OAAO,CAAC,6BAA6B;IAiBrC,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,kBAAkB;CAkB3B"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Evidence-Based Validation Layer
|
|
4
|
+
*
|
|
5
|
+
* Ensures LLM responses remain grounded in deterministic findings
|
|
6
|
+
* and prevents hallucination while maintaining adversarial value
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.EvidenceValidator = void 0;
|
|
10
|
+
class EvidenceValidator {
|
|
11
|
+
constructor(config = {}) {
|
|
12
|
+
this.config = {
|
|
13
|
+
evidenceThreshold: 0.8,
|
|
14
|
+
confidenceThreshold: 0.7,
|
|
15
|
+
maxNewInsights: 2,
|
|
16
|
+
requireEvidenceGrounding: true,
|
|
17
|
+
...config,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
validateLLMResponse(parsedResponse, deterministicInsights) {
|
|
21
|
+
const issues = [];
|
|
22
|
+
const metrics = this.calculateMetrics(parsedResponse, deterministicInsights);
|
|
23
|
+
// Validate evidence grounding
|
|
24
|
+
if (this.config.requireEvidenceGrounding) {
|
|
25
|
+
const evidenceIssues = this.validateEvidenceGrounding(parsedResponse, deterministicInsights);
|
|
26
|
+
issues.push(...evidenceIssues);
|
|
27
|
+
}
|
|
28
|
+
// Validate confidence levels
|
|
29
|
+
const confidenceIssues = this.validateConfidenceLevels(parsedResponse, deterministicInsights);
|
|
30
|
+
issues.push(...confidenceIssues);
|
|
31
|
+
// Validate priority alignment
|
|
32
|
+
const priorityIssues = this.validatePriorityAlignment(parsedResponse, deterministicInsights);
|
|
33
|
+
issues.push(...priorityIssues);
|
|
34
|
+
// Check for hallucination
|
|
35
|
+
const hallucinationIssues = this.detectHallucination(parsedResponse, deterministicInsights);
|
|
36
|
+
issues.push(...hallucinationIssues);
|
|
37
|
+
// Validate new insights
|
|
38
|
+
const newInsightIssues = this.validateNewInsights(parsedResponse, deterministicInsights);
|
|
39
|
+
issues.push(...newInsightIssues);
|
|
40
|
+
const score = this.calculateValidationScore(metrics, issues);
|
|
41
|
+
const isValid = score >= this.config.confidenceThreshold;
|
|
42
|
+
const recommendations = this.generateRecommendations(issues, metrics);
|
|
43
|
+
return {
|
|
44
|
+
isValid,
|
|
45
|
+
score,
|
|
46
|
+
issues,
|
|
47
|
+
metrics,
|
|
48
|
+
recommendations,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
validateEvidenceGrounding(parsedResponse, deterministicInsights) {
|
|
52
|
+
const issues = [];
|
|
53
|
+
const deterministicEvidence = new Set(deterministicInsights.flatMap(insight => insight.evidence));
|
|
54
|
+
// Check each enhanced insight for evidence grounding
|
|
55
|
+
parsedResponse.enhancedInsights.forEach((insightText, index) => {
|
|
56
|
+
const insightEvidence = this.extractEvidenceFromText(insightText);
|
|
57
|
+
const hasDeterministicEvidence = insightEvidence.some(evidence => deterministicEvidence.has(evidence));
|
|
58
|
+
if (!hasDeterministicEvidence && deterministicEvidence.size > 0) {
|
|
59
|
+
issues.push({
|
|
60
|
+
type: "evidence_drift",
|
|
61
|
+
severity: "medium",
|
|
62
|
+
description: `Enhanced insight ${index + 1} introduces evidence not present in deterministic analysis`,
|
|
63
|
+
affectedInsights: [`insight-${index}`],
|
|
64
|
+
suggestion: "Ensure all enhanced insights reference existing deterministic evidence",
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
return issues;
|
|
69
|
+
}
|
|
70
|
+
validateConfidenceLevels(parsedResponse, deterministicInsights) {
|
|
71
|
+
const issues = [];
|
|
72
|
+
const deterministicAvgConfidence = deterministicInsights.reduce((sum, insight) => sum + insight.confidence, 0) /
|
|
73
|
+
deterministicInsights.length;
|
|
74
|
+
// Parse confidence from assessment if available
|
|
75
|
+
const llmConfidence = this.parseConfidenceFromAssessment(parsedResponse.confidenceAssessment);
|
|
76
|
+
if (llmConfidence > deterministicAvgConfidence + 20) {
|
|
77
|
+
issues.push({
|
|
78
|
+
type: "confidence_inflation",
|
|
79
|
+
severity: "medium",
|
|
80
|
+
description: "LLM confidence appears significantly inflated compared to deterministic analysis",
|
|
81
|
+
affectedInsights: ["all"],
|
|
82
|
+
suggestion: "Review confidence scoring and ensure it's grounded in evidence quality",
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return issues;
|
|
86
|
+
}
|
|
87
|
+
validatePriorityAlignment(parsedResponse, deterministicInsights) {
|
|
88
|
+
const issues = [];
|
|
89
|
+
// This is a simplified check - in practice, we'd need to parse priorities from enhanced insights
|
|
90
|
+
const priorityShifts = this.countPriorityShifts(parsedResponse.enhancedInsights);
|
|
91
|
+
if (priorityShifts > deterministicInsights.length * 0.3) {
|
|
92
|
+
issues.push({
|
|
93
|
+
type: "priority_mismatch",
|
|
94
|
+
severity: "low",
|
|
95
|
+
description: "Significant priority changes detected in enhanced insights",
|
|
96
|
+
affectedInsights: ["multiple"],
|
|
97
|
+
suggestion: "Ensure priority changes are justified by additional evidence",
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
return issues;
|
|
101
|
+
}
|
|
102
|
+
detectHallucination(parsedResponse, deterministicInsights) {
|
|
103
|
+
const issues = [];
|
|
104
|
+
// Check for claims that contradict deterministic findings
|
|
105
|
+
const contradictions = this.findContradictions(parsedResponse.enhancedInsights, deterministicInsights);
|
|
106
|
+
contradictions.forEach((contradiction, index) => {
|
|
107
|
+
issues.push({
|
|
108
|
+
type: "hallucination",
|
|
109
|
+
severity: "high",
|
|
110
|
+
description: `Enhanced insight contradicts deterministic finding: ${contradiction}`,
|
|
111
|
+
affectedInsights: [`insight-${index}`],
|
|
112
|
+
suggestion: "Review enhanced insight for accuracy and evidence grounding",
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
return issues;
|
|
116
|
+
}
|
|
117
|
+
validateNewInsights(parsedResponse, deterministicInsights) {
|
|
118
|
+
const issues = [];
|
|
119
|
+
const newInsightCount = Math.max(0, parsedResponse.enhancedInsights.length - deterministicInsights.length);
|
|
120
|
+
if (newInsightCount > this.config.maxNewInsights) {
|
|
121
|
+
issues.push({
|
|
122
|
+
type: "hallucination",
|
|
123
|
+
severity: "medium",
|
|
124
|
+
description: `Too many new insights created (${newInsightCount} vs max ${this.config.maxNewInsights})`,
|
|
125
|
+
affectedInsights: ["new-insights"],
|
|
126
|
+
suggestion: "Limit new insights to those strongly supported by existing evidence",
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
return issues;
|
|
130
|
+
}
|
|
131
|
+
calculateMetrics(parsedResponse, deterministicInsights) {
|
|
132
|
+
const evidenceOverlap = this.calculateEvidenceOverlap(parsedResponse.enhancedInsights, deterministicInsights);
|
|
133
|
+
const confidenceInflation = this.calculateConfidenceInflation(parsedResponse.confidenceAssessment, deterministicInsights);
|
|
134
|
+
const priorityAlignment = this.calculatePriorityAlignment();
|
|
135
|
+
const newInsightCount = Math.max(0, parsedResponse.enhancedInsights.length - deterministicInsights.length);
|
|
136
|
+
const hallucinationRisk = this.calculateHallucinationRisk(parsedResponse, deterministicInsights);
|
|
137
|
+
return {
|
|
138
|
+
evidenceOverlap,
|
|
139
|
+
confidenceInflation,
|
|
140
|
+
priorityAlignment,
|
|
141
|
+
newInsightCount,
|
|
142
|
+
hallucinationRisk,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
calculateEvidenceOverlap(enhancedInsights, deterministicInsights) {
|
|
146
|
+
const deterministicEvidence = new Set(deterministicInsights.flatMap(insight => insight.evidence));
|
|
147
|
+
if (deterministicEvidence.size === 0)
|
|
148
|
+
return 1.0;
|
|
149
|
+
let overlappingEvidence = 0;
|
|
150
|
+
enhancedInsights.forEach(insight => {
|
|
151
|
+
const insightEvidence = this.extractEvidenceFromText(insight);
|
|
152
|
+
const overlap = insightEvidence.filter(evidence => deterministicEvidence.has(evidence)).length;
|
|
153
|
+
overlappingEvidence += overlap;
|
|
154
|
+
});
|
|
155
|
+
return overlappingEvidence / (deterministicEvidence.size * enhancedInsights.length);
|
|
156
|
+
}
|
|
157
|
+
calculateConfidenceInflation(confidenceAssessment, deterministicInsights) {
|
|
158
|
+
const deterministicAvg = deterministicInsights.reduce((sum, insight) => sum + insight.confidence, 0) /
|
|
159
|
+
deterministicInsights.length;
|
|
160
|
+
const llmConfidence = this.parseConfidenceFromAssessment(confidenceAssessment);
|
|
161
|
+
return Math.max(0, (llmConfidence - deterministicAvg) / 100);
|
|
162
|
+
}
|
|
163
|
+
calculatePriorityAlignment() {
|
|
164
|
+
// Simplified calculation - in practice would parse actual priorities
|
|
165
|
+
return 0.8; // Placeholder
|
|
166
|
+
}
|
|
167
|
+
calculateHallucinationRisk(parsedResponse, deterministicInsights) {
|
|
168
|
+
let riskScore = 0;
|
|
169
|
+
// Risk factors
|
|
170
|
+
if (parsedResponse.enhancedInsights.length > deterministicInsights.length * 1.5) {
|
|
171
|
+
riskScore += 0.3;
|
|
172
|
+
}
|
|
173
|
+
if (parsedResponse.adversarialChallenges.length === 0) {
|
|
174
|
+
riskScore += 0.2;
|
|
175
|
+
}
|
|
176
|
+
const contradictions = this.findContradictions(parsedResponse.enhancedInsights, deterministicInsights);
|
|
177
|
+
riskScore += contradictions.length * 0.2;
|
|
178
|
+
return Math.min(1, riskScore);
|
|
179
|
+
}
|
|
180
|
+
calculateValidationScore(metrics, issues) {
|
|
181
|
+
let score = 1.0;
|
|
182
|
+
// Deduct points for each issue based on severity
|
|
183
|
+
issues.forEach(issue => {
|
|
184
|
+
switch (issue.severity) {
|
|
185
|
+
case "critical":
|
|
186
|
+
score -= 0.4;
|
|
187
|
+
break;
|
|
188
|
+
case "high":
|
|
189
|
+
score -= 0.3;
|
|
190
|
+
break;
|
|
191
|
+
case "medium":
|
|
192
|
+
score -= 0.2;
|
|
193
|
+
break;
|
|
194
|
+
case "low":
|
|
195
|
+
score -= 0.1;
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
// Factor in metrics
|
|
200
|
+
score *= metrics.evidenceOverlap;
|
|
201
|
+
score *= (1 - metrics.hallucinationRisk);
|
|
202
|
+
score *= (1 - metrics.confidenceInflation);
|
|
203
|
+
return Math.max(0, Math.min(1, score));
|
|
204
|
+
}
|
|
205
|
+
generateRecommendations(issues, metrics) {
|
|
206
|
+
const recommendations = [];
|
|
207
|
+
if (metrics.evidenceOverlap < this.config.evidenceThreshold) {
|
|
208
|
+
recommendations.push("Improve evidence grounding by referencing more deterministic findings");
|
|
209
|
+
}
|
|
210
|
+
if (metrics.confidenceInflation > 0.2) {
|
|
211
|
+
recommendations.push("Review confidence scoring to ensure it reflects evidence quality");
|
|
212
|
+
}
|
|
213
|
+
if (metrics.hallucinationRisk > 0.3) {
|
|
214
|
+
recommendations.push("Reduce hallucination risk by limiting new insights and improving adversarial challenges");
|
|
215
|
+
}
|
|
216
|
+
issues.forEach(issue => {
|
|
217
|
+
if (!recommendations.includes(issue.suggestion)) {
|
|
218
|
+
recommendations.push(issue.suggestion);
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
return recommendations;
|
|
222
|
+
}
|
|
223
|
+
// Helper methods
|
|
224
|
+
extractEvidenceFromText(text) {
|
|
225
|
+
// Simple extraction - in practice would be more sophisticated
|
|
226
|
+
const evidencePatterns = [
|
|
227
|
+
/evidence[:\s]+([^\n]+)/gi,
|
|
228
|
+
/data[:\s]+([^\n]+)/gi,
|
|
229
|
+
/analysis[:\s]+([^\n]+)/gi,
|
|
230
|
+
];
|
|
231
|
+
const evidence = [];
|
|
232
|
+
evidencePatterns.forEach(pattern => {
|
|
233
|
+
const matches = text.match(pattern);
|
|
234
|
+
if (matches) {
|
|
235
|
+
evidence.push(...matches.map(m => m.trim()));
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
return evidence;
|
|
239
|
+
}
|
|
240
|
+
parseConfidenceFromAssessment(assessment) {
|
|
241
|
+
const confidencePatterns = [
|
|
242
|
+
/(\d+)%/gi,
|
|
243
|
+
/confidence[:\s]+(\d+)/gi,
|
|
244
|
+
/(\d+)\s*percent/gi,
|
|
245
|
+
];
|
|
246
|
+
for (const pattern of confidencePatterns) {
|
|
247
|
+
const match = assessment.match(pattern);
|
|
248
|
+
if (match && match[1]) {
|
|
249
|
+
return parseInt(match[1], 10);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return 75; // Default confidence
|
|
253
|
+
}
|
|
254
|
+
countPriorityShifts(enhancedInsights) {
|
|
255
|
+
// Simplified count - in practice would parse actual priorities
|
|
256
|
+
return Math.floor(enhancedInsights.length * 0.1);
|
|
257
|
+
}
|
|
258
|
+
findContradictions(enhancedInsights, deterministicInsights) {
|
|
259
|
+
const contradictions = [];
|
|
260
|
+
// Simple contradiction detection - in practice would be more sophisticated
|
|
261
|
+
deterministicInsights.forEach(deterministic => {
|
|
262
|
+
enhancedInsights.forEach(enhanced => {
|
|
263
|
+
if (enhanced.toLowerCase().includes("not") &&
|
|
264
|
+
deterministic.description.toLowerCase().includes(enhanced.replace(/\s+not\s+/gi, " ").trim())) {
|
|
265
|
+
contradictions.push(`${deterministic.title} vs enhanced insight`);
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
});
|
|
269
|
+
return contradictions;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
exports.EvidenceValidator = EvidenceValidator;
|
|
273
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/llm-backup-phase-1/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Persona Class
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class for all expert personas providing
|
|
5
|
+
* common functionality and interface definitions
|
|
6
|
+
*/
|
|
7
|
+
import { LLMResponse, PersonaConfig, PersonaContext, PersonaInsight, PersonaMetrics, PersonaResponse, PersonaType } from "../types/persona";
|
|
8
|
+
export declare abstract class BasePersona {
|
|
9
|
+
protected personaConfig: PersonaConfig;
|
|
10
|
+
protected personaMetrics: PersonaMetrics;
|
|
11
|
+
constructor(config: PersonaConfig);
|
|
12
|
+
abstract generateInsights(context: PersonaContext): Promise<PersonaInsight[]>;
|
|
13
|
+
abstract generatePrompt(context: PersonaContext): string;
|
|
14
|
+
abstract processLLMResponse(response: LLMResponse): PersonaResponse;
|
|
15
|
+
analyze(context: PersonaContext): Promise<PersonaResponse>;
|
|
16
|
+
protected generateSummary(insights: PersonaInsight[], context: PersonaContext): string;
|
|
17
|
+
protected generateNextSteps(insights: PersonaInsight[]): string[];
|
|
18
|
+
protected estimateTimeframe(insights: PersonaInsight[]): string;
|
|
19
|
+
protected calculateConfidence(insights: PersonaInsight[]): "high" | "medium" | "low";
|
|
20
|
+
protected getMaturityLevel(score: number): string;
|
|
21
|
+
protected updateMetrics(insights: PersonaInsight[], responseTime: number): void;
|
|
22
|
+
protected getPerspective(): string;
|
|
23
|
+
protected createInsight(type: PersonaInsight["type"], title: string, description: string, evidence: string[], confidence: number, priority: PersonaInsight["priority"], category: PersonaInsight["category"]): PersonaInsight;
|
|
24
|
+
get type(): PersonaType;
|
|
25
|
+
get config(): PersonaConfig;
|
|
26
|
+
get metrics(): PersonaMetrics;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=base-persona.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-persona.d.ts","sourceRoot":"","sources":["../../src/personas/base-persona.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B,8BAAsB,WAAW;IAC/B,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,SAAS,CAAC,cAAc,EAAE,cAAc,CAAC;gBAE7B,MAAM,EAAE,aAAa;IAUjC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAC7E,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM;IACxD,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,EAAE,WAAW,GAAG,eAAe;IAG7D,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAmChE,SAAS,CAAC,eAAe,CACvB,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,EAAE,cAAc,GACtB,MAAM;IAmBT,SAAS,CAAC,iBAAiB,CACzB,QAAQ,EAAE,cAAc,EAAE,GACzB,MAAM,EAAE;IAWX,SAAS,CAAC,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM;IAY/D,SAAS,CAAC,mBAAmB,CAC3B,QAAQ,EAAE,cAAc,EAAE,GACzB,MAAM,GAAG,QAAQ,GAAG,KAAK;IAgB5B,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAOjD,SAAS,CAAC,aAAa,CACrB,QAAQ,EAAE,cAAc,EAAE,EAC1B,YAAY,EAAE,MAAM,GACnB,IAAI;IAaP,SAAS,CAAC,cAAc,IAAI,MAAM;IAKlC,SAAS,CAAC,aAAa,CACrB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAC5B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,EACpC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,GACnC,cAAc;IAcjB,IAAI,IAAI,IAAI,WAAW,CAEtB;IAED,IAAI,MAAM,IAAI,aAAa,CAE1B;IAED,IAAI,OAAO,IAAI,cAAc,CAE5B;CACF"}
|