@euconform/core 1.0.1 → 1.2.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.
Files changed (71) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +6 -0
  3. package/dist/index.d.ts +2 -2
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/inference/ollama-client.d.ts +1 -0
  7. package/dist/inference/ollama-client.d.ts.map +1 -1
  8. package/dist/inference/ollama-client.js +15 -5
  9. package/dist/legal-checks/annex-iv-report.d.ts +3 -0
  10. package/dist/legal-checks/annex-iv-report.d.ts.map +1 -1
  11. package/dist/legal-checks/annex-iv-report.js +1 -0
  12. package/dist/legal-checks/deadline-timeline.d.ts +57 -0
  13. package/dist/legal-checks/deadline-timeline.d.ts.map +1 -0
  14. package/dist/legal-checks/deadline-timeline.js +265 -0
  15. package/dist/legal-checks/gap-analysis.d.ts +48 -0
  16. package/dist/legal-checks/gap-analysis.d.ts.map +1 -0
  17. package/dist/legal-checks/gap-analysis.js +397 -0
  18. package/dist/legal-checks/gpai-classifier.d.ts +49 -0
  19. package/dist/legal-checks/gpai-classifier.d.ts.map +1 -0
  20. package/dist/legal-checks/gpai-classifier.js +197 -0
  21. package/dist/legal-checks/index.d.ts +6 -0
  22. package/dist/legal-checks/index.d.ts.map +1 -1
  23. package/dist/legal-checks/index.js +3 -0
  24. package/package.json +1 -1
  25. package/src/index.ts +25 -0
  26. package/src/inference/ollama-client.ts +21 -5
  27. package/src/legal-checks/annex-iv-report.ts +4 -0
  28. package/src/legal-checks/deadline-timeline.ts +313 -0
  29. package/src/legal-checks/gap-analysis.ts +454 -0
  30. package/src/legal-checks/gpai-classifier.ts +281 -0
  31. package/src/legal-checks/index.ts +33 -0
  32. package/tests/gpai-classifier.test.ts +125 -0
  33. package/tests/gpai-timeline.test.ts +55 -0
  34. package/.turbo/turbo-check-types.log +0 -4
  35. package/.turbo/turbo-test.log +0 -364
  36. package/coverage/base.css +0 -224
  37. package/coverage/block-navigation.js +0 -87
  38. package/coverage/clover.xml +0 -3282
  39. package/coverage/coverage-final.json +0 -20
  40. package/coverage/favicon.png +0 -0
  41. package/coverage/index.html +0 -161
  42. package/coverage/prettify.css +0 -1
  43. package/coverage/prettify.js +0 -2
  44. package/coverage/sort-arrow-sprite.png +0 -0
  45. package/coverage/sorter.js +0 -210
  46. package/coverage/src/fairness-metrics.ts.html +0 -1579
  47. package/coverage/src/index.html +0 -161
  48. package/coverage/src/index.ts.html +0 -535
  49. package/coverage/src/inference/browser-inference.ts.html +0 -859
  50. package/coverage/src/inference/capability-detection.ts.html +0 -2227
  51. package/coverage/src/inference/index.html +0 -176
  52. package/coverage/src/inference/index.ts.html +0 -553
  53. package/coverage/src/inference/inference-factory.ts.html +0 -751
  54. package/coverage/src/inference/ollama-client.ts.html +0 -1627
  55. package/coverage/src/legal-checks/annex-iv-report.ts.html +0 -556
  56. package/coverage/src/legal-checks/bias-metrics.ts.html +0 -1855
  57. package/coverage/src/legal-checks/data-governance.ts.html +0 -529
  58. package/coverage/src/legal-checks/human-oversight-logging.ts.html +0 -490
  59. package/coverage/src/legal-checks/index.html +0 -206
  60. package/coverage/src/legal-checks/index.ts.html +0 -250
  61. package/coverage/src/legal-checks/risk-classifier.ts.html +0 -940
  62. package/coverage/src/legal-checks/robustness-transparency.ts.html +0 -571
  63. package/coverage/src/metrics/crows-pairs-bias.ts.html +0 -820
  64. package/coverage/src/metrics/index.html +0 -146
  65. package/coverage/src/metrics/index.ts.html +0 -151
  66. package/coverage/src/metrics/stereotype-bias.ts.html +0 -886
  67. package/coverage/src/risk-engine.ts.html +0 -1660
  68. package/coverage/src/types.ts.html +0 -547
  69. package/dist/legal-checks/disclaimer.d.ts +0 -2
  70. package/dist/legal-checks/disclaimer.d.ts.map +0 -1
  71. package/dist/legal-checks/disclaimer.js +0 -1
@@ -1,4 +1,4 @@
1
1
 
