@ordis-dev/ordis 0.1.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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +192 -0
  3. package/dist/__tests__/api.test.d.ts +5 -0
  4. package/dist/__tests__/api.test.d.ts.map +1 -0
  5. package/dist/__tests__/api.test.js +95 -0
  6. package/dist/__tests__/api.test.js.map +1 -0
  7. package/dist/__tests__/cli.test.d.ts +6 -0
  8. package/dist/__tests__/cli.test.d.ts.map +1 -0
  9. package/dist/__tests__/cli.test.js +103 -0
  10. package/dist/__tests__/cli.test.js.map +1 -0
  11. package/dist/cli/__tests__/cli.test.d.ts +5 -0
  12. package/dist/cli/__tests__/cli.test.d.ts.map +1 -0
  13. package/dist/cli/__tests__/cli.test.js +13 -0
  14. package/dist/cli/__tests__/cli.test.js.map +1 -0
  15. package/dist/cli.d.ts +7 -0
  16. package/dist/cli.d.ts.map +1 -0
  17. package/dist/cli.js +225 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/core/__tests__/pipeline.test.d.ts +5 -0
  20. package/dist/core/__tests__/pipeline.test.d.ts.map +1 -0
  21. package/dist/core/__tests__/pipeline.test.js +334 -0
  22. package/dist/core/__tests__/pipeline.test.js.map +1 -0
  23. package/dist/core/__tests__/validator.test.d.ts +5 -0
  24. package/dist/core/__tests__/validator.test.d.ts.map +1 -0
  25. package/dist/core/__tests__/validator.test.js +124 -0
  26. package/dist/core/__tests__/validator.test.js.map +1 -0
  27. package/dist/core/errors.d.ts +27 -0
  28. package/dist/core/errors.d.ts.map +1 -0
  29. package/dist/core/errors.js +35 -0
  30. package/dist/core/errors.js.map +1 -0
  31. package/dist/core/index.d.ts +8 -0
  32. package/dist/core/index.d.ts.map +1 -0
  33. package/dist/core/index.js +7 -0
  34. package/dist/core/index.js.map +1 -0
  35. package/dist/core/pipeline.d.ts +28 -0
  36. package/dist/core/pipeline.d.ts.map +1 -0
  37. package/dist/core/pipeline.js +212 -0
  38. package/dist/core/pipeline.js.map +1 -0
  39. package/dist/core/types.d.ts +55 -0
  40. package/dist/core/types.d.ts.map +1 -0
  41. package/dist/core/types.js +5 -0
  42. package/dist/core/types.js.map +1 -0
  43. package/dist/core/validator.d.ts +19 -0
  44. package/dist/core/validator.d.ts.map +1 -0
  45. package/dist/core/validator.js +147 -0
  46. package/dist/core/validator.js.map +1 -0
  47. package/dist/index.d.ts +19 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +18 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/llm/__tests__/client.test.d.ts +5 -0
  52. package/dist/llm/__tests__/client.test.d.ts.map +1 -0
  53. package/dist/llm/__tests__/client.test.js +350 -0
  54. package/dist/llm/__tests__/client.test.js.map +1 -0
  55. package/dist/llm/__tests__/prompt-builder.test.d.ts +5 -0
  56. package/dist/llm/__tests__/prompt-builder.test.d.ts.map +1 -0
  57. package/dist/llm/__tests__/prompt-builder.test.js +171 -0
  58. package/dist/llm/__tests__/prompt-builder.test.js.map +1 -0
  59. package/dist/llm/__tests__/retry.test.d.ts +5 -0
  60. package/dist/llm/__tests__/retry.test.d.ts.map +1 -0
  61. package/dist/llm/__tests__/retry.test.js +350 -0
  62. package/dist/llm/__tests__/retry.test.js.map +1 -0
  63. package/dist/llm/__tests__/token-counter.test.d.ts +5 -0
  64. package/dist/llm/__tests__/token-counter.test.d.ts.map +1 -0
  65. package/dist/llm/__tests__/token-counter.test.js +166 -0
  66. package/dist/llm/__tests__/token-counter.test.js.map +1 -0
  67. package/dist/llm/client.d.ts +56 -0
  68. package/dist/llm/client.d.ts.map +1 -0
  69. package/dist/llm/client.js +266 -0
  70. package/dist/llm/client.js.map +1 -0
  71. package/dist/llm/errors.d.ts +27 -0
  72. package/dist/llm/errors.d.ts.map +1 -0
  73. package/dist/llm/errors.js +35 -0
  74. package/dist/llm/errors.js.map +1 -0
  75. package/dist/llm/index.d.ts +10 -0
  76. package/dist/llm/index.d.ts.map +1 -0
  77. package/dist/llm/index.js +8 -0
  78. package/dist/llm/index.js.map +1 -0
  79. package/dist/llm/prompt-builder.d.ts +13 -0
  80. package/dist/llm/prompt-builder.d.ts.map +1 -0
  81. package/dist/llm/prompt-builder.js +107 -0
  82. package/dist/llm/prompt-builder.js.map +1 -0
  83. package/dist/llm/token-counter.d.ts +82 -0
  84. package/dist/llm/token-counter.d.ts.map +1 -0
  85. package/dist/llm/token-counter.js +109 -0
  86. package/dist/llm/token-counter.js.map +1 -0
  87. package/dist/llm/types.d.ts +96 -0
  88. package/dist/llm/types.d.ts.map +1 -0
  89. package/dist/llm/types.js +5 -0
  90. package/dist/llm/types.js.map +1 -0
  91. package/dist/schemas/__tests__/integration.test.d.ts +5 -0
  92. package/dist/schemas/__tests__/integration.test.d.ts.map +1 -0
  93. package/dist/schemas/__tests__/integration.test.js +366 -0
  94. package/dist/schemas/__tests__/integration.test.js.map +1 -0
  95. package/dist/schemas/__tests__/loader.test.d.ts +5 -0
  96. package/dist/schemas/__tests__/loader.test.d.ts.map +1 -0
  97. package/dist/schemas/__tests__/loader.test.js +271 -0
  98. package/dist/schemas/__tests__/loader.test.js.map +1 -0
  99. package/dist/schemas/__tests__/validator.test.d.ts +5 -0
  100. package/dist/schemas/__tests__/validator.test.d.ts.map +1 -0
  101. package/dist/schemas/__tests__/validator.test.js +592 -0
  102. package/dist/schemas/__tests__/validator.test.js.map +1 -0
  103. package/dist/schemas/errors.d.ts +38 -0
  104. package/dist/schemas/errors.d.ts.map +1 -0
  105. package/dist/schemas/errors.js +49 -0
  106. package/dist/schemas/errors.js.map +1 -0
  107. package/dist/schemas/index.d.ts +8 -0
  108. package/dist/schemas/index.d.ts.map +1 -0
  109. package/dist/schemas/index.js +7 -0
  110. package/dist/schemas/index.js.map +1 -0
  111. package/dist/schemas/loader.d.ts +29 -0
  112. package/dist/schemas/loader.d.ts.map +1 -0
  113. package/dist/schemas/loader.js +71 -0
  114. package/dist/schemas/loader.js.map +1 -0
  115. package/dist/schemas/types.d.ts +75 -0
  116. package/dist/schemas/types.d.ts.map +1 -0
  117. package/dist/schemas/types.js +7 -0
  118. package/dist/schemas/types.js.map +1 -0
  119. package/dist/schemas/validator.d.ts +12 -0
  120. package/dist/schemas/validator.d.ts.map +1 -0
  121. package/dist/schemas/validator.js +211 -0
  122. package/dist/schemas/validator.js.map +1 -0
  123. package/package.json +60 -0
