ai.matey.utils 0.2.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 (63) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/conversation-history.js +139 -0
  3. package/dist/cjs/conversation-history.js.map +1 -0
  4. package/dist/cjs/index.js +42 -0
  5. package/dist/cjs/index.js.map +1 -0
  6. package/dist/cjs/model-cache.js +163 -0
  7. package/dist/cjs/model-cache.js.map +1 -0
  8. package/dist/cjs/parameter-normalizer.js +451 -0
  9. package/dist/cjs/parameter-normalizer.js.map +1 -0
  10. package/dist/cjs/streaming-modes.js +277 -0
  11. package/dist/cjs/streaming-modes.js.map +1 -0
  12. package/dist/cjs/streaming.js +892 -0
  13. package/dist/cjs/streaming.js.map +1 -0
  14. package/dist/cjs/structured-output.js +398 -0
  15. package/dist/cjs/structured-output.js.map +1 -0
  16. package/dist/cjs/system-message.js +222 -0
  17. package/dist/cjs/system-message.js.map +1 -0
  18. package/dist/cjs/validation.js +534 -0
  19. package/dist/cjs/validation.js.map +1 -0
  20. package/dist/cjs/warnings.js +301 -0
  21. package/dist/cjs/warnings.js.map +1 -0
  22. package/dist/esm/conversation-history.js +134 -0
  23. package/dist/esm/conversation-history.js.map +1 -0
  24. package/dist/esm/index.js +26 -0
  25. package/dist/esm/index.js.map +1 -0
  26. package/dist/esm/model-cache.js +158 -0
  27. package/dist/esm/model-cache.js.map +1 -0
  28. package/dist/esm/parameter-normalizer.js +434 -0
  29. package/dist/esm/parameter-normalizer.js.map +1 -0
  30. package/dist/esm/streaming-modes.js +265 -0
  31. package/dist/esm/streaming-modes.js.map +1 -0
  32. package/dist/esm/streaming.js +860 -0
  33. package/dist/esm/streaming.js.map +1 -0
  34. package/dist/esm/structured-output.js +387 -0
  35. package/dist/esm/structured-output.js.map +1 -0
  36. package/dist/esm/system-message.js +213 -0
  37. package/dist/esm/system-message.js.map +1 -0
  38. package/dist/esm/validation.js +523 -0
  39. package/dist/esm/validation.js.map +1 -0
  40. package/dist/esm/warnings.js +284 -0
  41. package/dist/esm/warnings.js.map +1 -0
  42. package/dist/types/conversation-history.d.ts +70 -0
  43. package/dist/types/conversation-history.d.ts.map +1 -0
  44. package/dist/types/index.d.ts +17 -0
  45. package/dist/types/index.d.ts.map +1 -0
  46. package/dist/types/model-cache.d.ts +88 -0
  47. package/dist/types/model-cache.d.ts.map +1 -0
  48. package/dist/types/parameter-normalizer.d.ts +154 -0
  49. package/dist/types/parameter-normalizer.d.ts.map +1 -0
  50. package/dist/types/streaming-modes.d.ts +139 -0
  51. package/dist/types/streaming-modes.d.ts.map +1 -0
  52. package/dist/types/streaming.d.ts +384 -0
  53. package/dist/types/streaming.d.ts.map +1 -0
  54. package/dist/types/structured-output.d.ts +157 -0
  55. package/dist/types/structured-output.d.ts.map +1 -0
  56. package/dist/types/system-message.d.ts +78 -0
  57. package/dist/types/system-message.d.ts.map +1 -0
  58. package/dist/types/validation.d.ts +46 -0
  59. package/dist/types/validation.d.ts.map +1 -0
  60. package/dist/types/warnings.d.ts +149 -0
  61. package/dist/types/warnings.d.ts.map +1 -0
  62. package/package.json +75 -0
  63. package/readme.md +280 -0
