@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.
- package/README.md +47 -0
- package/dist/cli.js +20 -4
- package/dist/cli.js.map +1 -1
- package/dist/core/error-formatter.d.ts +35 -0
- package/dist/core/error-formatter.d.ts.map +1 -0
- package/dist/core/error-formatter.js +319 -0
- package/dist/core/error-formatter.js.map +1 -0
- package/dist/core/index.d.ts +3 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/pipeline.d.ts.map +1 -1
- package/dist/core/pipeline.js +17 -3
- package/dist/core/pipeline.js.map +1 -1
- package/dist/core/preprocessor.d.ts +35 -0
- package/dist/core/preprocessor.d.ts.map +1 -0
- package/dist/core/preprocessor.js +297 -0
- package/dist/core/preprocessor.js.map +1 -0
- package/dist/core/types.d.ts +24 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/validator.d.ts +3 -1
- package/dist/core/validator.d.ts.map +1 -1
- package/dist/core/validator.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/llm/client.d.ts.map +1 -1
- package/dist/llm/client.js +23 -3
- package/dist/llm/client.js.map +1 -1
- package/dist/llm/types.d.ts +2 -0
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/schemas/types.d.ts +3 -1
- package/dist/schemas/types.d.ts.map +1 -1
- package/package.json +4 -1
- package/dist/__tests__/api.test.d.ts +0 -5
- package/dist/__tests__/api.test.d.ts.map +0 -1
- package/dist/__tests__/api.test.js +0 -95
- package/dist/__tests__/api.test.js.map +0 -1
- package/dist/__tests__/cli.test.d.ts +0 -6
- package/dist/__tests__/cli.test.d.ts.map +0 -1
- package/dist/__tests__/cli.test.js +0 -103
- package/dist/__tests__/cli.test.js.map +0 -1
- package/dist/cli/__tests__/cli.test.d.ts +0 -5
- package/dist/cli/__tests__/cli.test.d.ts.map +0 -1
- package/dist/cli/__tests__/cli.test.js +0 -13
- package/dist/cli/__tests__/cli.test.js.map +0 -1
- package/dist/core/__tests__/pipeline.test.d.ts +0 -5
- package/dist/core/__tests__/pipeline.test.d.ts.map +0 -1
- package/dist/core/__tests__/pipeline.test.js +0 -334
- package/dist/core/__tests__/pipeline.test.js.map +0 -1
- package/dist/core/__tests__/validator.test.d.ts +0 -5
- package/dist/core/__tests__/validator.test.d.ts.map +0 -1
- package/dist/core/__tests__/validator.test.js +0 -124
- package/dist/core/__tests__/validator.test.js.map +0 -1
- package/dist/llm/__tests__/client.test.d.ts +0 -5
- package/dist/llm/__tests__/client.test.d.ts.map +0 -1
- package/dist/llm/__tests__/client.test.js +0 -350
- package/dist/llm/__tests__/client.test.js.map +0 -1
- package/dist/llm/__tests__/prompt-builder.test.d.ts +0 -5
- package/dist/llm/__tests__/prompt-builder.test.d.ts.map +0 -1
- package/dist/llm/__tests__/prompt-builder.test.js +0 -171
- package/dist/llm/__tests__/prompt-builder.test.js.map +0 -1
- package/dist/llm/__tests__/retry.test.d.ts +0 -5
- package/dist/llm/__tests__/retry.test.d.ts.map +0 -1
- package/dist/llm/__tests__/retry.test.js +0 -350
- package/dist/llm/__tests__/retry.test.js.map +0 -1
- package/dist/llm/__tests__/token-counter.test.d.ts +0 -5
- package/dist/llm/__tests__/token-counter.test.d.ts.map +0 -1
- package/dist/llm/__tests__/token-counter.test.js +0 -166
- package/dist/llm/__tests__/token-counter.test.js.map +0 -1
- package/dist/schemas/__tests__/integration.test.d.ts +0 -5
- package/dist/schemas/__tests__/integration.test.d.ts.map +0 -1
- package/dist/schemas/__tests__/integration.test.js +0 -366
- package/dist/schemas/__tests__/integration.test.js.map +0 -1
- package/dist/schemas/__tests__/loader.test.d.ts +0 -5
- package/dist/schemas/__tests__/loader.test.d.ts.map +0 -1
- package/dist/schemas/__tests__/loader.test.js +0 -271
- package/dist/schemas/__tests__/loader.test.js.map +0 -1
- package/dist/schemas/__tests__/validator.test.d.ts +0 -5
- package/dist/schemas/__tests__/validator.test.d.ts.map +0 -1
- package/dist/schemas/__tests__/validator.test.js +0 -592
- package/dist/schemas/__tests__/validator.test.js.map +0 -1
package/dist/schemas/types.d.ts
CHANGED
|
@@ -43,10 +43,12 @@ export interface Schema {
|
|
|
43
43
|
* Validation error for a specific field
|
|
44
44
|
*/
|
|
45
45
|
export interface ValidationError {
|
|
46
|
-
field
|
|
46
|
+
field?: string;
|
|
47
47
|
message: string;
|
|
48
48
|
code: string;
|
|
49
49
|
value?: unknown;
|
|
50
|
+
expected?: unknown;
|
|
51
|
+
actual?: unknown;
|
|
50
52
|
confidence?: number;
|
|
51
53
|
}
|
|
52
54
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schemas/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,UAAU,CAAC,EAAE;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,OAAO,CAAC;KAChC,CAAC;IACF,MAAM,CAAC,EAAE;QACL,sBAAsB,CAAC,EAAE,OAAO,CAAC;KACpC,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schemas/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,UAAU,CAAC,EAAE;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,OAAO,CAAC;KAChC,CAAC;IACF,MAAM,CAAC,EAAE;QACL,sBAAsB,CAAC,EAAE,OAAO,CAAC;KACpC,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE;QACP,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACL"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ordis-dev/ordis",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Schema-first LLM extraction tool that turns unstructured text into validated structured data",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -64,5 +64,8 @@
|
|
|
64
64
|
"tsx": "^4.21.0",
|
|
65
65
|
"typescript": "^5.9.3",
|
|
66
66
|
"vitest": "^4.0.15"
|
|
67
|
+
},
|
|
68
|
+
"dependencies": {
|
|
69
|
+
"node-html-parser": "^7.0.2"
|
|
67
70
|
}
|
|
68
71
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/api.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for programmatic API imports
|
|
3
|
-
*/
|
|
4
|
-
import { describe, it, expect } from 'vitest';
|
|
5
|
-
describe('Programmatic API', () => {
|
|
6
|
-
describe('Core exports', () => {
|
|
7
|
-
it('should export extract function', async () => {
|
|
8
|
-
const { extract } = await import('../index.js');
|
|
9
|
-
expect(extract).toBeDefined();
|
|
10
|
-
expect(typeof extract).toBe('function');
|
|
11
|
-
});
|
|
12
|
-
it('should export ExtractionPipeline class', async () => {
|
|
13
|
-
const { ExtractionPipeline } = await import('../index.js');
|
|
14
|
-
expect(ExtractionPipeline).toBeDefined();
|
|
15
|
-
expect(typeof ExtractionPipeline).toBe('function');
|
|
16
|
-
});
|
|
17
|
-
it('should export validateExtractedData', async () => {
|
|
18
|
-
const { validateExtractedData } = await import('../index.js');
|
|
19
|
-
expect(validateExtractedData).toBeDefined();
|
|
20
|
-
expect(typeof validateExtractedData).toBe('function');
|
|
21
|
-
});
|
|
22
|
-
it('should export PipelineError', async () => {
|
|
23
|
-
const { PipelineError, PipelineErrorCodes } = await import('../index.js');
|
|
24
|
-
expect(PipelineError).toBeDefined();
|
|
25
|
-
expect(PipelineErrorCodes).toBeDefined();
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
describe('Schema exports', () => {
|
|
29
|
-
it('should export loadSchema function', async () => {
|
|
30
|
-
const { loadSchema } = await import('../index.js');
|
|
31
|
-
expect(loadSchema).toBeDefined();
|
|
32
|
-
expect(typeof loadSchema).toBe('function');
|
|
33
|
-
});
|
|
34
|
-
it('should export parseSchema function', async () => {
|
|
35
|
-
const { parseSchema } = await import('../index.js');
|
|
36
|
-
expect(parseSchema).toBeDefined();
|
|
37
|
-
expect(typeof parseSchema).toBe('function');
|
|
38
|
-
});
|
|
39
|
-
it('should export validateSchema function', async () => {
|
|
40
|
-
const { validateSchema } = await import('../index.js');
|
|
41
|
-
expect(validateSchema).toBeDefined();
|
|
42
|
-
expect(typeof validateSchema).toBe('function');
|
|
43
|
-
});
|
|
44
|
-
it('should export SchemaValidationError', async () => {
|
|
45
|
-
const { SchemaValidationError, SchemaErrorCodes } = await import('../index.js');
|
|
46
|
-
expect(SchemaValidationError).toBeDefined();
|
|
47
|
-
expect(SchemaErrorCodes).toBeDefined();
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
describe('LLM exports', () => {
|
|
51
|
-
it('should export LLMClient class', async () => {
|
|
52
|
-
const { LLMClient } = await import('../index.js');
|
|
53
|
-
expect(LLMClient).toBeDefined();
|
|
54
|
-
expect(typeof LLMClient).toBe('function');
|
|
55
|
-
});
|
|
56
|
-
it('should export createLLMClient function', async () => {
|
|
57
|
-
const { createLLMClient } = await import('../index.js');
|
|
58
|
-
expect(createLLMClient).toBeDefined();
|
|
59
|
-
expect(typeof createLLMClient).toBe('function');
|
|
60
|
-
});
|
|
61
|
-
it('should export LLMPresets', async () => {
|
|
62
|
-
const { LLMPresets } = await import('../index.js');
|
|
63
|
-
expect(LLMPresets).toBeDefined();
|
|
64
|
-
expect(LLMPresets.ollama).toBeDefined();
|
|
65
|
-
expect(LLMPresets.lmStudio).toBeDefined();
|
|
66
|
-
expect(LLMPresets.openai).toBeDefined();
|
|
67
|
-
});
|
|
68
|
-
it('should export buildSystemPrompt function', async () => {
|
|
69
|
-
const { buildSystemPrompt } = await import('../index.js');
|
|
70
|
-
expect(buildSystemPrompt).toBeDefined();
|
|
71
|
-
expect(typeof buildSystemPrompt).toBe('function');
|
|
72
|
-
});
|
|
73
|
-
it('should export LLMError', async () => {
|
|
74
|
-
const { LLMError, LLMErrorCodes } = await import('../index.js');
|
|
75
|
-
expect(LLMError).toBeDefined();
|
|
76
|
-
expect(LLMErrorCodes).toBeDefined();
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
describe('End-to-end library usage', () => {
|
|
80
|
-
it('should support basic extraction workflow', async () => {
|
|
81
|
-
const { loadSchemaFromObject, extract } = await import('../index.js');
|
|
82
|
-
const schema = loadSchemaFromObject({
|
|
83
|
-
fields: {
|
|
84
|
-
name: { type: 'string' },
|
|
85
|
-
amount: { type: 'number' }
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
expect(schema).toBeDefined();
|
|
89
|
-
expect(schema.fields).toBeDefined();
|
|
90
|
-
expect(schema.fields.name).toBeDefined();
|
|
91
|
-
expect(schema.fields.amount).toBeDefined();
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
//# sourceMappingURL=api.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"api.test.js","sourceRoot":"","sources":["../../src/__tests__/api.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cli.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for CLI entrypoint
|
|
3
|
-
* Note: Full end-to-end tests require running the CLI process
|
|
4
|
-
*/
|
|
5
|
-
import { describe, it, expect } from 'vitest';
|
|
6
|
-
import { exec } from 'child_process';
|
|
7
|
-
import { promisify } from 'util';
|
|
8
|
-
import * as path from 'path';
|
|
9
|
-
const execAsync = promisify(exec);
|
|
10
|
-
const CLI_PATH = path.join(process.cwd(), 'dist/cli.js');
|
|
11
|
-
describe('CLI', () => {
|
|
12
|
-
describe('help command', () => {
|
|
13
|
-
it('should display help with --help flag', async () => {
|
|
14
|
-
const { stdout } = await execAsync(`node ${CLI_PATH} --help`);
|
|
15
|
-
expect(stdout).toContain('Ordis');
|
|
16
|
-
expect(stdout).toContain('USAGE:');
|
|
17
|
-
expect(stdout).toContain('ordis extract');
|
|
18
|
-
expect(stdout).toContain('--schema');
|
|
19
|
-
expect(stdout).toContain('--input');
|
|
20
|
-
expect(stdout).toContain('--base');
|
|
21
|
-
expect(stdout).toContain('--model');
|
|
22
|
-
});
|
|
23
|
-
it('should display help with -h flag', async () => {
|
|
24
|
-
const { stdout } = await execAsync(`node ${CLI_PATH} -h`);
|
|
25
|
-
expect(stdout).toContain('Ordis');
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
describe('version command', () => {
|
|
29
|
-
it('should display version with --version flag', async () => {
|
|
30
|
-
const { stdout } = await execAsync(`node ${CLI_PATH} --version`);
|
|
31
|
-
expect(stdout).toContain('ordis v');
|
|
32
|
-
expect(stdout).toMatch(/v\d+\.\d+\.\d+/);
|
|
33
|
-
});
|
|
34
|
-
it('should display version with -v flag', async () => {
|
|
35
|
-
const { stdout } = await execAsync(`node ${CLI_PATH} -v`);
|
|
36
|
-
expect(stdout).toContain('ordis v');
|
|
37
|
-
expect(stdout).toMatch(/v\d+\.\d+\.\d+/);
|
|
38
|
-
});
|
|
39
|
-
});
|
|
40
|
-
describe('error handling', () => {
|
|
41
|
-
it('should error when no command specified', async () => {
|
|
42
|
-
try {
|
|
43
|
-
await execAsync(`node ${CLI_PATH}`);
|
|
44
|
-
expect.fail('Should have thrown an error');
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
expect(error.code).toBe(1);
|
|
48
|
-
expect(error.stderr).toContain('No command specified');
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
it('should error when unknown command specified', async () => {
|
|
52
|
-
try {
|
|
53
|
-
await execAsync(`node ${CLI_PATH} unknown`);
|
|
54
|
-
expect.fail('Should have thrown an error');
|
|
55
|
-
}
|
|
56
|
-
catch (error) {
|
|
57
|
-
expect(error.code).toBe(1);
|
|
58
|
-
expect(error.stderr).toContain('Unknown command');
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
it('should error when --schema is missing', async () => {
|
|
62
|
-
try {
|
|
63
|
-
await execAsync(`node ${CLI_PATH} extract --input test.txt --base http://localhost --model test`);
|
|
64
|
-
expect.fail('Should have thrown an error');
|
|
65
|
-
}
|
|
66
|
-
catch (error) {
|
|
67
|
-
expect(error.code).toBe(1);
|
|
68
|
-
expect(error.stderr).toContain('--schema is required');
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
it('should error when --input is missing', async () => {
|
|
72
|
-
try {
|
|
73
|
-
await execAsync(`node ${CLI_PATH} extract --schema test.json --base http://localhost --model test`);
|
|
74
|
-
expect.fail('Should have thrown an error');
|
|
75
|
-
}
|
|
76
|
-
catch (error) {
|
|
77
|
-
expect(error.code).toBe(1);
|
|
78
|
-
expect(error.stderr).toContain('--input is required');
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
it('should error when --base is missing', async () => {
|
|
82
|
-
try {
|
|
83
|
-
await execAsync(`node ${CLI_PATH} extract --schema test.json --input test.txt --model test`);
|
|
84
|
-
expect.fail('Should have thrown an error');
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
expect(error.code).toBe(1);
|
|
88
|
-
expect(error.stderr).toContain('--base is required');
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
it('should error when --model is missing', async () => {
|
|
92
|
-
try {
|
|
93
|
-
await execAsync(`node ${CLI_PATH} extract --schema test.json --input test.txt --base http://localhost`);
|
|
94
|
-
expect.fail('Should have thrown an error');
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
expect(error.code).toBe(1);
|
|
98
|
-
expect(error.stderr).toContain('--model is required');
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
//# sourceMappingURL=cli.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../src/__tests__/cli.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/cli.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Tests for CLI interface
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const vitest_1 = require("vitest");
|
|
7
|
-
(0, vitest_1.describe)('CLI', () => {
|
|
8
|
-
(0, vitest_1.it)('should export main entry point', () => {
|
|
9
|
-
// Simple smoke test to ensure CLI module compiles
|
|
10
|
-
(0, vitest_1.expect)(true).toBe(true);
|
|
11
|
-
});
|
|
12
|
-
});
|
|
13
|
-
//# sourceMappingURL=cli.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/cli.test.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAEH,mCAA8C;AAE9C,IAAA,iBAAQ,EAAC,KAAK,EAAE,GAAG,EAAE;IACjB,IAAA,WAAE,EAAC,gCAAgC,EAAE,GAAG,EAAE;QACtC,kDAAkD;QAClD,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.test.d.ts","sourceRoot":"","sources":["../../../src/core/__tests__/pipeline.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,334 +0,0 @@
|
|
|
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
|