@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
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI model provider.
|
|
3
|
+
*
|
|
4
|
+
* Defaults to the Responses API. Pass `api: 'chat'` to use Chat Completions.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { OpenAIModel } from '@strands-agents/sdk/models/openai'
|
|
9
|
+
*
|
|
10
|
+
* // Responses API (default)
|
|
11
|
+
* const model = new OpenAIModel({ modelId: 'gpt-5.4', apiKey: 'sk-...' })
|
|
12
|
+
*
|
|
13
|
+
* // Chat Completions
|
|
14
|
+
* const model = new OpenAIModel({ api: 'chat', modelId: 'gpt-5.4', apiKey: 'sk-...' })
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export { OpenAIModel } from './model.js';
|
|
18
|
+
export type { OpenAIApi, OpenAIChatConfig, OpenAIModelConfig, OpenAIModelOptions, OpenAIResponsesConfig, } from './types.js';
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/models/openai/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI model provider.
|
|
3
|
+
*
|
|
4
|
+
* Defaults to the Responses API. Pass `api: 'chat'` to use Chat Completions.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { OpenAIModel } from '@strands-agents/sdk/models/openai'
|
|
9
|
+
*
|
|
10
|
+
* // Responses API (default)
|
|
11
|
+
* const model = new OpenAIModel({ modelId: 'gpt-5.4', apiKey: 'sk-...' })
|
|
12
|
+
*
|
|
13
|
+
* // Chat Completions
|
|
14
|
+
* const model = new OpenAIModel({ api: 'chat', modelId: 'gpt-5.4', apiKey: 'sk-...' })
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export { OpenAIModel } from './model.js';
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/models/openai/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI model provider implementation.
|
|
3
|
+
*
|
|
4
|
+
* Supports both the Responses API (default) and the Chat Completions API.
|
|
5
|
+
* Selected via the `api` option at construction time.
|
|
6
|
+
*
|
|
7
|
+
* @see https://platform.openai.com/docs/api-reference/responses
|
|
8
|
+
* @see https://platform.openai.com/docs/api-reference/chat
|
|
9
|
+
*/
|
|
10
|
+
import { Model } from '../model.js';
|
|
11
|
+
import type { StreamOptions } from '../model.js';
|
|
12
|
+
import type { Message } from '../../types/messages.js';
|
|
13
|
+
import type { ModelStreamEvent } from '../streaming.js';
|
|
14
|
+
import type { OpenAIApi, OpenAIModelConfig, OpenAIModelOptions } from './types.js';
|
|
15
|
+
/**
|
|
16
|
+
* OpenAI model provider.
|
|
17
|
+
*
|
|
18
|
+
* Defaults to the Responses API. Pass `api: 'chat'` to use Chat Completions.
|
|
19
|
+
* The `api` field is construction-only — it cannot be changed via
|
|
20
|
+
* {@link OpenAIModel.updateConfig}.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // Responses API (default)
|
|
25
|
+
* const model = new OpenAIModel({ modelId: 'gpt-5.4', apiKey: 'sk-...' })
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* // Chat Completions
|
|
31
|
+
* const model = new OpenAIModel({ api: 'chat', modelId: 'gpt-5.4', apiKey: 'sk-...' })
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* // Responses API with built-in web search
|
|
37
|
+
* const model = new OpenAIModel({
|
|
38
|
+
* modelId: 'gpt-5.4',
|
|
39
|
+
* params: { tools: [{ type: 'web_search' }] },
|
|
40
|
+
* })
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare class OpenAIModel extends Model<OpenAIModelConfig> {
|
|
44
|
+
private readonly _api;
|
|
45
|
+
private _config;
|
|
46
|
+
private _client;
|
|
47
|
+
constructor(options: OpenAIModelOptions);
|
|
48
|
+
/**
|
|
49
|
+
* The OpenAI API mode this model operates in (`'chat'` or `'responses'`).
|
|
50
|
+
* Set at construction and immutable; exposed for debugging and serialization.
|
|
51
|
+
*/
|
|
52
|
+
get api(): OpenAIApi;
|
|
53
|
+
/**
|
|
54
|
+
* Whether this model manages conversation state server-side.
|
|
55
|
+
*
|
|
56
|
+
* `true` only for `api: 'responses'` with `stateful === true`. Chat Completions
|
|
57
|
+
* is always stateless, and Responses defaults to stateless.
|
|
58
|
+
*/
|
|
59
|
+
get stateful(): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Updates the model configuration.
|
|
62
|
+
*
|
|
63
|
+
* `api` and `stateful` are construction-only — if present in `modelConfig`,
|
|
64
|
+
* they are stripped with a warning. Changing either at runtime would
|
|
65
|
+
* invalidate the invariants the agent builds on top of `stateful` (message
|
|
66
|
+
* history management, `previous_response_id` chaining).
|
|
67
|
+
*/
|
|
68
|
+
updateConfig(modelConfig: OpenAIModelConfig & {
|
|
69
|
+
api?: OpenAIApi;
|
|
70
|
+
}): void;
|
|
71
|
+
getConfig(): OpenAIModelConfig;
|
|
72
|
+
stream(messages: Message[], options?: StreamOptions): AsyncIterable<ModelStreamEvent>;
|
|
73
|
+
private _streamChat;
|
|
74
|
+
private _streamResponses;
|
|
75
|
+
private _rewrapError;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../src/models/openai/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAcvD,OAAO,KAAK,EAEV,SAAS,EAET,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,WAAY,SAAQ,KAAK,CAAC,iBAAiB,CAAC;IACvD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;IAChC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,EAAE,kBAAkB;IAwCvC;;;OAGG;IACH,IAAI,GAAG,IAAI,SAAS,CAEnB;IAED;;;;;OAKG;IACH,IAAa,QAAQ,IAAI,OAAO,CAE/B;IAED;;;;;;;OAOG;IACH,YAAY,CAAC,WAAW,EAAE,iBAAiB,GAAG;QAAE,GAAG,CAAC,EAAE,SAAS,CAAA;KAAE,GAAG,IAAI;IAoBxE,SAAS,IAAI,iBAAiB;IAIvB,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,aAAa,CAAC,gBAAgB,CAAC;YAY7E,WAAW;YAiDX,gBAAgB;IAqB/B,OAAO,CAAC,YAAY;CAgBrB"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI model provider implementation.
|
|
3
|
+
*
|
|
4
|
+
* Supports both the Responses API (default) and the Chat Completions API.
|
|
5
|
+
* Selected via the `api` option at construction time.
|
|
6
|
+
*
|
|
7
|
+
* @see https://platform.openai.com/docs/api-reference/responses
|
|
8
|
+
* @see https://platform.openai.com/docs/api-reference/chat
|
|
9
|
+
*/
|
|
10
|
+
import OpenAI from 'openai';
|
|
11
|
+
import { Model } from '../model.js';
|
|
12
|
+
import { ContextWindowOverflowError, ModelThrottledError } from '../../errors.js';
|
|
13
|
+
import { logger } from '../../logging/logger.js';
|
|
14
|
+
import { warnOnce } from '../../logging/warn-once.js';
|
|
15
|
+
import { MODEL_DEFAULTS, defaultModelWarningMessage } from '../defaults.js';
|
|
16
|
+
import { classifyOpenAIError } from './errors.js';
|
|
17
|
+
import { formatChatRequest, mapChatChunkToEvents, warnManagedParams as warnChatManagedParams } from './chat-adapter.js';
|
|
18
|
+
import { createResponsesStreamState, finalizeResponsesStream, formatResponsesRequest, mapResponsesEventToSDK, warnManagedParams as warnResponsesManagedParams, } from './responses-adapter.js';
|
|
19
|
+
/**
|
|
20
|
+
* OpenAI model provider.
|
|
21
|
+
*
|
|
22
|
+
* Defaults to the Responses API. Pass `api: 'chat'` to use Chat Completions.
|
|
23
|
+
* The `api` field is construction-only — it cannot be changed via
|
|
24
|
+
* {@link OpenAIModel.updateConfig}.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // Responses API (default)
|
|
29
|
+
* const model = new OpenAIModel({ modelId: 'gpt-5.4', apiKey: 'sk-...' })
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* // Chat Completions
|
|
35
|
+
* const model = new OpenAIModel({ api: 'chat', modelId: 'gpt-5.4', apiKey: 'sk-...' })
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* // Responses API with built-in web search
|
|
41
|
+
* const model = new OpenAIModel({
|
|
42
|
+
* modelId: 'gpt-5.4',
|
|
43
|
+
* params: { tools: [{ type: 'web_search' }] },
|
|
44
|
+
* })
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export class OpenAIModel extends Model {
|
|
48
|
+
_api;
|
|
49
|
+
_config;
|
|
50
|
+
_client;
|
|
51
|
+
constructor(options) {
|
|
52
|
+
super();
|
|
53
|
+
const { apiKey, client, clientConfig, api = 'responses', ...modelConfig } = options;
|
|
54
|
+
if (api !== 'chat' && api !== 'responses') {
|
|
55
|
+
throw new Error(`Unsupported OpenAI API: '${api}'. Supported values: 'chat', 'responses'`);
|
|
56
|
+
}
|
|
57
|
+
this._api = api;
|
|
58
|
+
// `stateful` only exists on the responses branch of the discriminated union.
|
|
59
|
+
// Storing as the merged OpenAIModelConfig matches what `getConfig` returns.
|
|
60
|
+
this._config = modelConfig;
|
|
61
|
+
if (modelConfig.modelId === undefined) {
|
|
62
|
+
warnOnce(logger, defaultModelWarningMessage(MODEL_DEFAULTS.openai.modelId));
|
|
63
|
+
}
|
|
64
|
+
if (api === 'responses') {
|
|
65
|
+
warnResponsesManagedParams(modelConfig.params);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
warnChatManagedParams(modelConfig.params);
|
|
69
|
+
}
|
|
70
|
+
if (client) {
|
|
71
|
+
this._client = client;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
const hasEnvKey = typeof process !== 'undefined' && typeof process.env !== 'undefined' && process.env.OPENAI_API_KEY;
|
|
75
|
+
if (!apiKey && !hasEnvKey) {
|
|
76
|
+
throw new Error("OpenAI API key is required. Provide it via the 'apiKey' option (string or function) or set the OPENAI_API_KEY environment variable.");
|
|
77
|
+
}
|
|
78
|
+
this._client = new OpenAI({
|
|
79
|
+
...(apiKey ? { apiKey } : {}),
|
|
80
|
+
...clientConfig,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The OpenAI API mode this model operates in (`'chat'` or `'responses'`).
|
|
86
|
+
* Set at construction and immutable; exposed for debugging and serialization.
|
|
87
|
+
*/
|
|
88
|
+
get api() {
|
|
89
|
+
return this._api;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Whether this model manages conversation state server-side.
|
|
93
|
+
*
|
|
94
|
+
* `true` only for `api: 'responses'` with `stateful === true`. Chat Completions
|
|
95
|
+
* is always stateless, and Responses defaults to stateless.
|
|
96
|
+
*/
|
|
97
|
+
get stateful() {
|
|
98
|
+
return this._api === 'responses' && this._config.stateful === true;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Updates the model configuration.
|
|
102
|
+
*
|
|
103
|
+
* `api` and `stateful` are construction-only — if present in `modelConfig`,
|
|
104
|
+
* they are stripped with a warning. Changing either at runtime would
|
|
105
|
+
* invalidate the invariants the agent builds on top of `stateful` (message
|
|
106
|
+
* history management, `previous_response_id` chaining).
|
|
107
|
+
*/
|
|
108
|
+
updateConfig(modelConfig) {
|
|
109
|
+
const { api, stateful, ...rest } = modelConfig;
|
|
110
|
+
if (api !== undefined) {
|
|
111
|
+
logger.warn(`api=<${api}> | 'api' is construction-only and cannot be changed via updateConfig — ignoring`);
|
|
112
|
+
}
|
|
113
|
+
if (stateful !== undefined) {
|
|
114
|
+
logger.warn(`stateful=<${stateful}> | 'stateful' is construction-only and cannot be changed via updateConfig — ignoring`);
|
|
115
|
+
}
|
|
116
|
+
if (this._api === 'responses') {
|
|
117
|
+
warnResponsesManagedParams(rest.params);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
warnChatManagedParams(rest.params);
|
|
121
|
+
}
|
|
122
|
+
this._config = { ...this._config, ...rest };
|
|
123
|
+
}
|
|
124
|
+
getConfig() {
|
|
125
|
+
return this._config;
|
|
126
|
+
}
|
|
127
|
+
async *stream(messages, options) {
|
|
128
|
+
if (!messages || messages.length === 0) {
|
|
129
|
+
throw new Error('At least one message is required');
|
|
130
|
+
}
|
|
131
|
+
if (this._api === 'chat') {
|
|
132
|
+
yield* this._streamChat(messages, options);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
yield* this._streamResponses(messages, options);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async *_streamChat(messages, options) {
|
|
139
|
+
try {
|
|
140
|
+
const request = formatChatRequest(this._config, messages, options);
|
|
141
|
+
const stream = await this._client.chat.completions.create(request);
|
|
142
|
+
const streamState = {
|
|
143
|
+
messageStarted: false,
|
|
144
|
+
textContentBlockStarted: false,
|
|
145
|
+
};
|
|
146
|
+
const activeToolCalls = new Map();
|
|
147
|
+
let bufferedUsage = null;
|
|
148
|
+
for await (const chunk of stream) {
|
|
149
|
+
if (!chunk.choices || chunk.choices.length === 0) {
|
|
150
|
+
if (chunk.usage) {
|
|
151
|
+
bufferedUsage = {
|
|
152
|
+
type: 'modelMetadataEvent',
|
|
153
|
+
usage: {
|
|
154
|
+
inputTokens: chunk.usage.prompt_tokens ?? 0,
|
|
155
|
+
outputTokens: chunk.usage.completion_tokens ?? 0,
|
|
156
|
+
totalTokens: chunk.usage.total_tokens ?? 0,
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
const events = mapChatChunkToEvents(chunk, streamState, activeToolCalls);
|
|
163
|
+
for (const event of events) {
|
|
164
|
+
if (event.type === 'modelMessageStopEvent' && bufferedUsage) {
|
|
165
|
+
yield bufferedUsage;
|
|
166
|
+
bufferedUsage = null;
|
|
167
|
+
}
|
|
168
|
+
yield event;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (bufferedUsage) {
|
|
172
|
+
yield bufferedUsage;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
throw this._rewrapError(error);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async *_streamResponses(messages, options) {
|
|
180
|
+
try {
|
|
181
|
+
const request = formatResponsesRequest(this._config, messages, options, this.stateful);
|
|
182
|
+
const stream = await this._client.responses.create(request);
|
|
183
|
+
const state = createResponsesStreamState();
|
|
184
|
+
for await (const event of stream) {
|
|
185
|
+
for (const sdkEvent of mapResponsesEventToSDK(event, state, this.stateful, options?.modelState)) {
|
|
186
|
+
yield sdkEvent;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
for (const sdkEvent of finalizeResponsesStream(state)) {
|
|
190
|
+
yield sdkEvent;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
throw this._rewrapError(error);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
_rewrapError(error) {
|
|
198
|
+
const err = error;
|
|
199
|
+
const kind = classifyOpenAIError(err);
|
|
200
|
+
if (kind === 'throttling') {
|
|
201
|
+
const message = err.message ?? 'Request was throttled by the model provider';
|
|
202
|
+
logger.debug(`throttled | error_message=<${message}>`);
|
|
203
|
+
return new ModelThrottledError(message, { cause: err });
|
|
204
|
+
}
|
|
205
|
+
if (kind === 'contextOverflow') {
|
|
206
|
+
return new ContextWindowOverflowError(err.message);
|
|
207
|
+
}
|
|
208
|
+
return error;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../src/models/openai/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Responses API adapter for the OpenAI model provider.
|
|
3
|
+
*
|
|
4
|
+
* Built-in tool support status:
|
|
5
|
+
* | Tool | Support |
|
|
6
|
+
* |-------------------|----------------------------------------------------------|
|
|
7
|
+
* | web_search | Full: includes URL citations |
|
|
8
|
+
* | file_search | Partial: works but file citation annotations not emitted |
|
|
9
|
+
* | code_interpreter | Partial: works but executed code/stdout not surfaced |
|
|
10
|
+
* | mcp | Partial: works but approval flow not supported |
|
|
11
|
+
* | shell | Partial: container mode only |
|
|
12
|
+
* | image_generation | Not supported |
|
|
13
|
+
*
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
import type { ResponseStreamEvent, ResponseCreateParamsStreaming } from 'openai/resources/responses/responses';
|
|
17
|
+
import type { Message, StopReason } from '../../types/messages.js';
|
|
18
|
+
import type { StateStore } from '../../state-store.js';
|
|
19
|
+
import type { ModelStreamEvent } from '../streaming.js';
|
|
20
|
+
import type { StreamOptions } from '../model.js';
|
|
21
|
+
import type { OpenAIResponsesConfig } from './types.js';
|
|
22
|
+
export declare const DEFAULT_RESPONSES_MODEL_ID: "gpt-5.4";
|
|
23
|
+
/**
|
|
24
|
+
* Logs a warning for each responses-managed key present in `params`.
|
|
25
|
+
*
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
export declare function warnManagedParams(params: Record<string, unknown> | undefined): void;
|
|
29
|
+
/**
|
|
30
|
+
* Builds a Responses API streaming request body.
|
|
31
|
+
*
|
|
32
|
+
* @internal
|
|
33
|
+
*/
|
|
34
|
+
export declare function formatResponsesRequest(config: OpenAIResponsesConfig, messages: Message[], options: StreamOptions | undefined, stateful: boolean): ResponseCreateParamsStreaming;
|
|
35
|
+
/**
|
|
36
|
+
* Internal stream state for the Responses adapter. Tracks the active content
|
|
37
|
+
* block kind so the adapter can emit stop/start events when content type
|
|
38
|
+
* switches (text ↔ reasoning ↔ citations).
|
|
39
|
+
*
|
|
40
|
+
* @internal
|
|
41
|
+
*/
|
|
42
|
+
export interface ResponsesStreamState {
|
|
43
|
+
dataType: string | null;
|
|
44
|
+
toolCalls: Map<string, {
|
|
45
|
+
name: string;
|
|
46
|
+
arguments: string;
|
|
47
|
+
callId: string;
|
|
48
|
+
itemId: string;
|
|
49
|
+
}>;
|
|
50
|
+
finalUsage: {
|
|
51
|
+
inputTokens: number;
|
|
52
|
+
outputTokens: number;
|
|
53
|
+
totalTokens: number;
|
|
54
|
+
} | null;
|
|
55
|
+
stopReason: StopReason;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Creates fresh stream state for a new Responses API stream.
|
|
59
|
+
*
|
|
60
|
+
* @internal
|
|
61
|
+
*/
|
|
62
|
+
export declare function createResponsesStreamState(): ResponsesStreamState;
|
|
63
|
+
/**
|
|
64
|
+
* Maps a single Responses API stream event to zero or more SDK events. Mutates
|
|
65
|
+
* `state` and, when `stateful` is `true`, writes `responseId` into `modelState`.
|
|
66
|
+
*
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
export declare function mapResponsesEventToSDK(event: ResponseStreamEvent, state: ResponsesStreamState, stateful: boolean, modelState: StateStore | undefined): ModelStreamEvent[];
|
|
70
|
+
/**
|
|
71
|
+
* Emits the terminal events for a Responses API stream: closes any open content
|
|
72
|
+
* block, flushes accumulated tool calls, emits usage metadata, and finishes
|
|
73
|
+
* with `modelMessageStopEvent`.
|
|
74
|
+
*
|
|
75
|
+
* @internal
|
|
76
|
+
*/
|
|
77
|
+
export declare function finalizeResponsesStream(state: ResponsesStreamState): ModelStreamEvent[];
|
|
78
|
+
//# sourceMappingURL=responses-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responses-adapter.d.ts","sourceRoot":"","sources":["../../../../src/models/openai/responses-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,mBAAmB,EAInB,6BAA6B,EAC9B,MAAM,sCAAsC,CAAA;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAmB,MAAM,yBAAyB,CAAA;AAInF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAIhD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEvD,eAAO,MAAM,0BAA0B,WAAgC,CAAA;AAIvE;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,IAAI,CAEnF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,qBAAqB,EAC7B,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,aAAa,GAAG,SAAS,EAClC,QAAQ,EAAE,OAAO,GAChB,6BAA6B,CAqE/B;AAoMD;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3F,UAAU,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;IACrF,UAAU,EAAE,UAAU,CAAA;CACvB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,oBAAoB,CAOjE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,mBAAmB,EAC1B,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,OAAO,EACjB,UAAU,EAAE,UAAU,GAAG,SAAS,GACjC,gBAAgB,EAAE,CAqIpB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,GAAG,gBAAgB,EAAE,CA+BvF"}
|