package/dist/cli.js ADDED
@@ -0,0 +1,225 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Ordis - Schema-first extraction tool
4
+ * CLI entrypoint
5
+ */
6
+ import * as fs from 'fs/promises';
7
+ import * as path from 'path';
8
+ import { loadSchema } from './schemas/loader.js';
9
+ import { extract } from './core/pipeline.js';
10
+ import packageJson from '../package.json' with { type: 'json' };
11
+ function parseArgs(args) {
12
+ const parsed = {};
13
+ for (let i = 2; i < args.length; i++) {
14
+ const arg = args[i];
15
+ if (arg === '--help' || arg === '-h') {
16
+ showHelp();
17
+ process.exit(0);
18
+ }
19
+ if (arg === '--version' || arg === '-v') {
20
+ showVersion();
21
+ process.exit(0);
22
+ }
23
+ if (arg === '--debug') {
24
+ parsed.debug = true;
25
+ continue;
26
+ }
27
+ if (arg === '--schema' && args[i + 1]) {
28
+ parsed.schema = args[++i];
29
+ }
30
+ else if (arg === '--input' && args[i + 1]) {
31
+ parsed.input = args[++i];
32
+ }
33
+ else if (arg === '--base' && args[i + 1]) {
34
+ parsed.base = args[++i];
35
+ }
36
+ else if (arg === '--model' && args[i + 1]) {
37
+ parsed.model = args[++i];
38
+ }
39
+ else if (!arg.startsWith('--')) {
40
+ parsed.command = arg;
41
+ }
42
+ }
43
+ return parsed;
44
+ }
45
+ function showHelp() {
46
+ console.log(`
47
+ Ordis - Schema-first LLM extraction tool
48
+
49
+ USAGE:
50
+ ordis extract [OPTIONS]
51
+
52
+ OPTIONS:
53
+ --schema <path> Path to schema definition file (JSON)
54
+ --input <path> Path to input text file
55
+ --base <url> Base URL for OpenAI-compatible API
56
+ --model <name> Model name to use for extraction
57
+ --debug Enable verbose debug output
58
+ --version, -v Show version number
59
+ --help, -h Show this help message
60
+
61
+ EXAMPLES:
62
+ # Extract invoice data using local Ollama
63
+ ordis extract \\
64
+ --schema examples/invoice.schema.json \\
65
+ --input examples/invoice.txt \\
66
+ --base http://localhost:11434/v1 \\
67
+ --model llama3.1:8b
68
+
69
+ # Extract with debug output
70
+ ordis extract --schema schema.json --input data.txt --debug
71
+
72
+ For more information, visit: https://github.com/ordis-dev/ordis
73
+ `);
74
+ }
75
+ function showVersion() {
76
+ console.log(`ordis v${packageJson.version}`);
77
+ }
78
+ async function runExtraction(args) {
79
+ // Validate required arguments
80
+ if (!args.schema) {
81
+ console.error('Error: --schema is required');
82
+ console.error('Usage: ordis extract --schema <path> --input <path> --base <url> --model <name>');
83
+ process.exit(1);
84
+ }
85
+ if (!args.input) {
86
+ console.error('Error: --input is required');
87
+ console.error('Usage: ordis extract --schema <path> --input <path> --base <url> --model <name>');
88
+ process.exit(1);
89
+ }
90
+ if (!args.base) {
91
+ console.error('Error: --base is required');
92
+ console.error('Usage: ordis extract --schema <path> --input <path> --base <url> --model <name>');
93
+ process.exit(1);
94
+ }
95
+ if (!args.model) {
96
+ console.error('Error: --model is required');
97
+ console.error('Usage: ordis extract --schema <path> --input <path> --base <url> --model <name>');
98
+ process.exit(1);
99
+ }
100
+ try {
101
+ // Step 1: Load schema
102
+ if (args.debug) {
103
+ console.log(`[DEBUG] Loading schema from: ${args.schema}`);
104
+ }
105
+ const schemaPath = path.resolve(args.schema);
106
+ const schema = await loadSchema(schemaPath);
107
+ if (args.debug) {
108
+ console.log('[DEBUG] Schema loaded successfully:', {
109
+ name: schema.metadata?.name,
110
+ fields: Object.keys(schema.fields),
111
+ confidenceThreshold: schema.confidence?.threshold,
112
+ });
113
+ }
114
+ // Step 2: Read input file
115
+ if (args.debug) {
116
+ console.log(`[DEBUG] Reading input from: ${args.input}`);
117
+ }
118
+ const inputPath = path.resolve(args.input);
119
+ const inputText = await fs.readFile(inputPath, 'utf-8');
120
+ if (args.debug) {
121
+ console.log(`[DEBUG] Input loaded: ${inputText.length} characters`);
122
+ }
123
+ // Step 3: Create LLM config
124
+ const llmConfig = {
125
+ baseURL: args.base,
126
+ model: args.model,
127
+ };
128
+ if (args.debug) {
129
+ console.log('[DEBUG] LLM config:', {
130
+ baseURL: llmConfig.baseURL,
131
+ model: llmConfig.model,
132
+ });
133
+ }
134
+ // Step 4: Run extraction
135
+ if (args.debug) {
136
+ console.log('[DEBUG] Starting extraction pipeline...');
137
+ }
138
+ const result = await extract({
139
+ input: inputText,
140
+ schema,
141
+ llmConfig,
142
+ debug: args.debug,
143
+ });
144
+ // Step 5: Output results
145
+ if (args.debug) {
146
+ console.log('[DEBUG] Extraction complete');
147
+ console.log('[DEBUG] Result:', {
148
+ success: result.success,
149
+ confidence: result.confidence,
150
+ meetsThreshold: result.meetsThreshold,
151
+ errorCount: result.errors.length,
152
+ });
153
+ }
154
+ if (result.success) {
155
+ // Output successful extraction as JSON
156
+ const output = {
157
+ success: true,
158
+ data: result.data,
159
+ confidence: result.confidence,
160
+ confidenceByField: result.confidenceByField,
161
+ meetsThreshold: result.meetsThreshold,
162
+ metadata: result.metadata,
163
+ };
164
+ console.log(JSON.stringify(output, null, 2));
165
+ process.exit(0);
166
+ }
167
+ else {
168
+ // Output failure with errors
169
+ const output = {
170
+ success: false,
171
+ errors: result.errors,
172
+ data: result.data, // May be partial
173
+ confidence: result.confidence,
174
+ meetsThreshold: result.meetsThreshold,
175
+ metadata: result.metadata,
176
+ };
177
+ console.error(JSON.stringify(output, null, 2));
178
+ process.exit(1);
179
+ }
180
+ }
181
+ catch (error) {
182
+ // Handle unexpected errors
183
+ if (args.debug && error instanceof Error) {
184
+ console.error('[DEBUG] Stack trace:', error.stack);
185
+ }
186
+ const errorOutput = {
187
+ success: false,
188
+ errors: [
189
+ {
190
+ message: error instanceof Error ? error.message : String(error),
191
+ code: error.code || 'UNKNOWN_ERROR',
192
+ },
193
+ ],
194
+ };
195
+ console.error(JSON.stringify(errorOutput, null, 2));
196
+ process.exit(1);
197
+ }
198
+ }
199
+ async function main() {
200
+ const args = parseArgs(process.argv);
201
+ if (!args.command) {
202
+ console.error('Error: No command specified. Use "ordis extract" or "ordis --help"');
203
+ process.exit(1);
204
+ }
205
+ if (args.command === 'extract') {
206
+ if (args.debug) {
207
+ console.log('[DEBUG] Starting extraction with args:', {
208
+ schema: args.schema,
209
+ input: args.input,
210
+ base: args.base,
211
+ model: args.model,
212
+ });
213
+ }
214
+ await runExtraction(args);
215
+ }
216
+ else {
217
+ console.error(`Error: Unknown command "${args.command}". Use "ordis --help" for usage.`);
218
+ process.exit(1);
219
+ }
220
+ }
221
+ main().catch((error) => {
222
+ console.error('Fatal error:', error.message);
223
+ process.exit(1);
224
+ });
225
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for extraction pipeline
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=pipeline.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/pipeline.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,334 @@
1
+ /**
2
+ * Tests for extraction pipeline
3
+ */
4
+ import { describe, it, expect, beforeEach, vi } from 'vitest';
5
+ import { ExtractionPipeline, extract } from '../pipeline.js';
6
+ // Mock fetch globally
7
+ const mockFetch = vi.fn();
8
+ global.fetch = mockFetch;
9
+ describe('Extraction Pipeline', () => {
10
+ beforeEach(() => {
11
+ vi.clearAllMocks();
12
+ });
13
+ describe('successful extraction', () => {
14
+ it('should complete full pipeline', async () => {
15
+ // Mock successful LLM response
16
+ mockFetch.mockResolvedValueOnce({
17
+ ok: true,
18
+ json: async () => ({
19
+ choices: [{
20
+ message: {
21
+ content: JSON.stringify({
22
+ data: {
23
+ name: 'John Doe',
24
+ age: 30,
25
+ },
26
+ confidence: 95,
27
+ confidenceByField: {
28
+ name: 98,
29
+ age: 92,
30
+ },
31
+ }),
32
+ },
33
+ }],
34
+ }),
35
+ });
36
+ const schema = {
37
+ fields: {
38
+ name: { type: 'string' },
39
+ age: { type: 'number' },
40
+ },
41
+ };
42
+ const llmConfig = {
43
+ baseURL: 'http://localhost:11434/v1',
44
+ model: 'llama3',
45
+ };
46
+ const pipeline = new ExtractionPipeline();
47
+ const result = await pipeline.extract({
48
+ input: 'My name is John Doe and I am 30 years old',
49
+ schema,
50
+ llmConfig,
51
+ });
52
+ expect(result.success).toBe(true);
53
+ expect(result.data).toEqual({ name: 'John Doe', age: 30 });
54
+ expect(result.confidence).toBe(95);
55
+ expect(result.meetsThreshold).toBe(true);
56
+ expect(result.errors).toHaveLength(0);
57
+ });
58
+ it('should include debug steps when enabled', async () => {
59
+ // Mock successful LLM response
60
+ mockFetch.mockResolvedValueOnce({
61
+ ok: true,
62
+ json: async () => ({
63
+ choices: [{
64
+ message: {
65
+ content: JSON.stringify({
66
+ data: { name: 'Alice' },
67
+ confidence: 90,
68
+ confidenceByField: { name: 90 },
69
+ }),
70
+ },
71
+ }],
72
+ }),
73
+ });
74
+ const schema = {
75
+ fields: {
76
+ name: { type: 'string' },
77
+ },
78
+ };
79
+ const llmConfig = {
80
+ baseURL: 'http://localhost:11434/v1',
81
+ model: 'llama3',
82
+ };
83
+ const result = await extract({
84
+ input: 'Name: Alice',
85
+ schema,
86
+ llmConfig,
87
+ debug: true,
88
+ });
89
+ expect(result.success).toBe(true);
90
+ expect(result.steps).toBeDefined();
91
+ expect(result.steps?.length).toBeGreaterThan(0);
92
+ expect(result.steps?.[0].step).toBe('create_client');
93
+ });
94
+ });
95
+ describe('validation failures', () => {
96
+ it('should fail on missing required field', async () => {
97
+ // Mock LLM response with missing field
98
+ mockFetch.mockResolvedValueOnce({
99
+ ok: true,
100
+ json: async () => ({
101
+ choices: [{
102
+ message: {
103
+ content: JSON.stringify({
104
+ data: {
105
+ name: 'John',
106
+ },
107
+ confidence: 95,
108
+ confidenceByField: {
109
+ name: 95,
110
+ },
111
+ }),
112
+ },
113
+ }],
114
+ }),
115
+ });
116
+ const schema = {
117
+ fields: {
118
+ name: { type: 'string' },
119
+ age: { type: 'number' },
120
+ },
121
+ };
122
+ const llmConfig = {
123
+ baseURL: 'http://localhost:11434/v1',
124
+ model: 'llama3',
125
+ };
126
+ const pipeline = new ExtractionPipeline();
127
+ const result = await pipeline.extract({
128
+ input: 'Name: John',
129
+ schema,
130
+ llmConfig,
131
+ });
132
+ expect(result.success).toBe(false);
133
+ expect(result.errors.length).toBeGreaterThan(0);
134
+ expect(result.errors[0].field).toBe('age');
135
+ expect(result.errors[0].code).toBe('FIELD_MISSING');
136
+ });
137
+ it('should fail on type mismatch', async () => {
138
+ // Mock LLM response with wrong type
139
+ mockFetch.mockResolvedValueOnce({
140
+ ok: true,
141
+ json: async () => ({
142
+ choices: [{
143
+ message: {
144
+ content: JSON.stringify({
145
+ data: {
146
+ name: 'John',
147
+ age: 'thirty',
148
+ },
149
+ confidence: 95,
150
+ confidenceByField: {
151
+ name: 95,
152
+ age: 80,
153
+ },
154
+ }),
155
+ },
156
+ }],
157
+ }),
158
+ });
159
+ const schema = {
160
+ fields: {
161
+ name: { type: 'string' },
162
+ age: { type: 'number' },
163
+ },
164
+ };
165
+ const llmConfig = {
166
+ baseURL: 'http://localhost:11434/v1',
167
+ model: 'llama3',
168
+ };
169
+ const pipeline = new ExtractionPipeline();
170
+ const result = await pipeline.extract({
171
+ input: 'test',
172
+ schema,
173
+ llmConfig,
174
+ });
175
+ expect(result.success).toBe(false);
176
+ expect(result.errors.some(e => e.code === 'TYPE_MISMATCH')).toBe(true);
177
+ });
178
+ });
179
+ describe('confidence threshold', () => {
180
+ it('should pass when confidence meets threshold', async () => {
181
+ mockFetch.mockResolvedValueOnce({
182
+ ok: true,
183
+ json: async () => ({
184
+ choices: [{
185
+ message: {
186
+ content: JSON.stringify({
187
+ data: { name: 'John' },
188
+ confidence: 90,
189
+ confidenceByField: { name: 90 },
190
+ }),
191
+ },
192
+ }],
193
+ }),
194
+ });
195
+ const schema = {
196
+ fields: {
197
+ name: { type: 'string' },
198
+ },
199
+ confidence: {
200
+ threshold: 85,
201
+ failOnLowConfidence: true,
202
+ },
203
+ };
204
+ const llmConfig = {
205
+ baseURL: 'http://localhost:11434/v1',
206
+ model: 'llama3',
207
+ };
208
+ const pipeline = new ExtractionPipeline();
209
+ const result = await pipeline.extract({
210
+ input: 'John',
211
+ schema,
212
+ llmConfig,
213
+ });
214
+ expect(result.success).toBe(true);
215
+ expect(result.meetsThreshold).toBe(true);
216
+ });
217
+ it('should fail when confidence below threshold', async () => {
218
+ mockFetch.mockResolvedValueOnce({
219
+ ok: true,
220
+ json: async () => ({
221
+ choices: [{
222
+ message: {
223
+ content: JSON.stringify({
224
+ data: { name: 'John' },
225
+ confidence: 70,
226
+ confidenceByField: { name: 70 },
227
+ }),
228
+ },
229
+ }],
230
+ }),
231
+ });
232
+ const schema = {
233
+ fields: {
234
+ name: { type: 'string' },
235
+ },
236
+ confidence: {
237
+ threshold: 85,
238
+ failOnLowConfidence: true,
239
+ },
240
+ };
241
+ const llmConfig = {
242
+ baseURL: 'http://localhost:11434/v1',
243
+ model: 'llama3',
244
+ };
245
+ const pipeline = new ExtractionPipeline();
246
+ const result = await pipeline.extract({
247
+ input: 'test',
248
+ schema,
249
+ llmConfig,
250
+ });
251
+ expect(result.success).toBe(false);
252
+ expect(result.meetsThreshold).toBe(false);
253
+ expect(result.errors.some(e => e.code === 'CONFIDENCE_ERROR')).toBe(true);
254
+ });
255
+ it('should warn but succeed when failOnLowConfidence is false', async () => {
256
+ mockFetch.mockResolvedValueOnce({
257
+ ok: true,
258
+ json: async () => ({
259
+ choices: [{
260
+ message: {
261
+ content: JSON.stringify({
262
+ data: { name: 'John' },
263
+ confidence: 70,
264
+ confidenceByField: { name: 70 },
265
+ }),
266
+ },
267
+ }],
268
+ }),
269
+ });
270
+ const schema = {
271
+ fields: {
272
+ name: { type: 'string' },
273
+ },
274
+ confidence: {
275
+ threshold: 85,
276
+ failOnLowConfidence: false,
277
+ },
278
+ };
279
+ const llmConfig = {
280
+ baseURL: 'http://localhost:11434/v1',
281
+ model: 'llama3',
282
+ };
283
+ const pipeline = new ExtractionPipeline();
284
+ const result = await pipeline.extract({
285
+ input: 'test',
286
+ schema,
287
+ llmConfig,
288
+ });
289
+ expect(result.success).toBe(true);
290
+ expect(result.meetsThreshold).toBe(false);
291
+ });
292
+ });
293
+ describe('metadata', () => {
294
+ it('should include metadata in result', async () => {
295
+ mockFetch.mockResolvedValueOnce({
296
+ ok: true,
297
+ json: async () => ({
298
+ choices: [{
299
+ message: {
300
+ content: JSON.stringify({
301
+ data: { name: 'John' },
302
+ confidence: 90,
303
+ confidenceByField: { name: 90 },
304
+ }),
305
+ },
306
+ }],
307
+ }),
308
+ });
309
+ const schema = {
310
+ fields: {
311
+ name: { type: 'string' },
312
+ },
313
+ metadata: {
314
+ name: 'Test Schema',
315
+ },
316
+ };
317
+ const llmConfig = {
318
+ baseURL: 'http://localhost:11434/v1',
319
+ model: 'llama3',
320
+ };
321
+ const pipeline = new ExtractionPipeline();
322
+ const result = await pipeline.extract({
323
+ input: 'test',
324
+ schema,
325
+ llmConfig,
326
+ });
327
+ expect(result.metadata).toBeDefined();
328
+ expect(result.metadata.model).toBe('llama3');
329
+ expect(result.metadata.schemaName).toBe('Test Schema');
330
+ expect(result.metadata.duration).toBeGreaterThanOrEqual(0);
331
+ });
332
+ });
333
+ });
334
+ //# sourceMappingURL=pipeline.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.test.js","sourceRoot":"","sources":["../../../src/core/__tests__/pipeline.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for output validator
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=validator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/validator.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}