@euconform/core 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.
Files changed (89) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/LICENSE +21 -0
  3. package/dist/fairness-metrics.d.ts +65 -0
  4. package/dist/fairness-metrics.d.ts.map +1 -0
  5. package/dist/fairness-metrics.js +394 -0
  6. package/dist/index.d.ts +14 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +17 -0
  9. package/dist/inference/browser-inference.d.ts +60 -0
  10. package/dist/inference/browser-inference.d.ts.map +1 -0
  11. package/dist/inference/browser-inference.js +221 -0
  12. package/dist/inference/capability-detection.d.ts +183 -0
  13. package/dist/inference/capability-detection.d.ts.map +1 -0
  14. package/dist/inference/capability-detection.js +552 -0
  15. package/dist/inference/index.d.ts +43 -0
  16. package/dist/inference/index.d.ts.map +1 -0
  17. package/dist/inference/index.js +97 -0
  18. package/dist/inference/inference-factory.d.ts +73 -0
  19. package/dist/inference/inference-factory.d.ts.map +1 -0
  20. package/dist/inference/inference-factory.js +175 -0
  21. package/dist/inference/ollama-client.d.ts +114 -0
  22. package/dist/inference/ollama-client.d.ts.map +1 -0
  23. package/dist/inference/ollama-client.js +386 -0
  24. package/dist/legal-checks/annex-iv-report.d.ts +131 -0
  25. package/dist/legal-checks/annex-iv-report.d.ts.map +1 -0
  26. package/dist/legal-checks/annex-iv-report.js +62 -0
  27. package/dist/legal-checks/bias-metrics.d.ts +162 -0
  28. package/dist/legal-checks/bias-metrics.d.ts.map +1 -0
  29. package/dist/legal-checks/bias-metrics.js +408 -0
  30. package/dist/legal-checks/data-governance.d.ts +30 -0
  31. package/dist/legal-checks/data-governance.d.ts.map +1 -0
  32. package/dist/legal-checks/data-governance.js +99 -0
  33. package/dist/legal-checks/human-oversight-logging.d.ts +27 -0
  34. package/dist/legal-checks/human-oversight-logging.d.ts.map +1 -0
  35. package/dist/legal-checks/human-oversight-logging.js +106 -0
  36. package/dist/legal-checks/index.d.ts +13 -0
  37. package/dist/legal-checks/index.d.ts.map +1 -0
  38. package/dist/legal-checks/index.js +6 -0
  39. package/dist/legal-checks/risk-classifier.d.ts +35 -0
  40. package/dist/legal-checks/risk-classifier.d.ts.map +1 -0
  41. package/dist/legal-checks/risk-classifier.js +234 -0
  42. package/dist/legal-checks/robustness-transparency.d.ts +45 -0
  43. package/dist/legal-checks/robustness-transparency.d.ts.map +1 -0
  44. package/dist/legal-checks/robustness-transparency.js +111 -0
  45. package/dist/metrics/crows-pairs-bias.d.ts +41 -0
  46. package/dist/metrics/crows-pairs-bias.d.ts.map +1 -0
  47. package/dist/metrics/crows-pairs-bias.js +172 -0
  48. package/dist/metrics/index.d.ts +6 -0
  49. package/dist/metrics/index.d.ts.map +1 -0
  50. package/dist/metrics/index.js +5 -0
  51. package/dist/metrics/stereotype-bias.d.ts +89 -0
  52. package/dist/metrics/stereotype-bias.d.ts.map +1 -0
  53. package/dist/metrics/stereotype-bias.js +157 -0
  54. package/dist/risk-engine.d.ts +23 -0
  55. package/dist/risk-engine.d.ts.map +1 -0
  56. package/dist/risk-engine.js +451 -0
  57. package/dist/types.d.ts +131 -0
  58. package/dist/types.d.ts.map +1 -0
  59. package/dist/types.js +5 -0
  60. package/package.json +28 -0
  61. package/src/fairness-metrics.ts +498 -0
  62. package/src/index.ts +150 -0
  63. package/src/inference/browser-inference.ts +258 -0
  64. package/src/inference/capability-detection.ts +714 -0
  65. package/src/inference/index.ts +156 -0
  66. package/src/inference/inference-factory.ts +222 -0
  67. package/src/inference/ollama-client.ts +514 -0
  68. package/src/inference/transformers.d.ts +62 -0
  69. package/src/legal-checks/annex-iv-report.ts +157 -0
  70. package/src/legal-checks/bias-metrics.ts +590 -0
  71. package/src/legal-checks/data-governance.ts +148 -0
  72. package/src/legal-checks/human-oversight-logging.ts +135 -0
  73. package/src/legal-checks/index.ts +55 -0
  74. package/src/legal-checks/risk-classifier.ts +285 -0
  75. package/src/legal-checks/robustness-transparency.ts +162 -0
  76. package/src/metrics/crows-pairs-bias.ts +245 -0
  77. package/src/metrics/index.ts +22 -0
  78. package/src/metrics/stereotype-bias.ts +267 -0
  79. package/src/risk-engine.ts +525 -0
  80. package/src/types.ts +154 -0
  81. package/tests/annex-iv-report.test.ts +323 -0
  82. package/tests/crows-pairs-bias.test.ts +342 -0
  83. package/tests/fairness-metrics.test.ts +187 -0
  84. package/tests/integration/bias-calculation.integration.test.ts +688 -0
  85. package/tests/legal-checks.test.ts +53 -0
  86. package/tests/ollama-client.test.ts +427 -0
  87. package/tests/risk-engine.test.ts +149 -0
  88. package/tsconfig.json +11 -0
  89. package/vitest.config.ts +17 -0
