@openai/agents-core 0.3.7 → 0.3.8
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/dist/errors.d.ts +40 -0
- package/dist/errors.js +38 -1
- package/dist/errors.js.map +1 -1
- package/dist/errors.mjs +34 -0
- package/dist/errors.mjs.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.js +13 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -1
- package/dist/index.mjs.map +1 -1
- package/dist/metadata.js +2 -2
- package/dist/metadata.mjs +2 -2
- package/dist/result.d.ts +17 -0
- package/dist/result.js +71 -24
- package/dist/result.js.map +1 -1
- package/dist/result.mjs +69 -22
- package/dist/result.mjs.map +1 -1
- package/dist/run.d.ts +14 -47
- package/dist/run.js +421 -994
- package/dist/run.js.map +1 -1
- package/dist/run.mjs +405 -978
- package/dist/run.mjs.map +1 -1
- package/dist/runState.d.ts +1286 -172
- package/dist/runState.js +146 -16
- package/dist/runState.js.map +1 -1
- package/dist/runState.mjs +142 -12
- package/dist/runState.mjs.map +1 -1
- package/dist/runner/constants.d.ts +1 -0
- package/dist/runner/constants.js +6 -0
- package/dist/runner/constants.js.map +1 -0
- package/dist/runner/constants.mjs +3 -0
- package/dist/runner/constants.mjs.map +1 -0
- package/dist/runner/conversation.d.ts +85 -0
- package/dist/runner/conversation.js +275 -0
- package/dist/runner/conversation.js.map +1 -0
- package/dist/runner/conversation.mjs +269 -0
- package/dist/runner/conversation.mjs.map +1 -0
- package/dist/runner/guardrails.d.ts +23 -0
- package/dist/runner/guardrails.js +174 -0
- package/dist/runner/guardrails.js.map +1 -0
- package/dist/runner/guardrails.mjs +166 -0
- package/dist/runner/guardrails.mjs.map +1 -0
- package/dist/runner/items.d.ts +18 -0
- package/dist/runner/items.js +89 -0
- package/dist/runner/items.js.map +1 -0
- package/dist/runner/items.mjs +79 -0
- package/dist/runner/items.mjs.map +1 -0
- package/dist/runner/mcpApprovals.d.ts +25 -0
- package/dist/runner/mcpApprovals.js +66 -0
- package/dist/runner/mcpApprovals.js.map +1 -0
- package/dist/runner/mcpApprovals.mjs +63 -0
- package/dist/runner/mcpApprovals.mjs.map +1 -0
- package/dist/runner/modelOutputs.d.ts +10 -0
- package/dist/runner/modelOutputs.js +206 -0
- package/dist/runner/modelOutputs.js.map +1 -0
- package/dist/runner/modelOutputs.mjs +203 -0
- package/dist/runner/modelOutputs.mjs.map +1 -0
- package/dist/runner/modelPreparation.d.ts +8 -0
- package/dist/runner/modelPreparation.js +41 -0
- package/dist/runner/modelPreparation.js.map +1 -0
- package/dist/runner/modelPreparation.mjs +38 -0
- package/dist/runner/modelPreparation.mjs.map +1 -0
- package/dist/runner/modelSettings.d.ts +20 -0
- package/dist/runner/modelSettings.js +97 -0
- package/dist/runner/modelSettings.js.map +1 -0
- package/dist/runner/modelSettings.mjs +92 -0
- package/dist/runner/modelSettings.mjs.map +1 -0
- package/dist/runner/runLoop.d.ts +32 -0
- package/dist/runner/runLoop.js +62 -0
- package/dist/runner/runLoop.js.map +1 -0
- package/dist/runner/runLoop.mjs +57 -0
- package/dist/runner/runLoop.mjs.map +1 -0
- package/dist/runner/sessionPersistence.d.ts +26 -0
- package/dist/runner/sessionPersistence.js +441 -0
- package/dist/runner/sessionPersistence.js.map +1 -0
- package/dist/runner/sessionPersistence.mjs +431 -0
- package/dist/runner/sessionPersistence.mjs.map +1 -0
- package/dist/runner/steps.d.ts +48 -0
- package/dist/runner/steps.js +40 -0
- package/dist/runner/steps.js.map +1 -0
- package/dist/runner/steps.mjs +36 -0
- package/dist/runner/steps.mjs.map +1 -0
- package/dist/runner/streaming.d.ts +9 -0
- package/dist/runner/streaming.js +74 -0
- package/dist/runner/streaming.js.map +1 -0
- package/dist/runner/streaming.mjs +65 -0
- package/dist/runner/streaming.mjs.map +1 -0
- package/dist/runner/toolExecution.d.ts +15 -0
- package/dist/runner/toolExecution.js +997 -0
- package/dist/runner/toolExecution.js.map +1 -0
- package/dist/runner/toolExecution.mjs +984 -0
- package/dist/runner/toolExecution.mjs.map +1 -0
- package/dist/runner/toolUseTracker.d.ts +9 -0
- package/dist/runner/toolUseTracker.js +34 -0
- package/dist/runner/toolUseTracker.js.map +1 -0
- package/dist/runner/toolUseTracker.mjs +30 -0
- package/dist/runner/toolUseTracker.mjs.map +1 -0
- package/dist/runner/tracing.d.ts +23 -0
- package/dist/runner/tracing.js +45 -0
- package/dist/runner/tracing.js.map +1 -0
- package/dist/runner/tracing.mjs +41 -0
- package/dist/runner/tracing.mjs.map +1 -0
- package/dist/runner/turnPreparation.d.ts +30 -0
- package/dist/runner/turnPreparation.js +80 -0
- package/dist/runner/turnPreparation.js.map +1 -0
- package/dist/runner/turnPreparation.mjs +74 -0
- package/dist/runner/turnPreparation.mjs.map +1 -0
- package/dist/runner/turnResolution.d.ts +3 -0
- package/dist/runner/turnResolution.js +531 -0
- package/dist/runner/turnResolution.js.map +1 -0
- package/dist/runner/turnResolution.mjs +526 -0
- package/dist/runner/turnResolution.mjs.map +1 -0
- package/dist/runner/types.d.ts +66 -0
- package/dist/runner/types.js +3 -0
- package/dist/runner/types.js.map +1 -0
- package/dist/runner/types.mjs +2 -0
- package/dist/runner/types.mjs.map +1 -0
- package/dist/shims/mcp-server/node.js +51 -6
- package/dist/shims/mcp-server/node.js.map +1 -1
- package/dist/shims/mcp-server/node.mjs +51 -6
- package/dist/shims/mcp-server/node.mjs.map +1 -1
- package/dist/tool.d.ts +28 -2
- package/dist/tool.js +7 -1
- package/dist/tool.js.map +1 -1
- package/dist/tool.mjs +8 -2
- package/dist/tool.mjs.map +1 -1
- package/dist/toolGuardrail.d.ts +101 -0
- package/dist/toolGuardrail.js +58 -0
- package/dist/toolGuardrail.js.map +1 -0
- package/dist/toolGuardrail.mjs +51 -0
- package/dist/toolGuardrail.mjs.map +1 -0
- package/dist/tracing/config.d.ts +3 -0
- package/dist/tracing/config.js +3 -0
- package/dist/tracing/config.js.map +1 -0
- package/dist/tracing/config.mjs +2 -0
- package/dist/tracing/config.mjs.map +1 -0
- package/dist/tracing/context.d.ts +2 -0
- package/dist/tracing/context.js +95 -24
- package/dist/tracing/context.js.map +1 -1
- package/dist/tracing/context.mjs +95 -24
- package/dist/tracing/context.mjs.map +1 -1
- package/dist/tracing/createSpans.d.ts +11 -11
- package/dist/tracing/index.d.ts +2 -0
- package/dist/tracing/index.js.map +1 -1
- package/dist/tracing/index.mjs.map +1 -1
- package/dist/tracing/provider.js +54 -4
- package/dist/tracing/provider.js.map +1 -1
- package/dist/tracing/provider.mjs +54 -4
- package/dist/tracing/provider.mjs.map +1 -1
- package/dist/tracing/spans.d.ts +2 -0
- package/dist/tracing/spans.js +6 -0
- package/dist/tracing/spans.js.map +1 -1
- package/dist/tracing/spans.mjs +6 -0
- package/dist/tracing/spans.mjs.map +1 -1
- package/dist/tracing/traces.d.ts +11 -1
- package/dist/tracing/traces.js +15 -2
- package/dist/tracing/traces.js.map +1 -1
- package/dist/tracing/traces.mjs +15 -2
- package/dist/tracing/traces.mjs.map +1 -1
- package/dist/types/protocol.d.ts +11 -0
- package/dist/types/protocol.js +1 -0
- package/dist/types/protocol.js.map +1 -1
- package/dist/types/protocol.mjs +1 -0
- package/dist/types/protocol.mjs.map +1 -1
- package/dist/utils/binary.d.ts +6 -0
- package/dist/utils/binary.js +53 -0
- package/dist/utils/binary.js.map +1 -0
- package/dist/utils/binary.mjs +49 -0
- package/dist/utils/binary.mjs.map +1 -0
- package/dist/utils/toolGuardrails.d.ts +24 -0
- package/dist/utils/toolGuardrails.js +58 -0
- package/dist/utils/toolGuardrails.js.map +1 -0
- package/dist/utils/toolGuardrails.mjs +54 -0
- package/dist/utils/toolGuardrails.mjs.map +1 -0
- package/package.json +4 -3
- package/dist/runImplementation.d.ts +0 -161
- package/dist/runImplementation.js +0 -2054
- package/dist/runImplementation.js.map +0 -1
- package/dist/runImplementation.mjs +0 -2028
- package/dist/runImplementation.mjs.map +0 -1
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ServerConversationTracker = exports.getTurnInput = void 0;
|
|
4
|
+
exports.applyCallModelInputFilter = applyCallModelInputFilter;
|
|
5
|
+
const errors_1 = require("../errors.js");
|
|
6
|
+
const context_1 = require("../tracing/context.js");
|
|
7
|
+
const items_1 = require("./items.js");
|
|
8
|
+
var items_2 = require("./items.js");
|
|
9
|
+
Object.defineProperty(exports, "getTurnInput", { enumerable: true, get: function () { return items_2.getTurnInput; } });
|
|
10
|
+
/**
|
|
11
|
+
* Applies the optional callModelInputFilter and returns the filtered input alongside the original
|
|
12
|
+
* items so downstream tracking and session persistence stay in sync with what the model saw.
|
|
13
|
+
*/
|
|
14
|
+
async function applyCallModelInputFilter(agent, callModelInputFilter, context, inputItems, systemInstructions) {
|
|
15
|
+
const cloneInputItems = (items, map) => items.map((item) => {
|
|
16
|
+
const cloned = structuredClone(item);
|
|
17
|
+
if (map && cloned && typeof cloned === 'object') {
|
|
18
|
+
map.set(cloned, item);
|
|
19
|
+
}
|
|
20
|
+
return cloned;
|
|
21
|
+
});
|
|
22
|
+
// Record the relationship between the cloned array passed to filters and the original inputs.
|
|
23
|
+
const cloneMap = new WeakMap();
|
|
24
|
+
const originalPool = (0, items_1.buildAgentInputPool)(inputItems);
|
|
25
|
+
const fallbackOriginals = [];
|
|
26
|
+
// Track any original object inputs so filtered replacements can still mark them as delivered.
|
|
27
|
+
for (const item of inputItems) {
|
|
28
|
+
if (item && typeof item === 'object') {
|
|
29
|
+
fallbackOriginals.push(item);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const removeFromFallback = (candidate) => {
|
|
33
|
+
if (!candidate || typeof candidate !== 'object') {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const index = fallbackOriginals.findIndex((original) => original === candidate);
|
|
37
|
+
if (index !== -1) {
|
|
38
|
+
fallbackOriginals.splice(index, 1);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const takeFallbackOriginal = () => {
|
|
42
|
+
const next = fallbackOriginals.shift();
|
|
43
|
+
if (next) {
|
|
44
|
+
(0, items_1.removeAgentInputFromPool)(originalPool, next);
|
|
45
|
+
}
|
|
46
|
+
return next;
|
|
47
|
+
};
|
|
48
|
+
// Always create a deep copy so downstream mutations inside filters cannot affect
|
|
49
|
+
// the cached turn state.
|
|
50
|
+
const clonedBaseInput = cloneInputItems(inputItems, cloneMap);
|
|
51
|
+
const base = {
|
|
52
|
+
input: clonedBaseInput,
|
|
53
|
+
instructions: systemInstructions,
|
|
54
|
+
};
|
|
55
|
+
if (!callModelInputFilter) {
|
|
56
|
+
return {
|
|
57
|
+
modelInput: base,
|
|
58
|
+
sourceItems: [...inputItems],
|
|
59
|
+
persistedItems: [],
|
|
60
|
+
filterApplied: false,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
const result = await callModelInputFilter({
|
|
65
|
+
modelData: base,
|
|
66
|
+
agent,
|
|
67
|
+
context: context.context,
|
|
68
|
+
});
|
|
69
|
+
if (!result || !Array.isArray(result.input)) {
|
|
70
|
+
throw new errors_1.UserError('callModelInputFilter must return a ModelInputData object with an input array.');
|
|
71
|
+
}
|
|
72
|
+
// Preserve a pointer to the original object backing each filtered clone so downstream
|
|
73
|
+
// trackers can keep their bookkeeping consistent even after redaction.
|
|
74
|
+
const sourceItems = result.input.map((item) => {
|
|
75
|
+
if (!item || typeof item !== 'object') {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
const original = cloneMap.get(item);
|
|
79
|
+
if (original) {
|
|
80
|
+
removeFromFallback(original);
|
|
81
|
+
(0, items_1.removeAgentInputFromPool)(originalPool, original);
|
|
82
|
+
return original;
|
|
83
|
+
}
|
|
84
|
+
const key = (0, items_1.getAgentInputItemKey)(item);
|
|
85
|
+
const matchedByContent = (0, items_1.takeAgentInputFromPool)(originalPool, key);
|
|
86
|
+
if (matchedByContent) {
|
|
87
|
+
removeFromFallback(matchedByContent);
|
|
88
|
+
return matchedByContent;
|
|
89
|
+
}
|
|
90
|
+
const fallback = takeFallbackOriginal();
|
|
91
|
+
if (fallback) {
|
|
92
|
+
return fallback;
|
|
93
|
+
}
|
|
94
|
+
return undefined;
|
|
95
|
+
});
|
|
96
|
+
const clonedFilteredInput = cloneInputItems(result.input);
|
|
97
|
+
return {
|
|
98
|
+
modelInput: {
|
|
99
|
+
input: clonedFilteredInput,
|
|
100
|
+
instructions: typeof result.instructions === 'undefined'
|
|
101
|
+
? systemInstructions
|
|
102
|
+
: result.instructions,
|
|
103
|
+
},
|
|
104
|
+
sourceItems,
|
|
105
|
+
persistedItems: clonedFilteredInput.map((item) => structuredClone(item)),
|
|
106
|
+
filterApplied: true,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
(0, context_1.addErrorToCurrentSpan)({
|
|
111
|
+
message: 'Error in callModelInputFilter',
|
|
112
|
+
data: { error: String(error) },
|
|
113
|
+
});
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Tracks which items have already been sent to or received from the Responses API when the caller
|
|
119
|
+
* supplies `conversationId`/`previousResponseId`. This ensures we only send the delta each turn.
|
|
120
|
+
*/
|
|
121
|
+
class ServerConversationTracker {
|
|
122
|
+
conversationId;
|
|
123
|
+
previousResponseId;
|
|
124
|
+
// Using this flag because WeakSet does not provide a way to check its size.
|
|
125
|
+
sentInitialInput = false;
|
|
126
|
+
// The items already sent to the model; using WeakSet for memory efficiency.
|
|
127
|
+
sentItems = new WeakSet();
|
|
128
|
+
// The items received from the server; using WeakSet for memory efficiency.
|
|
129
|
+
serverItems = new WeakSet();
|
|
130
|
+
// Track initial input items that have not yet been sent so they can be retried on later turns.
|
|
131
|
+
remainingInitialInput = null;
|
|
132
|
+
constructor({ conversationId, previousResponseId, }) {
|
|
133
|
+
this.conversationId = conversationId ?? undefined;
|
|
134
|
+
this.previousResponseId = previousResponseId ?? undefined;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Pre-populates tracker caches from an existing RunState when resuming server-managed runs.
|
|
138
|
+
*/
|
|
139
|
+
primeFromState({ originalInput, generatedItems, modelResponses, }) {
|
|
140
|
+
if (this.sentInitialInput) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const originalItems = (0, items_1.toAgentInputList)(originalInput);
|
|
144
|
+
const hasResponses = modelResponses.length > 0;
|
|
145
|
+
const serverItemKeys = new Set();
|
|
146
|
+
for (const response of modelResponses) {
|
|
147
|
+
for (const item of response.output) {
|
|
148
|
+
if (item && typeof item === 'object') {
|
|
149
|
+
this.serverItems.add(item);
|
|
150
|
+
serverItemKeys.add((0, items_1.getAgentInputItemKey)(item));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (hasResponses) {
|
|
155
|
+
for (const item of originalItems) {
|
|
156
|
+
if (item && typeof item === 'object') {
|
|
157
|
+
this.sentItems.add(item);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
this.sentInitialInput = true;
|
|
161
|
+
this.remainingInitialInput = null;
|
|
162
|
+
}
|
|
163
|
+
const latestResponse = modelResponses[modelResponses.length - 1];
|
|
164
|
+
if (!this.conversationId && latestResponse?.responseId) {
|
|
165
|
+
this.previousResponseId = latestResponse.responseId;
|
|
166
|
+
}
|
|
167
|
+
if (hasResponses) {
|
|
168
|
+
for (const item of generatedItems) {
|
|
169
|
+
const rawItem = item.rawItem;
|
|
170
|
+
if (!rawItem || typeof rawItem !== 'object') {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
const rawItemKey = (0, items_1.getAgentInputItemKey)(rawItem);
|
|
174
|
+
if (this.serverItems.has(rawItem) || serverItemKeys.has(rawItemKey)) {
|
|
175
|
+
this.sentItems.add(rawItem);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Records the raw items returned by the server so future delta calculations skip them.
|
|
182
|
+
* Also captures the latest response identifier to chain follow-up calls when possible.
|
|
183
|
+
*/
|
|
184
|
+
trackServerItems(modelResponse) {
|
|
185
|
+
if (!modelResponse) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
for (const item of modelResponse.output) {
|
|
189
|
+
if (item && typeof item === 'object') {
|
|
190
|
+
this.serverItems.add(item);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
if (!this.conversationId && modelResponse.responseId) {
|
|
194
|
+
this.previousResponseId = modelResponse.responseId;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Returns the minimum set of items that still need to be delivered to the server for the
|
|
199
|
+
* current turn. This includes the original turn inputs (until acknowledged) plus any
|
|
200
|
+
* newly generated items that have not yet been echoed back by the API.
|
|
201
|
+
*/
|
|
202
|
+
prepareInput(originalInput, generatedItems) {
|
|
203
|
+
const inputItems = [];
|
|
204
|
+
if (!this.sentInitialInput) {
|
|
205
|
+
const initialItems = (0, items_1.toAgentInputList)(originalInput);
|
|
206
|
+
// Preserve the full initial payload so a filter can drop items without losing their originals.
|
|
207
|
+
inputItems.push(...initialItems);
|
|
208
|
+
this.remainingInitialInput = initialItems.filter((item) => Boolean(item) && typeof item === 'object');
|
|
209
|
+
this.sentInitialInput = true;
|
|
210
|
+
}
|
|
211
|
+
else if (this.remainingInitialInput &&
|
|
212
|
+
this.remainingInitialInput.length > 0) {
|
|
213
|
+
// Re-queue prior initial items until the tracker confirms they were delivered to the API.
|
|
214
|
+
inputItems.push(...this.remainingInitialInput);
|
|
215
|
+
}
|
|
216
|
+
for (const item of generatedItems) {
|
|
217
|
+
if (item.type === 'tool_approval_item') {
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
const rawItem = item.rawItem;
|
|
221
|
+
if (!rawItem || typeof rawItem !== 'object') {
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
if (this.sentItems.has(rawItem) || this.serverItems.has(rawItem)) {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
inputItems.push(rawItem);
|
|
228
|
+
}
|
|
229
|
+
return inputItems;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Marks the provided originals as delivered so future turns do not resend them and any
|
|
233
|
+
* pending initial inputs can be dropped once the server acknowledges receipt.
|
|
234
|
+
*/
|
|
235
|
+
markInputAsSent(items, options) {
|
|
236
|
+
const delivered = new Set();
|
|
237
|
+
const dropRemainingInitialInput = options?.filterApplied ?? false;
|
|
238
|
+
const markFilteredItemsAsSent = options?.filterApplied && Boolean(options.allTurnItems);
|
|
239
|
+
this.addDeliveredItems(delivered, items);
|
|
240
|
+
const allTurnItems = options?.allTurnItems;
|
|
241
|
+
if (markFilteredItemsAsSent && allTurnItems) {
|
|
242
|
+
this.addDeliveredItems(delivered, allTurnItems);
|
|
243
|
+
}
|
|
244
|
+
this.updateRemainingInitialInput(delivered, Boolean(dropRemainingInitialInput));
|
|
245
|
+
}
|
|
246
|
+
addDeliveredItems(delivered, items) {
|
|
247
|
+
for (const item of items) {
|
|
248
|
+
if (!item || typeof item !== 'object' || delivered.has(item)) {
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
// Some inputs may be repeated in the filtered list; only mark unique originals once.
|
|
252
|
+
delivered.add(item);
|
|
253
|
+
this.sentItems.add(item);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
updateRemainingInitialInput(delivered, dropRemainingInitialInput) {
|
|
257
|
+
if (!this.remainingInitialInput ||
|
|
258
|
+
this.remainingInitialInput.length === 0 ||
|
|
259
|
+
delivered.size === 0) {
|
|
260
|
+
if (dropRemainingInitialInput && this.remainingInitialInput) {
|
|
261
|
+
this.remainingInitialInput = null;
|
|
262
|
+
}
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
this.remainingInitialInput = this.remainingInitialInput.filter((item) => !delivered.has(item));
|
|
266
|
+
if (this.remainingInitialInput.length === 0) {
|
|
267
|
+
this.remainingInitialInput = null;
|
|
268
|
+
}
|
|
269
|
+
else if (dropRemainingInitialInput) {
|
|
270
|
+
this.remainingInitialInput = null;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
exports.ServerConversationTracker = ServerConversationTracker;
|
|
275
|
+
//# sourceMappingURL=conversation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/runner/conversation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { UserError } from "../errors.mjs";
|
|
2
|
+
import { addErrorToCurrentSpan } from "../tracing/context.mjs";
|
|
3
|
+
import { buildAgentInputPool, getAgentInputItemKey, removeAgentInputFromPool, takeAgentInputFromPool, toAgentInputList, } from "./items.mjs";
|
|
4
|
+
export { getTurnInput } from "./items.mjs";
|
|
5
|
+
/**
|
|
6
|
+
* Applies the optional callModelInputFilter and returns the filtered input alongside the original
|
|
7
|
+
* items so downstream tracking and session persistence stay in sync with what the model saw.
|
|
8
|
+
*/
|
|
9
|
+
export async function applyCallModelInputFilter(agent, callModelInputFilter, context, inputItems, systemInstructions) {
|
|
10
|
+
const cloneInputItems = (items, map) => items.map((item) => {
|
|
11
|
+
const cloned = structuredClone(item);
|
|
12
|
+
if (map && cloned && typeof cloned === 'object') {
|
|
13
|
+
map.set(cloned, item);
|
|
14
|
+
}
|
|
15
|
+
return cloned;
|
|
16
|
+
});
|
|
17
|
+
// Record the relationship between the cloned array passed to filters and the original inputs.
|
|
18
|
+
const cloneMap = new WeakMap();
|
|
19
|
+
const originalPool = buildAgentInputPool(inputItems);
|
|
20
|
+
const fallbackOriginals = [];
|
|
21
|
+
// Track any original object inputs so filtered replacements can still mark them as delivered.
|
|
22
|
+
for (const item of inputItems) {
|
|
23
|
+
if (item && typeof item === 'object') {
|
|
24
|
+
fallbackOriginals.push(item);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const removeFromFallback = (candidate) => {
|
|
28
|
+
if (!candidate || typeof candidate !== 'object') {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const index = fallbackOriginals.findIndex((original) => original === candidate);
|
|
32
|
+
if (index !== -1) {
|
|
33
|
+
fallbackOriginals.splice(index, 1);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const takeFallbackOriginal = () => {
|
|
37
|
+
const next = fallbackOriginals.shift();
|
|
38
|
+
if (next) {
|
|
39
|
+
removeAgentInputFromPool(originalPool, next);
|
|
40
|
+
}
|
|
41
|
+
return next;
|
|
42
|
+
};
|
|
43
|
+
// Always create a deep copy so downstream mutations inside filters cannot affect
|
|
44
|
+
// the cached turn state.
|
|
45
|
+
const clonedBaseInput = cloneInputItems(inputItems, cloneMap);
|
|
46
|
+
const base = {
|
|
47
|
+
input: clonedBaseInput,
|
|
48
|
+
instructions: systemInstructions,
|
|
49
|
+
};
|
|
50
|
+
if (!callModelInputFilter) {
|
|
51
|
+
return {
|
|
52
|
+
modelInput: base,
|
|
53
|
+
sourceItems: [...inputItems],
|
|
54
|
+
persistedItems: [],
|
|
55
|
+
filterApplied: false,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
const result = await callModelInputFilter({
|
|
60
|
+
modelData: base,
|
|
61
|
+
agent,
|
|
62
|
+
context: context.context,
|
|
63
|
+
});
|
|
64
|
+
if (!result || !Array.isArray(result.input)) {
|
|
65
|
+
throw new UserError('callModelInputFilter must return a ModelInputData object with an input array.');
|
|
66
|
+
}
|
|
67
|
+
// Preserve a pointer to the original object backing each filtered clone so downstream
|
|
68
|
+
// trackers can keep their bookkeeping consistent even after redaction.
|
|
69
|
+
const sourceItems = result.input.map((item) => {
|
|
70
|
+
if (!item || typeof item !== 'object') {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
const original = cloneMap.get(item);
|
|
74
|
+
if (original) {
|
|
75
|
+
removeFromFallback(original);
|
|
76
|
+
removeAgentInputFromPool(originalPool, original);
|
|
77
|
+
return original;
|
|
78
|
+
}
|
|
79
|
+
const key = getAgentInputItemKey(item);
|
|
80
|
+
const matchedByContent = takeAgentInputFromPool(originalPool, key);
|
|
81
|
+
if (matchedByContent) {
|
|
82
|
+
removeFromFallback(matchedByContent);
|
|
83
|
+
return matchedByContent;
|
|
84
|
+
}
|
|
85
|
+
const fallback = takeFallbackOriginal();
|
|
86
|
+
if (fallback) {
|
|
87
|
+
return fallback;
|
|
88
|
+
}
|
|
89
|
+
return undefined;
|
|
90
|
+
});
|
|
91
|
+
const clonedFilteredInput = cloneInputItems(result.input);
|
|
92
|
+
return {
|
|
93
|
+
modelInput: {
|
|
94
|
+
input: clonedFilteredInput,
|
|
95
|
+
instructions: typeof result.instructions === 'undefined'
|
|
96
|
+
? systemInstructions
|
|
97
|
+
: result.instructions,
|
|
98
|
+
},
|
|
99
|
+
sourceItems,
|
|
100
|
+
persistedItems: clonedFilteredInput.map((item) => structuredClone(item)),
|
|
101
|
+
filterApplied: true,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
addErrorToCurrentSpan({
|
|
106
|
+
message: 'Error in callModelInputFilter',
|
|
107
|
+
data: { error: String(error) },
|
|
108
|
+
});
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Tracks which items have already been sent to or received from the Responses API when the caller
|
|
114
|
+
* supplies `conversationId`/`previousResponseId`. This ensures we only send the delta each turn.
|
|
115
|
+
*/
|
|
116
|
+
export class ServerConversationTracker {
|
|
117
|
+
conversationId;
|
|
118
|
+
previousResponseId;
|
|
119
|
+
// Using this flag because WeakSet does not provide a way to check its size.
|
|
120
|
+
sentInitialInput = false;
|
|
121
|
+
// The items already sent to the model; using WeakSet for memory efficiency.
|
|
122
|
+
sentItems = new WeakSet();
|
|
123
|
+
// The items received from the server; using WeakSet for memory efficiency.
|
|
124
|
+
serverItems = new WeakSet();
|
|
125
|
+
// Track initial input items that have not yet been sent so they can be retried on later turns.
|
|
126
|
+
remainingInitialInput = null;
|
|
127
|
+
constructor({ conversationId, previousResponseId, }) {
|
|
128
|
+
this.conversationId = conversationId ?? undefined;
|
|
129
|
+
this.previousResponseId = previousResponseId ?? undefined;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Pre-populates tracker caches from an existing RunState when resuming server-managed runs.
|
|
133
|
+
*/
|
|
134
|
+
primeFromState({ originalInput, generatedItems, modelResponses, }) {
|
|
135
|
+
if (this.sentInitialInput) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const originalItems = toAgentInputList(originalInput);
|
|
139
|
+
const hasResponses = modelResponses.length > 0;
|
|
140
|
+
const serverItemKeys = new Set();
|
|
141
|
+
for (const response of modelResponses) {
|
|
142
|
+
for (const item of response.output) {
|
|
143
|
+
if (item && typeof item === 'object') {
|
|
144
|
+
this.serverItems.add(item);
|
|
145
|
+
serverItemKeys.add(getAgentInputItemKey(item));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (hasResponses) {
|
|
150
|
+
for (const item of originalItems) {
|
|
151
|
+
if (item && typeof item === 'object') {
|
|
152
|
+
this.sentItems.add(item);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
this.sentInitialInput = true;
|
|
156
|
+
this.remainingInitialInput = null;
|
|
157
|
+
}
|
|
158
|
+
const latestResponse = modelResponses[modelResponses.length - 1];
|
|
159
|
+
if (!this.conversationId && latestResponse?.responseId) {
|
|
160
|
+
this.previousResponseId = latestResponse.responseId;
|
|
161
|
+
}
|
|
162
|
+
if (hasResponses) {
|
|
163
|
+
for (const item of generatedItems) {
|
|
164
|
+
const rawItem = item.rawItem;
|
|
165
|
+
if (!rawItem || typeof rawItem !== 'object') {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
const rawItemKey = getAgentInputItemKey(rawItem);
|
|
169
|
+
if (this.serverItems.has(rawItem) || serverItemKeys.has(rawItemKey)) {
|
|
170
|
+
this.sentItems.add(rawItem);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Records the raw items returned by the server so future delta calculations skip them.
|
|
177
|
+
* Also captures the latest response identifier to chain follow-up calls when possible.
|
|
178
|
+
*/
|
|
179
|
+
trackServerItems(modelResponse) {
|
|
180
|
+
if (!modelResponse) {
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
for (const item of modelResponse.output) {
|
|
184
|
+
if (item && typeof item === 'object') {
|
|
185
|
+
this.serverItems.add(item);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (!this.conversationId && modelResponse.responseId) {
|
|
189
|
+
this.previousResponseId = modelResponse.responseId;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Returns the minimum set of items that still need to be delivered to the server for the
|
|
194
|
+
* current turn. This includes the original turn inputs (until acknowledged) plus any
|
|
195
|
+
* newly generated items that have not yet been echoed back by the API.
|
|
196
|
+
*/
|
|
197
|
+
prepareInput(originalInput, generatedItems) {
|
|
198
|
+
const inputItems = [];
|
|
199
|
+
if (!this.sentInitialInput) {
|
|
200
|
+
const initialItems = toAgentInputList(originalInput);
|
|
201
|
+
// Preserve the full initial payload so a filter can drop items without losing their originals.
|
|
202
|
+
inputItems.push(...initialItems);
|
|
203
|
+
this.remainingInitialInput = initialItems.filter((item) => Boolean(item) && typeof item === 'object');
|
|
204
|
+
this.sentInitialInput = true;
|
|
205
|
+
}
|
|
206
|
+
else if (this.remainingInitialInput &&
|
|
207
|
+
this.remainingInitialInput.length > 0) {
|
|
208
|
+
// Re-queue prior initial items until the tracker confirms they were delivered to the API.
|
|
209
|
+
inputItems.push(...this.remainingInitialInput);
|
|
210
|
+
}
|
|
211
|
+
for (const item of generatedItems) {
|
|
212
|
+
if (item.type === 'tool_approval_item') {
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
const rawItem = item.rawItem;
|
|
216
|
+
if (!rawItem || typeof rawItem !== 'object') {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
if (this.sentItems.has(rawItem) || this.serverItems.has(rawItem)) {
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
inputItems.push(rawItem);
|
|
223
|
+
}
|
|
224
|
+
return inputItems;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Marks the provided originals as delivered so future turns do not resend them and any
|
|
228
|
+
* pending initial inputs can be dropped once the server acknowledges receipt.
|
|
229
|
+
*/
|
|
230
|
+
markInputAsSent(items, options) {
|
|
231
|
+
const delivered = new Set();
|
|
232
|
+
const dropRemainingInitialInput = options?.filterApplied ?? false;
|
|
233
|
+
const markFilteredItemsAsSent = options?.filterApplied && Boolean(options.allTurnItems);
|
|
234
|
+
this.addDeliveredItems(delivered, items);
|
|
235
|
+
const allTurnItems = options?.allTurnItems;
|
|
236
|
+
if (markFilteredItemsAsSent && allTurnItems) {
|
|
237
|
+
this.addDeliveredItems(delivered, allTurnItems);
|
|
238
|
+
}
|
|
239
|
+
this.updateRemainingInitialInput(delivered, Boolean(dropRemainingInitialInput));
|
|
240
|
+
}
|
|
241
|
+
addDeliveredItems(delivered, items) {
|
|
242
|
+
for (const item of items) {
|
|
243
|
+
if (!item || typeof item !== 'object' || delivered.has(item)) {
|
|
244
|
+
continue;
|
|
245
|
+
}
|
|
246
|
+
// Some inputs may be repeated in the filtered list; only mark unique originals once.
|
|
247
|
+
delivered.add(item);
|
|
248
|
+
this.sentItems.add(item);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
updateRemainingInitialInput(delivered, dropRemainingInitialInput) {
|
|
252
|
+
if (!this.remainingInitialInput ||
|
|
253
|
+
this.remainingInitialInput.length === 0 ||
|
|
254
|
+
delivered.size === 0) {
|
|
255
|
+
if (dropRemainingInitialInput && this.remainingInitialInput) {
|
|
256
|
+
this.remainingInitialInput = null;
|
|
257
|
+
}
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
this.remainingInitialInput = this.remainingInitialInput.filter((item) => !delivered.has(item));
|
|
261
|
+
if (this.remainingInitialInput.length === 0) {
|
|
262
|
+
this.remainingInitialInput = null;
|
|
263
|
+
}
|
|
264
|
+
else if (dropRemainingInitialInput) {
|
|
265
|
+
this.remainingInitialInput = null;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=conversation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation.mjs","sourceRoot":"","sources":["../../src/runner/conversation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Agent, AgentOutputType } from '../agent';
|
|
2
|
+
import { InputGuardrailDefinition, InputGuardrailResult, OutputGuardrailDefinition, OutputGuardrailMetadata } from '../guardrail';
|
|
3
|
+
import { RunState } from '../runState';
|
|
4
|
+
export type GuardrailTracker = {
|
|
5
|
+
readonly pending: boolean;
|
|
6
|
+
readonly failed: boolean;
|
|
7
|
+
readonly error: unknown;
|
|
8
|
+
markPending: () => void;
|
|
9
|
+
setPromise: (promise?: Promise<InputGuardrailResult[]>) => void;
|
|
10
|
+
setError: (err: unknown) => void;
|
|
11
|
+
throwIfError: () => void;
|
|
12
|
+
awaitCompletion: (options?: {
|
|
13
|
+
suppressErrors?: boolean;
|
|
14
|
+
}) => Promise<void>;
|
|
15
|
+
};
|
|
16
|
+
export declare const createGuardrailTracker: () => GuardrailTracker;
|
|
17
|
+
export declare function buildInputGuardrailDefinitions<TContext, TAgent extends Agent<TContext, AgentOutputType>>(state: RunState<TContext, TAgent>, runnerGuardrails: InputGuardrailDefinition[]): InputGuardrailDefinition[];
|
|
18
|
+
export declare function splitInputGuardrails(guardrails: InputGuardrailDefinition[]): {
|
|
19
|
+
blocking: InputGuardrailDefinition[];
|
|
20
|
+
parallel: InputGuardrailDefinition[];
|
|
21
|
+
};
|
|
22
|
+
export declare function runInputGuardrails<TContext, TAgent extends Agent<TContext, AgentOutputType>>(state: RunState<TContext, TAgent>, guardrails: InputGuardrailDefinition[]): Promise<InputGuardrailResult[]>;
|
|
23
|
+
export declare function runOutputGuardrails<TContext, TOutput extends AgentOutputType, TAgent extends Agent<TContext, TOutput>>(state: RunState<TContext, TAgent>, runnerOutputGuardrails: OutputGuardrailDefinition<OutputGuardrailMetadata, AgentOutputType<unknown>>[], output: string): Promise<void>;
|