|
| 1 | +export function auditLlmMode(config = {}) { |
| 2 | + const configured = String(config.audit?.llmMode ?? '').trim().toLowerCase(); |
| 3 | + if (['off', 'advisory', 'blocking'].includes(configured)) return configured; |
| 4 | + if (config.audit?.blockOnLlmFindings === true) return 'blocking'; |
| 5 | + return 'off'; |
| 6 | +} |
| 7 | + |
| 8 | +export function deterministicOnlyAuditSummary(quality) { |
| 9 | + return { |
| 10 | + schemaVersion: '2.0', |
| 11 | + generatedAt: new Date().toISOString(), |
| 12 | + auditInputHash: quality.auditInputHash, |
| 13 | + inventoryFingerprint: quality.inventoryFingerprint, |
| 14 | + manifestHash: quality.manifestHash, |
| 15 | + pages: quality.metrics.pages, |
| 16 | + claims: quality.metrics.claims, |
| 17 | + evidenceReferences: quality.metrics.evidenceReferences, |
| 18 | + modelItems: quality.metrics.modelItems, |
| 19 | + referencedModelItems: quality.metrics.referencedModelItems, |
| 20 | + modelReferenceCoverage: quality.metrics.modelReferenceCoverage, |
| 21 | + deterministicFailures: quality.errors.length, |
| 22 | + deterministicWarnings: quality.warnings.length, |
| 23 | + llmAuditedPages: 0, |
| 24 | + highRiskFindings: 0, |
| 25 | + llmSkippedReason: 'llm-audit-off', |
| 26 | + llmFindingsBlocking: false, |
| 27 | + pass: quality.pass |
| 28 | + }; |
| 29 | +} |
| 30 | + |
1 | 31 | export function advisoryLlmAuditSummary(summary, config = {}) { |
2 | | - if (!summary || config.audit?.blockOnLlmFindings === true) return null; |
| 32 | + if (!summary || auditLlmMode(config) !== 'advisory') return null; |
3 | 33 | const deterministicFailures = Number(summary.deterministicFailures ?? 0); |
4 | 34 | const highRiskFindings = Number(summary.highRiskFindings ?? 0); |
5 | 35 | if (deterministicFailures !== 0 || highRiskFindings <= 0) return null; |
|
0 commit comments