@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
@@ -43,10 +43,12 @@ export interface Schema {
43
43
  * Validation error for a specific field
44
44
  */
45
45
  export interface ValidationError {
46
- field: string;
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;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,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"}
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.1.1",
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,5 +0,0 @@
1
- /**
2
- * Tests for programmatic API imports
3
- */
4
- export {};
5
- //# sourceMappingURL=api.test.d.ts.map
@@ -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,6 +0,0 @@
1
- /**
2
- * Tests for CLI entrypoint
3
- * Note: Full end-to-end tests require running the CLI process
4
- */
5
- export {};
6
- //# sourceMappingURL=cli.test.d.ts.map
@@ -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,5 +0,0 @@
1
- /**
2
- * Tests for CLI interface
3
- */
4
- export {};
5
- //# sourceMappingURL=cli.test.d.ts.map
@@ -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,5 +0,0 @@
1
- /**
2
- * Tests for extraction pipeline
3
- */
4
- export {};
5
- //# sourceMappingURL=pipeline.test.d.ts.map
@@ -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