@ordis-dev/ordis 0.1.1 → 0.4.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 (83) hide show
  1. package/README.md +47 -0
  2. package/dist/cli.js +20 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/core/error-formatter.d.ts +35 -0
  5. package/dist/core/error-formatter.d.ts.map +1 -0
  6. package/dist/core/error-formatter.js +319 -0
  7. package/dist/core/error-formatter.js.map +1 -0
  8. package/dist/core/index.d.ts +3 -1
  9. package/dist/core/index.d.ts.map +1 -1
  10. package/dist/core/index.js +1 -0
  11. package/dist/core/index.js.map +1 -1
  12. package/dist/core/pipeline.d.ts.map +1 -1
  13. package/dist/core/pipeline.js +17 -3
  14. package/dist/core/pipeline.js.map +1 -1
  15. package/dist/core/preprocessor.d.ts +35 -0
  16. package/dist/core/preprocessor.d.ts.map +1 -0
  17. package/dist/core/preprocessor.js +297 -0
  18. package/dist/core/preprocessor.js.map +1 -0
  19. package/dist/core/types.d.ts +24 -1
  20. package/dist/core/types.d.ts.map +1 -1
  21. package/dist/core/validator.d.ts +3 -1
  22. package/dist/core/validator.d.ts.map +1 -1
  23. package/dist/core/validator.js.map +1 -1
  24. package/dist/index.d.ts +4 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +2 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/llm/client.d.ts.map +1 -1
  29. package/dist/llm/client.js +23 -3
  30. package/dist/llm/client.js.map +1 -1
  31. package/dist/llm/types.d.ts +2 -0
  32. package/dist/llm/types.d.ts.map +1 -1
  33. package/dist/schemas/types.d.ts +3 -1
  34. package/dist/schemas/types.d.ts.map +1 -1
  35. package/package.json +4 -1
  36. package/dist/__tests__/api.test.d.ts +0 -5
  37. package/dist/__tests__/api.test.d.ts.map +0 -1
  38. package/dist/__tests__/api.test.js +0 -95
  39. package/dist/__tests__/api.test.js.map +0 -1
  40. package/dist/__tests__/cli.test.d.ts +0 -6
  41. package/dist/__tests__/cli.test.d.ts.map +0 -1
  42. package/dist/__tests__/cli.test.js +0 -103
  43. package/dist/__tests__/cli.test.js.map +0 -1
  44. package/dist/cli/__tests__/cli.test.d.ts +0 -5
  45. package/dist/cli/__tests__/cli.test.d.ts.map +0 -1
  46. package/dist/cli/__tests__/cli.test.js +0 -13
  47. package/dist/cli/__tests__/cli.test.js.map +0 -1
  48. package/dist/core/__tests__/pipeline.test.d.ts +0 -5
  49. package/dist/core/__tests__/pipeline.test.d.ts.map +0 -1
  50. package/dist/core/__tests__/pipeline.test.js +0 -334
  51. package/dist/core/__tests__/pipeline.test.js.map +0 -1
  52. package/dist/core/__tests__/validator.test.d.ts +0 -5
  53. package/dist/core/__tests__/validator.test.d.ts.map +0 -1
  54. package/dist/core/__tests__/validator.test.js +0 -124
  55. package/dist/core/__tests__/validator.test.js.map +0 -1
  56. package/dist/llm/__tests__/client.test.d.ts +0 -5
  57. package/dist/llm/__tests__/client.test.d.ts.map +0 -1
  58. package/dist/llm/__tests__/client.test.js +0 -350
  59. package/dist/llm/__tests__/client.test.js.map +0 -1
  60. package/dist/llm/__tests__/prompt-builder.test.d.ts +0 -5
  61. package/dist/llm/__tests__/prompt-builder.test.d.ts.map +0 -1
  62. package/dist/llm/__tests__/prompt-builder.test.js +0 -171
  63. package/dist/llm/__tests__/prompt-builder.test.js.map +0 -1
  64. package/dist/llm/__tests__/retry.test.d.ts +0 -5
  65. package/dist/llm/__tests__/retry.test.d.ts.map +0 -1
  66. package/dist/llm/__tests__/retry.test.js +0 -350
  67. package/dist/llm/__tests__/retry.test.js.map +0 -1
  68. package/dist/llm/__tests__/token-counter.test.d.ts +0 -5
  69. package/dist/llm/__tests__/token-counter.test.d.ts.map +0 -1
  70. package/dist/llm/__tests__/token-counter.test.js +0 -166
  71. package/dist/llm/__tests__/token-counter.test.js.map +0 -1
  72. package/dist/schemas/__tests__/integration.test.d.ts +0 -5
  73. package/dist/schemas/__tests__/integration.test.d.ts.map +0 -1
  74. package/dist/schemas/__tests__/integration.test.js +0 -366
  75. package/dist/schemas/__tests__/integration.test.js.map +0 -1
  76. package/dist/schemas/__tests__/loader.test.d.ts +0 -5
  77. package/dist/schemas/__tests__/loader.test.d.ts.map +0 -1
  78. package/dist/schemas/__tests__/loader.test.js +0 -271
  79. package/dist/schemas/__tests__/loader.test.js.map +0 -1
  80. package/dist/schemas/__tests__/validator.test.d.ts +0 -5
  81. package/dist/schemas/__tests__/validator.test.d.ts.map +0 -1
  82. package/dist/schemas/__tests__/validator.test.js +0 -592
  83. package/dist/schemas/__tests__/validator.test.js.map +0 -1
