@framers/agentos 0.10.23 → 0.10.25
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/api/AgentOS.d.ts.map +1 -1
- package/dist/api/AgentOS.js +3 -2
- package/dist/api/AgentOS.js.map +1 -1
- package/dist/api/agent.d.ts.map +1 -1
- package/dist/api/agent.js +25 -10
- package/dist/api/agent.js.map +1 -1
- package/dist/api/embedText.d.ts.map +1 -1
- package/dist/api/embedText.js +53 -17
- package/dist/api/embedText.js.map +1 -1
- package/dist/api/generateImage.d.ts.map +1 -1
- package/dist/api/generateImage.js +51 -7
- package/dist/api/generateImage.js.map +1 -1
- package/dist/api/generateText.d.ts +36 -6
- package/dist/api/generateText.d.ts.map +1 -1
- package/dist/api/generateText.js +102 -17
- package/dist/api/generateText.js.map +1 -1
- package/dist/api/model.d.ts.map +1 -1
- package/dist/api/model.js +11 -4
- package/dist/api/model.js.map +1 -1
- package/dist/api/runtime/SelfImprovementSessionManager.d.ts +34 -2
- package/dist/api/runtime/SelfImprovementSessionManager.d.ts.map +1 -1
- package/dist/api/runtime/SelfImprovementSessionManager.js +119 -33
- package/dist/api/runtime/SelfImprovementSessionManager.js.map +1 -1
- package/dist/api/runtime/provider-defaults.d.ts.map +1 -1
- package/dist/api/runtime/provider-defaults.js +5 -2
- package/dist/api/runtime/provider-defaults.js.map +1 -1
- package/dist/api/streamText.d.ts.map +1 -1
- package/dist/api/streamText.js +116 -34
- package/dist/api/streamText.js.map +1 -1
- package/dist/api/types/AgentOSInput.d.ts +11 -0
- package/dist/api/types/AgentOSInput.d.ts.map +1 -1
- package/dist/api/types.d.ts +14 -6
- package/dist/api/types.d.ts.map +1 -1
- package/dist/api/types.js.map +1 -1
- package/dist/cognition/emergent/AdaptPersonalityTool.d.ts +13 -4
- package/dist/cognition/emergent/AdaptPersonalityTool.d.ts.map +1 -1
- package/dist/cognition/emergent/AdaptPersonalityTool.js +32 -23
- package/dist/cognition/emergent/AdaptPersonalityTool.js.map +1 -1
- package/dist/cognition/emergent/EmergentCapabilityEngine.d.ts +18 -6
- package/dist/cognition/emergent/EmergentCapabilityEngine.d.ts.map +1 -1
- package/dist/cognition/emergent/EmergentCapabilityEngine.js.map +1 -1
- package/dist/cognition/emergent/SelfEvaluateTool.d.ts +10 -3
- package/dist/cognition/emergent/SelfEvaluateTool.d.ts.map +1 -1
- package/dist/cognition/emergent/SelfEvaluateTool.js +3 -2
- package/dist/cognition/emergent/SelfEvaluateTool.js.map +1 -1
- package/dist/cognition/substrate/CognitiveMemoryBridge.d.ts +51 -2
- package/dist/cognition/substrate/CognitiveMemoryBridge.d.ts.map +1 -1
- package/dist/cognition/substrate/CognitiveMemoryBridge.js +84 -2
- package/dist/cognition/substrate/CognitiveMemoryBridge.js.map +1 -1
- package/dist/cognition/substrate/ConversationHistoryManager.d.ts +8 -4
- package/dist/cognition/substrate/ConversationHistoryManager.d.ts.map +1 -1
- package/dist/cognition/substrate/ConversationHistoryManager.js +17 -5
- package/dist/cognition/substrate/ConversationHistoryManager.js.map +1 -1
- package/dist/cognition/substrate/GMI.d.ts +92 -5
- package/dist/cognition/substrate/GMI.d.ts.map +1 -1
- package/dist/cognition/substrate/GMI.js +291 -65
- package/dist/cognition/substrate/GMI.js.map +1 -1
- package/dist/cognition/substrate/GMIManager.d.ts +12 -0
- package/dist/cognition/substrate/GMIManager.d.ts.map +1 -1
- package/dist/cognition/substrate/GMIManager.js +22 -16
- package/dist/cognition/substrate/GMIManager.js.map +1 -1
- package/dist/cognition/substrate/IGMI.d.ts +23 -0
- package/dist/cognition/substrate/IGMI.d.ts.map +1 -1
- package/dist/cognition/substrate/IGMI.js.map +1 -1
- package/dist/cognition/substrate/MetapromptExecutor.d.ts +183 -28
- package/dist/cognition/substrate/MetapromptExecutor.d.ts.map +1 -1
- package/dist/cognition/substrate/MetapromptExecutor.js +431 -108
- package/dist/cognition/substrate/MetapromptExecutor.js.map +1 -1
- package/dist/cognition/substrate/personas/IPersonaDefinition.d.ts +5 -0
- package/dist/cognition/substrate/personas/IPersonaDefinition.d.ts.map +1 -1
- package/dist/cognition/substrate/personas/PersonaValidation.d.ts.map +1 -1
- package/dist/cognition/substrate/personas/PersonaValidation.js +30 -0
- package/dist/cognition/substrate/personas/PersonaValidation.js.map +1 -1
- package/dist/cognition/substrate/personas/SoulLoader.d.ts +14 -1
- package/dist/cognition/substrate/personas/SoulLoader.d.ts.map +1 -1
- package/dist/cognition/substrate/personas/SoulLoader.js +45 -12
- package/dist/cognition/substrate/personas/SoulLoader.js.map +1 -1
- package/dist/cognition/substrate/personas/definitions/default_assistant_persona.json +3 -35
- package/dist/cognition/substrate/personas/hexaco.d.ts +34 -0
- package/dist/cognition/substrate/personas/hexaco.d.ts.map +1 -0
- package/dist/cognition/substrate/personas/hexaco.js +66 -0
- package/dist/cognition/substrate/personas/hexaco.js.map +1 -0
- package/dist/cognition/substrate/userFeedback.d.ts +69 -0
- package/dist/cognition/substrate/userFeedback.d.ts.map +1 -0
- package/dist/cognition/substrate/userFeedback.js +107 -0
- package/dist/cognition/substrate/userFeedback.js.map +1 -0
- package/dist/core/conversation/ConversationMessage.d.ts +9 -0
- package/dist/core/conversation/ConversationMessage.d.ts.map +1 -1
- package/dist/core/conversation/ConversationMessage.js.map +1 -1
- package/dist/core/llm/IPromptEngine.d.ts +9 -0
- package/dist/core/llm/IPromptEngine.d.ts.map +1 -1
- package/dist/core/llm/IPromptEngine.js.map +1 -1
- package/dist/core/llm/PromptEngine.d.ts +30 -1
- package/dist/core/llm/PromptEngine.d.ts.map +1 -1
- package/dist/core/llm/PromptEngine.js +229 -92
- package/dist/core/llm/PromptEngine.js.map +1 -1
- package/dist/core/llm/providers/IProvider.d.ts +28 -8
- package/dist/core/llm/providers/IProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/AnthropicProvider.d.ts +135 -49
- package/dist/core/llm/providers/implementations/AnthropicProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/AnthropicProvider.js +294 -110
- package/dist/core/llm/providers/implementations/AnthropicProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/ClaudeCodeProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/ClaudeCodeProvider.js +15 -1
- package/dist/core/llm/providers/implementations/ClaudeCodeProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/GeminiCLIProvider.d.ts +1 -1
- package/dist/core/llm/providers/implementations/GeminiCLIProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/GeminiCLIProvider.js +51 -24
- package/dist/core/llm/providers/implementations/GeminiCLIProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/GeminiProvider.d.ts +19 -6
- package/dist/core/llm/providers/implementations/GeminiProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/GeminiProvider.js +62 -24
- package/dist/core/llm/providers/implementations/GeminiProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/OpenAIProvider.d.ts +255 -70
- package/dist/core/llm/providers/implementations/OpenAIProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/OpenAIProvider.js +943 -214
- package/dist/core/llm/providers/implementations/OpenAIProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/cacheLeakDetector.d.ts +15 -7
- package/dist/core/llm/providers/implementations/cacheLeakDetector.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/cacheLeakDetector.js +12 -7
- package/dist/core/llm/providers/implementations/cacheLeakDetector.js.map +1 -1
- package/dist/core/llm/providers/implementations/openai-response-format-guard.d.ts +17 -0
- package/dist/core/llm/providers/implementations/openai-response-format-guard.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/openai-response-format-guard.js +31 -0
- package/dist/core/llm/providers/implementations/openai-response-format-guard.js.map +1 -1
- package/dist/core/llm/providers/model-cache-capabilities.d.ts +24 -9
- package/dist/core/llm/providers/model-cache-capabilities.d.ts.map +1 -1
- package/dist/core/llm/providers/model-cache-capabilities.js +59 -44
- package/dist/core/llm/providers/model-cache-capabilities.js.map +1 -1
- package/dist/core/llm/providers/model-effort.d.ts +21 -0
- package/dist/core/llm/providers/model-effort.d.ts.map +1 -1
- package/dist/core/llm/providers/model-effort.js +38 -2
- package/dist/core/llm/providers/model-effort.js.map +1 -1
- package/dist/core/llm/providers/model-forced-tool-choice.d.ts +13 -6
- package/dist/core/llm/providers/model-forced-tool-choice.d.ts.map +1 -1
- package/dist/core/llm/providers/model-forced-tool-choice.js +14 -7
- package/dist/core/llm/providers/model-forced-tool-choice.js.map +1 -1
- package/dist/core/llm/providers/model-thinking.d.ts +64 -13
- package/dist/core/llm/providers/model-thinking.d.ts.map +1 -1
- package/dist/core/llm/providers/model-thinking.js +52 -12
- package/dist/core/llm/providers/model-thinking.js.map +1 -1
- package/dist/core/llm/streaming/StreamingBatcher.d.ts +4 -3
- package/dist/core/llm/streaming/StreamingBatcher.d.ts.map +1 -1
- package/dist/core/llm/streaming/StreamingBatcher.js +8 -3
- package/dist/core/llm/streaming/StreamingBatcher.js.map +1 -1
- package/dist/core/safety/LLMProviderHealthRegistry.d.ts +4 -0
- package/dist/core/safety/LLMProviderHealthRegistry.d.ts.map +1 -1
- package/dist/core/safety/LLMProviderHealthRegistry.js +26 -0
- package/dist/core/safety/LLMProviderHealthRegistry.js.map +1 -1
- package/dist/core/utils/sha256.d.ts +19 -0
- package/dist/core/utils/sha256.d.ts.map +1 -0
- package/dist/core/utils/sha256.js +101 -0
- package/dist/core/utils/sha256.js.map +1 -0
- package/dist/orchestration/pipeline/query/types.js +1 -1
- package/package.json +1 -1
|
@@ -74,7 +74,8 @@ export declare function modelRequiresMaxCompletionTokens(modelId: string): boole
|
|
|
74
74
|
* family prefix alone does not decide the size: `gpt-5.4` is a 1.05M model
|
|
75
75
|
* while its `-mini` and `-nano` siblings are 400K.
|
|
76
76
|
*
|
|
77
|
-
* - 1,050,000: the GPT-6 family
|
|
77
|
+
* - 1,050,000: the GPT-6 family (`gpt-6.1-sol` included, per the
|
|
78
|
+
* 2026-09-29 changelog), the GPT-5.6 family except `gpt-5.6-cyber`,
|
|
78
79
|
* `gpt-5.5`, `gpt-5.5-pro`, `gpt-5.4` and `gpt-5.4-pro` (max input
|
|
79
80
|
* 922,000 on GPT-6).
|
|
80
81
|
* - 400,000: `gpt-5.6-cyber`, `gpt-5.4-mini` / `-nano`, `gpt-5.3-codex`,
|
|
@@ -86,28 +87,88 @@ export declare function modelRequiresMaxCompletionTokens(modelId: string): boole
|
|
|
86
87
|
* @returns Context window in tokens.
|
|
87
88
|
*/
|
|
88
89
|
export declare function openAiReasoningContextWindow(modelId: string): number;
|
|
90
|
+
/**
|
|
91
|
+
* Prompt size, in input tokens, above which OpenAI bills a call on a
|
|
92
|
+
* long-context model at the long-context rates. The pricing page splits its
|
|
93
|
+
* flagship table into "<=272K" and ">272K" input tokens, and the comparison is
|
|
94
|
+
* strict: a prompt of exactly 272,000 tokens bills at the standard rates. The
|
|
95
|
+
* count includes cached tokens, and output size never triggers the tier.
|
|
96
|
+
*/
|
|
97
|
+
export declare const OPENAI_LONG_CONTEXT_THRESHOLD_TOKENS = 272000;
|
|
98
|
+
/**
|
|
99
|
+
* Factor OpenAI applies to the input rate of a long-context call. The cached
|
|
100
|
+
* input and cache write rates double as well.
|
|
101
|
+
*/
|
|
102
|
+
export declare const OPENAI_LONG_CONTEXT_INPUT_MULTIPLIER = 2;
|
|
103
|
+
/** Factor OpenAI applies to the output rate of a long-context call. */
|
|
104
|
+
export declare const OPENAI_LONG_CONTEXT_OUTPUT_MULTIPLIER = 1.5;
|
|
105
|
+
/**
|
|
106
|
+
* Whether OpenAI bills `modelId` at the long-context rates when a prompt
|
|
107
|
+
* exceeds {@link OPENAI_LONG_CONTEXT_THRESHOLD_TOKENS} input tokens. Such a
|
|
108
|
+
* call bills its whole input at {@link OPENAI_LONG_CONTEXT_INPUT_MULTIPLIER}
|
|
109
|
+
* times the input rate and its whole output at
|
|
110
|
+
* {@link OPENAI_LONG_CONTEXT_OUTPUT_MULTIPLIER} times the output rate.
|
|
111
|
+
*
|
|
112
|
+
* OpenAI states the rule for its models with a 1.05M context window, so this
|
|
113
|
+
* reuses {@link openAiReasoningContextWindow}. That covers the GPT-6 family
|
|
114
|
+
* (`gpt-6.1-sol` included), the GPT-5.6 family except `gpt-5.6-cyber`,
|
|
115
|
+
* `gpt-5.5`, `gpt-5.5-pro`, `gpt-5.4` and `gpt-5.4-pro`, bare or dated.
|
|
116
|
+
* Everything else bills flat at every prompt size: the GPT-5 models with a
|
|
117
|
+
* smaller window (`gpt-5.6-cyber`, which the pricing page lists without a
|
|
118
|
+
* long-context rate, `gpt-5.4-mini` / `-nano`, `gpt-5.3` and older, and the
|
|
119
|
+
* chat-latest snapshots), the o-series, and the pre-GPT-5 models, `gpt-4.1`
|
|
120
|
+
* included despite its 1M window. Checked against
|
|
121
|
+
* developers.openai.com/api/docs/pricing and the model pages on 2026-09-30.
|
|
122
|
+
*
|
|
123
|
+
* @param modelId Model id as requested or as echoed by the API.
|
|
124
|
+
* @returns `true` when a prompt above the threshold bills at the long-context rates.
|
|
125
|
+
*/
|
|
126
|
+
export declare function openAiHasLongContextPricing(modelId: string): boolean;
|
|
89
127
|
/**
|
|
90
128
|
* Whether OpenAI serves `modelId` only through the Responses API. OpenAI lists
|
|
91
129
|
* the `-pro` tiers, the codex models, `gpt-5.6-cyber` and the deep-research
|
|
92
|
-
* models as Responses-only
|
|
93
|
-
*
|
|
94
|
-
*
|
|
130
|
+
* models as Responses-only; on /v1/chat/completions they fail (gpt-5.3-codex
|
|
131
|
+
* answers 404). OpenAIProvider sends every call to these ids to /v1/responses
|
|
132
|
+
* (see {@link openAiRequiresResponsesApi}).
|
|
133
|
+
*
|
|
134
|
+
* Only OpenAI's own families (`gpt-`, the o-series, `codex-`) qualify. Groq,
|
|
135
|
+
* xAI, Together and Mistral delegate to this class with their own model ids,
|
|
136
|
+
* and an id such as `grok-4-pro` on one of those endpoints is served by its
|
|
137
|
+
* Chat Completions route.
|
|
95
138
|
*
|
|
96
139
|
* @param modelId Provider-side model identifier.
|
|
97
140
|
* @returns `true` when the model has no Chat Completions endpoint.
|
|
98
141
|
*/
|
|
99
142
|
export declare function isOpenAIResponsesOnlyModel(modelId: string): boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Whether a call to `modelId` can be served only by `/v1/responses`:
|
|
145
|
+
*
|
|
146
|
+
* - any call to a Responses-only model ({@link isOpenAIResponsesOnlyModel});
|
|
147
|
+
* - a GPT-6 call carrying function tools. Chat Completions does not serve
|
|
148
|
+
* it: `gpt-6-astra` rejects tool calls there with or without a
|
|
149
|
+
* `reasoning_effort` (probed 2026-09-10 and 2026-09-30), the `gpt-6.1-sol` model page lists
|
|
150
|
+
* tool calling on Responses only, and the `gpt-6-sol` / `gpt-6-luna`
|
|
151
|
+
* pages allow chat tool calls only with `reasoning_effort: 'none'`. A
|
|
152
|
+
* 2026-09-30 probe of a GPT-6 tool call with no `reasoning_effort` on
|
|
153
|
+
* /v1/chat/completions returned HTTP 400.
|
|
154
|
+
*
|
|
155
|
+
* {@link shouldRouteToOpenAiResponsesApi} applies this rule to streamed and
|
|
156
|
+
* non-streamed calls alike.
|
|
157
|
+
*
|
|
158
|
+
* @param modelId Provider-side model identifier.
|
|
159
|
+
* @param options The request's tools.
|
|
160
|
+
* @returns `true` when the call has no Chat Completions route.
|
|
161
|
+
*/
|
|
162
|
+
export declare function openAiRequiresResponsesApi(modelId: string, options: Pick<ModelCompletionOptions, 'tools'>): boolean;
|
|
100
163
|
/**
|
|
101
164
|
* ModelInfo capabilities for a GPT-5, GPT-6 or o-series id, limited to what
|
|
102
165
|
* OpenAIProvider can serve.
|
|
103
166
|
*
|
|
104
167
|
* - Responses-only models ({@link isOpenAIResponsesOnlyModel}) list as
|
|
105
|
-
* `chat` only.
|
|
106
|
-
*
|
|
107
|
-
* - GPT-6
|
|
108
|
-
*
|
|
109
|
-
* calls on Chat Completions, and this provider routes a tool call to
|
|
110
|
-
* Responses only when it carries an effort and is not streamed.
|
|
168
|
+
* `chat` only. Tool and streaming support vary from model to model on
|
|
169
|
+
* that tier, and the refresh leaves the Responses-only o-series ids out.
|
|
170
|
+
* - GPT-6 lists `tool_use`: every GPT-6 tool call, streamed or not, goes to
|
|
171
|
+
* `/v1/responses` ({@link openAiRequiresResponsesApi}).
|
|
111
172
|
* - `o1-mini` and `o1-preview` have no function calling or structured
|
|
112
173
|
* outputs. They and `o3-mini` take text only, and every other id takes
|
|
113
174
|
* images (per model input modalities, checked 2026-09-29).
|
|
@@ -142,32 +203,30 @@ export declare function openAiReasoningCapabilities(modelId: string): string[];
|
|
|
142
203
|
*/
|
|
143
204
|
export declare function isOpenAIReasoningModel(modelId: string): boolean;
|
|
144
205
|
/**
|
|
145
|
-
* Whether OpenAI rejects `reasoning_effort` sent
|
|
146
|
-
* the `/v1/chat/completions` endpoint for `modelId`. The GPT-5 family
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
* 2026-07-08 when the codegen frontier fallback chain
|
|
150
|
-
* effort:xhigh orchestrator turn to gpt-5.5
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
* param entirely (or routing to `/v1/responses`) is therefore the only viable
|
|
170
|
-
* path, which is exactly what the two call sites below already do.
|
|
206
|
+
* Whether OpenAI rejects `reasoning_effort` sent alongside function tools on
|
|
207
|
+
* the `/v1/chat/completions` endpoint for `modelId`. The GPT-5 family does:
|
|
208
|
+
* "Function tools with reasoning_effort are not supported for gpt-5.5 in
|
|
209
|
+
* /v1/chat/completions. Please use /v1/responses instead." (live-observed
|
|
210
|
+
* 2026-07-08, when the codegen frontier fallback chain sent a tool-carrying,
|
|
211
|
+
* effort:xhigh orchestrator turn to gpt-5.5 and the whole build failed).
|
|
212
|
+
*
|
|
213
|
+
* GPT-6 does as well. Live-probed 2026-09-10 (chat.completions,
|
|
214
|
+
* `gpt-6-astra`, `reasoning_effort: 'xhigh'` and one function tool): HTTP 400
|
|
215
|
+
* `invalid_request_error`, "Function tools with reasoning_effort are not
|
|
216
|
+
* supported for gpt-6-astra in /v1/chat/completions. To use function tools,
|
|
217
|
+
* use /v1/responses or set reasoning_effort to 'none'." The 2026-09-30 probe
|
|
218
|
+
* found that `gpt-6-sol` and `gpt-6-luna` accept `'none'` there while
|
|
219
|
+
* `gpt-6-astra` rejects it, and that a GPT-6 tool call with no
|
|
220
|
+
* `reasoning_effort` also returns 400, so every GPT-6 tool call goes to
|
|
221
|
+
* `/v1/responses` ({@link openAiRequiresResponsesApi}).
|
|
222
|
+
*
|
|
223
|
+
* {@link shouldRouteToOpenAiResponsesApi} sends a GPT-5 tool call that
|
|
224
|
+
* carries an effort to `/v1/responses`, which keeps both the effort and the
|
|
225
|
+
* tools. A call whose message content Responses cannot carry stays on
|
|
226
|
+
* chat/completions, where the chat builder drops `reasoning_effort` so the
|
|
227
|
+
* call succeeds at the model's default depth. The o-series (o1/o3/o4) accepts
|
|
228
|
+
* `reasoning_effort` with tools on chat/completions, so it stays outside this
|
|
229
|
+
* predicate; widen it if a future o-series model enforces the same rule.
|
|
171
230
|
*
|
|
172
231
|
* @param modelId Provider-side model identifier (e.g. `'gpt-5.5'`, `'gpt-6-astra'`).
|
|
173
232
|
*/
|
|
@@ -206,27 +265,43 @@ export declare function isResponsesMappableContent(content: ChatMessage['content
|
|
|
206
265
|
*/
|
|
207
266
|
export declare function flattenResponsesTextContent(content: ChatMessage['content']): string;
|
|
208
267
|
/**
|
|
209
|
-
* Whether
|
|
210
|
-
*
|
|
211
|
-
*
|
|
212
|
-
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
*
|
|
224
|
-
*
|
|
225
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
228
|
-
*
|
|
229
|
-
*
|
|
268
|
+
* Whether the `/v1/responses` builder can carry message `m` without losing
|
|
269
|
+
* content. Text-only content ({@link isResponsesMappableContent}) maps on
|
|
270
|
+
* every role. User and tool messages may also carry image parts: a user turn
|
|
271
|
+
* sends them as `input_image`, and a tool result becomes a
|
|
272
|
+
* `function_call_output` whose output is an `input_text` / `input_image`
|
|
273
|
+
* array (the form OpenAI's function-calling reference gives for it). Any other
|
|
274
|
+
* part, such as audio, a file or an Anthropic `tool_result` block, has no
|
|
275
|
+
* mapping.
|
|
276
|
+
*
|
|
277
|
+
* @param m A request message.
|
|
278
|
+
* @returns `true` when the message maps onto Responses input losslessly.
|
|
279
|
+
*/
|
|
280
|
+
export declare function isResponsesMappableMessage(m: ChatMessage): boolean;
|
|
281
|
+
/**
|
|
282
|
+
* Whether a call goes to `/v1/responses` instead of `/v1/chat/completions`.
|
|
283
|
+
* Streamed and non-streamed calls follow this one rule.
|
|
284
|
+
*
|
|
285
|
+
* - Every call {@link openAiRequiresResponsesApi} names: Responses-only
|
|
286
|
+
* models and GPT-6 tool calls.
|
|
287
|
+
* - A GPT-5 or GPT-6 call that carries function tools and an effort, when
|
|
288
|
+
* every message maps ({@link isResponsesMappableMessage}). Chat
|
|
289
|
+
* Completions rejects `reasoning_effort` alongside function tools for
|
|
290
|
+
* these families ("Function tools with reasoning_effort are not supported
|
|
291
|
+
* ... Please use /v1/responses instead"); Responses keeps both, and a
|
|
292
|
+
* `responseFormat` travels as `text.format`.
|
|
293
|
+
*
|
|
294
|
+
* Content gating goes through {@link isResponsesMappableMessage}, which
|
|
295
|
+
* accepts Anthropic-style cache-marked system blocks (`systemBlocks` reach the
|
|
296
|
+
* provider as an all-text content array) and flattens them without loss. A
|
|
297
|
+
* GPT-5 tool call whose content does not map stays on chat/completions, where
|
|
298
|
+
* the chat builder drops the effort (see
|
|
299
|
+
* {@link openAiRejectsReasoningEffortWithTools}).
|
|
300
|
+
*
|
|
301
|
+
* @param modelId Provider-side model identifier.
|
|
302
|
+
* @param messages The request messages.
|
|
303
|
+
* @param options The request's tools, effort and response format.
|
|
304
|
+
* @returns `true` when the call goes to `/v1/responses`.
|
|
230
305
|
*/
|
|
231
306
|
export declare function shouldRouteToOpenAiResponsesApi(modelId: string, messages: ChatMessage[], options: Pick<ModelCompletionOptions, 'tools' | 'effort' | 'responseFormat'>): boolean;
|
|
232
307
|
export declare class OpenAIProvider implements IProvider {
|
|
@@ -278,6 +353,54 @@ export declare class OpenAIProvider implements IProvider {
|
|
|
278
353
|
generateCompletion(modelId: string, messages: ChatMessage[], options: ModelCompletionOptions): Promise<ModelCompletionResponse>;
|
|
279
354
|
/** @inheritdoc */
|
|
280
355
|
generateCompletionStream(modelId: string, messages: ChatMessage[], options: ModelCompletionOptions): AsyncGenerator<ModelCompletionResponse, void, undefined>;
|
|
356
|
+
/**
|
|
357
|
+
* The terminal chunk a stream yields when the caller's signal aborts it.
|
|
358
|
+
* @private
|
|
359
|
+
*/
|
|
360
|
+
private abortedStreamChunk;
|
|
361
|
+
/**
|
|
362
|
+
* Maps a `/v1/chat/completions` SSE stream onto
|
|
363
|
+
* {@link ModelCompletionResponse} chunks, accumulating streamed tool calls
|
|
364
|
+
* by index. A caller abort ends the stream with the abort chunk.
|
|
365
|
+
* @private
|
|
366
|
+
*/
|
|
367
|
+
private mapChatStream;
|
|
368
|
+
/**
|
|
369
|
+
* Maps a `/v1/responses` SSE stream onto the {@link ModelCompletionResponse}
|
|
370
|
+
* chunks the chat stream produces.
|
|
371
|
+
*
|
|
372
|
+
* - `response.output_text.delta` yields a text chunk.
|
|
373
|
+
* - A `function_call` item yields a tool-call delta with its id and name
|
|
374
|
+
* (`response.output_item.added`), then its argument fragments
|
|
375
|
+
* (`response.function_call_arguments.delta`). Tool-call indexes are
|
|
376
|
+
* dense in order of appearance, so a reasoning item ahead of the calls
|
|
377
|
+
* leaves no gap.
|
|
378
|
+
* - The item's final form (`response.function_call_arguments.done`,
|
|
379
|
+
* `response.output_item.done`) and the terminal response are
|
|
380
|
+
* authoritative. Text, a call id or name, or an argument suffix that the
|
|
381
|
+
* deltas did not carry goes out as one more delta, exactly once, before
|
|
382
|
+
* the final chunk. A consumer that rebuilds the turn from deltas
|
|
383
|
+
* (StreamingReconstructor) and one that reads the final chunk
|
|
384
|
+
* (streamText, GMI) therefore see the same text and calls, including
|
|
385
|
+
* when a proxy strips the delta events.
|
|
386
|
+
* - `response.completed` and `response.incomplete` yield exactly one final
|
|
387
|
+
* chunk with the finish reason, tool calls and usage.
|
|
388
|
+
* - Before any text or tool call has gone out, `response.failed`, an
|
|
389
|
+
* `error` event, and a body that ends or fails to read before a terminal
|
|
390
|
+
* event throw an {@link OpenAIProviderError}, as a failed HTTP request
|
|
391
|
+
* does: the status of a retryable error code
|
|
392
|
+
* ({@link RESPONSES_RETRYABLE_ERROR_STATUS}) or `NETWORK_ERROR` for the
|
|
393
|
+
* cut-off or failed body, and a failed response's billed usage in
|
|
394
|
+
* `details.usage`. Callers can then fail over and meter the attempt.
|
|
395
|
+
* - After output, those failures and a caller abort each yield one final
|
|
396
|
+
* chunk carrying an error instead, so the partial answer stays with the
|
|
397
|
+
* caller.
|
|
398
|
+
*
|
|
399
|
+
* Reasoning summaries, content-part events and refusals carry nothing this
|
|
400
|
+
* mapping surfaces and are skipped.
|
|
401
|
+
* @private
|
|
402
|
+
*/
|
|
403
|
+
private mapResponsesStream;
|
|
281
404
|
/** @inheritdoc */
|
|
282
405
|
generateEmbeddings(modelId: string, texts: string[], options?: ProviderEmbeddingOptions): Promise<ProviderEmbeddingResponse>;
|
|
283
406
|
/** @inheritdoc */
|
|
@@ -319,17 +442,31 @@ export declare class OpenAIProvider implements IProvider {
|
|
|
319
442
|
*/
|
|
320
443
|
private applyCacheAndTierParams;
|
|
321
444
|
/**
|
|
322
|
-
* Build a `/v1/responses` request body for a
|
|
323
|
-
*
|
|
324
|
-
*
|
|
325
|
-
*
|
|
326
|
-
*
|
|
327
|
-
*
|
|
328
|
-
*
|
|
329
|
-
*
|
|
330
|
-
*
|
|
331
|
-
*
|
|
445
|
+
* Build a `/v1/responses` request body for a call
|
|
446
|
+
* {@link shouldRouteToOpenAiResponsesApi} sends there: a Responses-only
|
|
447
|
+
* model, a GPT-6 tool call, or a GPT-5/GPT-6 tool call that carries an
|
|
448
|
+
* effort.
|
|
449
|
+
*
|
|
450
|
+
* - System, assistant and text-only turns carry flattened text
|
|
451
|
+
* ({@link flattenResponsesTextContent}), so cache-marked `systemBlocks`
|
|
452
|
+
* arrive joined instead of empty. A user turn with images carries
|
|
453
|
+
* `input_text` / `input_image` parts, and a tool result with images
|
|
454
|
+
* becomes a `function_call_output` whose output is that part array.
|
|
455
|
+
* - `tools`, `reasoning` and `text.format` appear only when the call has
|
|
456
|
+
* function tools, an effort the model maps, or an OpenAI-shaped
|
|
457
|
+
* `responseFormat`. `stream: true` marks a streamed call; Responses has
|
|
458
|
+
* no `stream_options.include_usage` and reports usage on the terminal
|
|
459
|
+
* event.
|
|
460
|
+
* - A chat-style `reasoning_effort` in `customModelParams` moves to
|
|
461
|
+
* `reasoning.effort`, because Responses rejects the top-level key.
|
|
462
|
+
*
|
|
332
463
|
* Live-probed 2026-07-08; block-content path live-probed 2026-09-12.
|
|
464
|
+
*
|
|
465
|
+
* @throws {OpenAIProviderError} `RESPONSES_UNMAPPABLE_CONTENT` when a
|
|
466
|
+
* message carries a part Responses cannot represent (audio, a file, an
|
|
467
|
+
* Anthropic `tool_result` block). Only a call with no Chat Completions
|
|
468
|
+
* route reaches here with such content; the error is not retryable, like
|
|
469
|
+
* the 400 or 404 Chat Completions would return for it.
|
|
333
470
|
* @private
|
|
334
471
|
*/
|
|
335
472
|
private buildResponsesPayload;
|
|
@@ -353,6 +490,25 @@ export declare class OpenAIProvider implements IProvider {
|
|
|
353
490
|
* @private
|
|
354
491
|
*/
|
|
355
492
|
private mapResponsesToCompletionResponse;
|
|
493
|
+
/**
|
|
494
|
+
* Logs a `/v1/responses` turn that holds output items but no message and
|
|
495
|
+
* no function call: reasoning-only output. It is returned as an empty turn
|
|
496
|
+
* carrying the real finish reason (`length` when max_output_tokens capped
|
|
497
|
+
* it), so the caller can retry with a larger budget. Reasoning tokens come
|
|
498
|
+
* out of the same output budget as the visible answer, so a reasoning model
|
|
499
|
+
* needs a materially larger maxTokens than a non-reasoning one to leave
|
|
500
|
+
* room for a reply.
|
|
501
|
+
* @private
|
|
502
|
+
*/
|
|
503
|
+
private warnReasoningOnlyOutput;
|
|
504
|
+
/**
|
|
505
|
+
* Token usage and cost for a `/v1/responses` result. The Responses API
|
|
506
|
+
* spells the counts `input_tokens` / `output_tokens` and the cached detail
|
|
507
|
+
* `input_tokens_details`; they are re-keyed to the chat spelling so both
|
|
508
|
+
* endpoints meter through {@link calculateUsage}.
|
|
509
|
+
* @private
|
|
510
|
+
*/
|
|
511
|
+
private mapResponsesUsage;
|
|
356
512
|
/**
|
|
357
513
|
* Maps the raw OpenAI API Chat Completion response to the standard ModelCompletionResponse.
|
|
358
514
|
* @private
|
|
@@ -387,7 +543,20 @@ export declare class OpenAIProvider implements IProvider {
|
|
|
387
543
|
*/
|
|
388
544
|
private resolvePricing;
|
|
389
545
|
/**
|
|
390
|
-
*
|
|
546
|
+
* Estimated USD cost of one API call, from the per-1K rates in
|
|
547
|
+
* `modelPricing`. When the model has long-context pricing
|
|
548
|
+
* ({@link openAiHasLongContextPricing}) and the prompt exceeds
|
|
549
|
+
* {@link OPENAI_LONG_CONTEXT_THRESHOLD_TOKENS} input tokens, the whole call
|
|
550
|
+
* bills at the long-context rates: every input token at 2x and every output
|
|
551
|
+
* token at 1.5x.
|
|
552
|
+
*
|
|
553
|
+
* @param promptTokens Input tokens, cached tokens included. OpenAI compares
|
|
554
|
+
* this same count against the long-context threshold.
|
|
555
|
+
* @param completionTokens Output tokens, reasoning tokens included.
|
|
556
|
+
* @param modelId Model id as echoed by the API; a dated snapshot without its
|
|
557
|
+
* own row resolves to its base row.
|
|
558
|
+
* @param isEmbedding Prices `promptTokens` alone at the embedding rate.
|
|
559
|
+
* @returns Cost in USD, or undefined when the model has no price row.
|
|
391
560
|
* @private
|
|
392
561
|
*/
|
|
393
562
|
private calculateCost;
|
|
@@ -400,12 +569,28 @@ export declare class OpenAIProvider implements IProvider {
|
|
|
400
569
|
* @param {string} apiKey - The API key to use.
|
|
401
570
|
* @param {Record<string, unknown>} [body] - The request body for POST requests.
|
|
402
571
|
* @param {boolean} [expectStream] - Whether the response is expected to be a stream.
|
|
572
|
+
* @param {number} [requestTimeoutOverride] - Per-call timeout in ms, over the configured default.
|
|
573
|
+
* @param {AbortSignal} [abortSignal] - Caller's signal. It aborts the fetch in flight, and once
|
|
574
|
+
* it has fired no further attempt is sent.
|
|
403
575
|
* @returns {Promise<T | ReadableStream<Uint8Array>>} The API response or stream.
|
|
404
|
-
* @throws {OpenAIProviderError} If the request fails after retries or for non-retryable errors
|
|
576
|
+
* @throws {OpenAIProviderError} If the request fails after retries or for non-retryable errors;
|
|
577
|
+
* `REQUEST_ABORTED` when the caller's signal ends it.
|
|
405
578
|
*/
|
|
406
579
|
private makeApiRequest;
|
|
407
580
|
/**
|
|
408
|
-
*
|
|
581
|
+
* {@link parseSseStream} for the /v1/responses mapper: a read that fails
|
|
582
|
+
* mid-body (parseSseStream's `STREAM_PARSING_ERROR`) ends the stream and is
|
|
583
|
+
* recorded on `reading.failure` instead of propagating, so the mapper
|
|
584
|
+
* handles it like a body cut off before its terminal event.
|
|
585
|
+
* @private
|
|
586
|
+
*/
|
|
587
|
+
private readResponsesSse;
|
|
588
|
+
/**
|
|
589
|
+
* Parses an SSE (Server-Sent Events) stream and yields each `data:` payload.
|
|
590
|
+
*
|
|
591
|
+
* When `abortSignal` fires, the reader is cancelled at once, which settles
|
|
592
|
+
* a read that is waiting on the network, and the generator ends without
|
|
593
|
+
* yielding more; the caller then emits its abort chunk.
|
|
409
594
|
* @private
|
|
410
595
|
*/
|
|
411
596
|
private parseSseStream;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../../../../src/core/llm/providers/implementations/OpenAIProvider.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACL,SAAS,EACT,WAAW,EACX,sBAAsB,EACtB,uBAAuB,EAEvB,SAAS,EAET,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../../../../src/core/llm/providers/implementations/OpenAIProvider.ts"],"names":[],"mappings":"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"}
|