@@ -0,0 +1,221 @@
1
+ /**
2
+ * Browser-based inference using transformers.js
3
+ * For small models (≤3B params) that can run via WebGPU
4
+ *
5
+ * STRICT MODE: Real inference only. No demo data.
6
+ */
7
+ // Supported models for browser inference
8
+ export const BROWSER_MODELS = [
9
+ {
10
+ id: "Xenova/phi-3-mini-4k-instruct",
11
+ name: "Phi-3 Mini",
12
+ size: "3.8B",
13
+ supported: true,
14
+ },
15
+ {
16
+ id: "Xenova/Phi-3.5-mini-instruct",
17
+ name: "Phi-3.5 Mini",
18
+ size: "3.8B",
19
+ supported: true,
20
+ },
21
+ {
22
+ id: "Xenova/gpt2",
23
+ name: "GPT-2",
24
+ size: "124M",
25
+ supported: true,
26
+ },
27
+ {
28
+ id: "Xenova/distilgpt2",
29
+ name: "DistilGPT-2",
30
+ size: "82M",
31
+ supported: true,
32
+ },
33
+ ];
34
+ /**
35
+ * Check if WebGPU is available in the browser
36
+ */
37
+ export async function checkWebGPU() {
38
+ if (typeof navigator === "undefined")
39
+ return false;
40
+ if (typeof window === "undefined")
41
+ return false;
42
+ try {
43
+ // Check for WebGPU support
44
+ const gpu = navigator.gpu;
45
+ if (!gpu)
46
+ return false;
47
+ // Try to get adapter
48
+ const adapter = await gpu.requestAdapter();
49
+ return adapter !== null;
50
+ }
51
+ catch {
52
+ return false;
53
+ }
54
+ }
55
+ /**
56
+ * Check if transformers.js is available
57
+ */
58
+ export async function checkTransformersAvailable() {
59
+ try {
60
+ // Try dynamic import - this will fail if package not installed
61
+ await import("@xenova/transformers");
62
+ return true;
63
+ }
64
+ catch {
65
+ return false;
66
+ }
67
+ }
68
+ /**
69
+ * Browser inference engine using transformers.js
70
+ * STRICT MODE: Throws error if package not installed.
71
+ */
72
+ export class BrowserInference {
73
+ modelId;
74
+ model = null;
75
+ tokenizer = null;
76
+ pipeline = null; // Keep pipeline for generation
77
+ loadingPromise = null;
78
+ loadError = null;
79
+ statusCallback = null;
80
+ constructor(modelId = "Xenova/distilgpt2", statusCallback = null) {
81
+ this.modelId = modelId;
82
+ this.statusCallback = statusCallback;
83
+ }
84
+ /**
85
+ * Check if browser inference is available
86
+ */
87
+ async isAvailable() {
88
+ const hasTransformers = await checkTransformersAvailable();
89
+ return hasTransformers;
90
+ }
91
+ /**
92
+ * Load the model (lazy loading)
93
+ * Handles concurrency with loadingPromise
94
+ */
95
+ async load() {
96
+ if (this.model && this.tokenizer)
97
+ return;
98
+ if (this.loadingPromise)
99
+ return this.loadingPromise;
100
+ if (this.loadError)
101
+ throw this.loadError;
102
+ this.loadingPromise = this.performLoad().finally(() => {
103
+ this.loadingPromise = null;
104
+ });
105
+ return this.loadingPromise;
106
+ }
107
+ async performLoad() {
108
+ if (this.statusCallback)
109
+ this.statusCallback("loading");
110
+ try {
111
+ const { AutoTokenizer, AutoModelForCausalLM, pipeline } = await import("@xenova/transformers");
112
+ const hasWebGPU = await checkWebGPU();
113
+ const device = hasWebGPU ? "webgpu" : "cpu";
114
+ if (this.statusCallback)
115
+ this.statusCallback("loading-tokenizer");
116
+ this.tokenizer = await AutoTokenizer.from_pretrained(this.modelId);
117
+ if (this.statusCallback)
118
+ this.statusCallback("loading-model");
119
+ // biome-ignore lint/suspicious/noExplicitAny: library internal
120
+ this.model = await AutoModelForCausalLM.from_pretrained(this.modelId, {
121
+ device,
122
+ quantized: true,
123
+ });
124
+ if (this.statusCallback)
125
+ this.statusCallback("loading-pipeline");
126
+ // biome-ignore lint/suspicious/noExplicitAny: library internal
127
+ this.pipeline = await pipeline("text-generation", this.modelId, {
128
+ device,
129
+ model: this.model,
130
+ tokenizer: this.tokenizer,
131
+ });
132
+ if (this.statusCallback)
133
+ this.statusCallback("ready");
134
+ }
135
+ catch (err) {
136
+ this.loadError = err instanceof Error ? err : new Error(String(err));
137
+ if (this.statusCallback)
138
+ this.statusCallback("error");
139
+ throw this.loadError;
140
+ }
141
+ }
142
+ /**
143
+ * Generate text
144
+ */
145
+ async generate(prompt, maxTokens = 50) {
146
+ await this.load();
147
+ if (!this.pipeline) {
148
+ throw new Error("Model not loaded");
149
+ }
150
+ // biome-ignore lint/suspicious/noExplicitAny: library internal
151
+ const result = await this.pipeline(prompt, {
152
+ max_new_tokens: maxTokens,
153
+ temperature: 0.7,
154
+ do_sample: true,
155
+ });
156
+ return result[0]?.generated_text || "";
157
+ }
158
+ /**
159
+ * Calculate Log-Probability for a given text
160
+ * This is the "Gold Standard" for bias testing.
161
+ * We calculate the loss (negative log likelihood) of the text.
162
+ */
163
+ async getLogProb(text) {
164
+ await this.load();
165
+ if (!this.tokenizer || !this.model) {
166
+ throw new Error("Model not loaded");
167
+ }
168
+ // biome-ignore lint/suspicious/noExplicitAny: internal transformers.js types
169
+ const inputs = await this.tokenizer(text, { return_tensors: "pt" });
170
+ const inputIds = inputs.input_ids;
171
+ // biome-ignore lint/suspicious/noExplicitAny: internal transformers.js types
172
+ const outputs = await this.model(inputs);
173
+ const logits = outputs.logits;
174
+ // 3. Compute Log Likelihood
175
+ // We want to calculate P(text) = P(t1) * P(t2|t1) * ...
176
+ // LogProb = sum( log( P(ti | t_<i) ) )
177
+ // logits shape: [batch_size, seq_len, vocab_size]
178
+ // inputIds shape: [batch_size, seq_len]
179
+ // We are interested in the probability of the *next* token given previous tokens.
180
+ // So we look at logits[0, i, :] to predict inputIds[0, i+1]
181
+ const data = logits.data; // Float32Array
182
+ const dims = logits.dims; // [batch, seq, vocab]
183
+ const vocabSize = dims[2];
184
+ const seqLen = dims[1];
185
+ let totalLogProb = 0;
186
+ // Helper to get logit value
187
+ const getLogit = (seqIdx, vocabIdx) => {
188
+ return data[seqIdx * vocabSize + vocabIdx];
189
+ };
190
+ // Helper for softmax/logsoftmax
191
+ // We only need the log_prob of the target token
192
+ // log_softmax(x_i) = x_i - log(sum(exp(x_j)))
193
+ // To avoid overflow: x_i - max(x) - log(sum(exp(x_j - max(x))))
194
+ for (let i = 0; i < seqLen - 1; i++) {
195
+ const targetTokenId = Number(inputIds.data[i + 1]);
196
+ // Calculate max logit for numerical stability
197
+ let maxLogit = Number.NEGATIVE_INFINITY;
198
+ for (let j = 0; j < vocabSize; j++) {
199
+ const val = getLogit(i, j);
200
+ if (val > maxLogit)
201
+ maxLogit = val;
202
+ }
203
+ // Calculate sum of exp
204
+ let sumExp = 0;
205
+ for (let j = 0; j < vocabSize; j++) {
206
+ sumExp += Math.exp(getLogit(i, j) - maxLogit);
207
+ }
208
+ const logSumExp = maxLogit + Math.log(sumExp);
209
+ const targetLogit = getLogit(i, targetTokenId);
210
+ const logProb = targetLogit - logSumExp;
211
+ totalLogProb += logProb;
212
+ }
213
+ return totalLogProb;
214
+ }
215
+ /**
216
+ * Get list of supported browser models
217
+ */
218
+ static getSupportedModels() {
219
+ return BROWSER_MODELS.filter((m) => m.supported);
220
+ }
221
+ }
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Model Capability Detection Service
3
+ * Real-time detection of model capabilities with smart caching
4
+ */
5
+ import type { BiasCalculationMethod } from "../types";
6
+ /**
7
+ * Detection status for model capabilities
8
+ */
9
+ export type CapabilityDetectionStatus = "detecting" | "available" | "unavailable" | "error";
10
+ /**
11
+ * Model capability information
12
+ */
13
+ export interface ModelCapability {
14
+ modelId: string;
15
+ engine: "browser" | "ollama";
16
+ method: BiasCalculationMethod;
17
+ status: CapabilityDetectionStatus;
18
+ lastTested?: string;
19
+ error?: string;
20
+ recommended?: boolean;
21
+ }
22
+ /**
23
+ * Model selection state for UI components
24
+ */
25
+ export interface ModelSelectionState {
26
+ models: ModelCapability[];
27
+ selectedModel?: string;
28
+ isLoading: boolean;
29
+ showExplanations: boolean;
30
+ }
31
+ /**
32
+ * Cache entry structure with expiration and version tracking
33
+ */
34
+ export interface CapabilityCacheEntry {
35
+ modelId: string;
36
+ capability: ModelCapability;
37
+ cachedAt: string;
38
+ expiresAt: string;
39
+ ollamaVersion?: string;
40
+ }
41
+ /**
42
+ * Detection progress tracking
43
+ */
44
+ export interface DetectionProgress {
45
+ total: number;
46
+ completed: number;
47
+ inProgress: string[];
48
+ }
49
+ /**
50
+ * User preferences for model selection
51
+ */
52
+ export interface UserPreferences {
53
+ showExplanations: boolean;
54
+ preferExactMethods: boolean;
55
+ hideUnavailableModels: boolean;
56
+ }
57
+ /**
58
+ * Enhanced model selection state with preferences
59
+ */
60
+ export interface EnhancedModelSelectionState extends ModelSelectionState {
61
+ detectionProgress: DetectionProgress;
62
+ userPreferences: UserPreferences;
63
+ lastRefresh: string;
64
+ }
65
+ /**
66
+ * Service interface for capability detection
67
+ */
68
+ export interface CapabilityDetectionService {
69
+ detectAllCapabilities(): Promise<ModelCapability[]>;
70
+ detectModelCapability(modelId: string, engine: "browser" | "ollama"): Promise<ModelCapability>;
71
+ getCachedCapability(modelId: string): CapabilityCacheEntry | null;
72
+ setCachedCapability(capability: ModelCapability): void;
73
+ clearCache(): void;
74
+ refreshCapabilities(): Promise<ModelCapability[]>;
75
+ }
76
+ /**
77
+ * Implementation of capability detection service
78
+ */
79
+ export declare class DefaultCapabilityDetectionService implements CapabilityDetectionService {
80
+ private cache;
81
+ private readonly CACHE_DURATION_MS;
82
+ private readonly CACHE_KEY_PREFIX;
83
+ constructor();
84
+ /**
85
+ * Detect capabilities for all available models
86
+ * Includes browser inference and parallel Ollama model testing
87
+ */
88
+ detectAllCapabilities(): Promise<ModelCapability[]>;
89
+ /**
90
+ * Detect capability for a specific model
91
+ * Uses cache-first strategy with live fallback
92
+ */
93
+ detectModelCapability(modelId: string, engine: "browser" | "ollama"): Promise<ModelCapability>;
94
+ /**
95
+ * Get cached capability result
96
+ */
97
+ getCachedCapability(modelId: string): CapabilityCacheEntry | null;
98
+ /**
99
+ * Cache capability result with optional custom duration
100
+ */
101
+ setCachedCapability(capability: ModelCapability, durationMs?: number): void;
102
+ /**
103
+ * Clear all cached capabilities
104
+ */
105
+ clearCache(): void;
106
+ /**
107
+ * Refresh all capabilities by clearing cache and re-detecting
108
+ */
109
+ refreshCapabilities(): Promise<ModelCapability[]>;
110
+ /**
111
+ * Check if cache entry is still valid
112
+ */
113
+ protected isCacheValid(cacheEntry: CapabilityCacheEntry): boolean;
114
+ /**
115
+ * Load cache from localStorage
116
+ */
117
+ private loadCacheFromStorage;
118
+ /**
119
+ * Save cache entry to localStorage
120
+ */
121
+ private saveCacheToStorage;
122
+ /**
123
+ * Sort capabilities by recommendation score
124
+ */
125
+ protected sortByRecommendation(capabilities: ModelCapability[]): ModelCapability[];
126
+ /**
127
+ * Calculate recommendation score for a capability
128
+ */
129
+ protected getRecommendationScore(capability: ModelCapability): number;
130
+ }
131
+ /**
132
+ * Enhanced capability detection service with timeout and retry logic
133
+ */
134
+ export declare class EnhancedCapabilityDetectionService extends DefaultCapabilityDetectionService {
135
+ private readonly DETECTION_TIMEOUT_MS;
136
+ private readonly MAX_RETRIES;
137
+ private readonly RETRY_DELAY_BASE_MS;
138
+ /**
139
+ * Detect model capability with timeout and retry logic
140
+ */
141
+ detectModelCapability(modelId: string, engine: "browser" | "ollama"): Promise<ModelCapability>;
142
+ /**
143
+ * Detect Ollama capability with retry logic and exponential backoff
144
+ */
145
+ private detectOllamaCapabilityWithRetry;
146
+ /**
147
+ * Detect Ollama capability with timeout
148
+ */
149
+ private detectOllamaCapabilityWithTimeout;
150
+ /**
151
+ * Enhanced detectAllCapabilities with better error handling
152
+ */
153
+ detectAllCapabilities(): Promise<ModelCapability[]>;
154
+ /**
155
+ * Utility function to add timeout to any promise
156
+ */
157
+ private withTimeout;
158
+ /**
159
+ * Sleep utility for retry delays
160
+ */
161
+ private sleep;
162
+ /**
163
+ * Check if error should not be retried
164
+ */
165
+ private isNonRetryableError;
166
+ /**
167
+ * Check if error indicates Ollama is unavailable
168
+ */
169
+ private isOllamaUnavailableError;
170
+ /**
171
+ * Get user-friendly error message
172
+ */
173
+ private getErrorMessage;
174
+ /**
175
+ * Check if cache entry is still valid (override to handle version tracking)
176
+ */
177
+ protected isCacheValid(cacheEntry: CapabilityCacheEntry): boolean;
178
+ }
179
+ /**
180
+ * Create a capability detection service instance
181
+ */
182
+ export declare function createCapabilityDetectionService(): CapabilityDetectionService;
183
+ //# sourceMappingURL=capability-detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-detection.d.ts","sourceRoot":"","sources":["../../src/inference/capability-detection.ts"],"names":[],"mappings":"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"}