@spine-event-engine/testing 2.0.0-snapshot.21 → 2.0.0-snapshot.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -15
- package/REFERENCE.md +40 -2
- package/dist/ai-test/ai-test-backend.d.ts +167 -0
- package/dist/ai-test/ai-test-backend.d.ts.map +1 -0
- package/dist/ai-test/ai-test-backend.js +134 -0
- package/dist/ai-test/ai-test-backend.js.map +1 -0
- package/dist/ai-test/scripted-attempts.d.ts +261 -0
- package/dist/ai-test/scripted-attempts.d.ts.map +1 -0
- package/dist/ai-test/scripted-attempts.js +607 -0
- package/dist/ai-test/scripted-attempts.js.map +1 -0
- package/dist/black-box/black-box.d.ts +42 -5
- package/dist/black-box/black-box.d.ts.map +1 -1
- package/dist/black-box/black-box.js +269 -17
- package/dist/black-box/black-box.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -5
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { type MessageSchema } from "@spine-event-engine/core";
|
|
2
|
+
import type { AiAnswer, AiDecisionResult, AiFailure, AiModelDefinition, AiValidationIssue } from "@spine-event-engine/ai";
|
|
3
|
+
import { type AiCandidateAdmission, type AiAttemptRequest, type AiAttemptReplay, type AiAttemptTicket, type AiBackendExecution, type AiBackendOutcome } from "@spine-event-engine/ai/spi/adapter";
|
|
4
|
+
import { type AiContentDigest, type AiUsage, type DecisionAnswer, type DecisionDistribution, type DecisionQuestion, type DecisionResponse, type GenerationResponse } from "@spine-event-engine/proto/agent";
|
|
5
|
+
import type { AiTestGate, AiTestRequest, AiTestResponses } from "./ai-test-backend.js";
|
|
6
|
+
interface FailureScript {
|
|
7
|
+
readonly kind: "failure";
|
|
8
|
+
readonly code: AiFailure["code"];
|
|
9
|
+
readonly retryable: boolean;
|
|
10
|
+
usage?: AiUsage;
|
|
11
|
+
}
|
|
12
|
+
interface TextScript {
|
|
13
|
+
readonly kind: "text";
|
|
14
|
+
readonly text: string;
|
|
15
|
+
usage?: AiUsage;
|
|
16
|
+
}
|
|
17
|
+
interface DecisionScript {
|
|
18
|
+
readonly kind: "decision";
|
|
19
|
+
readonly result: AiDecisionResult;
|
|
20
|
+
usage?: AiUsage;
|
|
21
|
+
}
|
|
22
|
+
interface DelayScript {
|
|
23
|
+
readonly kind: "delay";
|
|
24
|
+
readonly gate: Gate;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* One queued simulated provider response or release gate.
|
|
28
|
+
*/
|
|
29
|
+
export type Script = FailureScript | TextScript | DecisionScript | DelayScript;
|
|
30
|
+
type DecisionQuestionDefinition = Extract<AiModelDefinition<MessageSchema, MessageSchema>, {
|
|
31
|
+
kind: "decision";
|
|
32
|
+
}>["questions"][string];
|
|
33
|
+
/**
|
|
34
|
+
* Queued behavior for one factory-created capability.
|
|
35
|
+
*/
|
|
36
|
+
export interface ScriptQueue {
|
|
37
|
+
/**
|
|
38
|
+
* Validated immutable capability declaration.
|
|
39
|
+
*/
|
|
40
|
+
readonly definition: Readonly<AiModelDefinition<MessageSchema, MessageSchema>>;
|
|
41
|
+
/**
|
|
42
|
+
* Responses not yet consumed by physical requests.
|
|
43
|
+
*/
|
|
44
|
+
readonly scripts: Script[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Mutable internal observation copied by the public snapshot method.
|
|
48
|
+
*/
|
|
49
|
+
export interface RequestRecord extends AiTestRequest {
|
|
50
|
+
/**
|
|
51
|
+
* Runtime operation identity used for attempt numbering.
|
|
52
|
+
*/
|
|
53
|
+
readonly operation: string;
|
|
54
|
+
/**
|
|
55
|
+
* Runtime-assigned attempt identity after the begin barrier.
|
|
56
|
+
*/
|
|
57
|
+
ticketId?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Whether the reservation barrier admitted physical dispatch.
|
|
60
|
+
*/
|
|
61
|
+
dispatched?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Whether an admitted request reached a terminal scripted outcome.
|
|
64
|
+
*/
|
|
65
|
+
settled?: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Whether no scripted response matched the admitted request.
|
|
68
|
+
*/
|
|
69
|
+
unexpected?: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Local validation issues saved after response admission.
|
|
72
|
+
*/
|
|
73
|
+
validationIssues: readonly AiValidationIssue[];
|
|
74
|
+
/**
|
|
75
|
+
* Exact previous generation text used to prepare a correction request.
|
|
76
|
+
*/
|
|
77
|
+
candidateText?: string;
|
|
78
|
+
/**
|
|
79
|
+
* Candidate text copied from the prior invalid attempt.
|
|
80
|
+
*/
|
|
81
|
+
correctionCandidate?: string;
|
|
82
|
+
}
|
|
83
|
+
interface ScriptedAttemptOps {
|
|
84
|
+
/**
|
|
85
|
+
* Returns a capability key without conflating revisions.
|
|
86
|
+
*
|
|
87
|
+
* @param name Name for this operation.
|
|
88
|
+
* @param version Version for this operation.
|
|
89
|
+
* @returns Revision-qualified capability key.
|
|
90
|
+
*/
|
|
91
|
+
key(name: string, version: string): string;
|
|
92
|
+
/**
|
|
93
|
+
* Returns the scripted responses result.
|
|
94
|
+
*
|
|
95
|
+
* @typeParam O Generated output descriptor.
|
|
96
|
+
* @param queue Queue for this operation.
|
|
97
|
+
* @param output Output for this operation.
|
|
98
|
+
* @returns Queue writer for this capability.
|
|
99
|
+
*/
|
|
100
|
+
responses<O extends MessageSchema>(queue: ScriptQueue, output: O): AiTestResponses<O>;
|
|
101
|
+
/**
|
|
102
|
+
* Returns the scripted record result.
|
|
103
|
+
*
|
|
104
|
+
* @param request Request for this operation.
|
|
105
|
+
* @param attempt Attempt for this operation.
|
|
106
|
+
* @param prior Prior for this operation.
|
|
107
|
+
* @returns Mutable internal request record.
|
|
108
|
+
*/
|
|
109
|
+
record(request: AiBackendExecution, attempt: number, prior?: RequestRecord): RequestRecord;
|
|
110
|
+
/**
|
|
111
|
+
* Returns the scripted snapshot result.
|
|
112
|
+
*
|
|
113
|
+
* @param record Record for this operation.
|
|
114
|
+
* @returns Immutable physical-request observation.
|
|
115
|
+
*/
|
|
116
|
+
snapshot(record: RequestRecord): AiTestRequest;
|
|
117
|
+
/**
|
|
118
|
+
* Returns the scripted execute result.
|
|
119
|
+
*
|
|
120
|
+
* @param request Request for this operation.
|
|
121
|
+
* @param record Record for this operation.
|
|
122
|
+
* @param queue Queue for this operation.
|
|
123
|
+
* @returns Admitted output or recorded failure.
|
|
124
|
+
*/
|
|
125
|
+
execute(request: AiBackendExecution, record: RequestRecord, queue?: ScriptQueue): Promise<AiBackendOutcome>;
|
|
126
|
+
/**
|
|
127
|
+
* Restores a saved response without consuming a queued physical script.
|
|
128
|
+
*
|
|
129
|
+
* @param request Selected scripted execution.
|
|
130
|
+
* @param saved Durable response and matching original failure.
|
|
131
|
+
* @returns Saved admitted output or exact recorded failure.
|
|
132
|
+
*/
|
|
133
|
+
replay(request: AiBackendExecution, saved: AiAttemptReplay): AiBackendOutcome;
|
|
134
|
+
/**
|
|
135
|
+
* Checks saved failure correlation before reuse.
|
|
136
|
+
*
|
|
137
|
+
* @param response Saved terminal response.
|
|
138
|
+
* @param failure Original persisted failure, when available.
|
|
139
|
+
* @returns Exact saved failure.
|
|
140
|
+
*/
|
|
141
|
+
replayFailure(response: AiAttemptReplay["response"], failure?: AiFailure): AiBackendOutcome;
|
|
142
|
+
/**
|
|
143
|
+
* Returns the scripted prepare result.
|
|
144
|
+
*
|
|
145
|
+
* @param request Request for this operation.
|
|
146
|
+
* @param record Record for this operation.
|
|
147
|
+
* @returns Typed model-facing request.
|
|
148
|
+
*/
|
|
149
|
+
prepare(request: AiBackendExecution, record: RequestRecord): AiAttemptRequest;
|
|
150
|
+
/**
|
|
151
|
+
* Returns the scripted question result.
|
|
152
|
+
*
|
|
153
|
+
* @param id Id for this operation.
|
|
154
|
+
* @param question Question for this operation.
|
|
155
|
+
* @returns Typed question record.
|
|
156
|
+
*/
|
|
157
|
+
question(id: string, question: DecisionQuestionDefinition): DecisionQuestion;
|
|
158
|
+
/**
|
|
159
|
+
* Returns the SHA-256 digest of content.
|
|
160
|
+
*
|
|
161
|
+
* @param value Value for this operation.
|
|
162
|
+
* @returns SHA-256 content digest.
|
|
163
|
+
*/
|
|
164
|
+
digest(value: string): AiContentDigest;
|
|
165
|
+
/**
|
|
166
|
+
* Returns the scripted failure result.
|
|
167
|
+
*
|
|
168
|
+
* @param request Request for this operation.
|
|
169
|
+
* @param ticket Ticket for this operation.
|
|
170
|
+
* @param code Code for this operation.
|
|
171
|
+
* @param retryable Retryable for this operation.
|
|
172
|
+
* @param usage Usage for this operation.
|
|
173
|
+
* @returns Runtime-recorded safe failure.
|
|
174
|
+
*/
|
|
175
|
+
failure(request: AiBackendExecution, ticket: AiAttemptTicket, code: AiFailure["code"], retryable: boolean, usage?: AiUsage): Promise<AiBackendOutcome>;
|
|
176
|
+
/**
|
|
177
|
+
* Validates and journals one generation candidate.
|
|
178
|
+
*
|
|
179
|
+
* @param request Request for this operation.
|
|
180
|
+
* @param ticket Ticket for this operation.
|
|
181
|
+
* @param record Record for this operation.
|
|
182
|
+
* @param script Script for this operation.
|
|
183
|
+
* @returns Validated output or recorded failure.
|
|
184
|
+
*/
|
|
185
|
+
generation(request: AiBackendExecution, ticket: AiAttemptTicket, record: RequestRecord, script: TextScript): Promise<AiBackendOutcome>;
|
|
186
|
+
/**
|
|
187
|
+
* Validates and journals one non-generative decision.
|
|
188
|
+
*
|
|
189
|
+
* @param request Request for this operation.
|
|
190
|
+
* @param ticket Ticket for this operation.
|
|
191
|
+
* @param record Record for this operation.
|
|
192
|
+
* @param script Script for this operation.
|
|
193
|
+
* @returns Validated output or recorded failure.
|
|
194
|
+
*/
|
|
195
|
+
decision(request: AiBackendExecution, ticket: AiAttemptTicket, record: RequestRecord, script: DecisionScript): Promise<AiBackendOutcome>;
|
|
196
|
+
/**
|
|
197
|
+
* Builds one provider answer for the decision journal.
|
|
198
|
+
*
|
|
199
|
+
* @param id Id for this operation.
|
|
200
|
+
* @param answer Answer for this operation.
|
|
201
|
+
* @returns Typed provider answer.
|
|
202
|
+
*/
|
|
203
|
+
answer(id: string, answer: AiAnswer): DecisionAnswer;
|
|
204
|
+
/**
|
|
205
|
+
* Maps one answer kind to its Proto oneof.
|
|
206
|
+
*
|
|
207
|
+
* @param answer Answer for this operation.
|
|
208
|
+
* @returns Typed answer oneof.
|
|
209
|
+
*/
|
|
210
|
+
answerValue(answer: AiAnswer): DecisionAnswer["value"];
|
|
211
|
+
/**
|
|
212
|
+
* Builds a provider answer distribution.
|
|
213
|
+
*
|
|
214
|
+
* @param probabilities Probabilities for this operation.
|
|
215
|
+
* @returns Typed full distribution.
|
|
216
|
+
*/
|
|
217
|
+
distribution(probabilities: Readonly<Record<string, number>>): DecisionDistribution;
|
|
218
|
+
/**
|
|
219
|
+
* Builds a generation response for the journal.
|
|
220
|
+
*
|
|
221
|
+
* @param request Request for this operation.
|
|
222
|
+
* @param script Script for this operation.
|
|
223
|
+
* @param admitted Admitted for this operation.
|
|
224
|
+
* @param failure Failure for this operation.
|
|
225
|
+
* @returns Journal-ready generation response.
|
|
226
|
+
*/
|
|
227
|
+
generationReply(request: AiBackendExecution, script: TextScript, admitted: AiCandidateAdmission, failure?: AiFailure): GenerationResponse;
|
|
228
|
+
/**
|
|
229
|
+
* Builds a decision response for the journal.
|
|
230
|
+
*
|
|
231
|
+
* @param request Request for this operation.
|
|
232
|
+
* @param script Script for this operation.
|
|
233
|
+
* @param admitted Admitted for this operation.
|
|
234
|
+
* @param failure Failure for this operation.
|
|
235
|
+
* @returns Journal-ready decision response.
|
|
236
|
+
*/
|
|
237
|
+
decisionReply(request: AiBackendExecution, script: DecisionScript, admitted: AiCandidateAdmission, failure?: AiFailure): DecisionResponse;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* One externally released response gate.
|
|
241
|
+
*/
|
|
242
|
+
declare class Gate implements AiTestGate {
|
|
243
|
+
#private;
|
|
244
|
+
/**
|
|
245
|
+
* Completes the pending response.
|
|
246
|
+
*/
|
|
247
|
+
release(): void;
|
|
248
|
+
/**
|
|
249
|
+
* Awaits gate release or cancellation.
|
|
250
|
+
*
|
|
251
|
+
* @param signal Signal for this operation.
|
|
252
|
+
* @returns Completion after release or cancellation.
|
|
253
|
+
*/
|
|
254
|
+
wait(signal: AbortSignal): Promise<void>;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Constructs scripted requests and crosses the same runtime barriers as adapters.
|
|
258
|
+
*/
|
|
259
|
+
export declare const ScriptedAttempts: ScriptedAttemptOps;
|
|
260
|
+
export {};
|
|
261
|
+
//# sourceMappingURL=scripted-attempts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripted-attempts.d.ts","sourceRoot":"","sources":["../../src/ai-test/scripted-attempts.ts"],"names":[],"mappings":"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"}
|