@acme-engine/core 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 (137) hide show
  1. package/dist/common.d.ts +40 -0
  2. package/dist/common.d.ts.map +1 -0
  3. package/dist/common.js +2 -0
  4. package/dist/common.js.map +1 -0
  5. package/dist/contracts.d.ts +65 -0
  6. package/dist/contracts.d.ts.map +1 -0
  7. package/dist/contracts.js +2 -0
  8. package/dist/contracts.js.map +1 -0
  9. package/dist/errors.d.ts +24 -0
  10. package/dist/errors.d.ts.map +1 -0
  11. package/dist/errors.js +20 -0
  12. package/dist/errors.js.map +1 -0
  13. package/dist/evaluation.d.ts +14 -0
  14. package/dist/evaluation.d.ts.map +1 -0
  15. package/dist/evaluation.js +2 -0
  16. package/dist/evaluation.js.map +1 -0
  17. package/dist/execution-engine.d.ts +30 -0
  18. package/dist/execution-engine.d.ts.map +1 -0
  19. package/dist/execution-engine.js +885 -0
  20. package/dist/execution-engine.js.map +1 -0
  21. package/dist/execution-identity.d.ts +35 -0
  22. package/dist/execution-identity.d.ts.map +1 -0
  23. package/dist/execution-identity.js +177 -0
  24. package/dist/execution-identity.js.map +1 -0
  25. package/dist/execution-status.d.ts +2 -0
  26. package/dist/execution-status.d.ts.map +1 -0
  27. package/dist/execution-status.js +2 -0
  28. package/dist/execution-status.js.map +1 -0
  29. package/dist/execution-types.d.ts +58 -0
  30. package/dist/execution-types.d.ts.map +1 -0
  31. package/dist/execution-types.js +2 -0
  32. package/dist/execution-types.js.map +1 -0
  33. package/dist/hashing.d.ts +6 -0
  34. package/dist/hashing.d.ts.map +1 -0
  35. package/dist/hashing.js +73 -0
  36. package/dist/hashing.js.map +1 -0
  37. package/dist/index.d.ts +34 -0
  38. package/dist/index.d.ts.map +1 -0
  39. package/dist/index.js +33 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/memory-engine.d.ts +13 -0
  42. package/dist/memory-engine.d.ts.map +1 -0
  43. package/dist/memory-engine.js +591 -0
  44. package/dist/memory-engine.js.map +1 -0
  45. package/dist/memory.d.ts +151 -0
  46. package/dist/memory.d.ts.map +1 -0
  47. package/dist/memory.js +2 -0
  48. package/dist/memory.js.map +1 -0
  49. package/dist/model-call-usage.d.ts +40 -0
  50. package/dist/model-call-usage.d.ts.map +1 -0
  51. package/dist/model-call-usage.js +0 -0
  52. package/dist/model-call-usage.js.map +1 -0
  53. package/dist/model-execution-engine.d.ts +16 -0
  54. package/dist/model-execution-engine.d.ts.map +1 -0
  55. package/dist/model-execution-engine.js +598 -0
  56. package/dist/model-execution-engine.js.map +1 -0
  57. package/dist/model-execution-identity.d.ts +16 -0
  58. package/dist/model-execution-identity.d.ts.map +1 -0
  59. package/dist/model-execution-identity.js +84 -0
  60. package/dist/model-execution-identity.js.map +1 -0
  61. package/dist/model-execution-types.d.ts +66 -0
  62. package/dist/model-execution-types.d.ts.map +1 -0
  63. package/dist/model-execution-types.js +8 -0
  64. package/dist/model-execution-types.js.map +1 -0
  65. package/dist/model-gateway-router.d.ts +11 -0
  66. package/dist/model-gateway-router.d.ts.map +1 -0
  67. package/dist/model-gateway-router.js +69 -0
  68. package/dist/model-gateway-router.js.map +1 -0
  69. package/dist/model-request-hash.d.ts +5 -0
  70. package/dist/model-request-hash.d.ts.map +1 -0
  71. package/dist/model-request-hash.js +11 -0
  72. package/dist/model-request-hash.js.map +1 -0
  73. package/dist/model-response-hash.d.ts +5 -0
  74. package/dist/model-response-hash.d.ts.map +1 -0
  75. package/dist/model-response-hash.js +11 -0
  76. package/dist/model-response-hash.js.map +1 -0
  77. package/dist/model-validation.d.ts +11 -0
  78. package/dist/model-validation.d.ts.map +1 -0
  79. package/dist/model-validation.js +580 -0
  80. package/dist/model-validation.js.map +1 -0
  81. package/dist/model.d.ts +125 -0
  82. package/dist/model.d.ts.map +1 -0
  83. package/dist/model.js +4 -0
  84. package/dist/model.js.map +1 -0
  85. package/dist/modules.d.ts +83 -0
  86. package/dist/modules.d.ts.map +1 -0
  87. package/dist/modules.js +7 -0
  88. package/dist/modules.js.map +1 -0
  89. package/dist/outbox.d.ts +88 -0
  90. package/dist/outbox.d.ts.map +1 -0
  91. package/dist/outbox.js +180 -0
  92. package/dist/outbox.js.map +1 -0
  93. package/dist/payload-encryptor.d.ts +92 -0
  94. package/dist/payload-encryptor.d.ts.map +1 -0
  95. package/dist/payload-encryptor.js +173 -0
  96. package/dist/payload-encryptor.js.map +1 -0
  97. package/dist/registries.d.ts +5 -0
  98. package/dist/registries.d.ts.map +1 -0
  99. package/dist/registries.js +159 -0
  100. package/dist/registries.js.map +1 -0
  101. package/dist/repository-digest.d.ts +5 -0
  102. package/dist/repository-digest.d.ts.map +1 -0
  103. package/dist/repository-digest.js +25 -0
  104. package/dist/repository-digest.js.map +1 -0
  105. package/dist/repository-model-call.d.ts +43 -0
  106. package/dist/repository-model-call.d.ts.map +1 -0
  107. package/dist/repository-model-call.js +2 -0
  108. package/dist/repository-model-call.js.map +1 -0
  109. package/dist/repository-model-execution.d.ts +49 -0
  110. package/dist/repository-model-execution.d.ts.map +1 -0
  111. package/dist/repository-model-execution.js +2 -0
  112. package/dist/repository-model-execution.js.map +1 -0
  113. package/dist/repository.d.ts +260 -0
  114. package/dist/repository.d.ts.map +1 -0
  115. package/dist/repository.js +2 -0
  116. package/dist/repository.js.map +1 -0
  117. package/dist/response-pipeline.d.ts +3 -0
  118. package/dist/response-pipeline.d.ts.map +1 -0
  119. package/dist/response-pipeline.js +132 -0
  120. package/dist/response-pipeline.js.map +1 -0
  121. package/dist/state-engine.d.ts +19 -0
  122. package/dist/state-engine.d.ts.map +1 -0
  123. package/dist/state-engine.js +272 -0
  124. package/dist/state-engine.js.map +1 -0
  125. package/dist/state-projection.d.ts +5 -0
  126. package/dist/state-projection.d.ts.map +1 -0
  127. package/dist/state-projection.js +145 -0
  128. package/dist/state-projection.js.map +1 -0
  129. package/dist/state.d.ts +41 -0
  130. package/dist/state.d.ts.map +1 -0
  131. package/dist/state.js +2 -0
  132. package/dist/state.js.map +1 -0
  133. package/dist/stranded-execution.d.ts +59 -0
  134. package/dist/stranded-execution.d.ts.map +1 -0
  135. package/dist/stranded-execution.js +235 -0
  136. package/dist/stranded-execution.js.map +1 -0
  137. package/package.json +36 -0
