veto-sdk 2.8.6 → 2.9.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/README.md +26 -0
- package/dist/cli/templates.d.ts.map +1 -1
- package/dist/cli/templates.js +11 -0
- package/dist/cli/templates.js.map +1 -1
- package/dist/core/output-rule-detectors.d.ts +4 -0
- package/dist/core/output-rule-detectors.d.ts.map +1 -0
- package/dist/core/output-rule-detectors.js +11 -0
- package/dist/core/output-rule-detectors.js.map +1 -0
- package/dist/core/output-validator.d.ts +1 -0
- package/dist/core/output-validator.d.ts.map +1 -1
- package/dist/core/output-validator.js +8 -0
- package/dist/core/output-validator.js.map +1 -1
- package/dist/core/semantic-output-validator.d.ts +22 -0
- package/dist/core/semantic-output-validator.d.ts.map +1 -0
- package/dist/core/semantic-output-validator.js +380 -0
- package/dist/core/semantic-output-validator.js.map +1 -0
- package/dist/core/veto.d.ts +19 -0
- package/dist/core/veto.d.ts.map +1 -1
- package/dist/core/veto.js +108 -8
- package/dist/core/veto.js.map +1 -1
- package/dist/pii/nvidia-gliner-pii.d.ts +54 -0
- package/dist/pii/nvidia-gliner-pii.d.ts.map +1 -0
- package/dist/pii/nvidia-gliner-pii.js +227 -0
- package/dist/pii/nvidia-gliner-pii.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
export const NVIDIA_GLINER_PII_PROVIDER = 'nvidia-gliner-pii';
|
|
2
|
+
export const DEFAULT_NVIDIA_GLINER_PII_BASE_URL = 'https://integrate.api.nvidia.com/v1';
|
|
3
|
+
export const DEFAULT_NVIDIA_GLINER_PII_MODEL = 'nvidia/gliner-pii';
|
|
4
|
+
export const DEFAULT_NVIDIA_GLINER_PII_THRESHOLD = 0.45;
|
|
5
|
+
export const DEFAULT_NVIDIA_GLINER_PII_CHUNK_LENGTH = 384;
|
|
6
|
+
export const DEFAULT_NVIDIA_GLINER_PII_OVERLAP = 128;
|
|
7
|
+
export const DEFAULT_NVIDIA_GLINER_PII_FLAT_NER = false;
|
|
8
|
+
export const DEFAULT_NVIDIA_GLINER_PII_TIMEOUT_MS = 5000;
|
|
9
|
+
export const DEFAULT_NVIDIA_GLINER_PII_LABELS = [
|
|
10
|
+
'email',
|
|
11
|
+
'phone_number',
|
|
12
|
+
'ssn',
|
|
13
|
+
'credit_debit_card',
|
|
14
|
+
'cvv',
|
|
15
|
+
'account_number',
|
|
16
|
+
'bank_routing_number',
|
|
17
|
+
'tax_id',
|
|
18
|
+
'api_key',
|
|
19
|
+
'password',
|
|
20
|
+
'pin',
|
|
21
|
+
'http_cookie',
|
|
22
|
+
'first_name',
|
|
23
|
+
'last_name',
|
|
24
|
+
'street_address',
|
|
25
|
+
'city',
|
|
26
|
+
'state',
|
|
27
|
+
'postcode',
|
|
28
|
+
'date_of_birth',
|
|
29
|
+
'medical_record_number',
|
|
30
|
+
'health_plan_beneficiary_number',
|
|
31
|
+
'employee_id',
|
|
32
|
+
'customer_id',
|
|
33
|
+
'national_id',
|
|
34
|
+
'ipv4',
|
|
35
|
+
'ipv6',
|
|
36
|
+
'mac_address',
|
|
37
|
+
'url',
|
|
38
|
+
];
|
|
39
|
+
export class NvidiaGlinerPiiError extends Error {
|
|
40
|
+
code;
|
|
41
|
+
status;
|
|
42
|
+
constructor(message, code, status) {
|
|
43
|
+
super(message);
|
|
44
|
+
this.name = 'NvidiaGlinerPiiError';
|
|
45
|
+
this.code = code;
|
|
46
|
+
this.status = status;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export class NvidiaGlinerPiiClient {
|
|
50
|
+
provider = NVIDIA_GLINER_PII_PROVIDER;
|
|
51
|
+
model;
|
|
52
|
+
baseUrl;
|
|
53
|
+
threshold;
|
|
54
|
+
labels;
|
|
55
|
+
apiKey;
|
|
56
|
+
chunkLength;
|
|
57
|
+
overlap;
|
|
58
|
+
flatNer;
|
|
59
|
+
timeoutMs;
|
|
60
|
+
constructor(config) {
|
|
61
|
+
const apiKey = config.apiKey.trim();
|
|
62
|
+
if (apiKey.length === 0) {
|
|
63
|
+
throw new NvidiaGlinerPiiError('NVIDIA GLiNER PII API key is required', 'missing_api_key');
|
|
64
|
+
}
|
|
65
|
+
this.apiKey = apiKey;
|
|
66
|
+
this.baseUrl = (config.baseUrl ?? DEFAULT_NVIDIA_GLINER_PII_BASE_URL).replace(/\/$/, '');
|
|
67
|
+
this.model = config.model ?? DEFAULT_NVIDIA_GLINER_PII_MODEL;
|
|
68
|
+
this.threshold = normalizeNumber(config.threshold, DEFAULT_NVIDIA_GLINER_PII_THRESHOLD);
|
|
69
|
+
this.labels = normalizeLabels(config.labels, [...DEFAULT_NVIDIA_GLINER_PII_LABELS]);
|
|
70
|
+
this.chunkLength = normalizeInteger(config.chunkLength, DEFAULT_NVIDIA_GLINER_PII_CHUNK_LENGTH);
|
|
71
|
+
this.overlap = normalizeInteger(config.overlap, DEFAULT_NVIDIA_GLINER_PII_OVERLAP);
|
|
72
|
+
this.flatNer = config.flatNer ?? DEFAULT_NVIDIA_GLINER_PII_FLAT_NER;
|
|
73
|
+
this.timeoutMs = normalizeInteger(config.timeoutMs, DEFAULT_NVIDIA_GLINER_PII_TIMEOUT_MS);
|
|
74
|
+
}
|
|
75
|
+
async detect(text, options = {}) {
|
|
76
|
+
const labels = normalizeLabels(options.labels, this.labels);
|
|
77
|
+
const threshold = normalizeNumber(options.threshold, this.threshold);
|
|
78
|
+
const controller = new AbortController();
|
|
79
|
+
const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
80
|
+
try {
|
|
81
|
+
const response = await fetch(`${this.baseUrl}/chat/completions`, {
|
|
82
|
+
method: 'POST',
|
|
83
|
+
headers: {
|
|
84
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
85
|
+
'Content-Type': 'application/json',
|
|
86
|
+
},
|
|
87
|
+
body: JSON.stringify({
|
|
88
|
+
model: this.model,
|
|
89
|
+
messages: [{ role: 'user', content: text }],
|
|
90
|
+
labels,
|
|
91
|
+
threshold,
|
|
92
|
+
chunk_length: this.chunkLength,
|
|
93
|
+
overlap: this.overlap,
|
|
94
|
+
flat_ner: this.flatNer,
|
|
95
|
+
}),
|
|
96
|
+
signal: controller.signal,
|
|
97
|
+
});
|
|
98
|
+
if (!response.ok) {
|
|
99
|
+
throw new NvidiaGlinerPiiError(`NVIDIA GLiNER PII request failed with status ${response.status}`, 'http_error', response.status);
|
|
100
|
+
}
|
|
101
|
+
const payload = await parseResponseJson(response);
|
|
102
|
+
return this.parseEntities(payload, text);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
if (error instanceof NvidiaGlinerPiiError) {
|
|
106
|
+
throw error;
|
|
107
|
+
}
|
|
108
|
+
if (isAbortError(error)) {
|
|
109
|
+
throw new NvidiaGlinerPiiError('NVIDIA GLiNER PII request timed out', 'timeout');
|
|
110
|
+
}
|
|
111
|
+
throw new NvidiaGlinerPiiError('NVIDIA GLiNER PII response was malformed', 'malformed_response');
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
clearTimeout(timeout);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
parseEntities(payload, sourceText) {
|
|
118
|
+
const completion = payload;
|
|
119
|
+
const content = completion.choices?.[0]?.message?.content;
|
|
120
|
+
if (content === undefined || content === null) {
|
|
121
|
+
throw new NvidiaGlinerPiiError('NVIDIA GLiNER PII response was empty', 'empty_response');
|
|
122
|
+
}
|
|
123
|
+
const parsed = parseContent(content);
|
|
124
|
+
if (!Array.isArray(parsed.entities)) {
|
|
125
|
+
throw new NvidiaGlinerPiiError('NVIDIA GLiNER PII response was malformed', 'malformed_response');
|
|
126
|
+
}
|
|
127
|
+
return parsed.entities.flatMap((entity) => normalizeEntity(entity, sourceText));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
async function parseResponseJson(response) {
|
|
131
|
+
try {
|
|
132
|
+
return await response.json();
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
throw new NvidiaGlinerPiiError('NVIDIA GLiNER PII response was malformed', 'malformed_response');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function parseContent(content) {
|
|
139
|
+
if (typeof content === 'object' && content !== null) {
|
|
140
|
+
return content;
|
|
141
|
+
}
|
|
142
|
+
if (typeof content !== 'string' || content.trim().length === 0) {
|
|
143
|
+
throw new NvidiaGlinerPiiError('NVIDIA GLiNER PII response was empty', 'empty_response');
|
|
144
|
+
}
|
|
145
|
+
const trimmed = stripJsonFence(content.trim());
|
|
146
|
+
try {
|
|
147
|
+
return JSON.parse(trimmed);
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
const start = trimmed.indexOf('{');
|
|
151
|
+
const end = trimmed.lastIndexOf('}');
|
|
152
|
+
if (start === -1 || end <= start) {
|
|
153
|
+
throw new NvidiaGlinerPiiError('NVIDIA GLiNER PII response was malformed', 'malformed_response');
|
|
154
|
+
}
|
|
155
|
+
try {
|
|
156
|
+
return JSON.parse(trimmed.slice(start, end + 1));
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
throw new NvidiaGlinerPiiError('NVIDIA GLiNER PII response was malformed', 'malformed_response');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
function stripJsonFence(value) {
|
|
164
|
+
const match = /^```(?:json)?\s*([\s\S]*?)\s*```$/i.exec(value);
|
|
165
|
+
return match?.[1]?.trim() ?? value;
|
|
166
|
+
}
|
|
167
|
+
function normalizeEntity(entity, sourceText) {
|
|
168
|
+
if (!entity || typeof entity !== 'object') {
|
|
169
|
+
return [];
|
|
170
|
+
}
|
|
171
|
+
const raw = entity;
|
|
172
|
+
const label = typeof raw.label === 'string'
|
|
173
|
+
? raw.label
|
|
174
|
+
: typeof raw.suggested_label === 'string'
|
|
175
|
+
? raw.suggested_label
|
|
176
|
+
: undefined;
|
|
177
|
+
const start = normalizePosition(raw.start ?? raw.start_position);
|
|
178
|
+
const end = normalizePosition(raw.end ?? raw.end_position);
|
|
179
|
+
if (!label || start === null || end === null || end <= start) {
|
|
180
|
+
return [];
|
|
181
|
+
}
|
|
182
|
+
const boundedStart = Math.max(0, Math.min(sourceText.length, start));
|
|
183
|
+
const boundedEnd = Math.max(boundedStart, Math.min(sourceText.length, end));
|
|
184
|
+
if (boundedEnd <= boundedStart) {
|
|
185
|
+
return [];
|
|
186
|
+
}
|
|
187
|
+
const rawText = typeof raw.text === 'string'
|
|
188
|
+
? raw.text
|
|
189
|
+
: typeof raw.value === 'string'
|
|
190
|
+
? raw.value
|
|
191
|
+
: sourceText.slice(boundedStart, boundedEnd);
|
|
192
|
+
const score = typeof raw.score === 'number' && Number.isFinite(raw.score)
|
|
193
|
+
? raw.score
|
|
194
|
+
: undefined;
|
|
195
|
+
return [{
|
|
196
|
+
text: rawText,
|
|
197
|
+
label,
|
|
198
|
+
start: boundedStart,
|
|
199
|
+
end: boundedEnd,
|
|
200
|
+
score,
|
|
201
|
+
}];
|
|
202
|
+
}
|
|
203
|
+
function normalizePosition(value) {
|
|
204
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
return Math.trunc(value);
|
|
208
|
+
}
|
|
209
|
+
function normalizeLabels(value, fallback) {
|
|
210
|
+
const labels = value
|
|
211
|
+
?.filter((label) => typeof label === 'string')
|
|
212
|
+
.map((label) => label.trim())
|
|
213
|
+
.filter((label) => label.length > 0);
|
|
214
|
+
return labels && labels.length > 0 ? [...new Set(labels)] : fallback;
|
|
215
|
+
}
|
|
216
|
+
function normalizeNumber(value, fallback) {
|
|
217
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : fallback;
|
|
218
|
+
}
|
|
219
|
+
function normalizeInteger(value, fallback) {
|
|
220
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0
|
|
221
|
+
? Math.trunc(value)
|
|
222
|
+
: fallback;
|
|
223
|
+
}
|
|
224
|
+
function isAbortError(error) {
|
|
225
|
+
return error instanceof Error && error.name === 'AbortError';
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=nvidia-gliner-pii.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nvidia-gliner-pii.js","sourceRoot":"","sources":["../../src/pii/nvidia-gliner-pii.ts"],"names":[],"mappings":"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"}
|