@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.
- package/.turbo/turbo-build.log +4 -0
- package/LICENSE +21 -0
- package/dist/fairness-metrics.d.ts +65 -0
- package/dist/fairness-metrics.d.ts.map +1 -0
- package/dist/fairness-metrics.js +394 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/inference/browser-inference.d.ts +60 -0
- package/dist/inference/browser-inference.d.ts.map +1 -0
- package/dist/inference/browser-inference.js +221 -0
- package/dist/inference/capability-detection.d.ts +183 -0
- package/dist/inference/capability-detection.d.ts.map +1 -0
- package/dist/inference/capability-detection.js +552 -0
- package/dist/inference/index.d.ts +43 -0
- package/dist/inference/index.d.ts.map +1 -0
- package/dist/inference/index.js +97 -0
- package/dist/inference/inference-factory.d.ts +73 -0
- package/dist/inference/inference-factory.d.ts.map +1 -0
- package/dist/inference/inference-factory.js +175 -0
- package/dist/inference/ollama-client.d.ts +114 -0
- package/dist/inference/ollama-client.d.ts.map +1 -0
- package/dist/inference/ollama-client.js +386 -0
- package/dist/legal-checks/annex-iv-report.d.ts +131 -0
- package/dist/legal-checks/annex-iv-report.d.ts.map +1 -0
- package/dist/legal-checks/annex-iv-report.js +62 -0
- package/dist/legal-checks/bias-metrics.d.ts +162 -0
- package/dist/legal-checks/bias-metrics.d.ts.map +1 -0
- package/dist/legal-checks/bias-metrics.js +408 -0
- package/dist/legal-checks/data-governance.d.ts +30 -0
- package/dist/legal-checks/data-governance.d.ts.map +1 -0
- package/dist/legal-checks/data-governance.js +99 -0
- package/dist/legal-checks/human-oversight-logging.d.ts +27 -0
- package/dist/legal-checks/human-oversight-logging.d.ts.map +1 -0
- package/dist/legal-checks/human-oversight-logging.js +106 -0
- package/dist/legal-checks/index.d.ts +13 -0
- package/dist/legal-checks/index.d.ts.map +1 -0
- package/dist/legal-checks/index.js +6 -0
- package/dist/legal-checks/risk-classifier.d.ts +35 -0
- package/dist/legal-checks/risk-classifier.d.ts.map +1 -0
- package/dist/legal-checks/risk-classifier.js +234 -0
- package/dist/legal-checks/robustness-transparency.d.ts +45 -0
- package/dist/legal-checks/robustness-transparency.d.ts.map +1 -0
- package/dist/legal-checks/robustness-transparency.js +111 -0
- package/dist/metrics/crows-pairs-bias.d.ts +41 -0
- package/dist/metrics/crows-pairs-bias.d.ts.map +1 -0
- package/dist/metrics/crows-pairs-bias.js +172 -0
- package/dist/metrics/index.d.ts +6 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +5 -0
- package/dist/metrics/stereotype-bias.d.ts +89 -0
- package/dist/metrics/stereotype-bias.d.ts.map +1 -0
- package/dist/metrics/stereotype-bias.js +157 -0
- package/dist/risk-engine.d.ts +23 -0
- package/dist/risk-engine.d.ts.map +1 -0
- package/dist/risk-engine.js +451 -0
- package/dist/types.d.ts +131 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/package.json +28 -0
- package/src/fairness-metrics.ts +498 -0
- package/src/index.ts +150 -0
- package/src/inference/browser-inference.ts +258 -0
- package/src/inference/capability-detection.ts +714 -0
- package/src/inference/index.ts +156 -0
- package/src/inference/inference-factory.ts +222 -0
- package/src/inference/ollama-client.ts +514 -0
- package/src/inference/transformers.d.ts +62 -0
- package/src/legal-checks/annex-iv-report.ts +157 -0
- package/src/legal-checks/bias-metrics.ts +590 -0
- package/src/legal-checks/data-governance.ts +148 -0
- package/src/legal-checks/human-oversight-logging.ts +135 -0
- package/src/legal-checks/index.ts +55 -0
- package/src/legal-checks/risk-classifier.ts +285 -0
- package/src/legal-checks/robustness-transparency.ts +162 -0
- package/src/metrics/crows-pairs-bias.ts +245 -0
- package/src/metrics/index.ts +22 -0
- package/src/metrics/stereotype-bias.ts +267 -0
- package/src/risk-engine.ts +525 -0
- package/src/types.ts +154 -0
- package/tests/annex-iv-report.test.ts +323 -0
- package/tests/crows-pairs-bias.test.ts +342 -0
- package/tests/fairness-metrics.test.ts +187 -0
- package/tests/integration/bias-calculation.integration.test.ts +688 -0
- package/tests/legal-checks.test.ts +53 -0
- package/tests/ollama-client.test.ts +427 -0
- package/tests/risk-engine.test.ts +149 -0
- package/tsconfig.json +11 -0
- 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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"}
|