@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
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Output validator - validates extracted data against schema
3
+ */
4
+ import { PipelineErrorCodes } from './errors.js';
5
+ /**
6
+ * Validates extracted data against schema
7
+ */
8
+ export function validateExtractedData(data, schema) {
9
+ const errors = [];
10
+ // Check required fields
11
+ for (const [fieldName, fieldDef] of Object.entries(schema.fields)) {
12
+ const value = data[fieldName];
13
+ // Check if field is missing
14
+ if (value === undefined || value === null) {
15
+ if (!fieldDef.optional) {
16
+ errors.push({
17
+ field: fieldName,
18
+ message: `Required field '${fieldName}' is missing`,
19
+ code: PipelineErrorCodes.FIELD_MISSING,
20
+ });
21
+ }
22
+ continue;
23
+ }
24
+ // Validate field type and constraints
25
+ const fieldErrors = validateField(fieldName, value, fieldDef);
26
+ errors.push(...fieldErrors);
27
+ }
28
+ return {
29
+ valid: errors.length === 0,
30
+ errors,
31
+ };
32
+ }
33
+ /**
34
+ * Validates a single field
35
+ */
36
+ function validateField(fieldName, value, fieldDef) {
37
+ const errors = [];
38
+ switch (fieldDef.type) {
39
+ case 'string':
40
+ if (typeof value !== 'string') {
41
+ errors.push({
42
+ field: fieldName,
43
+ message: `Field '${fieldName}' must be a string, got ${typeof value}`,
44
+ code: PipelineErrorCodes.TYPE_MISMATCH,
45
+ value,
46
+ });
47
+ }
48
+ else if (fieldDef.pattern) {
49
+ try {
50
+ const regex = new RegExp(fieldDef.pattern);
51
+ if (!regex.test(value)) {
52
+ errors.push({
53
+ field: fieldName,
54
+ message: `Field '${fieldName}' does not match pattern: ${fieldDef.pattern}`,
55
+ code: PipelineErrorCodes.FIELD_INVALID,
56
+ value,
57
+ });
58
+ }
59
+ }
60
+ catch (e) {
61
+ // Invalid regex in schema - should be caught by schema validation
62
+ }
63
+ }
64
+ break;
65
+ case 'number':
66
+ if (typeof value !== 'number' || isNaN(value)) {
67
+ errors.push({
68
+ field: fieldName,
69
+ message: `Field '${fieldName}' must be a number, got ${typeof value}`,
70
+ code: PipelineErrorCodes.TYPE_MISMATCH,
71
+ value,
72
+ });
73
+ }
74
+ else {
75
+ if (fieldDef.min !== undefined && value < fieldDef.min) {
76
+ errors.push({
77
+ field: fieldName,
78
+ message: `Field '${fieldName}' must be >= ${fieldDef.min}, got ${value}`,
79
+ code: PipelineErrorCodes.FIELD_INVALID,
80
+ value,
81
+ });
82
+ }
83
+ if (fieldDef.max !== undefined && value > fieldDef.max) {
84
+ errors.push({
85
+ field: fieldName,
86
+ message: `Field '${fieldName}' must be <= ${fieldDef.max}, got ${value}`,
87
+ code: PipelineErrorCodes.FIELD_INVALID,
88
+ value,
89
+ });
90
+ }
91
+ }
92
+ break;
93
+ case 'date':
94
+ // Accept string or Date object
95
+ if (typeof value !== 'string' && !(value instanceof Date)) {
96
+ errors.push({
97
+ field: fieldName,
98
+ message: `Field '${fieldName}' must be a date string or Date object`,
99
+ code: PipelineErrorCodes.TYPE_MISMATCH,
100
+ value,
101
+ });
102
+ }
103
+ else {
104
+ // Try to parse as date
105
+ const dateValue = typeof value === 'string' ? new Date(value) : value;
106
+ if (isNaN(dateValue.getTime())) {
107
+ errors.push({
108
+ field: fieldName,
109
+ message: `Field '${fieldName}' is not a valid date`,
110
+ code: PipelineErrorCodes.FIELD_INVALID,
111
+ value,
112
+ });
113
+ }
114
+ }
115
+ break;
116
+ case 'enum':
117
+ if (typeof value !== 'string') {
118
+ errors.push({
119
+ field: fieldName,
120
+ message: `Field '${fieldName}' must be a string for enum type, got ${typeof value}`,
121
+ code: PipelineErrorCodes.TYPE_MISMATCH,
122
+ value,
123
+ });
124
+ }
125
+ else if (fieldDef.enum && !fieldDef.enum.includes(value)) {
126
+ errors.push({
127
+ field: fieldName,
128
+ message: `Field '${fieldName}' must be one of: ${fieldDef.enum.join(', ')}. Got: ${value}`,
129
+ code: PipelineErrorCodes.FIELD_INVALID,
130
+ value,
131
+ });
132
+ }
133
+ break;
134
+ case 'boolean':
135
+ if (typeof value !== 'boolean') {
136
+ errors.push({
137
+ field: fieldName,
138
+ message: `Field '${fieldName}' must be a boolean, got ${typeof value}`,
139
+ code: PipelineErrorCodes.TYPE_MISMATCH,
140
+ value,
141
+ });
142
+ }
143
+ break;
144
+ }
145
+ return errors;
146
+ }
147
+ //# sourceMappingURL=validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/core/validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Ordis - Public API
3
+ * Main entry point for programmatic usage
4
+ */
5
+ export { ExtractionPipeline, extract } from './core/pipeline.js';
6
+ export { validateExtractedData } from './core/validator.js';
7
+ export { PipelineError, PipelineErrorCodes } from './core/errors.js';
8
+ export type { PipelineConfig, ExtractionRequest, PipelineResult, StepResult, } from './core/types.js';
9
+ export { loadSchema, parseSchema, loadSchemaFromObject } from './schemas/loader.js';
10
+ export { validateSchema } from './schemas/validator.js';
11
+ export { SchemaValidationError, ErrorCodes as SchemaErrorCodes } from './schemas/errors.js';
12
+ export type { Schema, FieldDefinition, FieldType, ValidationError, ValidationResult } from './schemas/types.js';
13
+ export { LLMClient, createLLMClient, LLMPresets } from './llm/client.js';
14
+ export { LLMError, LLMErrorCodes } from './llm/errors.js';
15
+ export { buildSystemPrompt, buildUserPrompt } from './llm/prompt-builder.js';
16
+ export { TokenCounter, estimateTokens } from './llm/token-counter.js';
17
+ export type { LLMConfig, RetryConfig, ChatMessage, LLMRequest, LLMResponse, ExtractionOptions, ExtractionResponse, TokenBudget, } from './llm/types.js';
18
+ export type { TokenUsage, TokenCounterConfig } from './llm/token-counter.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACrE,YAAY,EACR,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,UAAU,GACb,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,YAAY,EACR,MAAM,EACN,eAAe,EACf,SAAS,EACT,eAAe,EACf,gBAAgB,EACnB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACtE,YAAY,EACR,SAAS,EACT,WAAW,EACX,WAAW,EACX,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Ordis - Public API
3
+ * Main entry point for programmatic usage
4
+ */
5
+ // Core pipeline exports
6
+ export { ExtractionPipeline, extract } from './core/pipeline.js';
7
+ export { validateExtractedData } from './core/validator.js';
8
+ export { PipelineError, PipelineErrorCodes } from './core/errors.js';
9
+ // Schema exports
10
+ export { loadSchema, parseSchema, loadSchemaFromObject } from './schemas/loader.js';
11
+ export { validateSchema } from './schemas/validator.js';
12
+ export { SchemaValidationError, ErrorCodes as SchemaErrorCodes } from './schemas/errors.js';
13
+ // LLM exports
14
+ export { LLMClient, createLLMClient, LLMPresets } from './llm/client.js';
15
+ export { LLMError, LLMErrorCodes } from './llm/errors.js';
16
+ export { buildSystemPrompt, buildUserPrompt } from './llm/prompt-builder.js';
17
+ export { TokenCounter, estimateTokens } from './llm/token-counter.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAwB;AACxB,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAQrE,iBAAiB;AACjB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAS5F,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for LLM client
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../../src/llm/__tests__/client.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,350 @@
1
+ /**
2
+ * Tests for LLM client
3
+ */
4
+ import { describe, it, expect, beforeEach, vi } from 'vitest';
5
+ import { LLMClient, LLMPresets } from '../client.js';
6
+ import { LLMError, LLMErrorCodes } from '../errors.js';
7
+ // Mock fetch globally
8
+ global.fetch = vi.fn();
9
+ describe('LLMClient', () => {
10
+ beforeEach(() => {
11
+ vi.clearAllMocks();
12
+ });
13
+ describe('extract', () => {
14
+ it('should extract data successfully', async () => {
15
+ const mockResponse = {
16
+ id: 'test-id',
17
+ object: 'chat.completion',
18
+ created: Date.now(),
19
+ model: 'test-model',
20
+ choices: [
21
+ {
22
+ index: 0,
23
+ message: {
24
+ role: 'assistant',
25
+ content: JSON.stringify({
26
+ data: { name: 'John Doe', age: 30 },
27
+ confidence: 95,
28
+ confidenceByField: { name: 98, age: 92 },
29
+ }),
30
+ },
31
+ finish_reason: 'stop',
32
+ },
33
+ ],
34
+ };
35
+ vi.mocked(fetch).mockResolvedValueOnce({
36
+ ok: true,
37
+ json: async () => mockResponse,
38
+ });
39
+ const client = new LLMClient({
40
+ baseURL: 'http://localhost:11434/v1',
41
+ model: 'llama3',
42
+ });
43
+ const schema = {
44
+ fields: {
45
+ name: { type: 'string' },
46
+ age: { type: 'number' },
47
+ },
48
+ };
49
+ const result = await client.extract({
50
+ schema,
51
+ input: 'My name is John Doe and I am 30 years old',
52
+ });
53
+ expect(result.data.name).toBe('John Doe');
54
+ expect(result.data.age).toBe(30);
55
+ expect(result.confidence).toBe(95);
56
+ expect(result.confidenceByField.name).toBe(98);
57
+ });
58
+ it('should handle markdown code blocks in response', async () => {
59
+ const mockResponse = {
60
+ id: 'test-id',
61
+ object: 'chat.completion',
62
+ created: Date.now(),
63
+ model: 'test-model',
64
+ choices: [
65
+ {
66
+ index: 0,
67
+ message: {
68
+ role: 'assistant',
69
+ content: '```json\n{"data":{"name":"Alice"},"confidence":90,"confidenceByField":{"name":90}}\n```',
70
+ },
71
+ finish_reason: 'stop',
72
+ },
73
+ ],
74
+ };
75
+ vi.mocked(fetch).mockResolvedValueOnce({
76
+ ok: true,
77
+ json: async () => mockResponse,
78
+ });
79
+ const client = new LLMClient({
80
+ baseURL: 'http://localhost:11434/v1',
81
+ model: 'llama3',
82
+ });
83
+ const schema = {
84
+ fields: {
85
+ name: { type: 'string' },
86
+ },
87
+ };
88
+ const result = await client.extract({
89
+ schema,
90
+ input: 'Name: Alice',
91
+ });
92
+ expect(result.data.name).toBe('Alice');
93
+ });
94
+ it('should throw on invalid JSON response', async () => {
95
+ const mockResponse = {
96
+ id: 'test-id',
97
+ object: 'chat.completion',
98
+ created: Date.now(),
99
+ model: 'test-model',
100
+ choices: [
101
+ {
102
+ index: 0,
103
+ message: {
104
+ role: 'assistant',
105
+ content: 'This is not JSON',
106
+ },
107
+ finish_reason: 'stop',
108
+ },
109
+ ],
110
+ };
111
+ vi.mocked(fetch).mockResolvedValueOnce({
112
+ ok: true,
113
+ json: async () => mockResponse,
114
+ });
115
+ const client = new LLMClient({
116
+ baseURL: 'http://localhost:11434/v1',
117
+ model: 'llama3',
118
+ });
119
+ const schema = {
120
+ fields: {
121
+ name: { type: 'string' },
122
+ },
123
+ };
124
+ await expect(client.extract({
125
+ schema,
126
+ input: 'test',
127
+ })).rejects.toThrow(LLMError);
128
+ });
129
+ it('should throw on missing data field', async () => {
130
+ const mockResponse = {
131
+ id: 'test-id',
132
+ object: 'chat.completion',
133
+ created: Date.now(),
134
+ model: 'test-model',
135
+ choices: [
136
+ {
137
+ index: 0,
138
+ message: {
139
+ role: 'assistant',
140
+ content: JSON.stringify({
141
+ confidence: 95,
142
+ confidenceByField: {},
143
+ }),
144
+ },
145
+ finish_reason: 'stop',
146
+ },
147
+ ],
148
+ };
149
+ vi.mocked(fetch).mockResolvedValueOnce({
150
+ ok: true,
151
+ json: async () => mockResponse,
152
+ });
153
+ const client = new LLMClient({
154
+ baseURL: 'http://localhost:11434/v1',
155
+ model: 'llama3',
156
+ });
157
+ const schema = {
158
+ fields: {
159
+ name: { type: 'string' },
160
+ },
161
+ };
162
+ await expect(client.extract({
163
+ schema,
164
+ input: 'test',
165
+ })).rejects.toThrow('missing data object');
166
+ });
167
+ });
168
+ describe('error handling', () => {
169
+ it('should handle 401 authentication error', async () => {
170
+ vi.mocked(fetch).mockResolvedValueOnce({
171
+ ok: false,
172
+ status: 401,
173
+ statusText: 'Unauthorized',
174
+ json: async () => ({ error: { message: 'Invalid API key' } }),
175
+ });
176
+ const client = new LLMClient({
177
+ baseURL: 'https://api.openai.com/v1',
178
+ apiKey: 'invalid-key',
179
+ model: 'gpt-4',
180
+ });
181
+ const schema = {
182
+ fields: {
183
+ name: { type: 'string' },
184
+ },
185
+ };
186
+ try {
187
+ await client.extract({ schema, input: 'test' });
188
+ expect.fail('Should have thrown');
189
+ }
190
+ catch (error) {
191
+ expect(error).toBeInstanceOf(LLMError);
192
+ expect(error.code).toBe(LLMErrorCodes.AUTHENTICATION_ERROR);
193
+ }
194
+ });
195
+ it('should handle 429 rate limit error', async () => {
196
+ // Mock all retries to fail with 429
197
+ vi.mocked(fetch).mockResolvedValue({
198
+ ok: false,
199
+ status: 429,
200
+ statusText: 'Too Many Requests',
201
+ headers: new Headers(),
202
+ json: async () => ({ error: { message: 'Rate limit exceeded' } }),
203
+ });
204
+ const client = new LLMClient({
205
+ baseURL: 'https://api.openai.com/v1',
206
+ apiKey: 'key',
207
+ model: 'gpt-4',
208
+ retries: {
209
+ maxRetries: 2,
210
+ initialDelay: 10,
211
+ maxDelay: 100,
212
+ backoffFactor: 2,
213
+ },
214
+ });
215
+ const schema = {
216
+ fields: {
217
+ name: { type: 'string' },
218
+ },
219
+ };
220
+ try {
221
+ await client.extract({ schema, input: 'test' });
222
+ }
223
+ catch (error) {
224
+ expect(error.code).toBe(LLMErrorCodes.RATE_LIMIT);
225
+ }
226
+ });
227
+ it('should handle network errors', async () => {
228
+ // Mock all retries to fail with network error
229
+ vi.mocked(fetch).mockRejectedValue(new Error('Network failure'));
230
+ const client = new LLMClient({
231
+ baseURL: 'http://localhost:11434/v1',
232
+ model: 'llama3',
233
+ retries: {
234
+ maxRetries: 2,
235
+ initialDelay: 10,
236
+ maxDelay: 100,
237
+ backoffFactor: 2,
238
+ },
239
+ });
240
+ const schema = {
241
+ fields: {
242
+ name: { type: 'string' },
243
+ },
244
+ };
245
+ try {
246
+ await client.extract({ schema, input: 'test' });
247
+ }
248
+ catch (error) {
249
+ expect(error.code).toBe(LLMErrorCodes.NETWORK_ERROR);
250
+ }
251
+ });
252
+ });
253
+ describe('LLMPresets', () => {
254
+ it('should create Ollama config', () => {
255
+ const config = LLMPresets.ollama('llama3');
256
+ expect(config.baseURL).toBe('http://localhost:11434/v1');
257
+ expect(config.model).toBe('llama3');
258
+ expect(config.apiKey).toBeUndefined();
259
+ });
260
+ it('should throw TOKEN_LIMIT_EXCEEDED when token budget exceeded', async () => {
261
+ const client = new LLMClient({
262
+ baseURL: 'http://localhost:11434/v1',
263
+ model: 'llama3',
264
+ maxContextTokens: 100, // Very small limit
265
+ });
266
+ const schema = {
267
+ fields: {
268
+ name: { type: 'string' },
269
+ age: { type: 'number' },
270
+ },
271
+ };
272
+ // Large input that will exceed 100 token limit
273
+ const largeInput = 'test '.repeat(200); // ~1000 chars = ~250 tokens
274
+ await expect(client.extract({
275
+ schema,
276
+ input: largeInput,
277
+ })).rejects.toThrow(LLMError);
278
+ try {
279
+ await client.extract({
280
+ schema,
281
+ input: largeInput,
282
+ });
283
+ }
284
+ catch (error) {
285
+ expect(error).toBeInstanceOf(LLMError);
286
+ expect(error.code).toBe(LLMErrorCodes.TOKEN_LIMIT_EXCEEDED);
287
+ expect(error.message).toContain('Token budget exceeded');
288
+ }
289
+ });
290
+ it('should succeed when token budget is sufficient', async () => {
291
+ const mockResponse = {
292
+ id: 'test-id',
293
+ object: 'chat.completion',
294
+ created: Date.now(),
295
+ model: 'test-model',
296
+ choices: [
297
+ {
298
+ index: 0,
299
+ message: {
300
+ role: 'assistant',
301
+ content: JSON.stringify({
302
+ data: { name: 'Test' },
303
+ confidence: 90,
304
+ confidenceByField: { name: 90 },
305
+ }),
306
+ },
307
+ finish_reason: 'stop',
308
+ },
309
+ ],
310
+ };
311
+ vi.mocked(fetch).mockResolvedValueOnce({
312
+ ok: true,
313
+ json: async () => mockResponse,
314
+ });
315
+ const client = new LLMClient({
316
+ baseURL: 'http://localhost:11434/v1',
317
+ model: 'llama3',
318
+ maxContextTokens: 8192, // Large limit
319
+ });
320
+ const schema = {
321
+ fields: {
322
+ name: { type: 'string' },
323
+ },
324
+ };
325
+ const result = await client.extract({
326
+ schema,
327
+ input: 'Short input',
328
+ });
329
+ expect(result.data.name).toBe('Test');
330
+ });
331
+ it('should create LM Studio config', () => {
332
+ const config = LLMPresets.lmStudio('my-model');
333
+ expect(config.baseURL).toBe('http://localhost:1234/v1');
334
+ expect(config.model).toBe('my-model');
335
+ });
336
+ it('should create OpenAI config', () => {
337
+ const config = LLMPresets.openai('sk-test', 'gpt-4');
338
+ expect(config.baseURL).toBe('https://api.openai.com/v1');
339
+ expect(config.model).toBe('gpt-4');
340
+ expect(config.apiKey).toBe('sk-test');
341
+ });
342
+ it('should create OpenRouter config', () => {
343
+ const config = LLMPresets.openrouter('key', 'openai/gpt-4o-mini');
344
+ expect(config.baseURL).toBe('https://openrouter.ai/api/v1');
345
+ expect(config.model).toBe('openai/gpt-4o-mini');
346
+ expect(config.apiKey).toBe('key');
347
+ });
348
+ });
349
+ });
350
+ //# sourceMappingURL=client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../../src/llm/__tests__/client.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for prompt builder
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=prompt-builder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-builder.test.d.ts","sourceRoot":"","sources":["../../../src/llm/__tests__/prompt-builder.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}