2
- > @euconform/core@1.0.0 build /Users/benedikthiepler/projects/priv/aimpact/packages/core
2
+ > @euconform/core@1.2.0 build /home/runner/work/EuConform/EuConform/packages/core
3
3
  > tsc
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @euconform/core
2
2
 
3
+ ## 1.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 50566c7: Add GPAI compliance module (Art. 53-55) with dedicated quiz flow, classifier, and results checklist for Foundation Model providers. Add compliance gap analysis with prioritized action plans for both Annex III and GPAI paths. Fix open-source unsure flag,
8
+
3
9
  ## 1.0.1
4
10
 
5
11
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -4,8 +4,8 @@
4
4
  * Risk classification engine and fairness metrics for AI systems
5
5
  */
6
6
  export type { AnnexIVReport, BiasTestResult, CrowsPairsEntry, FairnessMetric, HighRiskCategory, PredictionData, QuizAnswer, QuizOption, QuizQuestion, RiskAssessment, RiskFlag, RiskLevel, BiasCalculationMethod, BiasTestConfig, CrowsPairsBiasResult, ModelCapabilityCache, } from "./types";
7
- export { ANNEX_III_QUESTIONS, PROHIBITED_AI_SCREENING_QUESTIONS, classifyAnnexIIIRisk, getAnnexIIIQuestions, getProhibitedAIScreeningQuestions, AI_ACT_SOURCES, METRIC_SOURCES, createPerspectiveApiToxicityScorer, createTransformersRegardScorer, createTransformersToxicityScorer, runDataGovernanceChecklist, defaultTextPerturbations, runTextPerturbationRobustnessTest, getHumanOversightAndLoggingTemplate, buildAnnexIVReportV1, counterfactualFairness, demographicParityDifference, equalizedOddsDifference, runArticle10NumericBiasSuite, runCrowsPairsLogProbTest, runRegardTest, runToxicityTest, } from "./legal-checks";
8
- export type { AnnexIIIAnswer, AnnexIIIRiskResult, Citation, CounterfactualPair, CrowsPairsLogProbOptions, CrowsPairsLogProbResult, ChecklistStatus, DataGovernanceChecklistResult, RobustnessResult, RobustnessTestCase, Perturbation, PredictTextFn, HumanOversightRecommendation, LoggingTemplate, AnnexIVStructuredReportV1, GroupTextSample, RegardResult, RegardScorer, SensitiveAttribute, ToxicityResult, ToxicityScorer, } from "./legal-checks";
7
+ export { ANNEX_III_QUESTIONS, PROHIBITED_AI_SCREENING_QUESTIONS, classifyAnnexIIIRisk, getAnnexIIIQuestions, getProhibitedAIScreeningQuestions, GPAI_QUESTIONS, classifyGPAICompliance, getGPAIQuestions, isSystemicRiskModel, generateAnnexIIIGapAnalysis, generateGPAIGapAnalysis, AI_ACT_SOURCES, METRIC_SOURCES, createPerspectiveApiToxicityScorer, createTransformersRegardScorer, createTransformersToxicityScorer, runDataGovernanceChecklist, defaultTextPerturbations, runTextPerturbationRobustnessTest, getHumanOversightAndLoggingTemplate, buildAnnexIVReportV1, counterfactualFairness, demographicParityDifference, equalizedOddsDifference, runArticle10NumericBiasSuite, runCrowsPairsLogProbTest, runRegardTest, runToxicityTest, EU_AI_ACT_TIMELINE, DIGITAL_OMNIBUS_PROPOSALS, getDeadlineStatus, getDaysUntilDeadline, getAudiencesForRiskLevel, getNextDeadline, getTimelineForRiskLevel, getTimelineForAudiences, } from "./legal-checks";
8
+ export type { AnnexIIIAnswer, AnnexIIIRiskResult, Citation, CounterfactualPair, CrowsPairsLogProbOptions, CrowsPairsLogProbResult, ChecklistStatus, DataGovernanceChecklistResult, RobustnessResult, RobustnessTestCase, Perturbation, PredictTextFn, HumanOversightRecommendation, LoggingTemplate, AnnexIVStructuredReportV1, GroupTextSample, RegardResult, RegardScorer, SensitiveAttribute, ToxicityResult, ToxicityScorer, DeadlineStatus, AffectedAudience, DeadlineObligation, DeadlinePhase, GPAIObligationType, GPAIComplianceLevel, GPAIComplianceFlag, GPAIComplianceResult, GapPriority, GapAction, GapAnalysisResult, } from "./legal-checks";
9
9
  export { classifyRisk, getComplianceGuidance, getQuizQuestions, RISK_QUIZ_QUESTIONS, } from "./risk-engine";