@@ -1,171 +0,0 @@
1
- /**
2
- * Tests for prompt builder
3
- */
4
- import { describe, it, expect } from 'vitest';
5
- import { buildSystemPrompt, buildUserPrompt } from '../prompt-builder.js';
6
- describe('Prompt Builder', () => {
7
- describe('buildSystemPrompt', () => {
8
- it('should build basic system prompt', () => {
9
- const schema = {
10
- fields: {
11
- name: { type: 'string' },
12
- age: { type: 'number' },
13
- },
14
- };
15
- const prompt = buildSystemPrompt(schema);
16
- expect(prompt).toContain('data extraction');
17
- expect(prompt).toContain('name: string');
18
- expect(prompt).toContain('age: number');
19
- expect(prompt).toContain('only valid JSON');
20
- });
21
- it('should include field descriptions', () => {
22
- const schema = {
23
- fields: {
24
- email: {
25
- type: 'string',
26
- description: 'User email address',
27
- },
28
- },
29
- };
30
- const prompt = buildSystemPrompt(schema);
31
- expect(prompt).toContain('User email address');
32
- });
33
- it('should mark optional fields', () => {
34
- const schema = {
35
- fields: {
36
- name: { type: 'string' },
37
- nickname: { type: 'string', optional: true },
38
- },
39
- };
40
- const prompt = buildSystemPrompt(schema);
41
- expect(prompt).toContain('nickname: string (optional)');
42
- });
43
- it('should include enum values', () => {
44
- const schema = {
45
- fields: {
46
- status: {
47
- type: 'enum',
48
- enum: ['active', 'inactive', 'pending'],
49
- },
50
- },
51
- };
52
- const prompt = buildSystemPrompt(schema);
53
- expect(prompt).toContain('active, inactive, pending');
54
- });
55
- it('should include number constraints', () => {
56
- const schema = {
57
- fields: {
58
- age: { type: 'number', min: 0, max: 120 },
59
- },
60
- };
61
- const prompt = buildSystemPrompt(schema);
62
- expect(prompt).toContain('range: 0 to 120');
63
- });
64
- it('should include pattern for strings', () => {
65
- const schema = {
66
- fields: {
67
- zipcode: {
68
- type: 'string',
69
- pattern: '^\\d{5}$',
70
- },
71
- },
72
- };
73
- const prompt = buildSystemPrompt(schema);
74
- expect(prompt).toContain('pattern: ^\\d{5}$');
75
- });
76
- it('should include confidence requirements', () => {
77
- const schema = {
78
- fields: {
79
- name: { type: 'string' },
80
- },
81
- confidence: {
82
- threshold: 85,
83
- failOnLowConfidence: true,
84
- },
85
- };
86
- const prompt = buildSystemPrompt(schema);
87
- expect(prompt).toContain('threshold: 85%');
88
- expect(prompt).toContain('confidence score');
89
- });
90
- it('should include response format', () => {
91
- const schema = {
92
- fields: {
93
- id: { type: 'string' },
94
- count: { type: 'number' },
95
- },
96
- };
97
- const prompt = buildSystemPrompt(schema);
98
- expect(prompt).toContain('"data"');
99
- expect(prompt).toContain('"confidence"');
100
- expect(prompt).toContain('"confidenceByField"');
101
- });
102
- it('should NOT include few-shot examples by default', () => {
103
- const schema = {
104
- fields: {
105
- name: { type: 'string' },
106
- age: { type: 'number' },
107
- },
108
- };
109
- const prompt = buildSystemPrompt(schema);
110
- expect(prompt).not.toContain('Example extraction:');
111
- expect(prompt).not.toContain('INV-2024-0042');
112
- });
113
- it('should include few-shot examples when explicitly enabled', () => {
114
- const schema = {
115
- fields: {
116
- name: { type: 'string' },
117
- age: { type: 'number' },
118
- },
119
- prompt: {
120
- includeFewShotExamples: true,
121
- },
122
- };
123
- const prompt = buildSystemPrompt(schema);
124
- expect(prompt).toContain('Example extraction:');
125
- expect(prompt).toContain('Input text:');
126
- expect(prompt).toContain('Output:');
127
- });
128
- it('should include example with null values when enabled', () => {
129
- const schema = {
130
- fields: {
131
- email: { type: 'string' },
132
- phone: { type: 'string', optional: true },
133
- },
134
- prompt: {
135
- includeFewShotExamples: true,
136
- },
137
- };
138
- const prompt = buildSystemPrompt(schema);
139
- expect(prompt).toContain('null');
140
- expect(prompt).toContain('missing or uncertain');
141
- });
142
- it('should include invoice example when enabled', () => {
143
- const schema = {
144
- fields: {
145
- invoice_id: { type: 'string' },
146
- amount: { type: 'number' },
147
- },
148
- prompt: {
149
- includeFewShotExamples: true,
150
- },
151
- };
152
- const prompt = buildSystemPrompt(schema);
153
- expect(prompt).toContain('INV-2024-0042');
154
- expect(prompt).toContain('1250.00');
155
- });
156
- });
157
- describe('buildUserPrompt', () => {
158
- it('should wrap input text', () => {
159
- const input = 'Name: John Doe\nAge: 30';
160
- const prompt = buildUserPrompt(input);
161
- expect(prompt).toContain('Extract data');
162
- expect(prompt).toContain(input);
163
- });
164
- it('should handle multiline input', () => {
165
- const input = 'Line 1\nLine 2\nLine 3';
166
- const prompt = buildUserPrompt(input);
167
- expect(prompt).toContain(input);
168
- });
169
- });
170
- });
171
- //# sourceMappingURL=prompt-builder.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt-builder.test.js","sourceRoot":"","sources":["../../../src/llm/__tests__/prompt-builder.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Tests for retry logic
3
- */
4
- export {};
5
- //# sourceMappingURL=retry.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.test.d.ts","sourceRoot":"","sources":["../../../src/llm/__tests__/retry.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,350 +0,0 @@
1
- /**
2
- * Tests for retry logic
3
- */
4
- import { describe, it, expect, beforeEach, vi } from 'vitest';
5
- import { LLMClient } from '../client.js';
6
- // Mock fetch globally
7
- global.fetch = vi.fn();
8
- describe('Retry Logic', () => {
9
- beforeEach(() => {
10
- vi.clearAllMocks();
11
- });
12
- const mockSuccessResponse = {
13
- id: 'test-id',
14
- object: 'chat.completion',
15
- created: Date.now(),
16
- model: 'test-model',
17
- choices: [
18
- {
19
- index: 0,
20
- message: {
21
- role: 'assistant',
22
- content: JSON.stringify({
23
- data: { name: 'Test' },
24
- confidence: 95,
25
- confidenceByField: { name: 95 },
26
- }),
27
- },
28
- finish_reason: 'stop',
29
- },
30
- ],
31
- };
32
- const schema = {
33
- fields: {
34
- name: { type: 'string' },
35
- },
36
- };
37
- describe('Network errors', () => {
38
- it('should retry on network errors', async () => {
39
- let callCount = 0;
40
- vi.mocked(fetch).mockImplementation(async () => {
41
- callCount++;
42
- if (callCount < 3) {
43
- throw new Error('Network failure');
44
- }
45
- return {
46
- ok: true,
47
- json: async () => mockSuccessResponse,
48
- };
49
- });
50
- const client = new LLMClient({
51
- baseURL: 'http://localhost:11434/v1',
52
- model: 'llama3',
53
- retries: {
54
- maxRetries: 3,
55
- initialDelay: 10,
56
- maxDelay: 100,
57
- backoffFactor: 2,
58
- },
59
- });
60
- const result = await client.extract({
61
- schema,
62
- input: 'Name: Test',
63
- });
64
- expect(result.data.name).toBe('Test');
65
- expect(callCount).toBe(3);
66
- });
67
- it('should fail after max retries', async () => {
68
- vi.mocked(fetch).mockRejectedValue(new Error('Network failure'));
69
- const client = new LLMClient({
70
- baseURL: 'http://localhost:11434/v1',
71
- model: 'llama3',
72
- retries: {
73
- maxRetries: 2,
74
- initialDelay: 10,
75
- maxDelay: 100,
76
- backoffFactor: 2,
77
- },
78
- });
79
- await expect(client.extract({
80
- schema,
81
- input: 'Name: Test',
82
- })).rejects.toThrow('Network error');
83
- });
84
- });
85
- describe('Rate limiting', () => {
86
- it('should retry on 429 errors', async () => {
87
- let callCount = 0;
88
- vi.mocked(fetch).mockImplementation(async () => {
89
- callCount++;
90
- if (callCount < 2) {
91
- return {
92
- ok: false,
93
- status: 429,
94
- statusText: 'Too Many Requests',
95
- headers: new Headers(),
96
- json: async () => ({ error: { message: 'Rate limit exceeded' } }),
97
- };
98
- }
99
- return {
100
- ok: true,
101
- json: async () => mockSuccessResponse,
102
- };
103
- });
104
- const client = new LLMClient({
105
- baseURL: 'http://localhost:11434/v1',
106
- model: 'llama3',
107
- retries: {
108
- maxRetries: 2,
109
- initialDelay: 10,
110
- maxDelay: 100,
111
- backoffFactor: 2,
112
- },
113
- });
114
- const result = await client.extract({
115
- schema,
116
- input: 'Name: Test',
117
- });
118
- expect(result.data.name).toBe('Test');
119
- expect(callCount).toBe(2);
120
- });
121
- it('should respect Retry-After header', async () => {
122
- let callCount = 0;
123
- const startTime = Date.now();
124
- vi.mocked(fetch).mockImplementation(async () => {
125
- callCount++;
126
- if (callCount < 2) {
127
- const headers = new Headers();
128
- headers.set('Retry-After', '0'); // Use 0 for testing
129
- return {
130
- ok: false,
131
- status: 429,
132
- statusText: 'Too Many Requests',
133
- headers,
134
- json: async () => ({ error: { message: 'Rate limit exceeded' } }),
135
- };
136
- }
137
- return {
138
- ok: true,
139
- json: async () => mockSuccessResponse,
140
- };
141
- });
142
- const client = new LLMClient({
143
- baseURL: 'http://localhost:11434/v1',
144
- model: 'llama3',
145
- retries: {
146
- maxRetries: 2,
147
- initialDelay: 100,
148
- maxDelay: 10000,
149
- backoffFactor: 2,
150
- },
151
- });
152
- const result = await client.extract({
153
- schema,
154
- input: 'Name: Test',
155
- });
156
- expect(result.data.name).toBe('Test');
157
- // Should complete quickly since Retry-After is 0
158
- const elapsed = Date.now() - startTime;
159
- expect(elapsed).toBeLessThan(1000);
160
- });
161
- });
162
- describe('Non-retryable errors', () => {
163
- it('should not retry on authentication errors', async () => {
164
- let callCount = 0;
165
- vi.mocked(fetch).mockImplementation(async () => {
166
- callCount++;
167
- return {
168
- ok: false,
169
- status: 401,
170
- statusText: 'Unauthorized',
171
- headers: new Headers(),
172
- json: async () => ({ error: { message: 'Invalid API key' } }),
173
- };
174
- });
175
- const client = new LLMClient({
176
- baseURL: 'http://localhost:11434/v1',
177
- model: 'llama3',
178
- apiKey: 'invalid',
179
- retries: {
180
- maxRetries: 3,
181
- initialDelay: 10,
182
- maxDelay: 100,
183
- backoffFactor: 2,
184
- },
185
- });
186
- await expect(client.extract({
187
- schema,
188
- input: 'Name: Test',
189
- })).rejects.toThrow('Invalid API key');
190
- expect(callCount).toBe(1); // Should not retry
191
- });
192
- it('should not retry on invalid response', async () => {
193
- let callCount = 0;
194
- vi.mocked(fetch).mockImplementation(async () => {
195
- callCount++;
196
- return {
197
- ok: true,
198
- json: async () => ({
199
- id: 'test-id',
200
- object: 'chat.completion',
201
- created: Date.now(),
202
- model: 'test-model',
203
- choices: [
204
- {
205
- index: 0,
206
- message: {
207
- role: 'assistant',
208
- content: 'This is not valid JSON',
209
- },
210
- finish_reason: 'stop',
211
- },
212
- ],
213
- }),
214
- };
215
- });
216
- const client = new LLMClient({
217
- baseURL: 'http://localhost:11434/v1',
218
- model: 'llama3',
219
- retries: {
220
- maxRetries: 3,
221
- initialDelay: 10,
222
- maxDelay: 100,
223
- backoffFactor: 2,
224
- },
225
- });
226
- await expect(client.extract({
227
- schema,
228
- input: 'Name: Test',
229
- })).rejects.toThrow('Failed to parse');
230
- expect(callCount).toBe(1); // Should not retry
231
- });
232
- });
233
- describe('Exponential backoff', () => {
234
- it('should use exponential backoff with jitter', async () => {
235
- const delays = [];
236
- let callCount = 0;
237
- // Spy on the sleep method to capture delays
238
- const sleepSpy = vi.fn(async (ms) => {
239
- delays.push(ms);
240
- await new Promise(resolve => setTimeout(resolve, 1)); // Fast forward
241
- });
242
- vi.mocked(fetch).mockImplementation(async () => {
243
- callCount++;
244
- if (callCount < 4) {
245
- throw new Error('Network failure');
246
- }
247
- return {
248
- ok: true,
249
- json: async () => mockSuccessResponse,
250
- };
251
- });
252
- const client = new LLMClient({
253
- baseURL: 'http://localhost:11434/v1',
254
- model: 'llama3',
255
- retries: {
256
- maxRetries: 3,
257
- initialDelay: 1000,
258
- maxDelay: 10000,
259
- backoffFactor: 2,
260
- },
261
- });
262
- // Replace sleep method
263
- client.sleep = sleepSpy;
264
- await client.extract({
265
- schema,
266
- input: 'Name: Test',
267
- });
268
- // Should have 3 retries (after 1st, 2nd, and 3rd failures)
269
- expect(delays.length).toBe(3);
270
- // Check exponential backoff pattern with jitter
271
- // First retry: ~1000ms (1000 * 2^0)
272
- expect(delays[0]).toBeGreaterThanOrEqual(1000);
273
- expect(delays[0]).toBeLessThan(1250);
274
- // Second retry: ~2000ms (1000 * 2^1)
275
- expect(delays[1]).toBeGreaterThanOrEqual(2000);
276
- expect(delays[1]).toBeLessThan(2500);
277
- // Third retry: ~4000ms (1000 * 2^2)
278
- expect(delays[2]).toBeGreaterThanOrEqual(4000);
279
- expect(delays[2]).toBeLessThan(5000);
280
- });
281
- it('should cap delay at maxDelay', async () => {
282
- const delays = [];
283
- let callCount = 0;
284
- const sleepSpy = vi.fn(async (ms) => {
285
- delays.push(ms);
286
- await new Promise(resolve => setTimeout(resolve, 1));
287
- });
288
- vi.mocked(fetch).mockImplementation(async () => {
289
- callCount++;
290
- if (callCount < 4) {
291
- throw new Error('Network failure');
292
- }
293
- return {
294
- ok: true,
295
- json: async () => mockSuccessResponse,
296
- };
297
- });
298
- const client = new LLMClient({
299
- baseURL: 'http://localhost:11434/v1',
300
- model: 'llama3',
301
- retries: {
302
- maxRetries: 3,
303
- initialDelay: 5000,
304
- maxDelay: 6000,
305
- backoffFactor: 3,
306
- },
307
- });
308
- client.sleep = sleepSpy;
309
- await client.extract({
310
- schema,
311
- input: 'Name: Test',
312
- });
313
- // All delays should be capped at maxDelay (6000ms)
314
- delays.forEach(delay => {
315
- expect(delay).toBeLessThanOrEqual(6000);
316
- });
317
- });
318
- });
319
- describe('Default configuration', () => {
320
- it('should use default retry config when not specified', async () => {
321
- let callCount = 0;
322
- vi.mocked(fetch).mockImplementation(async () => {
323
- callCount++;
324
- if (callCount < 3) {
325
- throw new Error('Network failure');
326
- }
327
- return {
328
- ok: true,
329
- json: async () => mockSuccessResponse,
330
- };
331
- });
332
- const client = new LLMClient({
333
- baseURL: 'http://localhost:11434/v1',
334
- model: 'llama3',
335
- // No retry config provided - should use defaults
336
- });
337
- // Replace sleep to speed up test
338
- client.sleep = async () => {
339
- await new Promise(resolve => setTimeout(resolve, 1));
340
- };
341
- const result = await client.extract({
342
- schema,
343
- input: 'Name: Test',
344
- });
345
- expect(result.data.name).toBe('Test');
346
- expect(callCount).toBe(3);
347
- });
348
- });
349
- });
350
- //# sourceMappingURL=retry.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retry.test.js","sourceRoot":"","sources":["../../../src/llm/__tests__/retry.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Token counter tests
3
- */
4
- export {};
5
- //# sourceMappingURL=token-counter.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"token-counter.test.d.ts","sourceRoot":"","sources":["../../../src/llm/__tests__/token-counter.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}