@agentix-e/nl2spel 1.1.1 → 1.1.2
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 +8 -2
- package/dist/context/schema-formatter.js +1 -1
- package/dist/context/schema-formatter.js.map +1 -1
- package/dist/engine/nl2spel-engine.d.ts.map +1 -1
- package/dist/engine/nl2spel-engine.js +2 -4
- package/dist/engine/nl2spel-engine.js.map +1 -1
- package/dist/pattern/builtin-patterns.d.ts +1 -1
- package/dist/pattern/builtin-patterns.js +1 -1
- package/dist/pattern/pattern-matcher.d.ts.map +1 -1
- package/dist/pattern/pattern-matcher.js +1 -1
- package/dist/pattern/pattern-matcher.js.map +1 -1
- package/dist/provider/provider-registry.js +3 -3
- package/dist/provider/provider-registry.js.map +1 -1
- package/dist/strategy/strategy-router.d.ts.map +1 -1
- package/dist/strategy/strategy-router.js +3 -3
- package/dist/strategy/strategy-router.js.map +1 -1
- package/dist/template/intent-classifier.js +1 -1
- package/dist/template/intent-classifier.js.map +1 -1
- package/dist/template/prompts/prompt-builder.js +1 -1
- package/dist/template/prompts/prompt-builder.js.map +1 -1
- package/dist/template/template-engine.js +3 -3
- package/dist/template/template-engine.js.map +1 -1
- package/dist/validation/self-correction-loop.d.ts.map +1 -1
- package/dist/validation/self-correction-loop.js +2 -2
- package/dist/validation/self-correction-loop.js.map +1 -1
- package/package.json +1 -1
- package/dist/__tests__/auto-fixer.test.d.ts +0 -2
- package/dist/__tests__/auto-fixer.test.d.ts.map +0 -1
- package/dist/__tests__/auto-fixer.test.js +0 -285
- package/dist/__tests__/auto-fixer.test.js.map +0 -1
- package/dist/__tests__/chinese-number-parser.test.d.ts +0 -2
- package/dist/__tests__/chinese-number-parser.test.d.ts.map +0 -1
- package/dist/__tests__/chinese-number-parser.test.js +0 -106
- package/dist/__tests__/chinese-number-parser.test.js.map +0 -1
- package/dist/__tests__/context-extractor.test.d.ts +0 -2
- package/dist/__tests__/context-extractor.test.d.ts.map +0 -1
- package/dist/__tests__/context-extractor.test.js +0 -347
- package/dist/__tests__/context-extractor.test.js.map +0 -1
- package/dist/__tests__/coverage-gaps.test.d.ts +0 -2
- package/dist/__tests__/coverage-gaps.test.d.ts.map +0 -1
- package/dist/__tests__/coverage-gaps.test.js +0 -578
- package/dist/__tests__/coverage-gaps.test.js.map +0 -1
- package/dist/__tests__/intent-classifier.test.d.ts +0 -2
- package/dist/__tests__/intent-classifier.test.d.ts.map +0 -1
- package/dist/__tests__/intent-classifier.test.js +0 -384
- package/dist/__tests__/intent-classifier.test.js.map +0 -1
- package/dist/__tests__/nl2spel-engine.test.d.ts +0 -2
- package/dist/__tests__/nl2spel-engine.test.d.ts.map +0 -1
- package/dist/__tests__/nl2spel-engine.test.js +0 -344
- package/dist/__tests__/nl2spel-engine.test.js.map +0 -1
- package/dist/__tests__/pattern-matcher.test.d.ts +0 -2
- package/dist/__tests__/pattern-matcher.test.d.ts.map +0 -1
- package/dist/__tests__/pattern-matcher.test.js +0 -754
- package/dist/__tests__/pattern-matcher.test.js.map +0 -1
- package/dist/__tests__/prompt-builder.test.d.ts +0 -2
- package/dist/__tests__/prompt-builder.test.d.ts.map +0 -1
- package/dist/__tests__/prompt-builder.test.js +0 -99
- package/dist/__tests__/prompt-builder.test.js.map +0 -1
- package/dist/__tests__/provider-registry.test.d.ts +0 -2
- package/dist/__tests__/provider-registry.test.d.ts.map +0 -1
- package/dist/__tests__/provider-registry.test.js +0 -240
- package/dist/__tests__/provider-registry.test.js.map +0 -1
- package/dist/__tests__/schema-formatter.test.d.ts +0 -2
- package/dist/__tests__/schema-formatter.test.d.ts.map +0 -1
- package/dist/__tests__/schema-formatter.test.js +0 -298
- package/dist/__tests__/schema-formatter.test.js.map +0 -1
- package/dist/__tests__/self-correction-loop.test.d.ts +0 -2
- package/dist/__tests__/self-correction-loop.test.d.ts.map +0 -1
- package/dist/__tests__/self-correction-loop.test.js +0 -253
- package/dist/__tests__/self-correction-loop.test.js.map +0 -1
- package/dist/__tests__/strategy-router.test.d.ts +0 -2
- package/dist/__tests__/strategy-router.test.d.ts.map +0 -1
- package/dist/__tests__/strategy-router.test.js +0 -493
- package/dist/__tests__/strategy-router.test.js.map +0 -1
- package/dist/__tests__/template-engine.test.d.ts +0 -2
- package/dist/__tests__/template-engine.test.d.ts.map +0 -1
- package/dist/__tests__/template-engine.test.js +0 -367
- package/dist/__tests__/template-engine.test.js.map +0 -1
- package/dist/__tests__/validation-pipeline.test.d.ts +0 -2
- package/dist/__tests__/validation-pipeline.test.d.ts.map +0 -1
- package/dist/__tests__/validation-pipeline.test.js +0 -262
- package/dist/__tests__/validation-pipeline.test.js.map +0 -1
|
@@ -1,578 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
-
import { ContextExtractor } from '../context/context-extractor.js';
|
|
3
|
-
import { IntentClassifier } from '../template/intent-classifier.js';
|
|
4
|
-
import { TemplateEngine } from '../template/template-engine.js';
|
|
5
|
-
import { SelfCorrectionLoop } from '../validation/self-correction-loop.js';
|
|
6
|
-
import { ValidationPipeline } from '../validation/validation-pipeline.js';
|
|
7
|
-
import { PatternMatcher } from '../pattern/pattern-matcher.js';
|
|
8
|
-
import { ProviderRegistry } from '../provider/provider-registry.js';
|
|
9
|
-
import { ChineseNumberParser } from '../utils/chinese-number-parser.js';
|
|
10
|
-
import { NLIntent } from '../template/nl-intent.js';
|
|
11
|
-
// ================================================================
|
|
12
|
-
// Coverage Gap Fillers — targeted tests for remaining branch gaps
|
|
13
|
-
// ================================================================
|
|
14
|
-
describe('Coverage Gap Fillers', () => {
|
|
15
|
-
// ===== context-extractor.ts: line 65 (value === undefined branch) =====
|
|
16
|
-
describe('context-extractor: undefined value edge case', () => {
|
|
17
|
-
it('inferSpelType returns string for undefined value', () => {
|
|
18
|
-
const extractor = new ContextExtractor();
|
|
19
|
-
const schema = extractor.extract({
|
|
20
|
-
rootObject: { explicitlyUndefined: undefined },
|
|
21
|
-
});
|
|
22
|
-
expect(schema.root.fields.explicitlyUndefined.type).toBe('string');
|
|
23
|
-
// undefined !== null, so nullable defaults to false
|
|
24
|
-
});
|
|
25
|
-
// === context-extractor.ts: lines 77-78 catch block ===
|
|
26
|
-
it('handles throwing property accessor gracefully', () => {
|
|
27
|
-
const extractor = new ContextExtractor();
|
|
28
|
-
const throwingObj = Object.create(null);
|
|
29
|
-
Object.defineProperty(throwingObj, 'dangerous', {
|
|
30
|
-
get() {
|
|
31
|
-
throw new Error('Access denied');
|
|
32
|
-
},
|
|
33
|
-
enumerable: true,
|
|
34
|
-
configurable: true,
|
|
35
|
-
});
|
|
36
|
-
Object.defineProperty(throwingObj, 'safe', {
|
|
37
|
-
value: 42,
|
|
38
|
-
enumerable: true,
|
|
39
|
-
});
|
|
40
|
-
const schema = extractor.extract({ rootObject: throwingObj });
|
|
41
|
-
// 'safe' should be extracted normally, 'dangerous' should be silently skipped
|
|
42
|
-
expect(schema.root.fields.safe).toBeDefined();
|
|
43
|
-
expect(schema.root.fields.safe.type).toBe('number');
|
|
44
|
-
expect(schema.root.fields.dangerous).toBeUndefined();
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
// ===== context-extractor.ts: line 114 (nullable default false) =====
|
|
48
|
-
describe('context-extractor: nullable defaults', () => {
|
|
49
|
-
it('variable without nullable field defaults to false', () => {
|
|
50
|
-
const extractor = new ContextExtractor();
|
|
51
|
-
const schema = extractor.extract({
|
|
52
|
-
variables: {
|
|
53
|
-
simpleVar: { type: 'string' },
|
|
54
|
-
},
|
|
55
|
-
});
|
|
56
|
-
expect(schema.variables.simpleVar.nullable).toBe(false);
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
// ===== intent-classifier.ts: lines 210-215 (normalize pipeline) =====
|
|
60
|
-
describe('intent-classifier: normalize pipeline coverage', () => {
|
|
61
|
-
const classifier = new IntentClassifier();
|
|
62
|
-
it('converts full-width parentheses to half-width', () => {
|
|
63
|
-
// Full-width ( and ) U+FF08, U+FF09
|
|
64
|
-
const result = classifier.classify('(金额)');
|
|
65
|
-
expect(result.intents.length).toBeGreaterThan(0);
|
|
66
|
-
});
|
|
67
|
-
it('converts full-width letters to half-width', () => {
|
|
68
|
-
// Full-width A-Z: U+FF21-U+FF3A, a-z: U+FF41-U+FF5A
|
|
69
|
-
const result = classifier.classify('ABC amount');
|
|
70
|
-
expect(result.intents.length).toBeGreaterThan(0);
|
|
71
|
-
});
|
|
72
|
-
it('normalizes multiple whitespace to single space', () => {
|
|
73
|
-
const result = classifier.classify('amount > 500');
|
|
74
|
-
expect(result.operators).toContain('>');
|
|
75
|
-
});
|
|
76
|
-
it('lowercases input for keyword matching', () => {
|
|
77
|
-
const result = classifier.classify('AMOUNT > 500');
|
|
78
|
-
// 'AMOUNT' lowercased → 'amount' which is a keyword
|
|
79
|
-
// Note: the normalize lowercases but '>' comparison should still be detected
|
|
80
|
-
expect(result.operators.length).toBeGreaterThan(0);
|
|
81
|
-
});
|
|
82
|
-
it('full-width digits converted to half-width', () => {
|
|
83
|
-
const result = classifier.classify('amount > 500');
|
|
84
|
-
// 5 (U+FF15) → 5 (U+0035) after normalize
|
|
85
|
-
// Entity extractor uses ascii digit pattern so may not match, but normalize succeeds
|
|
86
|
-
expect(result.operators).toContain('>');
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
// ===== template-engine.ts: entityCount.max path =====
|
|
90
|
-
describe('template-engine: entityCount path coverage', () => {
|
|
91
|
-
it('template generation works with minimal entities', () => {
|
|
92
|
-
const engine = new TemplateEngine();
|
|
93
|
-
const intent = {
|
|
94
|
-
primaryIntent: 'COMPARISON',
|
|
95
|
-
intents: [{ intent: 'COMPARISON', confidence: 0.9 }],
|
|
96
|
-
entities: [{ text: '1000', type: 'value', position: { start: 4, end: 8 } }],
|
|
97
|
-
operators: ['>'],
|
|
98
|
-
logicalConnectors: [],
|
|
99
|
-
complexity: 10,
|
|
100
|
-
};
|
|
101
|
-
const result = engine.generate('amount > 1000', intent);
|
|
102
|
-
expect(result).not.toBeNull();
|
|
103
|
-
if (result) {
|
|
104
|
-
expect(result.expression).toContain('>');
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
it('template with all null context and empty entities still produces result', () => {
|
|
108
|
-
const engine = new TemplateEngine();
|
|
109
|
-
const intent = {
|
|
110
|
-
primaryIntent: 'NULL_CHECK',
|
|
111
|
-
intents: [{ intent: 'NULL_CHECK', confidence: 0.9 }],
|
|
112
|
-
entities: [],
|
|
113
|
-
operators: [],
|
|
114
|
-
logicalConnectors: [],
|
|
115
|
-
complexity: 5,
|
|
116
|
-
};
|
|
117
|
-
const result = engine.generate('is null', intent);
|
|
118
|
-
expect(result).not.toBeNull();
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
// ===== self-correction-loop.ts: error handling path =====
|
|
122
|
-
const TEST_SCHEMA = {
|
|
123
|
-
root: {
|
|
124
|
-
name: 'order',
|
|
125
|
-
type: 'Order',
|
|
126
|
-
fields: { amount: { type: 'number' }, status: { type: 'string' } },
|
|
127
|
-
methods: {},
|
|
128
|
-
},
|
|
129
|
-
variables: {},
|
|
130
|
-
beans: {},
|
|
131
|
-
types: {},
|
|
132
|
-
functions: {},
|
|
133
|
-
};
|
|
134
|
-
const PROMPT = {
|
|
135
|
-
system: 'Generate SpEL.',
|
|
136
|
-
user: 'test',
|
|
137
|
-
contextSchema: TEST_SCHEMA,
|
|
138
|
-
examples: [],
|
|
139
|
-
};
|
|
140
|
-
describe('self-correction-loop: error path during correction', () => {
|
|
141
|
-
it('catches LLM error during correction attempt and logs it', async () => {
|
|
142
|
-
const loop = new SelfCorrectionLoop({ maxAttempts: 2, enableAutoFix: false });
|
|
143
|
-
const generateFn = vi
|
|
144
|
-
.fn()
|
|
145
|
-
// First attempt: throw error
|
|
146
|
-
.mockRejectedValueOnce(new Error('LLM service crash'))
|
|
147
|
-
// Second attempt: valid response
|
|
148
|
-
.mockResolvedValueOnce({
|
|
149
|
-
text: '#order.amount > 1000',
|
|
150
|
-
model: 'mock',
|
|
151
|
-
usage: { promptTokens: 10, completionTokens: 5, totalTokens: 15 },
|
|
152
|
-
latencyMs: 10,
|
|
153
|
-
finishReason: 'stop',
|
|
154
|
-
providerName: 'mock',
|
|
155
|
-
});
|
|
156
|
-
const result = await loop.correct('#invalid (((', TEST_SCHEMA, generateFn, PROMPT);
|
|
157
|
-
expect(result.corrections.length).toBeGreaterThan(0);
|
|
158
|
-
// Verify we have at least one log entry with errors
|
|
159
|
-
const errorLog = result.corrections.find(c => c.errorCount > 0);
|
|
160
|
-
expect(errorLog).toBeDefined();
|
|
161
|
-
});
|
|
162
|
-
it('auto-fix applied after LLM correction response', async () => {
|
|
163
|
-
const loop = new SelfCorrectionLoop({ maxAttempts: 1, enableAutoFix: true });
|
|
164
|
-
// LLM returns expression with === that needs AutoFix
|
|
165
|
-
const generateFn = vi.fn().mockResolvedValueOnce({
|
|
166
|
-
text: '#order.amount === 1000',
|
|
167
|
-
model: 'mock',
|
|
168
|
-
usage: { promptTokens: 10, completionTokens: 5, totalTokens: 15 },
|
|
169
|
-
latencyMs: 10,
|
|
170
|
-
finishReason: 'stop',
|
|
171
|
-
providerName: 'mock',
|
|
172
|
-
});
|
|
173
|
-
const result = await loop.correct('#bad (((', TEST_SCHEMA, generateFn, PROMPT);
|
|
174
|
-
expect(result.expression).not.toContain('===');
|
|
175
|
-
});
|
|
176
|
-
it('handles maxAttempts=0 with immediate return', async () => {
|
|
177
|
-
const loop = new SelfCorrectionLoop({ maxAttempts: 0, enableAutoFix: false });
|
|
178
|
-
const generateFn = vi.fn();
|
|
179
|
-
const result = await loop.correct('#bad (((', TEST_SCHEMA, generateFn, PROMPT);
|
|
180
|
-
expect(generateFn).not.toHaveBeenCalled();
|
|
181
|
-
expect(result.valid).toBe(false);
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
// ===== validation-pipeline.ts: final edge cases =====
|
|
185
|
-
describe('validation-pipeline: evaluator error and braces', () => {
|
|
186
|
-
it('detects unbalanced curly braces', async () => {
|
|
187
|
-
const pipeline = new ValidationPipeline();
|
|
188
|
-
const result = await pipeline.validate('{ #order.amount > 100 {', TEST_SCHEMA);
|
|
189
|
-
expect(result.errors.some(e => e.code === 'PARSE-UNBALANCED_PARENS')).toBe(true);
|
|
190
|
-
});
|
|
191
|
-
it('evaluator throws an error during parse', async () => {
|
|
192
|
-
const throwingEvaluator = {
|
|
193
|
-
parse: vi.fn().mockRejectedValue(new Error('Parse engine crashed')),
|
|
194
|
-
getContextSchema: vi.fn().mockReturnValue(null),
|
|
195
|
-
};
|
|
196
|
-
const pipeline = new ValidationPipeline(throwingEvaluator);
|
|
197
|
-
const result = await pipeline.validate('#order.amount > 1000', TEST_SCHEMA);
|
|
198
|
-
expect(result.stages.parse.errors.some(e => e.code === 'PARSE-EXCEPTION')).toBe(true);
|
|
199
|
-
});
|
|
200
|
-
});
|
|
201
|
-
// ===== pattern-matcher.ts: matchAll maxResults break (line 86) =====
|
|
202
|
-
describe('pattern-matcher: matchAll maxResults boundary', () => {
|
|
203
|
-
it('matchAll with limit=1 returns exactly 1 result and breaks early', () => {
|
|
204
|
-
const matcher = new PatternMatcher();
|
|
205
|
-
// Register multiple patterns that all match the same input
|
|
206
|
-
for (let i = 0; i < 5; i++) {
|
|
207
|
-
matcher.register({
|
|
208
|
-
id: `P${i}`,
|
|
209
|
-
match: /test(?<value>\d+)/,
|
|
210
|
-
spelTemplate: '#test == {value}',
|
|
211
|
-
slots: { value: { key: 'value', type: 'number', transform: 'toNumber' } },
|
|
212
|
-
priority: 90 - i,
|
|
213
|
-
tags: ['test'],
|
|
214
|
-
examples: [],
|
|
215
|
-
difficulty: 'easy',
|
|
216
|
-
confidence: 0.9,
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
const results = matcher.matchAll('test42', 1);
|
|
220
|
-
expect(results).toHaveLength(1);
|
|
221
|
-
expect(results[0].matched).toBe(true);
|
|
222
|
-
});
|
|
223
|
-
});
|
|
224
|
-
// ===== pattern-matcher.ts: extractChineseField regex fallback (line 140) =====
|
|
225
|
-
describe('pattern-matcher: extractChineseField for non-mapped field', () => {
|
|
226
|
-
it('returns "value" for empty input', () => {
|
|
227
|
-
// extractChineseField handles malformed inputs: ^[^\s,,、]+ fails → returns "value"
|
|
228
|
-
// (We test this indirectly via the match on an expression where field is in spelTemplate)
|
|
229
|
-
const matcher = new PatternMatcher();
|
|
230
|
-
matcher.register({
|
|
231
|
-
id: 'FALLBACK',
|
|
232
|
-
match: /\s*(?<value>\d+)/,
|
|
233
|
-
spelTemplate: '#{field} > {value}',
|
|
234
|
-
slots: { value: { key: 'value', type: 'number', transform: 'toNumber' } },
|
|
235
|
-
priority: 100,
|
|
236
|
-
tags: ['test'],
|
|
237
|
-
examples: [],
|
|
238
|
-
difficulty: 'easy',
|
|
239
|
-
confidence: 0.95,
|
|
240
|
-
});
|
|
241
|
-
const r = matcher.match('12345');
|
|
242
|
-
// Without capture group 'field', falls back to extractChineseField
|
|
243
|
-
if (r.matched) {
|
|
244
|
-
expect(r.spel).toContain('#');
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
|
-
});
|
|
248
|
-
// ===== provider-registry.ts: getPrioritized offline/cost compare (lines 46, 49-50) =====
|
|
249
|
-
describe('provider-registry: getPrioritized offline and cost comparison', () => {
|
|
250
|
-
it('puts offline provider before online provider', async () => {
|
|
251
|
-
const registry = new ProviderRegistry();
|
|
252
|
-
const online = {
|
|
253
|
-
name: 'online-provider',
|
|
254
|
-
capabilities: {
|
|
255
|
-
maxContextTokens: 1000,
|
|
256
|
-
supportsGrammarConstraint: false,
|
|
257
|
-
supportsStreaming: false,
|
|
258
|
-
supportsStructuredOutput: false,
|
|
259
|
-
offlineAvailable: false,
|
|
260
|
-
estimatedCostPerRequest: 0.001,
|
|
261
|
-
estimatedLatencyMs: 100,
|
|
262
|
-
},
|
|
263
|
-
generate: vi.fn(),
|
|
264
|
-
isAvailable: vi.fn().mockResolvedValue(true),
|
|
265
|
-
};
|
|
266
|
-
const offline = {
|
|
267
|
-
name: 'offline-provider',
|
|
268
|
-
capabilities: {
|
|
269
|
-
maxContextTokens: 1000,
|
|
270
|
-
supportsGrammarConstraint: false,
|
|
271
|
-
supportsStreaming: false,
|
|
272
|
-
supportsStructuredOutput: false,
|
|
273
|
-
offlineAvailable: true,
|
|
274
|
-
estimatedCostPerRequest: 0,
|
|
275
|
-
estimatedLatencyMs: 50,
|
|
276
|
-
},
|
|
277
|
-
generate: vi.fn(),
|
|
278
|
-
isAvailable: vi.fn().mockResolvedValue(true),
|
|
279
|
-
};
|
|
280
|
-
registry.register(online);
|
|
281
|
-
registry.register(offline);
|
|
282
|
-
const prioritized = await registry.getPrioritized();
|
|
283
|
-
expect(prioritized[0].name).toBe('offline-provider');
|
|
284
|
-
expect(prioritized[1].name).toBe('online-provider');
|
|
285
|
-
});
|
|
286
|
-
it('sorts by cost when both offline statuses are same', async () => {
|
|
287
|
-
const registry = new ProviderRegistry();
|
|
288
|
-
const cheap = {
|
|
289
|
-
name: 'cheap-provider',
|
|
290
|
-
capabilities: {
|
|
291
|
-
maxContextTokens: 1000,
|
|
292
|
-
supportsGrammarConstraint: false,
|
|
293
|
-
supportsStreaming: false,
|
|
294
|
-
supportsStructuredOutput: false,
|
|
295
|
-
offlineAvailable: false,
|
|
296
|
-
estimatedCostPerRequest: 0.0001,
|
|
297
|
-
estimatedLatencyMs: 100,
|
|
298
|
-
},
|
|
299
|
-
generate: vi.fn(),
|
|
300
|
-
isAvailable: vi.fn().mockResolvedValue(true),
|
|
301
|
-
};
|
|
302
|
-
const expensive = {
|
|
303
|
-
name: 'expensive-provider',
|
|
304
|
-
capabilities: {
|
|
305
|
-
maxContextTokens: 1000,
|
|
306
|
-
supportsGrammarConstraint: false,
|
|
307
|
-
supportsStreaming: false,
|
|
308
|
-
supportsStructuredOutput: false,
|
|
309
|
-
offlineAvailable: false,
|
|
310
|
-
estimatedCostPerRequest: 0.01,
|
|
311
|
-
estimatedLatencyMs: 50,
|
|
312
|
-
},
|
|
313
|
-
generate: vi.fn(),
|
|
314
|
-
isAvailable: vi.fn().mockResolvedValue(true),
|
|
315
|
-
};
|
|
316
|
-
registry.register(expensive);
|
|
317
|
-
registry.register(cheap);
|
|
318
|
-
const prioritized = await registry.getPrioritized();
|
|
319
|
-
expect(prioritized[0].name).toBe('cheap-provider');
|
|
320
|
-
expect(prioritized[1].name).toBe('expensive-provider');
|
|
321
|
-
});
|
|
322
|
-
});
|
|
323
|
-
// ===== self-correction-loop: AutoFix insufficient path (lines 123-132) =====
|
|
324
|
-
describe('self-correction-loop: AutoFix insufficient fallback path', () => {
|
|
325
|
-
it('when auto-fix is not sufficient, continues to LLM correction', async () => {
|
|
326
|
-
const loop = new SelfCorrectionLoop({ maxAttempts: 1 });
|
|
327
|
-
// Expression has fixable === AND unfixable unbalanced parens
|
|
328
|
-
const generateFn = vi.fn().mockResolvedValueOnce({
|
|
329
|
-
text: '#order.amount > 1000',
|
|
330
|
-
model: 'mock',
|
|
331
|
-
usage: { promptTokens: 10, completionTokens: 5, totalTokens: 15 },
|
|
332
|
-
latencyMs: 10,
|
|
333
|
-
finishReason: 'stop',
|
|
334
|
-
providerName: 'mock',
|
|
335
|
-
});
|
|
336
|
-
const result = await loop.correct('#order.amount === 1000 ]', TEST_SCHEMA, generateFn, PROMPT);
|
|
337
|
-
// AutoFix fixes === but extra ] remains; validation fails → LLM is called
|
|
338
|
-
expect(generateFn).toHaveBeenCalled();
|
|
339
|
-
// Correction log should contain an auto-fixed entry
|
|
340
|
-
const autoFixEntry = result.corrections.find(c => c.autoFixed);
|
|
341
|
-
expect(autoFixEntry).toBeDefined();
|
|
342
|
-
});
|
|
343
|
-
});
|
|
344
|
-
// ===== chinese-number-parser.ts: line 70 (unit undefined) =====
|
|
345
|
-
// Note: line 70 is unreachable because isChineseNumber pre-checks the same char set
|
|
346
|
-
describe('chinese-number-parser: edge cases', () => {
|
|
347
|
-
it('parse returns NaN for string with non-Chinese-num chars', () => {
|
|
348
|
-
const result = ChineseNumberParser.parse('一千二x百三四');
|
|
349
|
-
expect(Number.isNaN(result)).toBe(true);
|
|
350
|
-
});
|
|
351
|
-
it('parse returns NaN for entirely non-Chinese-num string', () => {
|
|
352
|
-
const result = ChineseNumberParser.parse('hello');
|
|
353
|
-
expect(Number.isNaN(result)).toBe(true);
|
|
354
|
-
});
|
|
355
|
-
it('parseSafe returns null for non-Chinese-num', () => {
|
|
356
|
-
const result = ChineseNumberParser.parseSafe('abc');
|
|
357
|
-
expect(result).toBeNull();
|
|
358
|
-
});
|
|
359
|
-
it('isChineseNumber returns true for valid Chinese numbers', () => {
|
|
360
|
-
expect(ChineseNumberParser.isChineseNumber('一千二百三十四')).toBe(true);
|
|
361
|
-
});
|
|
362
|
-
it('isChineseNumber returns false for mixed text', () => {
|
|
363
|
-
expect(ChineseNumberParser.isChineseNumber('12三十四')).toBe(false);
|
|
364
|
-
});
|
|
365
|
-
});
|
|
366
|
-
// ===== template-engine.ts: NOT_EMPTY selectBestTemplate boost (line 98) =====
|
|
367
|
-
describe('template-engine: NOT_EMPTY template selection boost', () => {
|
|
368
|
-
it('selects IS_EMPTY template for "is empty" input', () => {
|
|
369
|
-
const engine = new TemplateEngine();
|
|
370
|
-
const intent = {
|
|
371
|
-
primaryIntent: 'COLLECTION',
|
|
372
|
-
intents: [{ intent: 'COLLECTION', confidence: 0.9 }],
|
|
373
|
-
entities: [],
|
|
374
|
-
operators: [],
|
|
375
|
-
logicalConnectors: [],
|
|
376
|
-
complexity: 10,
|
|
377
|
-
};
|
|
378
|
-
const result = engine.generate('items is empty', intent);
|
|
379
|
-
expect(result).not.toBeNull();
|
|
380
|
-
if (result) {
|
|
381
|
-
expect(result.templateName).toBe('COLL-IS_EMPTY');
|
|
382
|
-
}
|
|
383
|
-
});
|
|
384
|
-
it('template with context schema matches field names', () => {
|
|
385
|
-
const schema = {
|
|
386
|
-
root: {
|
|
387
|
-
name: 'order',
|
|
388
|
-
type: 'Order',
|
|
389
|
-
fields: {
|
|
390
|
-
amount: { type: 'number' },
|
|
391
|
-
status: { type: 'string' },
|
|
392
|
-
},
|
|
393
|
-
methods: {},
|
|
394
|
-
},
|
|
395
|
-
variables: {},
|
|
396
|
-
beans: {},
|
|
397
|
-
types: {},
|
|
398
|
-
functions: {},
|
|
399
|
-
};
|
|
400
|
-
const engine = new TemplateEngine(schema);
|
|
401
|
-
const intent = {
|
|
402
|
-
primaryIntent: 'COMPARISON',
|
|
403
|
-
intents: [{ intent: 'COMPARISON', confidence: 0.9 }],
|
|
404
|
-
entities: [{ text: '1000', type: 'value', position: { start: 7, end: 11 } }],
|
|
405
|
-
operators: ['>'],
|
|
406
|
-
logicalConnectors: [],
|
|
407
|
-
complexity: 15,
|
|
408
|
-
};
|
|
409
|
-
const result = engine.generate('amount > 1000', intent);
|
|
410
|
-
expect(result).not.toBeNull();
|
|
411
|
-
if (result) {
|
|
412
|
-
// Field name "amount" should be matched from context schema
|
|
413
|
-
expect(result.expression).toContain('amount');
|
|
414
|
-
}
|
|
415
|
-
});
|
|
416
|
-
it('ELVIS template is selected for input with or/default keywords', () => {
|
|
417
|
-
const engine = new TemplateEngine();
|
|
418
|
-
const intent = {
|
|
419
|
-
primaryIntent: 'ELVIS',
|
|
420
|
-
intents: [{ intent: 'ELVIS', confidence: 0.8 }],
|
|
421
|
-
entities: [{ text: 'Guest', type: 'value', position: { start: 15, end: 20 } }],
|
|
422
|
-
operators: [],
|
|
423
|
-
logicalConnectors: [],
|
|
424
|
-
complexity: 10,
|
|
425
|
-
};
|
|
426
|
-
const result = engine.generate('name or default Guest', intent);
|
|
427
|
-
expect(result).not.toBeNull();
|
|
428
|
-
if (result) {
|
|
429
|
-
expect(result.templateName).toBe('ELVIS-DEFAULT');
|
|
430
|
-
expect(result.expression).toContain('?:');
|
|
431
|
-
}
|
|
432
|
-
});
|
|
433
|
-
it('returns null for non-existent intent', () => {
|
|
434
|
-
const engine = new TemplateEngine();
|
|
435
|
-
const intent = {
|
|
436
|
-
primaryIntent: 'UNKNOWN',
|
|
437
|
-
intents: [],
|
|
438
|
-
entities: [],
|
|
439
|
-
operators: [],
|
|
440
|
-
logicalConnectors: [],
|
|
441
|
-
complexity: 0,
|
|
442
|
-
};
|
|
443
|
-
const result = engine.generate('test', intent);
|
|
444
|
-
expect(result).toBeNull();
|
|
445
|
-
});
|
|
446
|
-
});
|
|
447
|
-
// ===== intent-classifier.ts: quoted string extraction (lines 211-216) =====
|
|
448
|
-
describe('intent-classifier: quoted string entity extraction', () => {
|
|
449
|
-
it('extracts entities from quoted strings', () => {
|
|
450
|
-
const classifier = new IntentClassifier();
|
|
451
|
-
const result = classifier.classify("status == 'active'");
|
|
452
|
-
// After normalize, text becomes lowercase
|
|
453
|
-
expect(result.entities.some(e => e.type === 'value' && e.text.toLowerCase().includes('active'))).toBe(true);
|
|
454
|
-
});
|
|
455
|
-
it('extracts entities from double-quoted strings', () => {
|
|
456
|
-
const classifier = new IntentClassifier();
|
|
457
|
-
const result = classifier.classify('name == "John"');
|
|
458
|
-
// After normalize, text becomes lowercase
|
|
459
|
-
expect(result.entities.some(e => e.type === 'value' && e.text.toLowerCase().includes('john'))).toBe(true);
|
|
460
|
-
});
|
|
461
|
-
it('detects operator position in entities', () => {
|
|
462
|
-
const classifier = new IntentClassifier();
|
|
463
|
-
const result = classifier.classify('amount >= 100');
|
|
464
|
-
expect(result.entities.some(e => e.type === 'operator' && e.text === '>=')).toBe(true);
|
|
465
|
-
});
|
|
466
|
-
});
|
|
467
|
-
// ===== intent-classifier.ts: boost conditions (lines 137,141,145,149) =====
|
|
468
|
-
describe('intent-classifier: intent boost conditions', () => {
|
|
469
|
-
it('boosts RANGE for between pattern', () => {
|
|
470
|
-
const classifier = new IntentClassifier();
|
|
471
|
-
const result = classifier.classify('value between 10 and 20');
|
|
472
|
-
// RANGE should be the primary intent due to boost
|
|
473
|
-
expect(result.intents.some(i => i.intent === 'RANGE')).toBe(true);
|
|
474
|
-
});
|
|
475
|
-
it('boosts TYPE_CHECK for instanceof pattern', () => {
|
|
476
|
-
const classifier = new IntentClassifier();
|
|
477
|
-
const result = classifier.classify('var instanceof T(String)');
|
|
478
|
-
expect(result.intents.some(i => i.intent === 'TYPE_CHECK')).toBe(true);
|
|
479
|
-
});
|
|
480
|
-
it('boosts TYPE_CHECK for 是否是...类型 pattern', () => {
|
|
481
|
-
const classifier = new IntentClassifier();
|
|
482
|
-
const result = classifier.classify('变量是否是String类型');
|
|
483
|
-
expect(result.intents.some(i => i.intent === 'TYPE_CHECK')).toBe(true);
|
|
484
|
-
});
|
|
485
|
-
it('boosts PROJECTION for 每个 pattern', () => {
|
|
486
|
-
const classifier = new IntentClassifier();
|
|
487
|
-
const result = classifier.classify('每个项目的名称');
|
|
488
|
-
expect(result.intents.some(i => i.intent === 'PROJECTION')).toBe(true);
|
|
489
|
-
});
|
|
490
|
-
it('boosts COLLECTION for isEmpty/.isEmpty keywords', () => {
|
|
491
|
-
const classifier = new IntentClassifier();
|
|
492
|
-
const result = classifier.classify('myList.isEmpty()');
|
|
493
|
-
expect(result.intents.some(i => i.intent === 'COLLECTION')).toBe(true);
|
|
494
|
-
});
|
|
495
|
-
it('boosts COLLECTION for 列表 keyword', () => {
|
|
496
|
-
const classifier = new IntentClassifier();
|
|
497
|
-
const result = classifier.classify('订单列表');
|
|
498
|
-
expect(result.intents.some(i => i.intent === 'COLLECTION')).toBe(true);
|
|
499
|
-
});
|
|
500
|
-
});
|
|
501
|
-
// ===== provider-registry.ts: same offline & same cost (lines 46, 49-50) =====
|
|
502
|
-
describe('provider-registry: same offline and same cost sorting', () => {
|
|
503
|
-
it('sorts by latency when both have same offline and same cost', async () => {
|
|
504
|
-
const registry = new ProviderRegistry();
|
|
505
|
-
const fast = {
|
|
506
|
-
name: 'fast-same',
|
|
507
|
-
capabilities: {
|
|
508
|
-
maxContextTokens: 1000,
|
|
509
|
-
supportsGrammarConstraint: false,
|
|
510
|
-
supportsStreaming: false,
|
|
511
|
-
supportsStructuredOutput: false,
|
|
512
|
-
offlineAvailable: false,
|
|
513
|
-
estimatedCostPerRequest: 0.001,
|
|
514
|
-
estimatedLatencyMs: 50,
|
|
515
|
-
},
|
|
516
|
-
generate: vi.fn(),
|
|
517
|
-
isAvailable: vi.fn().mockResolvedValue(true),
|
|
518
|
-
};
|
|
519
|
-
const slow = {
|
|
520
|
-
name: 'slow-same',
|
|
521
|
-
capabilities: {
|
|
522
|
-
maxContextTokens: 1000,
|
|
523
|
-
supportsGrammarConstraint: false,
|
|
524
|
-
supportsStreaming: false,
|
|
525
|
-
supportsStructuredOutput: false,
|
|
526
|
-
offlineAvailable: false,
|
|
527
|
-
estimatedCostPerRequest: 0.001,
|
|
528
|
-
estimatedLatencyMs: 200,
|
|
529
|
-
},
|
|
530
|
-
generate: vi.fn(),
|
|
531
|
-
isAvailable: vi.fn().mockResolvedValue(true),
|
|
532
|
-
};
|
|
533
|
-
registry.register(slow);
|
|
534
|
-
registry.register(fast);
|
|
535
|
-
const prioritized = await registry.getPrioritized();
|
|
536
|
-
// Same offline, same cost → sorted by latency (lower first)
|
|
537
|
-
expect(prioritized[0].name).toBe('fast-same');
|
|
538
|
-
expect(prioritized[1].name).toBe('slow-same');
|
|
539
|
-
});
|
|
540
|
-
it('handles undefined estimatedCostPerRequest as Infinity', async () => {
|
|
541
|
-
const registry = new ProviderRegistry();
|
|
542
|
-
const withCost = {
|
|
543
|
-
name: 'with-cost',
|
|
544
|
-
capabilities: {
|
|
545
|
-
maxContextTokens: 1000,
|
|
546
|
-
supportsGrammarConstraint: false,
|
|
547
|
-
supportsStreaming: false,
|
|
548
|
-
supportsStructuredOutput: false,
|
|
549
|
-
offlineAvailable: false,
|
|
550
|
-
estimatedCostPerRequest: 0.0001,
|
|
551
|
-
estimatedLatencyMs: 100,
|
|
552
|
-
},
|
|
553
|
-
generate: vi.fn(),
|
|
554
|
-
isAvailable: vi.fn().mockResolvedValue(true),
|
|
555
|
-
};
|
|
556
|
-
const noCost = {
|
|
557
|
-
name: 'no-cost',
|
|
558
|
-
capabilities: {
|
|
559
|
-
maxContextTokens: 1000,
|
|
560
|
-
supportsGrammarConstraint: false,
|
|
561
|
-
supportsStreaming: false,
|
|
562
|
-
supportsStructuredOutput: false,
|
|
563
|
-
offlineAvailable: false,
|
|
564
|
-
estimatedCostPerRequest: undefined,
|
|
565
|
-
estimatedLatencyMs: 50,
|
|
566
|
-
},
|
|
567
|
-
generate: vi.fn(),
|
|
568
|
-
isAvailable: vi.fn().mockResolvedValue(true),
|
|
569
|
-
};
|
|
570
|
-
registry.register(noCost);
|
|
571
|
-
registry.register(withCost);
|
|
572
|
-
const prioritized = await registry.getPrioritized();
|
|
573
|
-
// Provider with cost (0.0001) < Infinity → with-cost first
|
|
574
|
-
expect(prioritized[0].name).toBe('with-cost');
|
|
575
|
-
});
|
|
576
|
-
});
|
|
577
|
-
});
|
|
578
|
-
//# sourceMappingURL=coverage-gaps.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"coverage-gaps.test.js","sourceRoot":"","sources":["../../src/__tests__/coverage-gaps.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"intent-classifier.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/intent-classifier.test.ts"],"names":[],"mappings":""}
|