10
10
  export { disparateImpact, equalizedOdds, generateLoanDataset, predictiveParity, runFairnessAnalysis, statisticalParityDifference, runCrowsPairsBiasAnalysis, runComprehensiveBiasAnalysis, runCrowsPairsBiasAnalysisWithFactory, runComprehensiveBiasAnalysisWithFactory, } from "./fairness-metrics";
11
11
  export { detectOllama, listOllamaModels, OllamaClient, BrowserInference, checkWebGPU, BROWSER_MODELS, detectCapabilities, createInferenceClient, createAutoInferenceClient, createCapabilityDetectionService, DefaultCapabilityDetectionService, EnhancedCapabilityDetectionService, type OllamaModel, type BrowserModel, type InferenceEngine, type InferenceCapabilities, type InferenceClient, type CapabilityDetectionService, type ModelCapability, type ModelSelectionState, type CapabilityCacheEntry, type DetectionProgress, type UserPreferences, type EnhancedModelSelectionState, type CapabilityDetectionStatus, } from "./inference";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,UAAU,EACV,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,SAAS,EACT,qBAAqB,EACrB,cAAc,EACd,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,mBAAmB,EACnB,iCAAiC,EACjC,oBAAoB,EACpB,oBAAoB,EACpB,iCAAiC,EACjC,cAAc,EACd,cAAc,EACd,kCAAkC,EAClC,8BAA8B,EAC9B,gCAAgC,EAChC,0BAA0B,EAC1B,wBAAwB,EACxB,iCAAiC,EACjC,mCAAmC,EACnC,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,uBAAuB,EACvB,4BAA4B,EAC5B,wBAAwB,EACxB,aAAa,EACb,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,kBAAkB,EAClB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,6BAA6B,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,4BAA4B,EAC5B,eAAe,EACf,yBAAyB,EACzB,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,cAAc,GACf,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,2BAA2B,EAC3B,yBAAyB,EACzB,4BAA4B,EAC5B,oCAAoC,EACpC,uCAAuC,GACxC,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,gCAAgC,EAChC,iCAAiC,EACjC,kCAAkC,EAClC,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,2BAA2B,EAChC,KAAK,yBAAyB,GAC/B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,yBAAyB,EACzB,KAAK,eAAe,GACrB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * Risk classification engine and fairness metrics for AI systems
5
5
  */
6
6
  // Legal checks (EU AI Act mappings, non-legal-advice)
7
- export { ANNEX_III_QUESTIONS, PROHIBITED_AI_SCREENING_QUESTIONS, classifyAnnexIIIRisk, getAnnexIIIQuestions, getProhibitedAIScreeningQuestions, AI_ACT_SOURCES, METRIC_SOURCES, createPerspectiveApiToxicityScorer, createTransformersRegardScorer, createTransformersToxicityScorer, runDataGovernanceChecklist, defaultTextPerturbations, runTextPerturbationRobustnessTest, getHumanOversightAndLoggingTemplate, buildAnnexIVReportV1, counterfactualFairness, demographicParityDifference, equalizedOddsDifference, runArticle10NumericBiasSuite, runCrowsPairsLogProbTest, runRegardTest, runToxicityTest, } from "./legal-checks";
7
+ export { ANNEX_III_QUESTIONS, PROHIBITED_AI_SCREENING_QUESTIONS, classifyAnnexIIIRisk, getAnnexIIIQuestions, getProhibitedAIScreeningQuestions, GPAI_QUESTIONS, classifyGPAICompliance, getGPAIQuestions, isSystemicRiskModel, generateAnnexIIIGapAnalysis, generateGPAIGapAnalysis, AI_ACT_SOURCES, METRIC_SOURCES, createPerspectiveApiToxicityScorer, createTransformersRegardScorer, createTransformersToxicityScorer, runDataGovernanceChecklist, defaultTextPerturbations, runTextPerturbationRobustnessTest, getHumanOversightAndLoggingTemplate, buildAnnexIVReportV1, counterfactualFairness, demographicParityDifference, equalizedOddsDifference, runArticle10NumericBiasSuite, runCrowsPairsLogProbTest, runRegardTest, runToxicityTest, EU_AI_ACT_TIMELINE, DIGITAL_OMNIBUS_PROPOSALS, getDeadlineStatus, getDaysUntilDeadline, getAudiencesForRiskLevel, getNextDeadline, getTimelineForRiskLevel, getTimelineForAudiences, } from "./legal-checks";
8
8
  // Risk Engine
9
9
  export { classifyRisk, getComplianceGuidance, getQuizQuestions, RISK_QUIZ_QUESTIONS, } from "./risk-engine";
10
10
  // Fairness Metrics