@@ -0,0 +1,523 @@
1
+ /**
2
+ * Validation Utilities
3
+ *
4
+ * Core validation functions for IR requests, messages, and parameters.
5
+ *
6
+ * @module
7
+ */
8
+ import { ValidationError, ErrorCode as ErrorCodeEnum } from 'ai.matey.errors';
9
+ // ============================================================================
10
+ // Message Validation
11
+ // ============================================================================
12
+ /**
13
+ * Validate message role.
14
+ */
15
+ export function isValidMessageRole(role) {
16
+ return ['system', 'user', 'assistant', 'tool'].includes(role);
17
+ }
18
+ /**
19
+ * Validate message content.
20
+ */
21
+ export function validateMessageContent(content, provenance) {
22
+ if (typeof content === 'string') {
23
+ if (content.length === 0) {
24
+ throw new ValidationError({
25
+ code: ErrorCodeEnum.INVALID_MESSAGE_FORMAT,
26
+ message: 'Message content cannot be empty string',
27
+ validationDetails: [
28
+ {
29
+ field: 'content',
30
+ value: content,
31
+ reason: 'Content must be non-empty string or content blocks',
32
+ expected: 'Non-empty string or array of content blocks',
33
+ },
34
+ ],
35
+ provenance,
36
+ });
37
+ }
38
+ return;
39
+ }
40
+ if (!Array.isArray(content)) {
41
+ throw new ValidationError({
42
+ code: ErrorCodeEnum.INVALID_MESSAGE_FORMAT,
43
+ message: 'Message content must be string or array of content blocks',
44
+ validationDetails: [
45
+ {
46
+ field: 'content',
47
+ value: content,
48
+ reason: 'Invalid content type',
49
+ expected: 'string or ContentBlock[]',
50
+ },
51
+ ],
52
+ provenance,
53
+ });
54
+ }
55
+ if (content.length === 0) {
56
+ throw new ValidationError({
57
+ code: ErrorCodeEnum.INVALID_MESSAGE_FORMAT,
58
+ message: 'Message content array cannot be empty',
59
+ validationDetails: [
60
+ {
61
+ field: 'content',
62
+ value: content,
63
+ reason: 'Content array must contain at least one block',
64
+ expected: 'Non-empty array',
65
+ },
66
+ ],
67
+ provenance,
68
+ });
69
+ }
70
+ // Validate each content block
71
+ content.forEach((block, index) => {
72
+ if (!block || typeof block !== 'object') {
73
+ throw new ValidationError({
74
+ code: ErrorCodeEnum.INVALID_MESSAGE_FORMAT,
75
+ message: `Invalid content block at index ${index}`,
76
+ validationDetails: [
77
+ {
78
+ field: `content[${index}]`,
79
+ value: block,
80
+ reason: 'Content block must be an object',
81
+ expected: 'ContentBlock object',
82
+ },
83
+ ],
84
+ provenance,
85
+ });
86
+ }
87
+ const blockType = block.type;
88
+ if (!['text', 'image', 'tool_use', 'tool_result'].includes(blockType)) {
89
+ throw new ValidationError({
90
+ code: ErrorCodeEnum.INVALID_MESSAGE_FORMAT,
91
+ message: `Invalid content block type: ${blockType}`,
92
+ validationDetails: [
93
+ {
94
+ field: `content[${index}].type`,
95
+ value: blockType,
96
+ reason: 'Unknown content block type',
97
+ expected: 'text, image, tool_use, or tool_result',
98
+ },
99
+ ],
100
+ provenance,
101
+ });
102
+ }
103
+ });
104
+ }
105
+ /**
106
+ * Validate a single message.
107
+ */
108
+ export function validateMessage(message, provenance) {
109
+ if (!message || typeof message !== 'object') {
110
+ throw new ValidationError({
111
+ code: ErrorCodeEnum.INVALID_MESSAGE_FORMAT,
112
+ message: 'Message must be an object',
113
+ validationDetails: [
114
+ {
115
+ field: 'message',
116
+ value: message,
117
+ reason: 'Invalid message type',
118
+ expected: 'IRMessage object',
119
+ },
120
+ ],
121
+ provenance,
122
+ });
123
+ }
124
+ const msg = message;
125
+ // Validate role
126
+ if (!msg.role) {
127
+ throw new ValidationError({
128
+ code: ErrorCodeEnum.INVALID_MESSAGE_FORMAT,
129
+ message: 'Message missing required field: role',
130
+ validationDetails: [
131
+ {
132
+ field: 'role',
133
+ value: undefined,
134
+ reason: 'Role is required',
135
+ expected: 'system, user, assistant, or tool',
136
+ },
137
+ ],
138
+ provenance,
139
+ });
140
+ }
141
+ if (!isValidMessageRole(msg.role)) {
142
+ throw new ValidationError({
143
+ code: ErrorCodeEnum.INVALID_MESSAGE_FORMAT,
144
+ message: `Invalid message role: ${String(msg.role)}`,
145
+ validationDetails: [
146
+ {
147
+ field: 'role',
148
+ value: msg.role,
149
+ reason: 'Invalid role value',
150
+ expected: 'system, user, assistant, or tool',
151
+ },
152
+ ],
153
+ provenance,
154
+ });
155
+ }
156
+ // Validate content
157
+ if (msg.content === undefined) {
158
+ throw new ValidationError({
159
+ code: ErrorCodeEnum.INVALID_MESSAGE_FORMAT,
160
+ message: 'Message missing required field: content',
161
+ validationDetails: [
162
+ {
163
+ field: 'content',
164
+ value: undefined,
165
+ reason: 'Content is required',
166
+ expected: 'string or ContentBlock[]',
167
+ },
168
+ ],
169
+ provenance,
170
+ });
171
+ }
172
+ validateMessageContent(msg.content, provenance);
173
+ }
174
+ /**
175
+ * Validate messages array.
176
+ */
177
+ export function validateMessages(messages, provenance) {
178
+ if (!Array.isArray(messages)) {
179
+ throw new ValidationError({
180
+ code: ErrorCodeEnum.INVALID_MESSAGE_FORMAT,
181
+ message: 'Messages must be an array',
182
+ validationDetails: [
183
+ {
184
+ field: 'messages',
185
+ value: messages,
186
+ reason: 'Invalid messages type',
187
+ expected: 'Array of IRMessage',
188
+ },
189
+ ],
190
+ provenance,
191
+ });
192
+ }
193
+ if (messages.length === 0) {
194
+ throw new ValidationError({
195
+ code: ErrorCodeEnum.INVALID_MESSAGE_FORMAT,
196
+ message: 'Messages array cannot be empty',
197
+ validationDetails: [
198
+ {
199
+ field: 'messages',
200
+ value: messages,
201
+ reason: 'At least one message is required',
202
+ expected: 'Non-empty array',
203
+ },
204
+ ],
205
+ provenance,
206
+ });
207
+ }
208
+ messages.forEach((message, index) => {
209
+ try {
210
+ validateMessage(message, provenance);
211
+ }
212
+ catch (error) {
213
+ if (error instanceof ValidationError) {
214
+ // Add index to field names
215
+ const details = error.validationDetails.map((detail) => ({
216
+ ...detail,
217
+ field: `messages[${index}].${detail.field}`,
218
+ }));
219
+ throw new ValidationError({
220
+ code: ErrorCodeEnum.INVALID_MESSAGE_FORMAT,
221
+ message: `Invalid message at index ${index}: ${error.message}`,
222
+ validationDetails: details,
223
+ provenance,
224
+ });
225
+ }
226
+ throw error;
227
+ }
228
+ });
229
+ }
230
+ // ============================================================================
231
+ // Parameter Validation
232
+ // ============================================================================
233
+ /**
234
+ * Validate temperature parameter.
235
+ */
236
+ export function validateTemperature(temperature, provenance) {
237
+ if (temperature === undefined || temperature === null) {
238
+ return;
239
+ }
240
+ if (typeof temperature !== 'number') {
241
+ throw new ValidationError({
242
+ code: ErrorCodeEnum.INVALID_PARAMETERS,
243
+ message: 'Temperature must be a number',
244
+ validationDetails: [
245
+ {
246
+ field: 'temperature',
247
+ value: temperature,
248
+ reason: 'Invalid type',
249
+ expected: 'number',
250
+ },
251
+ ],
252
+ provenance,
253
+ });
254
+ }
255
+ if (temperature < 0 || temperature > 2) {
256
+ throw new ValidationError({
257
+ code: ErrorCodeEnum.INVALID_PARAMETERS,
258
+ message: 'Temperature must be between 0 and 2',
259
+ validationDetails: [
260
+ {
261
+ field: 'temperature',
262
+ value: temperature,
263
+ reason: 'Out of range',
264
+ expected: '0 <= temperature <= 2',
265
+ },
266
+ ],
267
+ provenance,
268
+ });
269
+ }
270
+ }
271
+ /**
272
+ * Validate maxTokens parameter.
273
+ */
274
+ export function validateMaxTokens(maxTokens, provenance) {
275
+ if (maxTokens === undefined || maxTokens === null) {
276
+ return;
277
+ }
278
+ if (typeof maxTokens !== 'number') {
279
+ throw new ValidationError({
280
+ code: ErrorCodeEnum.INVALID_PARAMETERS,
281
+ message: 'maxTokens must be a number',
282
+ validationDetails: [
283
+ {
284
+ field: 'maxTokens',
285
+ value: maxTokens,
286
+ reason: 'Invalid type',
287
+ expected: 'number',
288
+ },
289
+ ],
290
+ provenance,
291
+ });
292
+ }
293
+ if (!Number.isInteger(maxTokens) || maxTokens < 1) {
294
+ throw new ValidationError({
295
+ code: ErrorCodeEnum.INVALID_PARAMETERS,
296
+ message: 'maxTokens must be a positive integer',
297
+ validationDetails: [
298
+ {
299
+ field: 'maxTokens',
300
+ value: maxTokens,
301
+ reason: 'Invalid value',
302
+ expected: 'Positive integer',
303
+ },
304
+ ],
305
+ provenance,
306
+ });
307
+ }
308
+ }
309
+ /**
310
+ * Validate topP parameter.
311
+ */
312
+ export function validateTopP(topP, provenance) {
313
+ if (topP === undefined || topP === null) {
314
+ return;
315
+ }
316
+ if (typeof topP !== 'number') {
317
+ throw new ValidationError({
318
+ code: ErrorCodeEnum.INVALID_PARAMETERS,
319
+ message: 'topP must be a number',
320
+ validationDetails: [
321
+ {
322
+ field: 'topP',
323
+ value: topP,
324
+ reason: 'Invalid type',
325
+ expected: 'number',
326
+ },
327
+ ],
328
+ provenance,
329
+ });
330
+ }
331
+ if (topP < 0 || topP > 1) {
332
+ throw new ValidationError({
333
+ code: ErrorCodeEnum.INVALID_PARAMETERS,
334
+ message: 'topP must be between 0 and 1',
335
+ validationDetails: [
336
+ {
337
+ field: 'topP',
338
+ value: topP,
339
+ reason: 'Out of range',
340
+ expected: '0 <= topP <= 1',
341
+ },
342
+ ],
343
+ provenance,
344
+ });
345
+ }
346
+ }
347
+ /**
348
+ * Validate parameters object.
349
+ */
350
+ export function validateParameters(parameters, provenance) {
351
+ if (parameters === undefined || parameters === null) {
352
+ return;
353
+ }
354
+ if (typeof parameters !== 'object') {
355
+ throw new ValidationError({
356
+ code: ErrorCodeEnum.INVALID_PARAMETERS,
357
+ message: 'Parameters must be an object',
358
+ validationDetails: [
359
+ {
360
+ field: 'parameters',
361
+ value: parameters,
362
+ reason: 'Invalid type',
363
+ expected: 'IRParameters object',
364
+ },
365
+ ],
366
+ provenance,
367
+ });
368
+ }
369
+ const params = parameters;
370
+ // Validate individual parameters
371
+ validateTemperature(params.temperature, provenance);
372
+ validateMaxTokens(params.maxTokens, provenance);
373
+ validateTopP(params.topP, provenance);
374
+ // Validate topK
375
+ if (params.topK !== undefined && params.topK !== null) {
376
+ if (typeof params.topK !== 'number' || !Number.isInteger(params.topK) || params.topK < 1) {
377
+ throw new ValidationError({
378
+ code: ErrorCodeEnum.INVALID_PARAMETERS,
379
+ message: 'topK must be a positive integer',
380
+ validationDetails: [
381
+ {
382
+ field: 'topK',
383
+ value: params.topK,
384
+ reason: 'Invalid value',
385
+ expected: 'Positive integer',
386
+ },
387
+ ],
388
+ provenance,
389
+ });
390
+ }
391
+ }
392
+ // Validate penalties
393
+ if (params.frequencyPenalty !== undefined && params.frequencyPenalty !== null) {
394
+ if (typeof params.frequencyPenalty !== 'number' ||
395
+ params.frequencyPenalty < -2 ||
396
+ params.frequencyPenalty > 2) {
397
+ throw new ValidationError({
398
+ code: ErrorCodeEnum.INVALID_PARAMETERS,
399
+ message: 'frequencyPenalty must be between -2 and 2',
400
+ validationDetails: [
401
+ {
402
+ field: 'frequencyPenalty',
403
+ value: params.frequencyPenalty,
404
+ reason: 'Out of range',
405
+ expected: '-2 <= frequencyPenalty <= 2',
406
+ },
407
+ ],
408
+ provenance,
409
+ });
410
+ }
411
+ }
412
+ if (params.presencePenalty !== undefined && params.presencePenalty !== null) {
413
+ if (typeof params.presencePenalty !== 'number' ||
414
+ params.presencePenalty < -2 ||
415
+ params.presencePenalty > 2) {
416
+ throw new ValidationError({
417
+ code: ErrorCodeEnum.INVALID_PARAMETERS,
418
+ message: 'presencePenalty must be between -2 and 2',
419
+ validationDetails: [
420
+ {
421
+ field: 'presencePenalty',
422
+ value: params.presencePenalty,
423
+ reason: 'Out of range',
424
+ expected: '-2 <= presencePenalty <= 2',
425
+ },
426
+ ],
427
+ provenance,
428
+ });
429
+ }
430
+ }
431
+ }
432
+ // ============================================================================
433
+ // Request Validation
434
+ // ============================================================================
435
+ /**
436
+ * Validate IR chat request.
437
+ */
438
+ export function validateIRChatRequest(request, provenance) {
439
+ if (!request || typeof request !== 'object') {
440
+ throw new ValidationError({
441
+ code: ErrorCodeEnum.INVALID_REQUEST,
442
+ message: 'Request must be an object',
443
+ validationDetails: [
444
+ {
445
+ field: 'request',
446
+ value: request,
447
+ reason: 'Invalid request type',
448
+ expected: 'IRChatRequest object',
449
+ },
450
+ ],
451
+ provenance,
452
+ });
453
+ }
454
+ const req = request;
455
+ // Validate messages
456
+ if (!req.messages) {
457
+ throw new ValidationError({
458
+ code: ErrorCodeEnum.INVALID_REQUEST,
459
+ message: 'Request missing required field: messages',
460
+ validationDetails: [
461
+ {
462
+ field: 'messages',
463
+ value: undefined,
464
+ reason: 'Messages array is required',
465
+ expected: 'Non-empty array of IRMessage',
466
+ },
467
+ ],
468
+ provenance,
469
+ });
470
+ }
471
+ validateMessages(req.messages, provenance);
472
+ // Validate parameters if present
473
+ if (req.parameters !== undefined) {
474
+ validateParameters(req.parameters, provenance);
475
+ }
476
+ // Validate metadata
477
+ if (!req.metadata) {
478
+ throw new ValidationError({
479
+ code: ErrorCodeEnum.INVALID_REQUEST,
480
+ message: 'Request missing required field: metadata',
481
+ validationDetails: [
482
+ {
483
+ field: 'metadata',
484
+ value: undefined,
485
+ reason: 'Metadata is required',
486
+ expected: 'IRMetadata object',
487
+ },
488
+ ],
489
+ provenance,
490
+ });
491
+ }
492
+ if (!req.metadata.requestId) {
493
+ throw new ValidationError({
494
+ code: ErrorCodeEnum.INVALID_REQUEST,
495
+ message: 'Request metadata missing requestId',
496
+ validationDetails: [
497
+ {
498
+ field: 'metadata.requestId',
499
+ value: undefined,
500
+ reason: 'Request ID is required',
501
+ expected: 'string',
502
+ },
503
+ ],
504
+ provenance,
505
+ });
506
+ }
507
+ if (!req.metadata.timestamp) {
508
+ throw new ValidationError({
509
+ code: ErrorCodeEnum.INVALID_REQUEST,
510
+ message: 'Request metadata missing timestamp',
511
+ validationDetails: [
512
+ {
513
+ field: 'metadata.timestamp',
514
+ value: undefined,
515
+ reason: 'Timestamp is required',
516
+ expected: 'number',
517
+ },
518
+ ],
519
+ provenance,
520
+ });
521
+ }
522
+ }
523
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/validation.ts"],"names":[],"mappings":"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"}