@framers/agentos 0.10.21 → 0.10.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/api/embedText.d.ts +9 -4
- package/dist/api/embedText.d.ts.map +1 -1
- package/dist/api/embedText.js +114 -8
- package/dist/api/embedText.js.map +1 -1
- package/dist/api/generateText.d.ts +14 -1
- package/dist/api/generateText.d.ts.map +1 -1
- package/dist/api/generateText.js +165 -20
- package/dist/api/generateText.js.map +1 -1
- package/dist/api/model.d.ts +25 -1
- package/dist/api/model.d.ts.map +1 -1
- package/dist/api/model.js +105 -3
- package/dist/api/model.js.map +1 -1
- package/dist/api/runtime/global-default.d.ts +9 -1
- package/dist/api/runtime/global-default.d.ts.map +1 -1
- package/dist/api/runtime/global-default.js.map +1 -1
- package/dist/api/runtime/provider-defaults.d.ts.map +1 -1
- package/dist/api/runtime/provider-defaults.js +11 -4
- package/dist/api/runtime/provider-defaults.js.map +1 -1
- package/dist/api/runtime/tool-emulation/history.d.ts +16 -0
- package/dist/api/runtime/tool-emulation/history.d.ts.map +1 -0
- package/dist/api/runtime/tool-emulation/history.js +89 -0
- package/dist/api/runtime/tool-emulation/history.js.map +1 -0
- package/dist/api/runtime/tool-emulation/index.d.ts +1 -0
- package/dist/api/runtime/tool-emulation/index.d.ts.map +1 -1
- package/dist/api/runtime/tool-emulation/index.js +1 -0
- package/dist/api/runtime/tool-emulation/index.js.map +1 -1
- package/dist/api/runtime/tool-emulation/loop.d.ts +6 -0
- package/dist/api/runtime/tool-emulation/loop.d.ts.map +1 -1
- package/dist/api/runtime/tool-emulation/loop.js +1 -0
- package/dist/api/runtime/tool-emulation/loop.js.map +1 -1
- package/dist/api/sessionTranscript.d.ts +40 -0
- package/dist/api/sessionTranscript.d.ts.map +1 -1
- package/dist/api/sessionTranscript.js +61 -1
- package/dist/api/sessionTranscript.js.map +1 -1
- package/dist/api/streamText.d.ts.map +1 -1
- package/dist/api/streamText.js +28 -7
- package/dist/api/streamText.js.map +1 -1
- package/dist/cognition/substrate/ConversationHistoryManager.d.ts.map +1 -1
- package/dist/cognition/substrate/ConversationHistoryManager.js +2 -0
- package/dist/cognition/substrate/ConversationHistoryManager.js.map +1 -1
- package/dist/cognition/substrate/GMI.d.ts.map +1 -1
- package/dist/cognition/substrate/GMI.js +3 -1
- package/dist/cognition/substrate/GMI.js.map +1 -1
- package/dist/cognition/substrate/IGMI.d.ts +5 -0
- package/dist/cognition/substrate/IGMI.d.ts.map +1 -1
- package/dist/cognition/substrate/IGMI.js.map +1 -1
- package/dist/core/llm/PromptEngine.d.ts.map +1 -1
- package/dist/core/llm/PromptEngine.js +1 -0
- package/dist/core/llm/PromptEngine.js.map +1 -1
- package/dist/core/llm/providers/AIModelProviderManager.d.ts +20 -0
- package/dist/core/llm/providers/AIModelProviderManager.d.ts.map +1 -1
- package/dist/core/llm/providers/AIModelProviderManager.js +35 -5
- package/dist/core/llm/providers/AIModelProviderManager.js.map +1 -1
- package/dist/core/llm/providers/IProvider.d.ts +9 -0
- package/dist/core/llm/providers/IProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/errors/GeminiProviderError.d.ts +11 -0
- package/dist/core/llm/providers/errors/GeminiProviderError.d.ts.map +1 -1
- package/dist/core/llm/providers/errors/GeminiProviderError.js.map +1 -1
- package/dist/core/llm/providers/implementations/AnthropicProvider.d.ts +27 -6
- package/dist/core/llm/providers/implementations/AnthropicProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/AnthropicProvider.js +107 -19
- package/dist/core/llm/providers/implementations/AnthropicProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/ClaudeCodeProvider.d.ts +1 -1
- package/dist/core/llm/providers/implementations/ClaudeCodeProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/ClaudeCodeProvider.js +70 -7
- package/dist/core/llm/providers/implementations/ClaudeCodeProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/GeminiCLIBridge.js +1 -1
- package/dist/core/llm/providers/implementations/GeminiCLIProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/GeminiCLIProvider.js +56 -4
- package/dist/core/llm/providers/implementations/GeminiCLIProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/GeminiProvider.d.ts +20 -4
- package/dist/core/llm/providers/implementations/GeminiProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/GeminiProvider.js +352 -56
- package/dist/core/llm/providers/implementations/GeminiProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/MistralProvider.d.ts +11 -0
- package/dist/core/llm/providers/implementations/MistralProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/MistralProvider.js +32 -2
- package/dist/core/llm/providers/implementations/MistralProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/OllamaProvider.js +7 -7
- package/dist/core/llm/providers/implementations/OllamaProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/OpenAIProvider.d.ts +61 -0
- package/dist/core/llm/providers/implementations/OpenAIProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/OpenAIProvider.js +171 -29
- package/dist/core/llm/providers/implementations/OpenAIProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/OpenRouterProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/OpenRouterProvider.js +14 -5
- package/dist/core/llm/providers/implementations/OpenRouterProvider.js.map +1 -1
- package/dist/core/llm/providers/implementations/TogetherProvider.d.ts +3 -3
- package/dist/core/llm/providers/implementations/TogetherProvider.d.ts.map +1 -1
- package/dist/core/llm/providers/implementations/TogetherProvider.js +25 -13
- package/dist/core/llm/providers/implementations/TogetherProvider.js.map +1 -1
- package/dist/core/llm/providers/model-forced-tool-choice.d.ts +32 -15
- package/dist/core/llm/providers/model-forced-tool-choice.d.ts.map +1 -1
- package/dist/core/llm/providers/model-forced-tool-choice.js +33 -16
- package/dist/core/llm/providers/model-forced-tool-choice.js.map +1 -1
- package/dist/core/llm/providers/openrouter-only-params.d.ts +26 -7
- package/dist/core/llm/providers/openrouter-only-params.d.ts.map +1 -1
- package/dist/core/llm/providers/openrouter-only-params.js +58 -9
- package/dist/core/llm/providers/openrouter-only-params.js.map +1 -1
- package/dist/core/llm/providers/url-secrets.d.ts +42 -0
- package/dist/core/llm/providers/url-secrets.d.ts.map +1 -0
- package/dist/core/llm/providers/url-secrets.js +64 -0
- package/dist/core/llm/providers/url-secrets.js.map +1 -0
- package/dist/core/llm/streaming/StreamingBatcher.d.ts.map +1 -1
- package/dist/core/llm/streaming/StreamingBatcher.js +3 -0
- package/dist/core/llm/streaming/StreamingBatcher.js.map +1 -1
- package/dist/core/llm/streaming/StreamingReconstructor.d.ts +2 -0
- package/dist/core/llm/streaming/StreamingReconstructor.d.ts.map +1 -1
- package/dist/core/llm/streaming/StreamingReconstructor.js +12 -1
- package/dist/core/llm/streaming/StreamingReconstructor.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/io/vision/providers/LLMVisionProvider.d.ts +2 -2
- package/dist/io/vision/providers/LLMVisionProvider.js +1 -1
- package/dist/io/vision/types.d.ts +1 -1
- package/dist/orchestration/pipeline/query/types.d.ts.map +1 -1
- package/dist/orchestration/pipeline/query/types.js +5 -4
- package/dist/orchestration/pipeline/query/types.js.map +1 -1
- package/dist/orchestration/planning/ProviderAssignmentEngine.d.ts.map +1 -1
- package/dist/orchestration/planning/ProviderAssignmentEngine.js +4 -3
- package/dist/orchestration/planning/ProviderAssignmentEngine.js.map +1 -1
- package/package.json +1 -1
package/dist/api/model.d.ts
CHANGED
|
@@ -136,6 +136,25 @@ export interface ModelOption {
|
|
|
136
136
|
* or the provider has no default model for the requested task.
|
|
137
137
|
*/
|
|
138
138
|
export declare function resolveModelOption(opts: ModelOption, task?: TaskType): ParsedModel;
|
|
139
|
+
/**
|
|
140
|
+
* Thrown by {@link createProviderManager} when the requested provider did not
|
|
141
|
+
* initialize: a rejected or revoked API key (the provider's model listing
|
|
142
|
+
* answers 401), an unreachable endpoint, or a provider id the manager does
|
|
143
|
+
* not know. The fallback walker treats it as retryable, so a primary whose
|
|
144
|
+
* key stopped working fails over like one that answers 401 on the call.
|
|
145
|
+
*
|
|
146
|
+
* `httpStatus` repeats the cause's HTTP status when it has one, which the
|
|
147
|
+
* provider health registry uses to pick its cooldown.
|
|
148
|
+
*/
|
|
149
|
+
export declare class ProviderInitializationError extends Error {
|
|
150
|
+
/** Provider that failed to initialize. */
|
|
151
|
+
readonly providerId: string;
|
|
152
|
+
/** HTTP status of the underlying failure, when it had one. */
|
|
153
|
+
readonly httpStatus?: number;
|
|
154
|
+
/** The error the provider threw during initialization, when there was one. */
|
|
155
|
+
readonly cause?: unknown;
|
|
156
|
+
constructor(providerId: string, cause?: unknown);
|
|
157
|
+
}
|
|
139
158
|
/**
|
|
140
159
|
* Instantiates and initialises an {@link AIModelProviderManager} for a single provider.
|
|
141
160
|
*
|
|
@@ -145,11 +164,16 @@ export declare function resolveModelOption(opts: ModelOption, task?: TaskType):
|
|
|
145
164
|
*
|
|
146
165
|
* The manager is cached process-wide by resolved key + base URL, so repeated
|
|
147
166
|
* calls with the same credentials reuse one manager instead of allocating
|
|
148
|
-
* a new one per LLM call.
|
|
167
|
+
* a new one per LLM call. A provider that fails to initialize is not cached:
|
|
168
|
+
* the call throws and the next call with the same credentials initializes
|
|
169
|
+
* again, so a transient failure (a network blip, a 503 from the model
|
|
170
|
+
* listing) does not disable the provider for the life of the process.
|
|
149
171
|
*
|
|
150
172
|
* @param resolved - A `ResolvedProvider` produced by {@link resolveProvider}
|
|
151
173
|
* or `resolveMediaProvider()`.
|
|
152
174
|
* @returns A fully initialised {@link AIModelProviderManager} instance.
|
|
175
|
+
* @throws {ProviderInitializationError} When the requested provider did not
|
|
176
|
+
* initialize.
|
|
153
177
|
*/
|
|
154
178
|
export declare function createProviderManager(resolved: ResolvedProvider): Promise<AIModelProviderManager>;
|
|
155
179
|
//# sourceMappingURL=model.d.ts.map
|
package/dist/api/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/api/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAIzF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,4EAA4E;IAC5E,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gGAAgG;IAChG,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,yFAAyF;IACzF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA0BD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAY3D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,gBAAgB,CAsDlB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,gBAAgB,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/api/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAIzF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,4EAA4E;IAC5E,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gGAAgG;IAChG,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,yFAAyF;IACzF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA0BD;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAY3D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,gBAAgB,CAsDlB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,gBAAgB,CAsClB;AAMD;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,GAAE,QAAiB,GAAG,WAAW,CAgF1F;AAmDD;;;;;;;;;GASG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,0CAA0C;IAC1C,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,8DAA8D;IAC9D,SAAgB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpC,8EAA8E;IAC9E,SAAgB,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEpB,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAchD;AAgBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC,sBAAsB,CAAC,CA4CjC"}
|
package/dist/api/model.js
CHANGED
|
@@ -132,9 +132,17 @@ export function resolveProvider(providerId, modelId, overrides) {
|
|
|
132
132
|
* @throws {Error} When a known provider is missing its required API key or base URL.
|
|
133
133
|
*/
|
|
134
134
|
export function resolveMediaProvider(providerId, modelId, overrides) {
|
|
135
|
+
// The global default's credentials apply when it names this provider, as
|
|
136
|
+
// in resolveProvider. A default without a provider does not lend its key
|
|
137
|
+
// here: media calls auto-detect across vendors (Stability, Replicate, ...)
|
|
138
|
+
// and would send that key to the wrong one.
|
|
139
|
+
const def = getDefaultProvider();
|
|
140
|
+
const defAppliesToThisProvider = def?.provider === providerId;
|
|
135
141
|
const apiKey = overrides?.apiKey ??
|
|
142
|
+
(defAppliesToThisProvider ? def?.apiKey : undefined) ??
|
|
136
143
|
(ENV_KEY_MAP[providerId] ? process.env[ENV_KEY_MAP[providerId]] : undefined);
|
|
137
144
|
const baseUrl = overrides?.baseUrl ??
|
|
145
|
+
(defAppliesToThisProvider ? def?.baseUrl : undefined) ??
|
|
138
146
|
(ENV_URL_MAP[providerId] ? process.env[ENV_URL_MAP[providerId]] : undefined);
|
|
139
147
|
if (providerId === 'ollama') {
|
|
140
148
|
if (!baseUrl) {
|
|
@@ -177,11 +185,25 @@ export function resolveModelOption(opts, task = 'text') {
|
|
|
177
185
|
// Apply global default for `provider` / `model` when neither is inlined.
|
|
178
186
|
// Inline opts always win; the default kicks in only when the caller
|
|
179
187
|
// supplied nothing. Env-var auto-detect happens later as a final
|
|
180
|
-
// fallback if the default also doesn't pin a provider.
|
|
188
|
+
// fallback if the default also doesn't pin a provider. The default's
|
|
189
|
+
// model applies only to a task it can serve (see globalModelForTask);
|
|
190
|
+
// otherwise the provider's default model for the task is used.
|
|
181
191
|
if (!opts.provider && !opts.model) {
|
|
182
192
|
const def = getDefaultProvider();
|
|
183
193
|
if (def?.provider) {
|
|
184
|
-
|
|
194
|
+
// A custom endpoint (the default's baseUrl, an inline baseUrl on
|
|
195
|
+
// callers such as embedText, or the provider's base-URL env var) may
|
|
196
|
+
// serve any model under any name, so the default's model stays.
|
|
197
|
+
const inlineBaseUrl = opts.baseUrl;
|
|
198
|
+
const envBaseUrlVar = def.provider ? ENV_URL_MAP[def.provider] : undefined;
|
|
199
|
+
const customEndpoint = Boolean(def.baseUrl ||
|
|
200
|
+
(typeof inlineBaseUrl === 'string' && inlineBaseUrl) ||
|
|
201
|
+
(envBaseUrlVar && process.env[envBaseUrlVar]));
|
|
202
|
+
opts = {
|
|
203
|
+
...opts,
|
|
204
|
+
provider: def.provider,
|
|
205
|
+
model: customEndpoint ? def.model : globalModelForTask(def, task),
|
|
206
|
+
};
|
|
185
207
|
}
|
|
186
208
|
}
|
|
187
209
|
// 1. Explicit model string (backwards compat and direct override)
|
|
@@ -230,6 +252,38 @@ export function resolveModelOption(opts, task = 'text') {
|
|
|
230
252
|
}
|
|
231
253
|
throw new Error('Either "provider" or "model" is required. Or configure a supported runtime (API key env var, Claude Code CLI, Gemini CLI, etc.).');
|
|
232
254
|
}
|
|
255
|
+
/**
|
|
256
|
+
* Chat model families, optionally behind a gateway prefix such as `openai/`
|
|
257
|
+
* or `meta-llama/`.
|
|
258
|
+
*/
|
|
259
|
+
const CHAT_MODEL_FAMILY = /^(?:[\w.-]+\/)?(?:gpt-|chatgpt|o\d|claude|gemini|gemma|llama|mistral|mixtral|codestral|ministral|magistral|grok|deepseek|qwen|command|phi-|sonar|kimi|glm)/i;
|
|
260
|
+
/** Names that mark a non-chat model inside a chat family (gpt-image-1, gemini-embedding-2). */
|
|
261
|
+
const NON_CHAT_MODEL_MARKER = /embed|image|dall-e|imagen|tts|whisper|transcri|audio|realtime|moderation/i;
|
|
262
|
+
/**
|
|
263
|
+
* The global default's model when it can serve `task` on the provider's own
|
|
264
|
+
* endpoint (a custom endpoint keeps the default's model; see
|
|
265
|
+
* resolveModelOption). The default model is the text model (`generateText`,
|
|
266
|
+
* agents). An embedding or image call drops it only when it is recognizably
|
|
267
|
+
* a chat model, which would fail there (the provider's default model for the
|
|
268
|
+
* task applies instead); any other name is kept, since it may be an embedding
|
|
269
|
+
* or image model. An embedding call on Ollama keeps any model: Ollama embeds
|
|
270
|
+
* with whatever model is pulled, and forcing nomic-embed-text would break
|
|
271
|
+
* hosts that never pulled it.
|
|
272
|
+
*
|
|
273
|
+
* @param def - The global default provider config.
|
|
274
|
+
* @param task - The task being resolved.
|
|
275
|
+
* @returns The model to apply, or undefined to use the provider's task default.
|
|
276
|
+
*/
|
|
277
|
+
function globalModelForTask(def, task) {
|
|
278
|
+
if (!def.model)
|
|
279
|
+
return undefined;
|
|
280
|
+
if (task === 'text')
|
|
281
|
+
return def.model;
|
|
282
|
+
if (task === 'embedding' && def.provider === 'ollama')
|
|
283
|
+
return def.model;
|
|
284
|
+
const isChatModel = CHAT_MODEL_FAMILY.test(def.model) && !NON_CHAT_MODEL_MARKER.test(def.model);
|
|
285
|
+
return isChatModel ? undefined : def.model;
|
|
286
|
+
}
|
|
233
287
|
// ---------------------------------------------------------------------------
|
|
234
288
|
/**
|
|
235
289
|
* Process-scoped cache of initialised {@link AIModelProviderManager}
|
|
@@ -241,6 +295,43 @@ export function resolveModelOption(opts, task = 'text') {
|
|
|
241
295
|
* configs reuse the same one for the life of the process.
|
|
242
296
|
*/
|
|
243
297
|
const managerCache = new Map();
|
|
298
|
+
/**
|
|
299
|
+
* Thrown by {@link createProviderManager} when the requested provider did not
|
|
300
|
+
* initialize: a rejected or revoked API key (the provider's model listing
|
|
301
|
+
* answers 401), an unreachable endpoint, or a provider id the manager does
|
|
302
|
+
* not know. The fallback walker treats it as retryable, so a primary whose
|
|
303
|
+
* key stopped working fails over like one that answers 401 on the call.
|
|
304
|
+
*
|
|
305
|
+
* `httpStatus` repeats the cause's HTTP status when it has one, which the
|
|
306
|
+
* provider health registry uses to pick its cooldown.
|
|
307
|
+
*/
|
|
308
|
+
export class ProviderInitializationError extends Error {
|
|
309
|
+
constructor(providerId, cause) {
|
|
310
|
+
const detail = cause instanceof Error
|
|
311
|
+
? cause.message
|
|
312
|
+
: cause !== undefined
|
|
313
|
+
? String(cause)
|
|
314
|
+
: 'the provider was not registered';
|
|
315
|
+
super(`Provider '${providerId}' failed to initialize: ${detail}`);
|
|
316
|
+
this.name = 'ProviderInitializationError';
|
|
317
|
+
this.providerId = providerId;
|
|
318
|
+
this.cause = cause;
|
|
319
|
+
const status = httpStatusOf(cause);
|
|
320
|
+
if (status !== undefined)
|
|
321
|
+
this.httpStatus = status;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/** Reads a numeric HTTP status from the fields provider errors use. */
|
|
325
|
+
function httpStatusOf(error) {
|
|
326
|
+
if (!error || typeof error !== 'object')
|
|
327
|
+
return undefined;
|
|
328
|
+
const e = error;
|
|
329
|
+
for (const value of [e.httpStatus, e.status, e.statusCode]) {
|
|
330
|
+
if (typeof value === 'number' && Number.isFinite(value))
|
|
331
|
+
return value;
|
|
332
|
+
}
|
|
333
|
+
return undefined;
|
|
334
|
+
}
|
|
244
335
|
function buildCacheKey(resolved) {
|
|
245
336
|
return `${resolved.providerId}::${resolved.apiKey ?? ''}::${resolved.baseUrl ?? ''}`;
|
|
246
337
|
}
|
|
@@ -253,11 +344,16 @@ function buildCacheKey(resolved) {
|
|
|
253
344
|
*
|
|
254
345
|
* The manager is cached process-wide by resolved key + base URL, so repeated
|
|
255
346
|
* calls with the same credentials reuse one manager instead of allocating
|
|
256
|
-
* a new one per LLM call.
|
|
347
|
+
* a new one per LLM call. A provider that fails to initialize is not cached:
|
|
348
|
+
* the call throws and the next call with the same credentials initializes
|
|
349
|
+
* again, so a transient failure (a network blip, a 503 from the model
|
|
350
|
+
* listing) does not disable the provider for the life of the process.
|
|
257
351
|
*
|
|
258
352
|
* @param resolved - A `ResolvedProvider` produced by {@link resolveProvider}
|
|
259
353
|
* or `resolveMediaProvider()`.
|
|
260
354
|
* @returns A fully initialised {@link AIModelProviderManager} instance.
|
|
355
|
+
* @throws {ProviderInitializationError} When the requested provider did not
|
|
356
|
+
* initialize.
|
|
261
357
|
*/
|
|
262
358
|
export async function createProviderManager(resolved) {
|
|
263
359
|
const key = buildCacheKey(resolved);
|
|
@@ -283,6 +379,12 @@ export async function createProviderManager(resolved) {
|
|
|
283
379
|
},
|
|
284
380
|
],
|
|
285
381
|
});
|
|
382
|
+
// initialize() logs a provider's failure and leaves it unregistered.
|
|
383
|
+
// Surface it with its cause so callers can fail over, and reject so the
|
|
384
|
+
// handler below drops this manager from the cache.
|
|
385
|
+
if (!manager.getProvider(resolved.providerId)) {
|
|
386
|
+
throw new ProviderInitializationError(resolved.providerId, manager.getProviderInitError(resolved.providerId));
|
|
387
|
+
}
|
|
286
388
|
return manager;
|
|
287
389
|
})();
|
|
288
390
|
// Drop from cache if init rejected so the next call retries cleanly
|
package/dist/api/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/api/model.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/api/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,7 +27,15 @@
|
|
|
27
27
|
export interface GlobalDefaultProvider {
|
|
28
28
|
/** Provider identifier (e.g. `"openai"`, `"anthropic"`, `"openrouter"`, `"ollama"`). */
|
|
29
29
|
provider?: string;
|
|
30
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Default text model for this provider (e.g. `"gpt-4o-mini"`), used by
|
|
32
|
+
* `generateText`, `streamText` and agents. Embedding and image calls use it
|
|
33
|
+
* too unless it is recognizably a chat model (GPT, Claude, Gemini, Llama and
|
|
34
|
+
* similar families) sent to the provider's own endpoint, in which case the
|
|
35
|
+
* provider's default model for the task applies. With a custom endpoint
|
|
36
|
+
* (`baseUrl` here, inline, or the provider's base-URL env var), and for
|
|
37
|
+
* `embedText` on Ollama, it is always used.
|
|
38
|
+
*/
|
|
31
39
|
model?: string;
|
|
32
40
|
/** API key used when no inline override is supplied. */
|
|
33
41
|
apiKey?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-default.d.ts","sourceRoot":"","sources":["../../../src/api/runtime/global-default.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB
|
|
1
|
+
{"version":3,"file":"global-default.d.ts","sourceRoot":"","sources":["../../../src/api/runtime/global-default.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAEvE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,qBAAqB,GAAG,SAAS,CAEtE;AAED,uEAAuE;AACvE,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-default.js","sourceRoot":"","sources":["../../../src/api/runtime/global-default.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"global-default.js","sourceRoot":"","sources":["../../../src/api/runtime/global-default.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA4BH,IAAI,cAAiD,CAAC;AAEtD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA8B;IAC/D,cAAc,GAAG,MAAM,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,oBAAoB;IAClC,cAAc,GAAG,SAAS,CAAC;AAC7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-defaults.d.ts","sourceRoot":"","sources":["../../../src/api/runtime/provider-defaults.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,yDAAyD;AACzD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEjE;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"provider-defaults.d.ts","sourceRoot":"","sources":["../../../src/api/runtime/provider-defaults.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,yDAAyD;AACzD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEjE;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAuE9D,CAAC;AAwDF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,MAAM,GAAG,SAAS,CAmBjF"}
|
|
@@ -37,7 +37,9 @@ export const PROVIDER_DEFAULTS = {
|
|
|
37
37
|
},
|
|
38
38
|
gemini: {
|
|
39
39
|
text: 'gemini-2.5-flash',
|
|
40
|
-
|
|
40
|
+
// gemini-2.0-flash returns HTTP 404 "no longer available" (probed
|
|
41
|
+
// 2026-09-29). gemini-2.5-flash-lite is the cheapest Gemini model served.
|
|
42
|
+
cheap: 'gemini-2.5-flash-lite',
|
|
41
43
|
},
|
|
42
44
|
'claude-code-cli': {
|
|
43
45
|
text: 'claude-sonnet-4-6',
|
|
@@ -45,7 +47,9 @@ export const PROVIDER_DEFAULTS = {
|
|
|
45
47
|
},
|
|
46
48
|
'gemini-cli': {
|
|
47
49
|
text: 'gemini-2.5-flash',
|
|
48
|
-
|
|
50
|
+
// gemini-2.0-flash-lite fails in the CLI with ModelNotFoundError (probed
|
|
51
|
+
// 2026-09-29), while gemini-2.5-flash-lite is served as requested.
|
|
52
|
+
cheap: 'gemini-2.5-flash-lite',
|
|
49
53
|
},
|
|
50
54
|
stability: {
|
|
51
55
|
image: 'stable-diffusion-xl-1024-v1-0',
|
|
@@ -67,8 +71,11 @@ export const PROVIDER_DEFAULTS = {
|
|
|
67
71
|
cheap: 'gemma2-9b-it',
|
|
68
72
|
},
|
|
69
73
|
together: {
|
|
70
|
-
|
|
71
|
-
cheap:
|
|
74
|
+
// The Llama 3.1 Turbo ids left Together serverless in 2026-02/03. The
|
|
75
|
+
// cheap slot stays on a non-reasoning model: the cheaper served picks
|
|
76
|
+
// reason by default and can spend a small maxTokens budget on the trace.
|
|
77
|
+
text: 'meta-llama/Llama-3.3-70B-Instruct-Turbo',
|
|
78
|
+
cheap: 'meta-llama/Llama-3.3-70B-Instruct-Turbo',
|
|
72
79
|
},
|
|
73
80
|
mistral: {
|
|
74
81
|
text: 'mistral-large-latest',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-defaults.js","sourceRoot":"","sources":["../../../src/api/runtime/provider-defaults.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAoB7D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqC;IACjE,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,wBAAwB;QACnC,KAAK,EAAE,aAAa;KACrB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,2BAA2B;KACnC;IACD,MAAM,EAAE;QACN,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,kBAAkB;QACzB,SAAS,EAAE,kBAAkB;QAC7B,KAAK,EAAE,UAAU;KAClB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,oBAAoB;KAC5B;IACD,MAAM,EAAE;QACN,IAAI,EAAE,kBAAkB;QACxB,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"provider-defaults.js","sourceRoot":"","sources":["../../../src/api/runtime/provider-defaults.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAoB7D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqC;IACjE,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,wBAAwB;QACnC,KAAK,EAAE,aAAa;KACrB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,2BAA2B;KACnC;IACD,MAAM,EAAE;QACN,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,kBAAkB;QACzB,SAAS,EAAE,kBAAkB;QAC7B,KAAK,EAAE,UAAU;KAClB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,eAAe;QACrB,KAAK,EAAE,oBAAoB;KAC5B;IACD,MAAM,EAAE;QACN,IAAI,EAAE,kBAAkB;QACxB,kEAAkE;QAClE,0EAA0E;QAC1E,KAAK,EAAE,uBAAuB;KAC/B;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,2BAA2B;KACnC;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,kBAAkB;QACxB,yEAAyE;QACzE,mEAAmE;QACnE,KAAK,EAAE,uBAAuB;KAC/B;IACD,SAAS,EAAE;QACT,KAAK,EAAE,+BAA+B;KACvC;IACD,SAAS,EAAE;QACT,KAAK,EAAE,gCAAgC;KACxC;IACD,wBAAwB,EAAE;QACxB,KAAK,EAAE,qBAAqB;KAC7B;IACD,GAAG,EAAE;QACH,KAAK,EAAE,cAAc;KACtB;IACD,GAAG,EAAE;QACH,KAAK,EAAE,iBAAiB;KACzB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,yBAAyB;QAC/B,KAAK,EAAE,cAAc;KACtB;IACD,QAAQ,EAAE;QACR,sEAAsE;QACtE,sEAAsE;QACtE,yEAAyE;QACzE,IAAI,EAAE,yCAAyC;QAC/C,KAAK,EAAE,yCAAyC;KACjD;IACD,OAAO,EAAE;QACP,IAAI,EAAE,sBAAsB;QAC5B,KAAK,EAAE,sBAAsB;KAC9B;IACD,GAAG,EAAE;QACH,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,aAAa;KACrB;CACF,CAAC;AAOF;;;;;;;;;;GAUG;AACH,MAAM,iBAAiB,GAAsB;IAC3C,iEAAiE;IACjE,iEAAiE;IACjE,oEAAoE;IACpE,oEAAoE;IACpE,mEAAmE;IACnE,YAAY;IACZ,EAAE,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,YAAY,EAAE;IACxD,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAChD,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,WAAW,EAAE;IACtD,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAChD,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE;IAC5C,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE;IACpD,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,EAAE;IAClD,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC1C,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE;IACrD,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE;IAChD,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACjD,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,WAAW,EAAE;IACtD,EAAE,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,WAAW,EAAE;IACxD,EAAE,MAAM,EAAE,iCAAiC,EAAE,QAAQ,EAAE,wBAAwB,EAAE;IACjF,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC1C,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE;CAC3C,CAAC;AAEF,SAAS,cAAc,CAAC,UAAkB;IACxC,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACvE,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,sEAAsE;AACtE,sEAAsE;AACtE,kDAAkD;AAClD,MAAM,iBAAiB,GAAoC,MAAM,CAAC,WAAW,CAC3E,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAC1D,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA0B;IAC3D,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAsB,WAAW;QAC1C,CAAC,CAAC,WAAW;aACR,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;aAChC,MAAM,CAAC,CAAC,KAAK,EAA4B,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAChE,CAAC,CAAC,iBAAiB,CAAC;IAEtB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,QAAQ,IAAI,KAAK;YACjC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAErC,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;QAC3B,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC;YAAE,SAAS;QAC3D,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { EmulatedLoopMessage } from './loop';
|
|
2
|
+
/**
|
|
3
|
+
* Renders a chat history for the prompt-tool shim, which sends plain
|
|
4
|
+
* role/content text. An assistant turn's native tool calls become
|
|
5
|
+
* `<tool_call>` blocks after its text, and each run of tool results becomes
|
|
6
|
+
* one user turn of `<tool_response>` blocks, the shape the shim records for
|
|
7
|
+
* its own rounds. A history that holds native tool turns (a session
|
|
8
|
+
* transcript, or a failover that continues after completed tool rounds)
|
|
9
|
+
* otherwise reaches the model as `tool` messages with nothing to pair with,
|
|
10
|
+
* which OpenAI-compatible APIs reject.
|
|
11
|
+
*
|
|
12
|
+
* @param messages Request messages in the native chat shape.
|
|
13
|
+
* @returns The same conversation as shim messages.
|
|
14
|
+
*/
|
|
15
|
+
export declare function toShimMessages(messages: ReadonlyArray<Record<string, unknown>>): EmulatedLoopMessage[];
|
|
16
|
+
//# sourceMappingURL=history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../../src/api/runtime/tool-emulation/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC/C,mBAAmB,EAAE,CAoCvB"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders a chat history for the prompt-tool shim, which sends plain
|
|
3
|
+
* role/content text. An assistant turn's native tool calls become
|
|
4
|
+
* `<tool_call>` blocks after its text, and each run of tool results becomes
|
|
5
|
+
* one user turn of `<tool_response>` blocks, the shape the shim records for
|
|
6
|
+
* its own rounds. A history that holds native tool turns (a session
|
|
7
|
+
* transcript, or a failover that continues after completed tool rounds)
|
|
8
|
+
* otherwise reaches the model as `tool` messages with nothing to pair with,
|
|
9
|
+
* which OpenAI-compatible APIs reject.
|
|
10
|
+
*
|
|
11
|
+
* @param messages Request messages in the native chat shape.
|
|
12
|
+
* @returns The same conversation as shim messages.
|
|
13
|
+
*/
|
|
14
|
+
export function toShimMessages(messages) {
|
|
15
|
+
const out = [];
|
|
16
|
+
// Tool names by call id, so a result without a name still names its call.
|
|
17
|
+
const toolNameByCallId = new Map();
|
|
18
|
+
let openToolResponses;
|
|
19
|
+
for (const m of messages) {
|
|
20
|
+
const text = contentText(m.content);
|
|
21
|
+
if (m.role === 'tool') {
|
|
22
|
+
const callId = typeof m.tool_call_id === 'string' ? m.tool_call_id : undefined;
|
|
23
|
+
const name = (typeof m.name === 'string' && m.name) || (callId ? toolNameByCallId.get(callId) : undefined) || '';
|
|
24
|
+
// The call id and name travel in the envelope, so results that arrive
|
|
25
|
+
// in a different order than their calls stay matched.
|
|
26
|
+
const block = `<tool_response>${JSON.stringify({ id: callId, name, output: parsedOrText(text) })}</tool_response>`;
|
|
27
|
+
if (openToolResponses) {
|
|
28
|
+
openToolResponses.content += `\n${block}`;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
openToolResponses = { role: 'user', content: block };
|
|
32
|
+
out.push(openToolResponses);
|
|
33
|
+
}
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
openToolResponses = undefined;
|
|
37
|
+
const toolCalls = m.role === 'assistant' && Array.isArray(m.tool_calls) ? m.tool_calls : [];
|
|
38
|
+
if (toolCalls.length > 0) {
|
|
39
|
+
const blocks = toolCalls.map((tc) => {
|
|
40
|
+
const payload = toolCallPayload(tc);
|
|
41
|
+
if (payload.id)
|
|
42
|
+
toolNameByCallId.set(payload.id, payload.name);
|
|
43
|
+
return `<tool_call>${JSON.stringify(payload)}</tool_call>`;
|
|
44
|
+
});
|
|
45
|
+
out.push({ role: 'assistant', content: [text, ...blocks].filter(Boolean).join('\n') });
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
out.push({ role: String(m.role), content: text });
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
/** Text of a message's content: strings as they are, other values as JSON. */
|
|
53
|
+
function contentText(content) {
|
|
54
|
+
if (typeof content === 'string')
|
|
55
|
+
return content;
|
|
56
|
+
if (content === null || content === undefined)
|
|
57
|
+
return '';
|
|
58
|
+
return JSON.stringify(content);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The `{name, arguments, id}` payload of a native tool call, arguments parsed
|
|
62
|
+
* when they are JSON. The shim's parser reads `name` and `arguments`; `id`
|
|
63
|
+
* pairs the call with its result.
|
|
64
|
+
*/
|
|
65
|
+
function toolCallPayload(toolCall) {
|
|
66
|
+
const tc = toolCall;
|
|
67
|
+
const fn = tc?.function;
|
|
68
|
+
const name = typeof fn?.name === 'string' ? fn.name : '';
|
|
69
|
+
let args = fn?.arguments ?? {};
|
|
70
|
+
if (typeof args === 'string') {
|
|
71
|
+
try {
|
|
72
|
+
args = JSON.parse(args);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Keep the raw argument text; the model still sees what was called.
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return { name, arguments: args, ...(typeof tc?.id === 'string' ? { id: tc.id } : {}) };
|
|
79
|
+
}
|
|
80
|
+
/** A tool result's JSON value when its text is JSON, else the text. */
|
|
81
|
+
function parsedOrText(text) {
|
|
82
|
+
try {
|
|
83
|
+
return JSON.parse(text);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return text;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"","sources":["../../../../src/api/runtime/tool-emulation/history.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAgD;IAEhD,MAAM,GAAG,GAA0B,EAAE,CAAC;IACtC,0EAA0E;IAC1E,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACnD,IAAI,iBAAkD,CAAC;IACvD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/E,MAAM,IAAI,GACR,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACtG,sEAAsE;YACtE,sDAAsD;YACtD,MAAM,KAAK,GAAG,kBAAkB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC;YACnH,IAAI,iBAAiB,EAAE,CAAC;gBACtB,iBAAiB,CAAC,OAAO,IAAI,KAAK,KAAK,EAAE,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,iBAAiB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;gBACrD,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,CAAC;YACD,SAAS;QACX,CAAC;QACD,iBAAiB,GAAG,SAAS,CAAC;QAC9B,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;gBAClC,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAI,OAAO,CAAC,EAAE;oBAAE,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC/D,OAAO,cAAc,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC;YAC7D,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvF,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,SAAS,WAAW,CAAC,OAAgB;IACnC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACzD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,QAAiB;IACxC,MAAM,EAAE,GAAG,QAAuF,CAAC;IACnG,MAAM,EAAE,GAAG,EAAE,EAAE,QAAQ,CAAC;IACxB,MAAM,IAAI,GAAG,OAAO,EAAE,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,IAAI,IAAI,GAAY,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC;IACxC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;QACtE,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACzF,CAAC;AAED,uEAAuE;AACvE,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/runtime/tool-emulation/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/runtime/tool-emulation/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/runtime/tool-emulation/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/runtime/tool-emulation/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC"}
|
|
@@ -21,6 +21,12 @@ export interface RunEmulatedToolLoopOptions {
|
|
|
21
21
|
maxRoundtrips: number;
|
|
22
22
|
/** Execution context passed to each tool.execute(). */
|
|
23
23
|
toolContext?: ToolExecutionContext;
|
|
24
|
+
/**
|
|
25
|
+
* Called with the tool's name right before a parsed call runs the tool.
|
|
26
|
+
* Callers use it to learn that a tool had side effects, for example to
|
|
27
|
+
* refuse a failover that would run the call again.
|
|
28
|
+
*/
|
|
29
|
+
onToolExecute?: (toolName: string) => void;
|
|
24
30
|
}
|
|
25
31
|
export interface EmulatedToolLoopResult {
|
|
26
32
|
text: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../../../src/api/runtime/tool-emulation/loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAK7E,MAAM,WAAW,mBAAmB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;CAAE;AAEvE,MAAM,WAAW,sBAAsB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAAE;AAExG,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,oEAAoE;IACpE,SAAS,EAAE,CAAC,QAAQ,EAAE,mBAAmB,EAAE,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE;YAAE,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IAC5G,aAAa,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,WAAW,CAAC,EAAE,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../../../src/api/runtime/tool-emulation/loop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAK7E,MAAM,WAAW,mBAAmB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;CAAE;AAEvE,MAAM,WAAW,sBAAsB;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAAE;AAExG,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,oEAAoE;IACpE,SAAS,EAAE,CAAC,QAAQ,EAAE,mBAAmB,EAAE,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE;YAAE,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IAC5G,aAAa,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,sBAAsB,EAAE,CAAC;IACpC,YAAY,EAAE,MAAM,GAAG,YAAY,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,sBAAsB,CAAC,CAiDjC"}
|
|
@@ -34,6 +34,7 @@ export async function runEmulatedToolLoop(opts) {
|
|
|
34
34
|
return formatToolResponse(call.name, { success: false, error: `unknown tool "${call.name}"` });
|
|
35
35
|
}
|
|
36
36
|
try {
|
|
37
|
+
opts.onToolExecute?.(call.name);
|
|
37
38
|
const result = await tool.execute(call.arguments, opts.toolContext);
|
|
38
39
|
toolCalls.push({ name: call.name, args: call.arguments });
|
|
39
40
|
return formatToolResponse(call.name, result);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../../src/api/runtime/tool-emulation/loop.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../../src/api/runtime/tool-emulation/loop.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* tool_result follows its tool_use, and signed thinking blocks replay
|
|
9
9
|
* byte-exact (Anthropic rejects edited signatures).
|
|
10
10
|
*/
|
|
11
|
+
import type { ThinkingBlock } from '../core/llm/providers/IProvider.js';
|
|
11
12
|
/** One function tool call recorded on an assistant turn. */
|
|
12
13
|
export interface TranscriptToolCall {
|
|
13
14
|
id: string;
|
|
@@ -16,6 +17,12 @@ export interface TranscriptToolCall {
|
|
|
16
17
|
name: string;
|
|
17
18
|
arguments: string;
|
|
18
19
|
};
|
|
20
|
+
/**
|
|
21
|
+
* Gemini thought signature for this call, recorded with the call so a
|
|
22
|
+
* checkpoint and `reseed` keep it. Gemini 3 requires the signature back when
|
|
23
|
+
* the call is replayed to it.
|
|
24
|
+
*/
|
|
25
|
+
thoughtSignature?: string;
|
|
19
26
|
}
|
|
20
27
|
/** Opaque provider thinking payload; replayed verbatim, never edited. */
|
|
21
28
|
export interface TranscriptThinking {
|
|
@@ -33,6 +40,12 @@ export type SessionTranscriptMessage = {
|
|
|
33
40
|
content: unknown;
|
|
34
41
|
tool_calls?: TranscriptToolCall[];
|
|
35
42
|
thinking?: TranscriptThinking;
|
|
43
|
+
/**
|
|
44
|
+
* Provider thinking blocks as `generateText` recorded them (Anthropic
|
|
45
|
+
* extended thinking, signatures intact). Replayed verbatim; takes
|
|
46
|
+
* precedence over `thinking` when both are present.
|
|
47
|
+
*/
|
|
48
|
+
thinkingBlocks?: ThinkingBlock[];
|
|
36
49
|
} | {
|
|
37
50
|
role: 'tool';
|
|
38
51
|
tool_call_id: string;
|
|
@@ -60,4 +73,31 @@ export declare function validateTranscriptPairing(messages: readonly SessionTran
|
|
|
60
73
|
* histories.
|
|
61
74
|
*/
|
|
62
75
|
export declare function transcriptTokenText(messages: readonly SessionTranscriptMessage[]): string;
|
|
76
|
+
/**
|
|
77
|
+
* Builds the provider request message for one caller-supplied history entry.
|
|
78
|
+
*
|
|
79
|
+
* `generateText` and `streamText` copy caller messages into the request. A
|
|
80
|
+
* session replays its transcript through that path, so the copy must keep the
|
|
81
|
+
* fields that pair a tool result with its call: the assistant turn's
|
|
82
|
+
* `tool_calls` (each with its Gemini `thoughtSignature`), the tool turn's
|
|
83
|
+
* `tool_call_id`, and the assistant turn's thinking. Without them the request
|
|
84
|
+
* after a tool round holds an orphaned tool result, which OpenAI, Anthropic
|
|
85
|
+
* and Gemini reject with HTTP 400.
|
|
86
|
+
*
|
|
87
|
+
* Thinking arrives in one of two shapes. A transcript recorded by
|
|
88
|
+
* `generateText` carries the provider's `thinkingBlocks` array, which is
|
|
89
|
+
* copied as is. A caller-built snapshot (for `reseed`) uses the documented
|
|
90
|
+
* {@link TranscriptThinking}: a `redacted` payload becomes a
|
|
91
|
+
* `redacted_thinking` block, and signed text becomes a `thinking` block.
|
|
92
|
+
* Unsigned thinking is dropped, because Anthropic only accepts thinking it
|
|
93
|
+
* signed and the other providers ignore it.
|
|
94
|
+
*
|
|
95
|
+
* @param message - A public `Message` or a {@link SessionTranscriptMessage}.
|
|
96
|
+
* @returns The request message, with replay fields present only when the
|
|
97
|
+
* entry carried them.
|
|
98
|
+
*/
|
|
99
|
+
export declare function toProviderReplayMessage(message: {
|
|
100
|
+
role: string;
|
|
101
|
+
content?: unknown;
|
|
102
|
+
}): Record<string, unknown>;
|
|
63
103
|
//# sourceMappingURL=sessionTranscript.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionTranscript.d.ts","sourceRoot":"","sources":["../../src/api/sessionTranscript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"sessionTranscript.d.ts","sourceRoot":"","sources":["../../src/api/sessionTranscript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAExE,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,yEAAyE;AACzE,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAClC;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC,GACD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1E;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,SAAS,wBAAwB,EAAE,GAC5C,cAAc,CA4BhB;AAKD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,wBAAwB,EAAE,GAAG,MAAM,CAwBzF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAa1B"}
|