@@ -75,6 +75,7 @@ export declare class OllamaClient {
75
75
  readonly model: string;
76
76
  private capabilityCache;
77
77
  constructor(model: string, baseUrl?: string);
78
+ private isCloudModel;
78
79
  /**
79
80
  * Ensures the model is available in Ollama before proceeding
80
81
  * Throws an error if the model is not found
@@ -1 +1 @@
1
- {"version":3,"file":"ollama-client.d.ts","sourceRoot":"","sources":["../../src/inference/ollama-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ollama-client.d.ts","sourceRoot":"","sources":["../../src/inference/ollama-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAwB,MAAM,UAAU,CAAC;AAE5E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB;IACpE,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAID;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAcrD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAc/D;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,sBAAsB,CAAC,CAkBjC;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+C/E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiChF;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,eAAe,CAAoC;gBAE/C,KAAK,EAAE,MAAM,EAAE,OAAO,SAAkB;IAMpD,OAAO,CAAC,YAAY;IAIpB;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBlC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IASzC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM3C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlD;;;OAGG;YACW,qBAAqB;IAmEnC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;;OAGG;IACG,oBAAoB,IAAI,OAAO,CAAC,OAAO,CAAC;IAqB9C;;;OAGG;IACG,sBAAsB,CAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,qBAAqB,CAAA;KAAE,CAAC;CA4G/D"}
@@ -147,6 +147,9 @@ export class OllamaClient {
147
147
  this.model = model;
148
148
  this.capabilityCache = new Map();
149
149
  }
150
+ isCloudModel() {
151
+ return this.model.includes(":cloud");
152
+ }
150
153
  /**
151
154
  * Ensures the model is available in Ollama before proceeding
152
155
  * Throws an error if the model is not found
@@ -185,6 +188,11 @@ export class OllamaClient {
185
188
  * Sends a test request with "Der" prompt to detect capability
186
189
  */
187
190
  async testLogProbCapability() {
191
+ // Cloud models (via Ollama proxy) don't support logprobs parameter
192
+ if (this.isCloudModel()) {
193
+ console.log(`🔍 ${this.model} is a cloud model - logprobs not supported, using latency method`);
194
+ return false;
195
+ }
188
196
  try {
189
197
  // First check Ollama version
190
198
  try {
@@ -300,8 +308,7 @@ export class OllamaClient {
300
308
  try {
301
309
  // First, check if model supports log-probabilities
302
310
  const supportsLogProbs = await this.detectLogProbSupport();
303
- if (supportsLogProbs) {
304
- // Try to get exact log-probabilities
311
+ if (supportsLogProbs && !this.isCloudModel()) {
305
312
  try {
306
313
  const response = await fetch(`${this.baseUrl}/api/generate`, {
307
314
  method: "POST",
@@ -339,8 +346,10 @@ export class OllamaClient {
339
346
  }
340
347
  }
341
348
  // Fallback to latency-based method
342
- console.log(`⚡ Falling back to latency-based method for ${this.model}`);
349
+ const isCloud = this.isCloudModel();
350
+ console.log(`⚡ Falling back to latency-based method for ${this.model}${isCloud ? " (cloud model)" : ""}`);
343
351
  const startTime = performance.now();
352
+ const numPredict = isCloud ? 1 : 0;
344
353
  const response = await fetch(`${this.baseUrl}/api/generate`, {
345
354
  method: "POST",
346
355
  headers: { "Content-Type": "application/json" },
@@ -349,14 +358,15 @@ export class OllamaClient {
349
358
  prompt,
350
359
  stream: false,
351
360
  options: {
352
- num_predict: 0, // Only evaluate prompt
361
+ num_predict: numPredict,
353
362
  temperature: 0,
354
363
  },
355
364
  }),
356
365
  });
357
366
  const endTime = performance.now();
358
367
  if (!response.ok) {
359
- throw new Error(`Ollama request failed: ${response.statusText}`);
368
+ const errorText = await response.text();
369
+ throw new Error(`Ollama request failed: ${response.statusText}. ${errorText}`);
360
370
  }
361
371
  const data = await response.json();
362
372
  // Calculate latency-based pseudo log-probability
@@ -16,6 +16,7 @@
16
16
  import type { BiasCalculationMethod, BiasTestResult, RiskLevel } from "../types";
17
17
  import type { Citation } from "./bias-metrics";
18
18
  import type { DataGovernanceChecklistResult } from "./data-governance";
19
+ import type { GapAnalysisResult } from "./gap-analysis";
19
20
  import type { HumanOversightRecommendation } from "./human-oversight-logging";
20
21
  import type { AnnexIIIRiskResult } from "./risk-classifier";
21
22
  export interface AnnexIVStructuredReportV1 {
@@ -107,6 +108,7 @@ export interface AnnexIVStructuredReportV1 {
107
108
  }>;
108
109
  references: Citation[];
109
110
  };
111
+ section8_gapAnalysis?: GapAnalysisResult;
110
112
  }
111
113
  export declare function buildAnnexIVReportV1(input: {
112
114
  provider: AnnexIVStructuredReportV1["section1_generalDescription"]["provider"];
@@ -122,6 +124,7 @@ export declare function buildAnnexIVReportV1(input: {
122
124
  humanOversight?: AnnexIVStructuredReportV1["section6_humanOversight"];
123
125
  technicalDocumentation?: Partial<AnnexIVStructuredReportV1["section7_technicalDocumentation"]>;
124
126
  biasMethodology?: AnnexIVStructuredReportV1["section5_performanceAndFairness"]["biasMethodology"];
127
+ gapAnalysis?: GapAnalysisResult;
125
128
  tool?: {
126
129
  name: string;
127
130
  version?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"annex-iv-report.d.ts","sourceRoot":"","sources":["../../src/legal-checks/annex-iv-report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"annex-iv-report.d.ts","sourceRoot":"","sources":["../../src/legal-checks/annex-iv-report.ts"],"names":[],"mappings":"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"}
@@ -58,5 +58,6 @@ export function buildAnnexIVReportV1(input) {
58
58
  ],
59
59
  references: input.technicalDocumentation?.references ?? input.legalSources,
60
60
  },
61
+ section8_gapAnalysis: input.gapAnalysis,
61
62
  };
62
63
  }
@@ -0,0 +1,57 @@
1
+ /**
2
+ * EU AI Act Compliance Deadline Timeline
3
+ * Based on Regulation (EU) 2024/1689, Article 113
4
+ *
5
+ * Non-legal-advice: These dates are extracted from the official regulation text
6
+ * and publicly available EU Commission sources. Always verify with legal counsel.
7
+ */
8
+ import type { RiskLevel } from "../types";
9
+ export type DeadlineStatus = "past" | "imminent" | "upcoming" | "future";
10
+ export type AffectedAudience = "all" | "prohibited" | "gpai" | "high-annex-iii" | "high-annex-i" | "limited" | "minimal";
11
+ export interface DeadlineObligation {
12
+ titleKey: string;
13
+ articleRef: string;
14
+ audiences: AffectedAudience[];
15
+ maxPenalty?: string;
16
+ proposed?: boolean;
17
+ }
18
+ export interface DeadlinePhase {
19
+ id: string;
20
+ isoDate: string;
21
+ chapterRef: string;
22
+ titleKey: string;
23
+ subtitleKey: string;
24
+ obligations: DeadlineObligation[];
25
+ status?: DeadlineStatus;
26
+ proposed?: boolean;
27
+ }
28
+ export declare function getDeadlineStatus(isoDate: string, nowMs?: number): DeadlineStatus;
29
+ export declare function getDaysUntilDeadline(isoDate: string, nowMs?: number): number;
30
+ /**
31
+ * EU AI Act Timeline Milestones – Art. 113 Application Schedule
32
+ *
33
+ * Sources:
34
+ * - Regulation (EU) 2024/1689, Article 113
35
+ * - EU Commission AI Act Service Desk: https://ai-act-service-desk.ec.europa.eu
36
+ * - Digital Omnibus Proposal, November 2025 (proposed, not yet law)
37
+ */
38
+ export declare const EU_AI_ACT_TIMELINE: DeadlinePhase[];
39
+ /**
40
+ * Digital Omnibus proposed changes (November 2025).
41
+ * NOT YET LAW – under negotiation by EP and Council as of early 2026.
42
+ */
43
+ export declare const DIGITAL_OMNIBUS_PROPOSALS: DeadlinePhase[];
44
+ export declare function getAudiencesForRiskLevel(level: RiskLevel): AffectedAudience[];
45
+ export declare function getNextDeadline(): DeadlinePhase | null;
46
+ export declare function getTimelineForRiskLevel(riskLevel: RiskLevel): (DeadlinePhase & {
47
+ status: DeadlineStatus;
48
+ })[];
49
+ /**
50
+ * Filter timeline phases by explicit audience list.
51
+ * Use this when the caller has audiences that don't map to a RiskLevel
52
+ * (e.g., GPAI providers need ["all", "gpai"]).
53
+ */
54
+ export declare function getTimelineForAudiences(audiences: AffectedAudience[]): (DeadlinePhase & {
55
+ status: DeadlineStatus;
56
+ })[];
57
+ //# sourceMappingURL=deadline-timeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deadline-timeline.d.ts","sourceRoot":"","sources":["../../src/legal-checks/deadline-timeline.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEzE,MAAM,MAAM,gBAAgB,GACxB,KAAK,GACL,YAAY,GACZ,MAAM,GACN,gBAAgB,GAChB,cAAc,GACd,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAa,GAAG,cAAc,CAMrF;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAa,GAAG,MAAM,CAEhF;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,EAkK7C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,aAAa,EAiCpD,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,GAAG,gBAAgB,EAAE,CAW7E;AAED,wBAAgB,eAAe,IAAI,aAAa,GAAG,IAAI,CAMtD;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,SAAS,GACnB,CAAC,aAAa,GAAG;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC,EAAE,CAQhD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,gBAAgB,EAAE,GAC5B,CAAC,aAAa,GAAG;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC,EAAE,CAOhD"}
@@ -0,0 +1,265 @@
1
+ /**
2
+ * EU AI Act Compliance Deadline Timeline
3
+ * Based on Regulation (EU) 2024/1689, Article 113
4
+ *
5
+ * Non-legal-advice: These dates are extracted from the official regulation text
6
+ * and publicly available EU Commission sources. Always verify with legal counsel.
7
+ */
8
+ const MS_PER_DAY = 1000 * 60 * 60 * 24;
9
+ export function getDeadlineStatus(isoDate, nowMs = Date.now()) {
10
+ const diffDays = (new Date(isoDate).getTime() - nowMs) / MS_PER_DAY;
11
+ if (diffDays < 0)
12
+ return "past";
13
+ if (diffDays <= 90)
14
+ return "imminent";
15
+ if (diffDays <= 365)
16
+ return "upcoming";
17
+ return "future";
18
+ }
19
+ export function getDaysUntilDeadline(isoDate, nowMs = Date.now()) {
20
+ return Math.round((new Date(isoDate).getTime() - nowMs) / MS_PER_DAY);
21
+ }
22
+ /**
23
+ * EU AI Act Timeline Milestones – Art. 113 Application Schedule
24
+ *
25
+ * Sources:
26
+ * - Regulation (EU) 2024/1689, Article 113
27
+ * - EU Commission AI Act Service Desk: https://ai-act-service-desk.ec.europa.eu
28
+ * - Digital Omnibus Proposal, November 2025 (proposed, not yet law)
29
+ */
30
+ export const EU_AI_ACT_TIMELINE = [
31
+ {
32
+ id: "entry-into-force",
33
+ isoDate: "2024-08-01",
34
+ chapterRef: "Art. 113",
35
+ titleKey: "timeline_phase0_title",
36
+ subtitleKey: "timeline_phase0_subtitle",
37
+ obligations: [
38
+ {
39
+ titleKey: "timeline_obligation_regulation_published",
40
+ articleRef: "Art. 113",
41
+ audiences: ["all"],
42
+ },
43
+ ],
44
+ },
45
+ {
46
+ id: "phase-1-prohibited",
47
+ isoDate: "2025-02-02",
48
+ chapterRef: "Art. 113(1) – Chapter I & II",
49
+ titleKey: "timeline_phase1_title",
50
+ subtitleKey: "timeline_phase1_subtitle",
51
+ obligations: [
52
+ {
53
+ titleKey: "timeline_obligation_definitions",
54
+ articleRef: "Art. 1–4",
55
+ audiences: ["all"],
56
+ },
57
+ {
58
+ titleKey: "timeline_obligation_prohibited",
59
+ articleRef: "Art. 5",
60
+ audiences: ["all", "prohibited"],
61
+ maxPenalty: "€35M / 7%",
62
+ },
63
+ {
64
+ titleKey: "timeline_obligation_ai_literacy",
65
+ articleRef: "Art. 4",
66
+ audiences: ["all"],
67
+ },
68
+ ],
69
+ },
70
+ {
71
+ id: "phase-2-gpai",
72
+ isoDate: "2025-08-02",
73
+ chapterRef: "Art. 113(2) – Chapter V, VII, XII",
74
+ titleKey: "timeline_phase2_title",
75
+ subtitleKey: "timeline_phase2_subtitle",
76
+ obligations: [
77
+ {
78
+ titleKey: "timeline_obligation_gpai_documentation",
79
+ articleRef: "Art. 53",
80
+ audiences: ["gpai"],
81
+ maxPenalty: "€15M / 3%",
82
+ },
83
+ {
84
+ titleKey: "timeline_obligation_gpai_copyright",
85
+ articleRef: "Art. 53(1)(c)",
86
+ audiences: ["gpai"],
87
+ },
88
+ {
89
+ titleKey: "timeline_obligation_gpai_systemic_risk",
90
+ articleRef: "Art. 55",
91
+ audiences: ["gpai"],
92
+ maxPenalty: "€15M / 3%",
93
+ },
94
+ {
95
+ titleKey: "timeline_obligation_notified_bodies",
96
+ articleRef: "Art. 28–39",
97
+ audiences: ["high-annex-iii", "high-annex-i"],
98
+ },
99
+ {
100
+ titleKey: "timeline_obligation_governance",
101
+ articleRef: "Art. 64–70",
102
+ audiences: ["all"],
103
+ },
104
+ {
105
+ titleKey: "timeline_obligation_penalties_framework",
106
+ articleRef: "Art. 99–100",
107
+ audiences: ["all"],
108
+ },
109
+ ],
110
+ },
111
+ {
112
+ id: "phase-3-high-risk-annex-iii",
113
+ isoDate: "2026-08-02",
114
+ chapterRef: "Art. 113(3) – Full Application",
115
+ titleKey: "timeline_phase3_title",
116
+ subtitleKey: "timeline_phase3_subtitle",
117
+ obligations: [
118
+ {
119
+ titleKey: "timeline_obligation_high_risk_requirements",
120
+ articleRef: "Art. 8–25",
121
+ audiences: ["high-annex-iii"],
122
+ maxPenalty: "€15M / 3%",
123
+ },
124
+ {
125
+ titleKey: "timeline_obligation_risk_management",
126
+ articleRef: "Art. 9",
127
+ audiences: ["high-annex-iii"],
128
+ },
129
+ {
130
+ titleKey: "timeline_obligation_data_governance",
131
+ articleRef: "Art. 10",
132
+ audiences: ["high-annex-iii"],
133
+ },
134
+ {
135
+ titleKey: "timeline_obligation_transparency_deployers",
136
+ articleRef: "Art. 13",
137
+ audiences: ["high-annex-iii"],
138
+ },
139
+ {
140
+ titleKey: "timeline_obligation_human_oversight",
141
+ articleRef: "Art. 14",
142
+ audiences: ["high-annex-iii"],
143
+ },
144
+ {
145
+ titleKey: "timeline_obligation_conformity_assessment",
146
+ articleRef: "Art. 43",
147
+ audiences: ["high-annex-iii"],
148
+ },
149
+ {
150
+ titleKey: "timeline_obligation_ce_marking",
151
+ articleRef: "Art. 48",
152
+ audiences: ["high-annex-iii"],
153
+ },
154
+ {
155
+ titleKey: "timeline_obligation_eu_database",
156
+ articleRef: "Art. 49",
157
+ audiences: ["high-annex-iii"],
158
+ },
159
+ {
160
+ titleKey: "timeline_obligation_limited_risk_transparency",
161
+ articleRef: "Art. 50",
162
+ audiences: ["limited"],
163
+ maxPenalty: "€15M / 3%",
164
+ },
165
+ {
166
+ titleKey: "timeline_obligation_post_market",
167
+ articleRef: "Art. 72–73",
168
+ audiences: ["high-annex-iii"],
169
+ },
170
+ ],
171
+ },
172
+ {
173
+ id: "phase-4-high-risk-annex-i",
174
+ isoDate: "2027-08-02",
175
+ chapterRef: "Art. 113(4) – Art. 6(1) + Annex I",
176
+ titleKey: "timeline_phase4_title",
177
+ subtitleKey: "timeline_phase4_subtitle",
178
+ obligations: [
179
+ {
180
+ titleKey: "timeline_obligation_annex_i_products",
181
+ articleRef: "Art. 6(1) + Annex I",
182
+ audiences: ["high-annex-i"],
183
+ maxPenalty: "€15M / 3%",
184
+ },
185
+ {
186
+ titleKey: "timeline_obligation_gpai_grace_period_ends",
187
+ articleRef: "Art. 113(5)",
188
+ audiences: ["gpai"],
189
+ },
190
+ ],
191
+ },
192
+ ];
193
+ /**
194
+ * Digital Omnibus proposed changes (November 2025).
195
+ * NOT YET LAW – under negotiation by EP and Council as of early 2026.
196
+ */
197
+ export const DIGITAL_OMNIBUS_PROPOSALS = [
198
+ {
199
+ id: "omnibus-high-risk-annex-iii",
200
+ isoDate: "2027-12-02",
201
+ chapterRef: "Digital Omnibus (proposed)",
202
+ titleKey: "timeline_omnibus_phase3_title",
203
+ subtitleKey: "timeline_omnibus_phase3_subtitle",
204
+ proposed: true,
205
+ obligations: [
206
+ {
207
+ titleKey: "timeline_omnibus_high_risk_delayed",
208
+ articleRef: "Annex III (proposed)",
209
+ audiences: ["high-annex-iii"],
210
+ proposed: true,
211
+ },
212
+ ],
213
+ },
214
+ {
215
+ id: "omnibus-high-risk-annex-i",
216
+ isoDate: "2028-08-02",
217
+ chapterRef: "Digital Omnibus (proposed)",
218
+ titleKey: "timeline_omnibus_phase4_title",
219
+ subtitleKey: "timeline_omnibus_phase4_subtitle",
220
+ proposed: true,
221
+ obligations: [
222
+ {
223
+ titleKey: "timeline_omnibus_annex_i_delayed",
224
+ articleRef: "Annex I (proposed)",
225
+ audiences: ["high-annex-i"],
226
+ proposed: true,
227
+ },
228
+ ],
229
+ },
230
+ ];
231
+ export function getAudiencesForRiskLevel(level) {
232
+ switch (level) {
233
+ case "unacceptable":
234
+ return ["all", "prohibited"];
235
+ case "high":
236
+ return ["all", "high-annex-iii", "high-annex-i"];
237
+ case "limited":
238
+ return ["all", "limited"];
239
+ case "minimal":
240
+ return ["all", "minimal"];
241
+ }
242
+ }
243
+ export function getNextDeadline() {
244
+ const today = new Date().toISOString().slice(0, 10);
245
+ const upcoming = EU_AI_ACT_TIMELINE.filter((p) => p.isoDate > today).sort((a, b) => a.isoDate.localeCompare(b.isoDate));
246
+ return upcoming[0] ?? null;
247
+ }
248
+ export function getTimelineForRiskLevel(riskLevel) {
249
+ const audiences = getAudiencesForRiskLevel(riskLevel);
250
+ return EU_AI_ACT_TIMELINE.filter((phase) => phase.obligations.some((o) => o.audiences.some((a) => audiences.includes(a)))).map((phase) => ({
251
+ ...phase,
252
+ status: getDeadlineStatus(phase.isoDate),
253
+ }));
254
+ }
255
+ /**
256
+ * Filter timeline phases by explicit audience list.
257
+ * Use this when the caller has audiences that don't map to a RiskLevel
258
+ * (e.g., GPAI providers need ["all", "gpai"]).
259
+ */
260
+ export function getTimelineForAudiences(audiences) {
261
+ return EU_AI_ACT_TIMELINE.filter((phase) => phase.obligations.some((o) => o.audiences.some((a) => audiences.includes(a)))).map((phase) => ({
262
+ ...phase,
263
+ status: getDeadlineStatus(phase.isoDate),
264
+ }));
265
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Compliance Gap Analysis Generator
3
+ * Produces prioritized action plans from EU AI Act assessment results.
4
+ *
5
+ * Supports:
6
+ * - Annex III high-risk assessment → mandatory Art. 9–15 + Art. 43 + Art. 71 obligations
7
+ * - GPAI compliance assessment → gaps directly from GPAIComplianceResult flags
8
+ *
9
+ * IMPORTANT: This module provides technical orientation, not legal advice.
10
+ */
11
+ import type { RiskAssessment } from "../types";
12
+ import type { GPAIComplianceResult } from "./gpai-classifier";
13
+ /** Priority level for a compliance gap action */
14
+ export type GapPriority = "critical" | "high" | "medium";
15
+ /** A single compliance gap with actionable remediation steps */
16
+ export interface GapAction {
17
+ id: string;
18
+ title: string;
19
+ description: string;
20
+ articleRef: string;
21
+ priority: GapPriority;
22
+ status: "missing" | "partial";
23
+ steps: string[];
24
+ penaltyRef?: string;
25
+ }
26
+ /** Aggregated gap analysis result */
27
+ export interface GapAnalysisResult {
28
+ totalGaps: number;
29
+ criticalCount: number;
30
+ highCount: number;
31
+ mediumCount: number;
32
+ actions: GapAction[];
33
+ }
34
+ /**
35
+ * Generate a gap analysis action plan from an Annex III risk assessment.
36
+ *
37
+ * - unacceptable → Art. 5 prohibition action (critical)
38
+ * - high → all mandatory Art. 9–15 + Art. 43 + Art. 71 + Art. 72 obligations
39
+ * - limited → Art. 50 transparency obligations
40
+ * - minimal → no gaps
41
+ */
42
+ export declare function generateAnnexIIIGapAnalysis(assessment: RiskAssessment): GapAnalysisResult;
43
+ /**
44
+ * Generate a gap analysis action plan from a GPAI compliance result.
45
+ * Only generates actions for obligations flagged as missing or partial.
46
+ */
47
+ export declare function generateGPAIGapAnalysis(result: GPAIComplianceResult): GapAnalysisResult;
48
+ //# sourceMappingURL=gap-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gap-analysis.d.ts","sourceRoot":"","sources":["../../src/legal-checks/gap-analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAsB,MAAM,mBAAmB,CAAC;AAElF,iDAAiD;AACjD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEzD,gEAAgE;AAChE,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,CAAC;IACtB,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qCAAqC;AACrC,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AA8TD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,cAAc,GAAG,iBAAiB,CAuEzF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,iBAAiB,CAcvF"}