@strands-agents/sdk 1.0.0-rc.4 → 1.0.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.
- package/README.md +8 -15
- package/dist/src/__fixtures__/agent-helpers.d.ts +6 -0
- package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/agent-helpers.js +3 -1
- package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
- package/dist/src/__fixtures__/mock-plugin.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-plugin.js +3 -1
- package/dist/src/__fixtures__/mock-plugin.js.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.d.ts +3 -1
- package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.js +3 -1
- package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
- package/dist/src/__tests__/mcp.test.js +274 -1
- package/dist/src/__tests__/mcp.test.js.map +1 -1
- package/dist/src/a2a/__tests__/events.test.js +2 -0
- package/dist/src/a2a/__tests__/events.test.js.map +1 -1
- package/dist/src/a2a/__tests__/executor.test.js +16 -5
- package/dist/src/a2a/__tests__/executor.test.js.map +1 -1
- package/dist/src/a2a/a2a-agent.d.ts +8 -3
- package/dist/src/a2a/a2a-agent.d.ts.map +1 -1
- package/dist/src/a2a/a2a-agent.js +12 -6
- package/dist/src/a2a/a2a-agent.js.map +1 -1
- package/dist/src/a2a/executor.d.ts +13 -0
- package/dist/src/a2a/executor.d.ts.map +1 -1
- package/dist/src/a2a/executor.js +19 -1
- package/dist/src/a2a/executor.js.map +1 -1
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.js +23 -0
- package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.cancel.test.js +1 -1
- package/dist/src/agent/__tests__/agent.cancel.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.concurrent.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.concurrent.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.concurrent.test.js +488 -0
- package/dist/src/agent/__tests__/agent.concurrent.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.hook.test.js +174 -12
- package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.invocation-state.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.invocation-state.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.invocation-state.test.js +219 -0
- package/dist/src/agent/__tests__/agent.invocation-state.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.stateful-model.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.stateful-model.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.stateful-model.test.js +169 -0
- package/dist/src/agent/__tests__/agent.stateful-model.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.test.js +99 -2
- package/dist/src/agent/__tests__/agent.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.tracer.test.node.js +39 -0
- package/dist/src/agent/__tests__/agent.tracer.test.node.js.map +1 -1
- package/dist/src/agent/__tests__/snapshot.test.js +5 -4
- package/dist/src/agent/__tests__/snapshot.test.js.map +1 -1
- package/dist/src/agent/agent-as-tool.d.ts.map +1 -1
- package/dist/src/agent/agent-as-tool.js +4 -2
- package/dist/src/agent/agent-as-tool.js.map +1 -1
- package/dist/src/agent/agent.d.ts +75 -1
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +323 -83
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/agent/snapshot.d.ts +2 -2
- package/dist/src/agent/snapshot.d.ts.map +1 -1
- package/dist/src/agent/snapshot.js +8 -2
- package/dist/src/agent/snapshot.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +4 -4
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +2 -2
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +8 -3
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js +1 -0
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js.map +1 -1
- package/dist/src/errors.d.ts +11 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +12 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/hooks/__tests__/events.test.js +177 -70
- package/dist/src/hooks/__tests__/events.test.js.map +1 -1
- package/dist/src/hooks/__tests__/registry.test.js +16 -16
- package/dist/src/hooks/__tests__/registry.test.js.map +1 -1
- package/dist/src/hooks/events.d.ts +95 -25
- package/dist/src/hooks/events.d.ts.map +1 -1
- package/dist/src/hooks/events.js +98 -23
- package/dist/src/hooks/events.js.map +1 -1
- package/dist/src/index.d.ts +6 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/logging/__tests__/warn-once.test.d.ts +2 -0
- package/dist/src/logging/__tests__/warn-once.test.d.ts.map +1 -0
- package/dist/src/logging/__tests__/warn-once.test.js +30 -0
- package/dist/src/logging/__tests__/warn-once.test.js.map +1 -0
- package/dist/src/logging/warn-once.d.ts +13 -0
- package/dist/src/logging/warn-once.d.ts.map +1 -0
- package/dist/src/logging/warn-once.js +18 -0
- package/dist/src/logging/warn-once.js.map +1 -0
- package/dist/src/mcp.d.ts +20 -1
- package/dist/src/mcp.d.ts.map +1 -1
- package/dist/src/mcp.js +10 -1
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/mime.d.ts +2 -1
- package/dist/src/mime.d.ts.map +1 -1
- package/dist/src/mime.js +1 -0
- package/dist/src/mime.js.map +1 -1
- package/dist/src/models/__tests__/anthropic.test.js +99 -1
- package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
- package/dist/src/models/__tests__/bedrock.test.js +123 -2
- package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
- package/dist/src/models/__tests__/google.test.js +88 -0
- package/dist/src/models/__tests__/google.test.js.map +1 -1
- package/dist/src/models/__tests__/model.test.js +149 -1
- package/dist/src/models/__tests__/model.test.js.map +1 -1
- package/dist/src/models/anthropic.d.ts +18 -1
- package/dist/src/models/anthropic.d.ts.map +1 -1
- package/dist/src/models/anthropic.js +40 -6
- package/dist/src/models/anthropic.js.map +1 -1
- package/dist/src/models/bedrock.d.ts +12 -1
- package/dist/src/models/bedrock.d.ts.map +1 -1
- package/dist/src/models/bedrock.js +45 -11
- package/dist/src/models/bedrock.js.map +1 -1
- package/dist/src/models/defaults.d.ts +37 -0
- package/dist/src/models/defaults.d.ts.map +1 -0
- package/dist/src/models/defaults.js +41 -0
- package/dist/src/models/defaults.js.map +1 -0
- package/dist/src/models/google/model.d.ts +14 -1
- package/dist/src/models/google/model.d.ts.map +1 -1
- package/dist/src/models/google/model.js +50 -6
- package/dist/src/models/google/model.js.map +1 -1
- package/dist/src/models/model.d.ts +56 -0
- package/dist/src/models/model.d.ts.map +1 -1
- package/dist/src/models/model.js +120 -0
- package/dist/src/models/model.js.map +1 -1
- package/dist/src/models/openai/__tests__/chat.test.d.ts +2 -0
- package/dist/src/models/openai/__tests__/chat.test.d.ts.map +1 -0
- package/dist/src/models/{__tests__/openai.test.js → openai/__tests__/chat.test.js} +84 -7
- package/dist/src/models/openai/__tests__/chat.test.js.map +1 -0
- package/dist/src/models/openai/__tests__/responses.test.d.ts +2 -0
- package/dist/src/models/openai/__tests__/responses.test.d.ts.map +1 -0
- package/dist/src/models/openai/__tests__/responses.test.js +668 -0
- package/dist/src/models/openai/__tests__/responses.test.js.map +1 -0
- package/dist/src/models/openai/chat-adapter.d.ts +33 -0
- package/dist/src/models/openai/chat-adapter.d.ts.map +1 -0
- package/dist/src/models/openai/chat-adapter.js +383 -0
- package/dist/src/models/openai/chat-adapter.js.map +1 -0
- package/dist/src/models/openai/errors.d.ts +16 -0
- package/dist/src/models/openai/errors.d.ts.map +1 -0
- package/dist/src/models/openai/errors.js +40 -0
- package/dist/src/models/openai/errors.js.map +1 -0
- package/dist/src/models/openai/formatting.d.ts +18 -0
- package/dist/src/models/openai/formatting.d.ts.map +1 -0
- package/dist/src/models/openai/formatting.js +38 -0
- package/dist/src/models/openai/formatting.js.map +1 -0
- package/dist/src/models/openai/index.d.ts +19 -0
- package/dist/src/models/openai/index.d.ts.map +1 -0
- package/dist/src/models/openai/index.js +18 -0
- package/dist/src/models/openai/index.js.map +1 -0
- package/dist/src/models/openai/model.d.ts +77 -0
- package/dist/src/models/openai/model.d.ts.map +1 -0
- package/dist/src/models/openai/model.js +211 -0
- package/dist/src/models/openai/model.js.map +1 -0
- package/dist/src/models/openai/responses-adapter.d.ts +78 -0
- package/dist/src/models/openai/responses-adapter.d.ts.map +1 -0
- package/dist/src/models/openai/responses-adapter.js +467 -0
- package/dist/src/models/openai/responses-adapter.js.map +1 -0
- package/dist/src/models/openai/types.d.ts +131 -0
- package/dist/src/models/openai/types.d.ts.map +1 -0
- package/dist/src/models/openai/types.js +5 -0
- package/dist/src/models/openai/types.js.map +1 -0
- package/dist/src/multiagent/__tests__/events.test.js +122 -28
- package/dist/src/multiagent/__tests__/events.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.js +95 -0
- package/dist/src/multiagent/__tests__/graph.invocation-state.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/nodes.test.js +5 -2
- package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.js +56 -0
- package/dist/src/multiagent/__tests__/swarm.invocation-state.test.js.map +1 -0
- package/dist/src/multiagent/events.d.ts +19 -1
- package/dist/src/multiagent/events.d.ts.map +1 -1
- package/dist/src/multiagent/events.js +18 -0
- package/dist/src/multiagent/events.js.map +1 -1
- package/dist/src/multiagent/graph.d.ts +5 -3
- package/dist/src/multiagent/graph.d.ts.map +1 -1
- package/dist/src/multiagent/graph.js +22 -15
- package/dist/src/multiagent/graph.js.map +1 -1
- package/dist/src/multiagent/index.d.ts +1 -1
- package/dist/src/multiagent/index.d.ts.map +1 -1
- package/dist/src/multiagent/multiagent.d.ts +16 -3
- package/dist/src/multiagent/multiagent.d.ts.map +1 -1
- package/dist/src/multiagent/nodes.d.ts +10 -3
- package/dist/src/multiagent/nodes.d.ts.map +1 -1
- package/dist/src/multiagent/nodes.js +28 -6
- package/dist/src/multiagent/nodes.js.map +1 -1
- package/dist/src/multiagent/swarm.d.ts +5 -3
- package/dist/src/multiagent/swarm.d.ts.map +1 -1
- package/dist/src/multiagent/swarm.js +22 -16
- package/dist/src/multiagent/swarm.js.map +1 -1
- package/dist/src/plugins/__tests__/registry.test.js +1 -1
- package/dist/src/plugins/__tests__/registry.test.js.map +1 -1
- package/dist/src/plugins/model-plugin.d.ts +20 -0
- package/dist/src/plugins/model-plugin.d.ts.map +1 -0
- package/dist/src/plugins/model-plugin.js +29 -0
- package/dist/src/plugins/model-plugin.js.map +1 -0
- package/dist/src/session/__tests__/session-manager.test.js +13 -11
- package/dist/src/session/__tests__/session-manager.test.js.map +1 -1
- package/dist/src/session/session-manager.d.ts.map +1 -1
- package/dist/src/session/session-manager.js +9 -0
- package/dist/src/session/session-manager.js.map +1 -1
- package/dist/src/telemetry/__tests__/config.test.js +6 -6
- package/dist/src/telemetry/__tests__/config.test.js.map +1 -1
- package/dist/src/telemetry/__tests__/config.test.node.js +16 -11
- package/dist/src/telemetry/__tests__/config.test.node.js.map +1 -1
- package/dist/src/telemetry/__tests__/meter.test.js +23 -0
- package/dist/src/telemetry/__tests__/meter.test.js.map +1 -1
- package/dist/src/telemetry/config.d.ts +9 -3
- package/dist/src/telemetry/config.d.ts.map +1 -1
- package/dist/src/telemetry/config.js +44 -69
- package/dist/src/telemetry/config.js.map +1 -1
- package/dist/src/telemetry/meter.d.ts +15 -0
- package/dist/src/telemetry/meter.d.ts.map +1 -1
- package/dist/src/telemetry/meter.js +14 -0
- package/dist/src/telemetry/meter.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +24 -3
- package/dist/src/tools/mcp-tool.d.ts.map +1 -1
- package/dist/src/tools/mcp-tool.js +105 -14
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/tool.d.ts +11 -1
- package/dist/src/tools/tool.d.ts.map +1 -1
- package/dist/src/tools/tool.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/__tests__/agent.test.js +48 -0
- package/dist/src/types/__tests__/agent.test.js.map +1 -1
- package/dist/src/types/agent.d.ts +55 -6
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/agent.js +22 -6
- package/dist/src/types/agent.js.map +1 -1
- package/dist/src/types/elicitation.d.ts +15 -0
- package/dist/src/types/elicitation.d.ts.map +1 -0
- package/dist/src/types/elicitation.js +2 -0
- package/dist/src/types/elicitation.js.map +1 -0
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js +37 -33
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js.map +1 -1
- package/dist/src/vended-plugins/skills/agent-skills.d.ts +8 -8
- package/dist/src/vended-plugins/skills/agent-skills.d.ts.map +1 -1
- package/dist/src/vended-plugins/skills/agent-skills.js +5 -5
- package/dist/src/vended-plugins/skills/agent-skills.js.map +1 -1
- package/dist/src/vended-plugins/skills/index.d.ts +5 -5
- package/dist/src/vended-plugins/skills/index.d.ts.map +1 -1
- package/dist/src/vended-plugins/skills/index.js +4 -4
- package/dist/src/vended-plugins/skills/index.js.map +1 -1
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +1 -0
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js +1 -0
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +1 -1
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +1 -0
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
- package/package.json +28 -26
- package/dist/src/models/__tests__/openai.test.d.ts +0 -2
- package/dist/src/models/__tests__/openai.test.d.ts.map +0 -1
- package/dist/src/models/__tests__/openai.test.js.map +0 -1
- package/dist/src/models/openai.d.ts +0 -312
- package/dist/src/models/openai.d.ts.map +0 -1
- package/dist/src/models/openai.js +0 -789
- package/dist/src/models/openai.js.map +0 -1
|
@@ -8,13 +8,12 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { GoogleGenAI, FunctionCallingConfigMode, } from '@google/genai';
|
|
10
10
|
import { Model } from '../model.js';
|
|
11
|
-
import { ContextWindowOverflowError, ModelThrottledError } from '../../errors.js';
|
|
11
|
+
import { ContextWindowOverflowError, ModelThrottledError, ProviderTokenCountError } from '../../errors.js';
|
|
12
12
|
import { classifyGoogleError } from './errors.js';
|
|
13
13
|
import { formatMessages, mapChunkToEvents } from './adapters.js';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const DEFAULT_GEMINI_MODEL_ID = 'gemini-2.5-flash';
|
|
14
|
+
import { MODEL_DEFAULTS, defaultModelWarningMessage } from '../defaults.js';
|
|
15
|
+
import { warnOnce } from '../../logging/warn-once.js';
|
|
16
|
+
import { logger } from '../../logging/logger.js';
|
|
18
17
|
/**
|
|
19
18
|
* Google model provider implementation.
|
|
20
19
|
*
|
|
@@ -78,6 +77,9 @@ export class GoogleModel extends Model {
|
|
|
78
77
|
super();
|
|
79
78
|
const { apiKey, client, clientConfig, ...modelConfig } = options || {};
|
|
80
79
|
this._config = modelConfig;
|
|
80
|
+
if (modelConfig.modelId === undefined) {
|
|
81
|
+
warnOnce(logger, defaultModelWarningMessage(MODEL_DEFAULTS.gemini.modelId));
|
|
82
|
+
}
|
|
81
83
|
if (client) {
|
|
82
84
|
this._client = client;
|
|
83
85
|
}
|
|
@@ -123,6 +125,48 @@ export class GoogleModel extends Model {
|
|
|
123
125
|
getConfig() {
|
|
124
126
|
return this._config;
|
|
125
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Count tokens using Gemini's native countTokens API.
|
|
130
|
+
*
|
|
131
|
+
* Uses the Gemini countTokens API for message contents. System instructions and tools
|
|
132
|
+
* are estimated via the base class heuristic because the Gemini API (non-Vertex backend)
|
|
133
|
+
* does not support these in CountTokensConfig.
|
|
134
|
+
* Falls back to the base class heuristic on failure.
|
|
135
|
+
*
|
|
136
|
+
* @param messages - Array of conversation messages to count tokens for
|
|
137
|
+
* @param options - Optional options containing system prompt and tool specs
|
|
138
|
+
* @returns Total input token count
|
|
139
|
+
*/
|
|
140
|
+
async countTokens(messages, options) {
|
|
141
|
+
try {
|
|
142
|
+
const params = this._formatRequest(messages, options);
|
|
143
|
+
const modelId = params.model;
|
|
144
|
+
// The Gemini API (non-Vertex backend) raises an error for systemInstruction and tools
|
|
145
|
+
// in CountTokensConfig. Use native counting for message contents only, then add the
|
|
146
|
+
// heuristic estimate for system prompt and tools.
|
|
147
|
+
const response = await this._client.models.countTokens({
|
|
148
|
+
model: modelId,
|
|
149
|
+
contents: params.contents,
|
|
150
|
+
});
|
|
151
|
+
if (response.totalTokens == null) {
|
|
152
|
+
throw new ProviderTokenCountError('Gemini countTokens returned null for totalTokens');
|
|
153
|
+
}
|
|
154
|
+
let totalTokens = response.totalTokens;
|
|
155
|
+
// Add heuristic estimate for system prompt and tools (not supported by the API)
|
|
156
|
+
if (options?.systemPrompt || options?.toolSpecs) {
|
|
157
|
+
totalTokens += await super.countTokens([], {
|
|
158
|
+
...(options.systemPrompt && { systemPrompt: options.systemPrompt }),
|
|
159
|
+
...(options.toolSpecs && { toolSpecs: options.toolSpecs }),
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
logger.debug(`total_tokens=<${totalTokens}> | native token count`);
|
|
163
|
+
return totalTokens;
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
logger.debug(`error=<${error}> | native token counting failed, falling back to estimation`);
|
|
167
|
+
return super.countTokens(messages, options);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
126
170
|
/**
|
|
127
171
|
* Streams a conversation with the Google model.
|
|
128
172
|
* Returns an async iterable that yields streaming events as they occur.
|
|
@@ -261,7 +305,7 @@ export class GoogleModel extends Model {
|
|
|
261
305
|
Object.assign(config, this._config.params);
|
|
262
306
|
}
|
|
263
307
|
return {
|
|
264
|
-
model: this._config.modelId ??
|
|
308
|
+
model: this._config.modelId ?? MODEL_DEFAULTS.gemini.modelId,
|
|
265
309
|
contents,
|
|
266
310
|
config,
|
|
267
311
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../src/models/google/model.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,WAAW,EACX,yBAAyB,GAG1B,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAInC,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../src/models/google/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ContentBlock, Message, type StopReason, type SystemPrompt } from '../types/messages.js';
|
|
2
|
+
import type { StateStore } from '../state-store.js';
|
|
2
3
|
import type { ToolChoice, ToolSpec } from '../tools/types.js';
|
|
3
4
|
import { ModelMetadataEvent, type ModelStreamEvent } from './streaming.js';
|
|
4
5
|
import type { Redaction } from '../hooks/events.js';
|
|
@@ -45,6 +46,12 @@ export interface BaseModelConfig {
|
|
|
45
46
|
* @see Provider-specific documentation for details
|
|
46
47
|
*/
|
|
47
48
|
topP?: number;
|
|
49
|
+
/**
|
|
50
|
+
* Maximum context window size in tokens for the model.
|
|
51
|
+
*
|
|
52
|
+
* This value represents the total token capacity shared between input and output.
|
|
53
|
+
*/
|
|
54
|
+
contextWindowLimit?: number;
|
|
48
55
|
}
|
|
49
56
|
/**
|
|
50
57
|
* Options interface for configuring streaming model invocation.
|
|
@@ -63,6 +70,27 @@ export interface StreamOptions {
|
|
|
63
70
|
* Controls how the model selects tools to use.
|
|
64
71
|
*/
|
|
65
72
|
toolChoice?: ToolChoice;
|
|
73
|
+
/**
|
|
74
|
+
* Runtime state for model providers that manage server-side conversation state.
|
|
75
|
+
* The model can read and write this state during streaming (e.g., to store a
|
|
76
|
+
* response ID for conversation chaining). Mutations via `set`/`delete` are
|
|
77
|
+
* visible to the caller after the stream completes.
|
|
78
|
+
*/
|
|
79
|
+
modelState?: StateStore;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Options for counting tokens in a set of messages.
|
|
83
|
+
*/
|
|
84
|
+
export interface CountTokensOptions {
|
|
85
|
+
/**
|
|
86
|
+
* System prompt to guide the model's behavior.
|
|
87
|
+
* Can be a simple string or an array of content blocks for advanced caching.
|
|
88
|
+
*/
|
|
89
|
+
systemPrompt?: SystemPrompt;
|
|
90
|
+
/**
|
|
91
|
+
* Array of tool specifications to include in the count.
|
|
92
|
+
*/
|
|
93
|
+
toolSpecs?: ToolSpec[];
|
|
66
94
|
}
|
|
67
95
|
/**
|
|
68
96
|
* Result interface for the streamAggregated method.
|
|
@@ -114,6 +142,19 @@ export declare abstract class Model<T extends BaseModelConfig = BaseModelConfig>
|
|
|
114
142
|
* The model ID from the current configuration, if configured.
|
|
115
143
|
*/
|
|
116
144
|
get modelId(): string | undefined;
|
|
145
|
+
/**
|
|
146
|
+
* Whether this model manages conversation state server-side.
|
|
147
|
+
*
|
|
148
|
+
* When `true`, the server tracks conversation context across turns, so the SDK
|
|
149
|
+
* sends only the latest message instead of the full history. After each invocation,
|
|
150
|
+
* the agent's local message history is cleared automatically.
|
|
151
|
+
*
|
|
152
|
+
* Model providers that support server-side state management should override this
|
|
153
|
+
* to return `true`.
|
|
154
|
+
*
|
|
155
|
+
* @returns `false` by default
|
|
156
|
+
*/
|
|
157
|
+
get stateful(): boolean;
|
|
117
158
|
/**
|
|
118
159
|
* Streams a conversation with the model.
|
|
119
160
|
* Returns an async iterable that yields streaming events as they occur.
|
|
@@ -123,6 +164,21 @@ export declare abstract class Model<T extends BaseModelConfig = BaseModelConfig>
|
|
|
123
164
|
* @returns Async iterable of streaming events
|
|
124
165
|
*/
|
|
125
166
|
abstract stream(messages: Message[], options?: StreamOptions): AsyncIterable<ModelStreamEvent>;
|
|
167
|
+
/**
|
|
168
|
+
* Count tokens for the given input before sending to the model.
|
|
169
|
+
*
|
|
170
|
+
* Used for proactive context management (e.g., triggering compression at a threshold).
|
|
171
|
+
* The base implementation uses a character-based heuristic (chars/4 for text, chars/2 for JSON).
|
|
172
|
+
*
|
|
173
|
+
* Subclasses should override this method to use native token counting APIs
|
|
174
|
+
* (e.g., Bedrock CountTokens, Anthropic countTokens, Gemini countTokens)
|
|
175
|
+
* for improved accuracy, falling back to `super.countTokens()` on API failure.
|
|
176
|
+
*
|
|
177
|
+
* @param messages - Array of conversation messages to count tokens for
|
|
178
|
+
* @param options - Optional options containing system prompt and tool specs
|
|
179
|
+
* @returns Total input token count
|
|
180
|
+
*/
|
|
181
|
+
countTokens(messages: Message[], options?: CountTokensOptions): Promise<number>;
|
|
126
182
|
/**
|
|
127
183
|
* Converts event data to event class representation
|
|
128
184
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/models/model.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,OAAO,EAIP,KAAK,UAAU,EACf,KAAK,YAAY,EAGlB,MAAM,sBAAsB,CAAA;AAG7B,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAML,kBAAkB,EAElB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAsBnD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAA;CAC/B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/models/model.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,OAAO,EAIP,KAAK,UAAU,EACf,KAAK,YAAY,EAGlB,MAAM,sBAAsB,CAAA;AAG7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAML,kBAAkB,EAElB,KAAK,gBAAgB,EACtB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAsBnD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAA;CAC/B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAElB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IAEb;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAE3B;;OAEG;IACH,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;IAEtB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAA;IAEvB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,UAAU,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAE3B;;OAEG;IACH,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAEhB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAA;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAE7B;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;AAED;;;;;;;;GAQG;AACH,8BAAsB,KAAK,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe;IACrE;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI;IAE3C;;;;OAIG;IACH,QAAQ,CAAC,SAAS,IAAI,CAAC;IAEvB;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,GAAG,SAAS,CAEhC;IAED;;;;;;;;;;;OAWG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,aAAa,CAAC,gBAAgB,CAAC;IAE9F;;;;;;;;;;;;;OAaG;IACG,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrF;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAqB/B;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACI,gBAAgB,CACrB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,CAAC,EAAE,aAAa,GACtB,cAAc,CAAC,gBAAgB,GAAG,YAAY,EAAE,sBAAsB,EAAE,SAAS,CAAC;CA2LtF"}
|
package/dist/src/models/model.js
CHANGED
|
@@ -34,6 +34,38 @@ export class Model {
|
|
|
34
34
|
get modelId() {
|
|
35
35
|
return this.getConfig().modelId;
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Whether this model manages conversation state server-side.
|
|
39
|
+
*
|
|
40
|
+
* When `true`, the server tracks conversation context across turns, so the SDK
|
|
41
|
+
* sends only the latest message instead of the full history. After each invocation,
|
|
42
|
+
* the agent's local message history is cleared automatically.
|
|
43
|
+
*
|
|
44
|
+
* Model providers that support server-side state management should override this
|
|
45
|
+
* to return `true`.
|
|
46
|
+
*
|
|
47
|
+
* @returns `false` by default
|
|
48
|
+
*/
|
|
49
|
+
get stateful() {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Count tokens for the given input before sending to the model.
|
|
54
|
+
*
|
|
55
|
+
* Used for proactive context management (e.g., triggering compression at a threshold).
|
|
56
|
+
* The base implementation uses a character-based heuristic (chars/4 for text, chars/2 for JSON).
|
|
57
|
+
*
|
|
58
|
+
* Subclasses should override this method to use native token counting APIs
|
|
59
|
+
* (e.g., Bedrock CountTokens, Anthropic countTokens, Gemini countTokens)
|
|
60
|
+
* for improved accuracy, falling back to `super.countTokens()` on API failure.
|
|
61
|
+
*
|
|
62
|
+
* @param messages - Array of conversation messages to count tokens for
|
|
63
|
+
* @param options - Optional options containing system prompt and tool specs
|
|
64
|
+
* @returns Total input token count
|
|
65
|
+
*/
|
|
66
|
+
async countTokens(messages, options) {
|
|
67
|
+
return estimateTokensHeuristic(messages, options);
|
|
68
|
+
}
|
|
37
69
|
/**
|
|
38
70
|
* Converts event data to event class representation
|
|
39
71
|
*
|
|
@@ -263,4 +295,92 @@ export class Model {
|
|
|
263
295
|
}
|
|
264
296
|
}
|
|
265
297
|
}
|
|
298
|
+
/**
|
|
299
|
+
* Estimate tokens for a content block using character-based heuristics.
|
|
300
|
+
*
|
|
301
|
+
* @param block - Content block to estimate tokens for
|
|
302
|
+
* @returns Estimated token count
|
|
303
|
+
*/
|
|
304
|
+
function estimateContentBlockTokens(block) {
|
|
305
|
+
let total = 0;
|
|
306
|
+
switch (block.type) {
|
|
307
|
+
case 'textBlock':
|
|
308
|
+
total += heuristicText(block.text);
|
|
309
|
+
break;
|
|
310
|
+
case 'toolUseBlock':
|
|
311
|
+
total += heuristicText(block.name);
|
|
312
|
+
total += heuristicJson(block.input);
|
|
313
|
+
break;
|
|
314
|
+
case 'toolResultBlock':
|
|
315
|
+
for (const item of block.content) {
|
|
316
|
+
if (item.type === 'textBlock') {
|
|
317
|
+
total += heuristicText(item.text);
|
|
318
|
+
}
|
|
319
|
+
else if (item.type === 'jsonBlock') {
|
|
320
|
+
total += heuristicJson(item.json);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
break;
|
|
324
|
+
case 'reasoningBlock':
|
|
325
|
+
if (block.text)
|
|
326
|
+
total += heuristicText(block.text);
|
|
327
|
+
break;
|
|
328
|
+
case 'guardContentBlock':
|
|
329
|
+
if (block.text)
|
|
330
|
+
total += heuristicText(block.text.text);
|
|
331
|
+
break;
|
|
332
|
+
case 'citationsBlock':
|
|
333
|
+
for (const item of block.content) {
|
|
334
|
+
if ('text' in item)
|
|
335
|
+
total += heuristicText(item.text);
|
|
336
|
+
}
|
|
337
|
+
break;
|
|
338
|
+
default:
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
return total;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Estimate token count using character-based heuristics (text: chars/4, JSON: chars/2).
|
|
345
|
+
* Dependency-free fallback used by the base Model class.
|
|
346
|
+
*/
|
|
347
|
+
function estimateTokensHeuristic(messages, options) {
|
|
348
|
+
let total = 0;
|
|
349
|
+
if (options?.systemPrompt) {
|
|
350
|
+
if (typeof options.systemPrompt === 'string') {
|
|
351
|
+
total += heuristicText(options.systemPrompt);
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
for (const block of options.systemPrompt) {
|
|
355
|
+
if (block.type === 'textBlock')
|
|
356
|
+
total += heuristicText(block.text);
|
|
357
|
+
else if (block.type === 'guardContentBlock' && block.text)
|
|
358
|
+
total += heuristicText(block.text.text);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
for (const message of messages) {
|
|
363
|
+
for (const block of message.content) {
|
|
364
|
+
total += estimateContentBlockTokens(block);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
if (options?.toolSpecs) {
|
|
368
|
+
for (const spec of options.toolSpecs) {
|
|
369
|
+
total += heuristicJson(spec);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
return total;
|
|
373
|
+
}
|
|
374
|
+
function heuristicText(text) {
|
|
375
|
+
return Math.ceil(text.length / 4);
|
|
376
|
+
}
|
|
377
|
+
function heuristicJson(obj) {
|
|
378
|
+
try {
|
|
379
|
+
return Math.ceil(JSON.stringify(obj).length / 2);
|
|
380
|
+
}
|
|
381
|
+
catch {
|
|
382
|
+
logger.debug('unable to serialize object for token estimation, skipping');
|
|
383
|
+
return 0;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
266
386
|
//# sourceMappingURL=model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/models/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,OAAO,EAEP,cAAc,EAId,SAAS,EACT,YAAY,GACb,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/models/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.test.d.ts","sourceRoot":"","sources":["../../../../../src/models/openai/__tests__/chat.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
2
|
import OpenAI from 'openai';
|
|
3
|
-
import { isNode } from '
|
|
4
|
-
import { OpenAIModel } from '../
|
|
5
|
-
import { ContextWindowOverflowError, ModelThrottledError } from '
|
|
6
|
-
import { collectIterator } from '
|
|
7
|
-
import { Message, TextBlock, ToolUseBlock, ToolResultBlock, GuardContentBlock } from '
|
|
8
|
-
import { ImageBlock, DocumentBlock, VideoBlock } from '
|
|
3
|
+
import { isNode } from '../../../__fixtures__/environment.js';
|
|
4
|
+
import { OpenAIModel } from '../index.js';
|
|
5
|
+
import { ContextWindowOverflowError, ModelThrottledError } from '../../../errors.js';
|
|
6
|
+
import { collectIterator } from '../../../__fixtures__/model-test-helpers.js';
|
|
7
|
+
import { Message, TextBlock, ToolUseBlock, ToolResultBlock, GuardContentBlock } from '../../../types/messages.js';
|
|
8
|
+
import { ImageBlock, DocumentBlock, VideoBlock } from '../../../types/media.js';
|
|
9
|
+
import { warnOnce } from '../../../logging/warn-once.js';
|
|
10
|
+
import { logger } from '../../../logging/logger.js';
|
|
9
11
|
/**
|
|
10
12
|
* Helper to create a mock OpenAI client with streaming support
|
|
11
13
|
*/
|
|
@@ -27,6 +29,9 @@ vi.mock('openai', () => {
|
|
|
27
29
|
default: mockConstructor,
|
|
28
30
|
};
|
|
29
31
|
});
|
|
32
|
+
vi.mock('../../../logging/warn-once.js', () => ({
|
|
33
|
+
warnOnce: vi.fn(),
|
|
34
|
+
}));
|
|
30
35
|
describe('OpenAIModel', () => {
|
|
31
36
|
beforeEach(() => {
|
|
32
37
|
vi.clearAllMocks();
|
|
@@ -72,6 +77,14 @@ describe('OpenAIModel', () => {
|
|
|
72
77
|
modelId: customModelId,
|
|
73
78
|
});
|
|
74
79
|
});
|
|
80
|
+
it('warns when modelId is not explicitly set', () => {
|
|
81
|
+
new OpenAIModel({ api: 'chat', apiKey: 'sk-test' });
|
|
82
|
+
expect(warnOnce).toHaveBeenCalledWith(expect.objectContaining({ warn: expect.any(Function) }), expect.stringContaining('using default modelId'));
|
|
83
|
+
});
|
|
84
|
+
it('does not warn when modelId is explicitly set', () => {
|
|
85
|
+
new OpenAIModel({ api: 'chat', modelId: 'gpt-5.4', apiKey: 'sk-test' });
|
|
86
|
+
expect(warnOnce).not.toHaveBeenCalledWith(expect.objectContaining({ warn: expect.any(Function) }), expect.stringContaining('using default modelId'));
|
|
87
|
+
});
|
|
75
88
|
it('uses API key from constructor parameter', () => {
|
|
76
89
|
const apiKey = 'sk-explicit';
|
|
77
90
|
new OpenAIModel({ api: 'chat', modelId: 'gpt-5.4', apiKey });
|
|
@@ -207,6 +220,70 @@ describe('OpenAIModel', () => {
|
|
|
207
220
|
temperature: 0.7,
|
|
208
221
|
});
|
|
209
222
|
});
|
|
223
|
+
it('includes contextWindowLimit in config when provided', () => {
|
|
224
|
+
const provider = new OpenAIModel({
|
|
225
|
+
api: 'chat',
|
|
226
|
+
modelId: 'gpt-4o',
|
|
227
|
+
apiKey: 'sk-test',
|
|
228
|
+
contextWindowLimit: 128_000,
|
|
229
|
+
});
|
|
230
|
+
expect(provider.getConfig()).toStrictEqual({
|
|
231
|
+
modelId: 'gpt-4o',
|
|
232
|
+
contextWindowLimit: 128_000,
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
describe('managed params warning', () => {
|
|
237
|
+
it('warns on construction when params contains provider-managed keys', () => {
|
|
238
|
+
const warnSpy = vi.spyOn(logger, 'warn');
|
|
239
|
+
new OpenAIModel({
|
|
240
|
+
api: 'chat',
|
|
241
|
+
client: {},
|
|
242
|
+
params: { model: 'bad', stream: false },
|
|
243
|
+
});
|
|
244
|
+
expect(warnSpy).toHaveBeenCalledTimes(2);
|
|
245
|
+
expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining("'model'"));
|
|
246
|
+
expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining("'stream'"));
|
|
247
|
+
warnSpy.mockRestore();
|
|
248
|
+
});
|
|
249
|
+
it('warns on updateConfig when params contains provider-managed keys', () => {
|
|
250
|
+
const model = new OpenAIModel({ api: 'chat', client: {} });
|
|
251
|
+
const warnSpy = vi.spyOn(logger, 'warn');
|
|
252
|
+
model.updateConfig({ params: { stream_options: { include_usage: false } } });
|
|
253
|
+
expect(warnSpy).toHaveBeenCalledTimes(1);
|
|
254
|
+
expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining("'stream_options'"));
|
|
255
|
+
warnSpy.mockRestore();
|
|
256
|
+
});
|
|
257
|
+
it('does not warn when params contains only non-managed keys', () => {
|
|
258
|
+
const warnSpy = vi.spyOn(logger, 'warn');
|
|
259
|
+
new OpenAIModel({ api: 'chat', client: {}, params: { seed: 42 } });
|
|
260
|
+
expect(warnSpy).not.toHaveBeenCalled();
|
|
261
|
+
warnSpy.mockRestore();
|
|
262
|
+
});
|
|
263
|
+
it('provider-managed fields in params are overridden and cannot take effect', async () => {
|
|
264
|
+
const captured = { request: null };
|
|
265
|
+
const mockClient = createMockClientWithCapture(captured);
|
|
266
|
+
const warnSpy = vi.spyOn(logger, 'warn');
|
|
267
|
+
const provider = new OpenAIModel({
|
|
268
|
+
api: 'chat',
|
|
269
|
+
modelId: 'gpt-5.4',
|
|
270
|
+
client: mockClient,
|
|
271
|
+
params: {
|
|
272
|
+
model: 'attacker-model',
|
|
273
|
+
messages: [{ role: 'user', content: 'hijacked' }],
|
|
274
|
+
stream: false,
|
|
275
|
+
stream_options: { include_usage: false },
|
|
276
|
+
},
|
|
277
|
+
});
|
|
278
|
+
const messages = [new Message({ role: 'user', content: [new TextBlock('Hi')] })];
|
|
279
|
+
await collectIterator(provider.stream(messages));
|
|
280
|
+
expect(captured.request.model).toBe('gpt-5.4');
|
|
281
|
+
expect(captured.request.stream).toBe(true);
|
|
282
|
+
expect(captured.request.stream_options).toEqual({ include_usage: true });
|
|
283
|
+
expect(Array.isArray(captured.request.messages)).toBe(true);
|
|
284
|
+
expect(captured.request.messages[0]).toEqual({ role: 'user', content: [{ type: 'text', text: 'Hi' }] });
|
|
285
|
+
warnSpy.mockRestore();
|
|
286
|
+
});
|
|
210
287
|
});
|
|
211
288
|
describe('stream', () => {
|
|
212
289
|
describe('validation', () => {
|
|
@@ -1461,4 +1538,4 @@ describe('OpenAIModel', () => {
|
|
|
1461
1538
|
});
|
|
1462
1539
|
});
|
|
1463
1540
|
});
|
|
1464
|
-
//# sourceMappingURL=
|
|
1541
|
+
//# sourceMappingURL=chat.test.js.map
|