@@ -0,0 +1,580 @@
1
+ import { AcmeError } from './errors.js';
2
+ import { canonicalJson } from './hashing.js';
3
+ const selectionKeys = ['modelHint', 'profile', 'providerHint'];
4
+ const capabilityKeys = [
5
+ 'maxInputTokens',
6
+ 'maxOutputTokens',
7
+ 'structuredOutput',
8
+ 'tools',
9
+ 'vision',
10
+ ];
11
+ const requestKeys = [
12
+ 'enableThinking',
13
+ 'maxOutputTokens',
14
+ 'messages',
15
+ 'output',
16
+ 'reasoningBudget',
17
+ 'reasoningEffort',
18
+ 'seed',
19
+ 'stop',
20
+ 'temperature',
21
+ 'tools',
22
+ 'topP',
23
+ ];
24
+ const responseKeys = [
25
+ 'finishReason',
26
+ 'metadata',
27
+ 'model',
28
+ 'provider',
29
+ 'providerResponseId',
30
+ 'receivedAt',
31
+ 'text',
32
+ 'toolCalls',
33
+ 'usage',
34
+ ];
35
+ const toolDefinitionKeys = [
36
+ 'description',
37
+ 'name',
38
+ 'parameters',
39
+ 'type',
40
+ ];
41
+ const toolCallKeys = ['arguments', 'name', 'toolCallId'];
42
+ const usageKeys = [
43
+ 'currency',
44
+ 'estimatedCostMinor',
45
+ 'inputTokens',
46
+ 'outputTokens',
47
+ 'totalTokens',
48
+ ];
49
+ function invalid(message, details) {
50
+ throw new AcmeError({
51
+ code: 'INVALID_REQUEST',
52
+ message,
53
+ stage: 'calling-model',
54
+ retryable: false,
55
+ ...(details === undefined ? {} : { details }),
56
+ });
57
+ }
58
+ function deepFreeze(value) {
59
+ if (value !== null && typeof value === 'object' && !Object.isFrozen(value)) {
60
+ Object.freeze(value);
61
+ for (const child of Object.values(value)) {
62
+ deepFreeze(child);
63
+ }
64
+ }
65
+ return value;
66
+ }
67
+ function cloneJson(value, label) {
68
+ try {
69
+ return deepFreeze(JSON.parse(canonicalJson(value)));
70
+ }
71
+ catch (error) {
72
+ invalid(`${label} must contain only canonical JSON data.`, {
73
+ reason: error instanceof Error ? error.message : 'unknown validation error',
74
+ });
75
+ }
76
+ }
77
+ function object(value, label) {
78
+ if (value === null || typeof value !== 'object' || Array.isArray(value)) {
79
+ invalid(`${label} must be an object.`);
80
+ }
81
+ return value;
82
+ }
83
+ function exactKeys(value, allowed, required, label) {
84
+ const keys = Object.keys(value);
85
+ const unexpected = keys.filter((key) => !allowed.includes(key)).sort();
86
+ const missing = required.filter((key) => !Object.hasOwn(value, key));
87
+ if (unexpected.length > 0 || missing.length > 0) {
88
+ invalid(`${label} has an invalid shape.`, { missing, unexpected });
89
+ }
90
+ }
91
+ function text(value, label) {
92
+ if (typeof value !== 'string' || value.trim().length === 0) {
93
+ invalid(`${label} must be a non-empty string.`);
94
+ }
95
+ return value;
96
+ }
97
+ function nonEmptyString(value, label) {
98
+ if (typeof value !== 'string' || value.length === 0) {
99
+ invalid(`${label} must be a non-empty string.`);
100
+ }
101
+ return value;
102
+ }
103
+ function boolean(value, label) {
104
+ if (typeof value !== 'boolean') {
105
+ invalid(`${label} must be a boolean.`);
106
+ }
107
+ return value;
108
+ }
109
+ function positiveInteger(value, label) {
110
+ if (!Number.isSafeInteger(value) || value <= 0) {
111
+ invalid(`${label} must be a positive safe integer.`);
112
+ }
113
+ return value;
114
+ }
115
+ function nonNegativeInteger(value, label) {
116
+ if (!Number.isSafeInteger(value) || value < 0) {
117
+ invalid(`${label} must be a non-negative safe integer.`);
118
+ }
119
+ return value;
120
+ }
121
+ function optionalText(value, key, label) {
122
+ return Object.hasOwn(value, key) ? text(value[key], label) : undefined;
123
+ }
124
+ function validateSelectionValue(value) {
125
+ exactKeys(value, selectionKeys, ['profile'], 'Model selection');
126
+ return deepFreeze({
127
+ profile: text(value.profile, 'Model selection profile'),
128
+ ...(Object.hasOwn(value, 'providerHint')
129
+ ? {
130
+ providerHint: text(value.providerHint, 'Model selection providerHint'),
131
+ }
132
+ : {}),
133
+ ...(Object.hasOwn(value, 'modelHint')
134
+ ? { modelHint: text(value.modelHint, 'Model selection modelHint') }
135
+ : {}),
136
+ });
137
+ }
138
+ function validateCapabilitiesValue(value, partial) {
139
+ exactKeys(value, capabilityKeys, partial ? [] : ['structuredOutput', 'tools', 'vision'], partial ? 'Required model capabilities' : 'Model capabilities');
140
+ const result = {};
141
+ for (const key of ['structuredOutput', 'tools', 'vision']) {
142
+ if (Object.hasOwn(value, key)) {
143
+ result[key] = boolean(value[key], `Model capability ${key}`);
144
+ }
145
+ }
146
+ for (const key of ['maxInputTokens', 'maxOutputTokens']) {
147
+ if (Object.hasOwn(value, key)) {
148
+ result[key] = positiveInteger(value[key], `Model capability ${key}`);
149
+ }
150
+ }
151
+ return deepFreeze(result);
152
+ }
153
+ function validateContentPart(value, messageIndex, partIndex) {
154
+ const candidate = object(value, `Model request message ${messageIndex} content part ${partIndex}`);
155
+ const type = candidate.type;
156
+ const label = `Model request message ${messageIndex} content part ${partIndex}`;
157
+ if (type === 'text') {
158
+ exactKeys(candidate, ['text', 'type'], ['text', 'type'], label);
159
+ return deepFreeze({ type, text: text(candidate.text, `${label} text`) });
160
+ }
161
+ if (type === 'image') {
162
+ exactKeys(candidate, ['dataRef', 'mediaType', 'type'], ['dataRef', 'mediaType', 'type'], label);
163
+ return deepFreeze({
164
+ type,
165
+ mediaType: text(candidate.mediaType, `${label} mediaType`),
166
+ dataRef: text(candidate.dataRef, `${label} dataRef`),
167
+ });
168
+ }
169
+ if (type === 'tool-result') {
170
+ exactKeys(candidate, ['toolCallId', 'type', 'value'], ['toolCallId', 'type', 'value'], label);
171
+ return deepFreeze({
172
+ type,
173
+ toolCallId: text(candidate.toolCallId, `${label} toolCallId`),
174
+ value: candidate.value,
175
+ });
176
+ }
177
+ if (type === 'tool-call') {
178
+ exactKeys(candidate, ['arguments', 'name', 'toolCallId', 'type'], ['arguments', 'name', 'toolCallId', 'type'], label);
179
+ return deepFreeze({
180
+ type,
181
+ toolCallId: text(candidate.toolCallId, `${label} toolCallId`),
182
+ name: text(candidate.name, `${label} name`),
183
+ arguments: candidate.arguments,
184
+ });
185
+ }
186
+ invalid(`${label} has an unsupported type.`);
187
+ }
188
+ function validateMessage(value, index) {
189
+ const candidate = object(value, `Model request message ${index}`);
190
+ exactKeys(candidate, ['content', 'role'], ['content', 'role'], `Model request message ${index}`);
191
+ if (candidate.role !== 'system' &&
192
+ candidate.role !== 'user' &&
193
+ candidate.role !== 'assistant' &&
194
+ candidate.role !== 'tool') {
195
+ invalid(`Model request message ${index} role is invalid.`);
196
+ }
197
+ if (!Array.isArray(candidate.content) || candidate.content.length === 0) {
198
+ invalid(`Model request message ${index} content must be a non-empty array.`);
199
+ }
200
+ return deepFreeze({
201
+ role: candidate.role,
202
+ content: candidate.content.map((part, partIndex) => validateContentPart(part, index, partIndex)),
203
+ });
204
+ }
205
+ function validateOutput(value) {
206
+ const output = object(value, 'Model request output');
207
+ if (output.mode === 'text') {
208
+ exactKeys(output, ['mode'], ['mode'], 'Model request output');
209
+ return deepFreeze({ mode: 'text' });
210
+ }
211
+ exactKeys(output, ['jsonSchema', 'mode', 'schemaName'], ['jsonSchema', 'mode', 'schemaName'], 'Model request output');
212
+ if (output.mode !== 'json') {
213
+ invalid('Model request output mode must be "json" or "text".');
214
+ }
215
+ object(output.jsonSchema, 'Model request output jsonSchema');
216
+ return deepFreeze({
217
+ mode: 'json',
218
+ schemaName: text(output.schemaName, 'Model request output schemaName'),
219
+ jsonSchema: output.jsonSchema,
220
+ });
221
+ }
222
+ function validateTool(value, index) {
223
+ const label = `Model request tool ${index}`;
224
+ const candidate = object(value, label);
225
+ exactKeys(candidate, toolDefinitionKeys, ['name', 'parameters', 'type'], label);
226
+ if (candidate.type !== 'function') {
227
+ invalid(`${label} type must be "function".`);
228
+ }
229
+ object(candidate.parameters, `${label} parameters`);
230
+ return deepFreeze({
231
+ type: 'function',
232
+ name: text(candidate.name, `${label} name`),
233
+ ...(Object.hasOwn(candidate, 'description')
234
+ ? { description: text(candidate.description, `${label} description`) }
235
+ : {}),
236
+ parameters: candidate.parameters,
237
+ });
238
+ }
239
+ function validateRequestValue(value) {
240
+ exactKeys(value, requestKeys, ['messages', 'output'], 'Model request');
241
+ if (!Array.isArray(value.messages) || value.messages.length === 0) {
242
+ invalid('Model request messages must be a non-empty array.');
243
+ }
244
+ let temperature;
245
+ if (Object.hasOwn(value, 'temperature')) {
246
+ if (typeof value.temperature !== 'number' ||
247
+ !Number.isFinite(value.temperature) ||
248
+ value.temperature < 0) {
249
+ invalid('Model request temperature must be a finite non-negative number.');
250
+ }
251
+ temperature = value.temperature;
252
+ }
253
+ let topP;
254
+ if (Object.hasOwn(value, 'topP')) {
255
+ if (typeof value.topP !== 'number' ||
256
+ !Number.isFinite(value.topP) ||
257
+ value.topP < 0 ||
258
+ value.topP > 1) {
259
+ invalid('Model request topP must be a finite number from 0 to 1.');
260
+ }
261
+ topP = value.topP;
262
+ }
263
+ let reasoningBudget;
264
+ if (Object.hasOwn(value, 'reasoningBudget')) {
265
+ if (!Number.isSafeInteger(value.reasoningBudget) ||
266
+ value.reasoningBudget < -1) {
267
+ invalid('Model request reasoningBudget must be a safe integer greater than or equal to -1.');
268
+ }
269
+ reasoningBudget = value.reasoningBudget;
270
+ }
271
+ let enableThinking;
272
+ if (Object.hasOwn(value, 'enableThinking')) {
273
+ if (typeof value.enableThinking !== 'boolean') {
274
+ invalid('Model request enableThinking must be a boolean.');
275
+ }
276
+ enableThinking = value.enableThinking;
277
+ }
278
+ let reasoningEffort;
279
+ if (Object.hasOwn(value, 'reasoningEffort')) {
280
+ reasoningEffort = text(value.reasoningEffort, 'Model request reasoningEffort');
281
+ }
282
+ let seed;
283
+ if (Object.hasOwn(value, 'seed')) {
284
+ seed = nonNegativeInteger(value.seed, 'Model request seed');
285
+ }
286
+ let stop;
287
+ if (Object.hasOwn(value, 'stop')) {
288
+ if (!Array.isArray(value.stop) || value.stop.length === 0) {
289
+ invalid('Model request stop must be a non-empty array.');
290
+ }
291
+ stop = value.stop.map((entry, index) => text(entry, `Model request stop ${index}`));
292
+ }
293
+ let tools;
294
+ if (Object.hasOwn(value, 'tools')) {
295
+ if (!Array.isArray(value.tools) || value.tools.length === 0) {
296
+ invalid('Model request tools must be a non-empty array.');
297
+ }
298
+ tools = value.tools.map((tool, index) => validateTool(tool, index));
299
+ }
300
+ return deepFreeze({
301
+ messages: value.messages.map((message, index) => validateMessage(message, index)),
302
+ output: validateOutput(value.output),
303
+ ...(tools === undefined ? {} : { tools }),
304
+ ...(temperature === undefined ? {} : { temperature }),
305
+ ...(topP === undefined ? {} : { topP }),
306
+ ...(Object.hasOwn(value, 'maxOutputTokens')
307
+ ? {
308
+ maxOutputTokens: positiveInteger(value.maxOutputTokens, 'Model request maxOutputTokens'),
309
+ }
310
+ : {}),
311
+ ...(stop === undefined ? {} : { stop }),
312
+ ...(reasoningBudget === undefined ? {} : { reasoningBudget }),
313
+ ...(enableThinking === undefined ? {} : { enableThinking }),
314
+ ...(reasoningEffort === undefined ? {} : { reasoningEffort }),
315
+ ...(seed === undefined ? {} : { seed }),
316
+ });
317
+ }
318
+ function validateUsage(value) {
319
+ const candidate = object(value, 'Normalized model usage');
320
+ exactKeys(candidate, usageKeys, [], 'Normalized model usage');
321
+ const estimatedCostMinor = Object.hasOwn(candidate, 'estimatedCostMinor')
322
+ ? nonNegativeInteger(candidate.estimatedCostMinor, 'Normalized usage estimatedCostMinor')
323
+ : undefined;
324
+ const currency = optionalText(candidate, 'currency', 'Normalized usage currency');
325
+ if ((estimatedCostMinor === undefined) !== (currency === undefined)) {
326
+ invalid('Normalized usage estimatedCostMinor and currency must be supplied together.');
327
+ }
328
+ return deepFreeze({
329
+ ...(Object.hasOwn(candidate, 'inputTokens')
330
+ ? {
331
+ inputTokens: nonNegativeInteger(candidate.inputTokens, 'Normalized usage inputTokens'),
332
+ }
333
+ : {}),
334
+ ...(Object.hasOwn(candidate, 'outputTokens')
335
+ ? {
336
+ outputTokens: nonNegativeInteger(candidate.outputTokens, 'Normalized usage outputTokens'),
337
+ }
338
+ : {}),
339
+ ...(Object.hasOwn(candidate, 'totalTokens')
340
+ ? {
341
+ totalTokens: nonNegativeInteger(candidate.totalTokens, 'Normalized usage totalTokens'),
342
+ }
343
+ : {}),
344
+ ...(estimatedCostMinor === undefined
345
+ ? {}
346
+ : { estimatedCostMinor, currency: currency }),
347
+ });
348
+ }
349
+ function isoTimestamp(value, label) {
350
+ const candidate = text(value, label);
351
+ if (!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/u.test(candidate) ||
352
+ Number.isNaN(Date.parse(candidate)) ||
353
+ new Date(candidate).toISOString() !== candidate) {
354
+ invalid(`${label} must be a canonical UTC ISO timestamp.`);
355
+ }
356
+ return candidate;
357
+ }
358
+ function validateToolCall(value, index) {
359
+ const label = `Normalized model response toolCall ${index}`;
360
+ const candidate = object(value, label);
361
+ exactKeys(candidate, toolCallKeys, toolCallKeys, label);
362
+ return deepFreeze({
363
+ toolCallId: text(candidate.toolCallId, `${label} toolCallId`),
364
+ name: text(candidate.name, `${label} name`),
365
+ arguments: candidate.arguments,
366
+ });
367
+ }
368
+ function validateResponseValue(value) {
369
+ exactKeys(value, responseKeys, [
370
+ 'finishReason',
371
+ 'metadata',
372
+ 'model',
373
+ 'provider',
374
+ 'receivedAt',
375
+ 'text',
376
+ 'usage',
377
+ ], 'Normalized model response');
378
+ if (value.finishReason !== 'stop' &&
379
+ value.finishReason !== 'length' &&
380
+ value.finishReason !== 'tool' &&
381
+ value.finishReason !== 'content-filter' &&
382
+ value.finishReason !== 'unknown') {
383
+ invalid('Normalized model response finishReason is invalid.');
384
+ }
385
+ if (typeof value.text !== 'string') {
386
+ invalid('Normalized model response text must be a string.');
387
+ }
388
+ const metadata = object(value.metadata, 'Normalized model response metadata');
389
+ let toolCalls;
390
+ if (Object.hasOwn(value, 'toolCalls')) {
391
+ if (!Array.isArray(value.toolCalls) || value.toolCalls.length === 0) {
392
+ invalid('Normalized model response toolCalls must be a non-empty array.');
393
+ }
394
+ toolCalls = value.toolCalls.map((call, index) => validateToolCall(call, index));
395
+ }
396
+ return deepFreeze({
397
+ provider: text(value.provider, 'Normalized model response provider'),
398
+ model: text(value.model, 'Normalized model response model'),
399
+ ...(Object.hasOwn(value, 'providerResponseId')
400
+ ? {
401
+ providerResponseId: text(value.providerResponseId, 'Normalized model response providerResponseId'),
402
+ }
403
+ : {}),
404
+ receivedAt: isoTimestamp(value.receivedAt, 'Normalized model response receivedAt'),
405
+ finishReason: value.finishReason,
406
+ text: value.text,
407
+ ...(toolCalls === undefined ? {} : { toolCalls }),
408
+ usage: validateUsage(value.usage),
409
+ metadata,
410
+ });
411
+ }
412
+ export function validateModelSelection(value) {
413
+ const cloned = cloneJson(value, 'Model selection');
414
+ return validateSelectionValue(object(cloned, 'Model selection'));
415
+ }
416
+ export function validateModelCapabilities(value) {
417
+ const cloned = cloneJson(value, 'Model capabilities');
418
+ return validateCapabilitiesValue(object(cloned, 'Model capabilities'), false);
419
+ }
420
+ export function validateRequiredModelCapabilities(value) {
421
+ const cloned = cloneJson(value, 'Required model capabilities');
422
+ return validateCapabilitiesValue(object(cloned, 'Required model capabilities'), true);
423
+ }
424
+ export function validateModelRequest(value) {
425
+ const cloned = cloneJson(value, 'Model request');
426
+ return validateRequestValue(object(cloned, 'Model request'));
427
+ }
428
+ export function validateNormalizedModelResponse(value) {
429
+ const cloned = cloneJson(value, 'Normalized model response');
430
+ return validateResponseValue(object(cloned, 'Normalized model response'));
431
+ }
432
+ function validateStreamEventValue(value) {
433
+ const type = value.type;
434
+ const sequence = nonNegativeInteger(value.sequence, 'Model stream event sequence');
435
+ if (type === 'reasoning-delta' || type === 'content-delta') {
436
+ exactKeys(value, ['sequence', 'text', 'type'], ['sequence', 'text', 'type'], 'Model stream event');
437
+ if (typeof value.text !== 'string') {
438
+ invalid('Model stream event text must be a string.');
439
+ }
440
+ return deepFreeze({ type, sequence, text: value.text });
441
+ }
442
+ if (type === 'tool-call-delta') {
443
+ exactKeys(value, ['argumentsDelta', 'index', 'name', 'sequence', 'toolCallId', 'type'], ['index', 'sequence', 'type'], 'Model stream event');
444
+ return deepFreeze({
445
+ type,
446
+ sequence,
447
+ index: nonNegativeInteger(value.index, 'Model stream event index'),
448
+ ...(Object.hasOwn(value, 'toolCallId')
449
+ ? {
450
+ toolCallId: text(value.toolCallId, 'Model stream event toolCallId'),
451
+ }
452
+ : {}),
453
+ ...(Object.hasOwn(value, 'name')
454
+ ? { name: text(value.name, 'Model stream event name') }
455
+ : {}),
456
+ ...(Object.hasOwn(value, 'argumentsDelta')
457
+ ? {
458
+ argumentsDelta: nonEmptyString(value.argumentsDelta, 'Model stream event argumentsDelta'),
459
+ }
460
+ : {}),
461
+ });
462
+ }
463
+ if (type === 'completed') {
464
+ exactKeys(value, ['response', 'sequence', 'type'], ['response', 'sequence', 'type'], 'Model stream event');
465
+ return deepFreeze({
466
+ type,
467
+ sequence,
468
+ response: validateResponseValue(object(value.response, 'Model stream event response')),
469
+ });
470
+ }
471
+ if (type === 'failed') {
472
+ exactKeys(value, ['error', 'sequence', 'type'], ['error', 'sequence', 'type'], 'Model stream event');
473
+ const error = object(value.error, 'Model stream event error');
474
+ exactKeys(error, ['causeRef', 'code', 'details', 'message', 'retryable', 'stage'], ['code', 'message', 'retryable', 'stage'], 'Model stream event error');
475
+ if (typeof error.code !== 'string' || typeof error.message !== 'string') {
476
+ invalid('Model stream event error is invalid.');
477
+ }
478
+ if (typeof error.stage !== 'string' ||
479
+ typeof error.retryable !== 'boolean') {
480
+ invalid('Model stream event error is invalid.');
481
+ }
482
+ return deepFreeze({
483
+ type,
484
+ sequence,
485
+ error: deepFreeze({
486
+ code: error.code,
487
+ message: error.message,
488
+ stage: error.stage,
489
+ retryable: error.retryable,
490
+ ...(Object.hasOwn(error, 'details')
491
+ ? { details: error.details }
492
+ : {}),
493
+ ...(Object.hasOwn(error, 'causeRef')
494
+ ? {
495
+ causeRef: text(error.causeRef, 'Model stream event error causeRef'),
496
+ }
497
+ : {}),
498
+ }),
499
+ });
500
+ }
501
+ invalid('Model stream event type is invalid.');
502
+ }
503
+ export function validateModelStreamEvent(value) {
504
+ const cloned = cloneJson(value, 'Model stream event');
505
+ return validateStreamEventValue(object(cloned, 'Model stream event'));
506
+ }
507
+ export function validateGatewayCallContext(value) {
508
+ if (value === null || typeof value !== 'object') {
509
+ invalid('Gateway call context must be an object.');
510
+ }
511
+ const contextKeys = [
512
+ 'callKey',
513
+ 'executionId',
514
+ 'requiredCapabilities',
515
+ 'selection',
516
+ 'signal',
517
+ 'timeoutMs',
518
+ ];
519
+ const suppliedKeys = Object.keys(value);
520
+ const unexpected = suppliedKeys
521
+ .filter((key) => !contextKeys.includes(key))
522
+ .sort();
523
+ const missing = contextKeys.filter((key) => !Object.hasOwn(value, key));
524
+ if (unexpected.length > 0 || missing.length > 0) {
525
+ invalid('Gateway call context has an invalid shape.', {
526
+ missing,
527
+ unexpected,
528
+ });
529
+ }
530
+ const signal = value.signal;
531
+ if (signal === null ||
532
+ typeof signal !== 'object' ||
533
+ typeof signal.aborted !== 'boolean' ||
534
+ typeof signal.addEventListener !== 'function') {
535
+ invalid('Gateway call context signal must be an AbortSignal.');
536
+ }
537
+ if (!Number.isSafeInteger(value.timeoutMs) || value.timeoutMs <= 0) {
538
+ invalid('Gateway call context timeoutMs must be a positive safe integer.');
539
+ }
540
+ return Object.freeze({
541
+ executionId: text(value.executionId, 'Gateway call context executionId'),
542
+ callKey: text(value.callKey, 'Gateway call context callKey'),
543
+ selection: validateModelSelection(value.selection),
544
+ requiredCapabilities: validateRequiredModelCapabilities(value.requiredCapabilities),
545
+ timeoutMs: value.timeoutMs,
546
+ signal,
547
+ });
548
+ }
549
+ export function missingRequiredModelCapabilities(available, required) {
550
+ const normalizedAvailable = validateModelCapabilities(available);
551
+ const normalizedRequired = validateRequiredModelCapabilities(required);
552
+ const missing = [];
553
+ for (const key of ['structuredOutput', 'tools', 'vision']) {
554
+ if (normalizedRequired[key] === true && normalizedAvailable[key] !== true) {
555
+ missing.push(key);
556
+ }
557
+ }
558
+ for (const key of ['maxInputTokens', 'maxOutputTokens']) {
559
+ const minimum = normalizedRequired[key];
560
+ const supplied = normalizedAvailable[key];
561
+ if (minimum !== undefined &&
562
+ (supplied === undefined || supplied < minimum)) {
563
+ missing.push(key);
564
+ }
565
+ }
566
+ return Object.freeze(missing);
567
+ }
568
+ export function assertRequiredModelCapabilities(available, required) {
569
+ const missing = missingRequiredModelCapabilities(available, required);
570
+ if (missing.length > 0) {
571
+ throw new AcmeError({
572
+ code: 'UNSUPPORTED_CAPABILITY',
573
+ message: `Model selection does not satisfy required capabilities: ${missing.join(', ')}.`,
574
+ stage: 'calling-model',
575
+ retryable: false,
576
+ details: { missing },
577
+ });
578
+ }
579
+ }
580
+ //# sourceMappingURL=model-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-validation.js","sourceRoot":"","sources":["../src/model-validation.ts"],"names":[],"mappings":"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"}