@dexto/core 1.6.0 → 1.6.2
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/agent/DextoAgent.cjs +79 -5
- package/dist/agent/DextoAgent.d.ts +24 -2
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +79 -5
- package/dist/agent/agent-options.d.ts +6 -1
- package/dist/agent/agent-options.d.ts.map +1 -1
- package/dist/agent/schemas.d.ts +18 -18
- package/dist/approval/manager.cjs +87 -27
- package/dist/approval/manager.d.ts +10 -1
- package/dist/approval/manager.d.ts.map +1 -1
- package/dist/approval/manager.js +87 -27
- package/dist/approval/schemas.cjs +22 -8
- package/dist/approval/schemas.d.ts +276 -102
- package/dist/approval/schemas.d.ts.map +1 -1
- package/dist/approval/schemas.js +22 -8
- package/dist/context/manager.cjs +2 -2
- package/dist/context/manager.d.ts +2 -1
- package/dist/context/manager.d.ts.map +1 -1
- package/dist/context/manager.js +2 -2
- package/dist/context/types.d.ts +3 -2
- package/dist/context/types.d.ts.map +1 -1
- package/dist/events/index.d.ts +26 -13
- package/dist/events/index.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/types.d.ts +1 -22
- package/dist/hooks/types.d.ts.map +1 -1
- package/dist/llm/executor/provider-options.cjs +223 -28
- package/dist/llm/executor/provider-options.d.ts +3 -37
- package/dist/llm/executor/provider-options.d.ts.map +1 -1
- package/dist/llm/executor/provider-options.js +227 -27
- package/dist/llm/executor/stream-processor.cjs +57 -34
- package/dist/llm/executor/stream-processor.d.ts +12 -4
- package/dist/llm/executor/stream-processor.d.ts.map +1 -1
- package/dist/llm/executor/stream-processor.js +55 -32
- package/dist/llm/executor/turn-executor.cjs +66 -44
- package/dist/llm/executor/turn-executor.d.ts +3 -3
- package/dist/llm/executor/turn-executor.d.ts.map +1 -1
- package/dist/llm/executor/turn-executor.js +56 -34
- package/dist/llm/formatters/vercel.cjs +15 -3
- package/dist/llm/formatters/vercel.d.ts +1 -0
- package/dist/llm/formatters/vercel.d.ts.map +1 -1
- package/dist/llm/formatters/vercel.js +15 -3
- package/dist/llm/index.cjs +8 -0
- package/dist/llm/index.d.ts +2 -1
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +7 -0
- package/dist/llm/providers/local/schemas.d.ts +2 -2
- package/dist/llm/providers/openrouter-model-registry.cjs +66 -11
- package/dist/llm/providers/openrouter-model-registry.d.ts +26 -0
- package/dist/llm/providers/openrouter-model-registry.d.ts.map +1 -1
- package/dist/llm/providers/openrouter-model-registry.js +65 -11
- package/dist/llm/reasoning/anthropic-betas.cjs +31 -0
- package/dist/llm/reasoning/anthropic-betas.d.ts +3 -0
- package/dist/llm/reasoning/anthropic-betas.d.ts.map +1 -0
- package/dist/llm/reasoning/anthropic-betas.js +7 -0
- package/dist/llm/reasoning/anthropic-thinking.cjs +79 -0
- package/dist/llm/reasoning/anthropic-thinking.d.ts +15 -0
- package/dist/llm/reasoning/anthropic-thinking.d.ts.map +1 -0
- package/dist/llm/reasoning/anthropic-thinking.js +52 -0
- package/dist/llm/reasoning/openai-reasoning-effort.cjs +86 -0
- package/dist/llm/reasoning/openai-reasoning-effort.d.ts +5 -0
- package/dist/llm/reasoning/openai-reasoning-effort.d.ts.map +1 -0
- package/dist/llm/reasoning/openai-reasoning-effort.js +61 -0
- package/dist/llm/reasoning/profile.cjs +113 -0
- package/dist/llm/reasoning/profile.d.ts +13 -0
- package/dist/llm/reasoning/profile.d.ts.map +1 -0
- package/dist/llm/reasoning/profile.js +92 -0
- package/dist/llm/reasoning/profiles/anthropic.cjs +61 -0
- package/dist/llm/reasoning/profiles/anthropic.d.ts +8 -0
- package/dist/llm/reasoning/profiles/anthropic.d.ts.map +1 -0
- package/dist/llm/reasoning/profiles/anthropic.js +45 -0
- package/dist/llm/reasoning/profiles/bedrock.cjs +54 -0
- package/dist/llm/reasoning/profiles/bedrock.d.ts +3 -0
- package/dist/llm/reasoning/profiles/bedrock.d.ts.map +1 -0
- package/dist/llm/reasoning/profiles/bedrock.js +36 -0
- package/dist/llm/reasoning/profiles/google.cjs +45 -0
- package/dist/llm/reasoning/profiles/google.d.ts +9 -0
- package/dist/llm/reasoning/profiles/google.d.ts.map +1 -0
- package/dist/llm/reasoning/profiles/google.js +21 -0
- package/dist/llm/reasoning/profiles/openai-compatible.cjs +39 -0
- package/dist/llm/reasoning/profiles/openai-compatible.d.ts +3 -0
- package/dist/llm/reasoning/profiles/openai-compatible.d.ts.map +1 -0
- package/dist/llm/reasoning/profiles/openai-compatible.js +16 -0
- package/dist/llm/reasoning/profiles/openai.cjs +41 -0
- package/dist/llm/reasoning/profiles/openai.d.ts +3 -0
- package/dist/llm/reasoning/profiles/openai.d.ts.map +1 -0
- package/dist/llm/reasoning/profiles/openai.js +18 -0
- package/dist/llm/reasoning/profiles/openrouter.cjs +83 -0
- package/dist/llm/reasoning/profiles/openrouter.d.ts +10 -0
- package/dist/llm/reasoning/profiles/openrouter.d.ts.map +1 -0
- package/dist/llm/reasoning/profiles/openrouter.js +59 -0
- package/dist/llm/reasoning/profiles/shared.cjs +80 -0
- package/dist/llm/reasoning/profiles/shared.d.ts +25 -0
- package/dist/llm/reasoning/profiles/shared.d.ts.map +1 -0
- package/dist/llm/reasoning/profiles/shared.js +53 -0
- package/dist/llm/reasoning/profiles/vertex.cjs +46 -0
- package/dist/llm/reasoning/profiles/vertex.d.ts +3 -0
- package/dist/llm/reasoning/profiles/vertex.d.ts.map +1 -0
- package/dist/llm/reasoning/profiles/vertex.js +23 -0
- package/dist/llm/registry/auto-update.cjs +18 -0
- package/dist/llm/registry/auto-update.d.ts.map +1 -1
- package/dist/llm/registry/auto-update.js +18 -0
- package/dist/llm/registry/index.cjs +126 -26
- package/dist/llm/registry/index.d.ts +48 -4
- package/dist/llm/registry/index.d.ts.map +1 -1
- package/dist/llm/registry/index.js +136 -28
- package/dist/llm/registry/models.generated.cjs +5198 -59
- package/dist/llm/registry/models.generated.d.ts +1893 -76
- package/dist/llm/registry/models.generated.d.ts.map +1 -1
- package/dist/llm/registry/models.generated.js +5196 -58
- package/dist/llm/registry/sync.cjs +72 -1
- package/dist/llm/registry/sync.d.ts +21 -1
- package/dist/llm/registry/sync.d.ts.map +1 -1
- package/dist/llm/registry/sync.js +72 -1
- package/dist/llm/resolver.cjs +13 -1
- package/dist/llm/resolver.d.ts.map +1 -1
- package/dist/llm/resolver.js +13 -1
- package/dist/llm/schemas.cjs +75 -14
- package/dist/llm/schemas.d.ts +84 -27
- package/dist/llm/schemas.d.ts.map +1 -1
- package/dist/llm/schemas.js +75 -14
- package/dist/llm/services/factory.cjs +55 -8
- package/dist/llm/services/factory.d.ts +1 -1
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +58 -8
- package/dist/llm/services/vercel.cjs +2 -2
- package/dist/llm/services/vercel.js +2 -2
- package/dist/llm/types.d.ts +9 -0
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/logger/default-logger-factory.d.ts +12 -12
- package/dist/logger/v2/dexto-logger.cjs +35 -0
- package/dist/logger/v2/dexto-logger.d.ts +19 -0
- package/dist/logger/v2/dexto-logger.d.ts.map +1 -1
- package/dist/logger/v2/dexto-logger.js +35 -0
- package/dist/logger/v2/schemas.d.ts +6 -6
- package/dist/logger/v2/test-utils.cjs +2 -0
- package/dist/logger/v2/test-utils.d.ts.map +1 -1
- package/dist/logger/v2/test-utils.js +2 -0
- package/dist/logger/v2/types.d.ts +14 -1
- package/dist/logger/v2/types.d.ts.map +1 -1
- package/dist/mcp/schemas.d.ts +15 -15
- package/dist/memory/schemas.d.ts +4 -4
- package/dist/prompts/index.cjs +9 -0
- package/dist/prompts/index.d.ts +1 -0
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +10 -0
- package/dist/prompts/prompt-manager.cjs +2 -0
- package/dist/prompts/prompt-manager.d.ts.map +1 -1
- package/dist/prompts/prompt-manager.js +2 -0
- package/dist/prompts/providers/config-prompt-provider.cjs +11 -1
- package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/config-prompt-provider.js +11 -1
- package/dist/prompts/schemas.cjs +2 -2
- package/dist/prompts/schemas.d.ts +7 -7
- package/dist/prompts/schemas.js +2 -2
- package/dist/prompts/types.d.ts +6 -2
- package/dist/prompts/types.d.ts.map +1 -1
- package/dist/systemPrompt/in-built-prompts.cjs +5 -5
- package/dist/systemPrompt/in-built-prompts.d.ts +1 -1
- package/dist/systemPrompt/in-built-prompts.d.ts.map +1 -1
- package/dist/systemPrompt/in-built-prompts.js +5 -5
- package/dist/systemPrompt/schemas.d.ts +5 -5
- package/dist/systemPrompt/types.d.ts +11 -0
- package/dist/systemPrompt/types.d.ts.map +1 -1
- package/dist/tools/display-types.d.ts +10 -0
- package/dist/tools/display-types.d.ts.map +1 -1
- package/dist/tools/index.cjs +3 -1
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +1 -0
- package/dist/tools/presentation.cjs +49 -0
- package/dist/tools/presentation.d.ts +11 -0
- package/dist/tools/presentation.d.ts.map +1 -0
- package/dist/tools/presentation.js +24 -0
- package/dist/tools/tool-manager.cjs +389 -136
- package/dist/tools/tool-manager.d.ts +36 -24
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +389 -136
- package/dist/tools/types.d.ts +134 -55
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils/path.cjs +10 -1
- package/dist/utils/path.d.ts +5 -2
- package/dist/utils/path.d.ts.map +1 -1
- package/dist/utils/path.js +10 -1
- package/dist/utils/service-initializer.d.ts +1 -0
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/package.json +7 -5
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
} from "ai";
|
|
12
12
|
import { trace } from "@opentelemetry/api";
|
|
13
13
|
import { StreamProcessor } from "./stream-processor.js";
|
|
14
|
-
import { buildProviderOptions } from "./provider-options.js";
|
|
14
|
+
import { buildProviderOptions, getEffectiveReasoningBudgetTokens } from "./provider-options.js";
|
|
15
15
|
import { DextoLogComponent } from "../../logger/v2/types.js";
|
|
16
16
|
import { defer } from "../../utils/defer.js";
|
|
17
17
|
import { DextoRuntimeError } from "../../errors/DextoRuntimeError.js";
|
|
@@ -46,18 +46,24 @@ class TurnExecutor {
|
|
|
46
46
|
compactionStrategy = null;
|
|
47
47
|
/**
|
|
48
48
|
* Map to track tool-call metadata by toolCallId.
|
|
49
|
-
* Used to pass execution-time info (approval +
|
|
49
|
+
* Used to pass execution-time info (approval + presentation snapshot) to result persistence.
|
|
50
50
|
*/
|
|
51
51
|
toolCallMetadata = /* @__PURE__ */ new Map();
|
|
52
52
|
/**
|
|
53
53
|
* Get StreamProcessor config from TurnExecutor state.
|
|
54
54
|
* @param estimatedInputTokens Optional estimated input tokens for analytics
|
|
55
55
|
*/
|
|
56
|
-
getStreamProcessorConfig(estimatedInputTokens) {
|
|
56
|
+
getStreamProcessorConfig(estimatedInputTokens, reasoning) {
|
|
57
57
|
return {
|
|
58
58
|
provider: this.llmContext.provider,
|
|
59
59
|
model: this.llmContext.model,
|
|
60
|
-
...estimatedInputTokens !== void 0 && { estimatedInputTokens }
|
|
60
|
+
...estimatedInputTokens !== void 0 && { estimatedInputTokens },
|
|
61
|
+
...reasoning?.reasoningVariant !== void 0 && {
|
|
62
|
+
reasoningVariant: reasoning.reasoningVariant
|
|
63
|
+
},
|
|
64
|
+
...reasoning?.reasoningBudgetTokens !== void 0 && {
|
|
65
|
+
reasoningBudgetTokens: reasoning.reasoningBudgetTokens
|
|
66
|
+
}
|
|
61
67
|
};
|
|
62
68
|
}
|
|
63
69
|
/**
|
|
@@ -153,43 +159,59 @@ class TurnExecutor {
|
|
|
153
159
|
}
|
|
154
160
|
this.logger.debug(`Step ${stepCount}: Starting`);
|
|
155
161
|
const tools = supportsTools ? await this.createTools() : {};
|
|
162
|
+
const providerOptions = buildProviderOptions({
|
|
163
|
+
provider: this.llmContext.provider,
|
|
164
|
+
model: this.llmContext.model,
|
|
165
|
+
reasoning: this.config.reasoning
|
|
166
|
+
});
|
|
167
|
+
this.logger.debug("LLM request options", {
|
|
168
|
+
provider: this.llmContext.provider,
|
|
169
|
+
model: this.llmContext.model,
|
|
170
|
+
requestedReasoning: {
|
|
171
|
+
variant: this.config.reasoning?.variant,
|
|
172
|
+
budgetTokens: this.config.reasoning?.budgetTokens
|
|
173
|
+
},
|
|
174
|
+
providerOptions
|
|
175
|
+
});
|
|
176
|
+
const reasoningVariant = this.config.reasoning?.variant;
|
|
177
|
+
const reasoningBudgetTokens = getEffectiveReasoningBudgetTokens(providerOptions);
|
|
178
|
+
const reasoningForStream = reasoningVariant !== void 0 || reasoningBudgetTokens !== void 0 ? {
|
|
179
|
+
...reasoningVariant !== void 0 && { reasoningVariant },
|
|
180
|
+
...reasoningBudgetTokens !== void 0 && { reasoningBudgetTokens }
|
|
181
|
+
} : void 0;
|
|
156
182
|
const streamProcessor = new StreamProcessor(
|
|
157
183
|
this.contextManager,
|
|
158
184
|
this.eventBus,
|
|
159
185
|
this.resourceManager,
|
|
160
186
|
this.stepAbortController.signal,
|
|
161
|
-
this.getStreamProcessorConfig(estimatedTokens),
|
|
187
|
+
this.getStreamProcessorConfig(estimatedTokens, reasoningForStream),
|
|
162
188
|
this.logger,
|
|
163
189
|
streaming,
|
|
164
190
|
this.toolCallMetadata
|
|
165
191
|
);
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
this.logger.error("Stream error", { error });
|
|
190
|
-
}
|
|
191
|
-
};
|
|
192
|
-
const result = await streamProcessor.process(() => streamText(streamOptions));
|
|
192
|
+
const result = await streamProcessor.process(
|
|
193
|
+
() => streamText({
|
|
194
|
+
model: this.model,
|
|
195
|
+
stopWhen: stepCountIs(1),
|
|
196
|
+
tools,
|
|
197
|
+
abortSignal: this.stepAbortController.signal,
|
|
198
|
+
messages: prepared.formattedMessages,
|
|
199
|
+
...this.config.maxOutputTokens !== void 0 && {
|
|
200
|
+
maxOutputTokens: this.config.maxOutputTokens
|
|
201
|
+
},
|
|
202
|
+
...this.config.temperature !== void 0 && {
|
|
203
|
+
temperature: this.config.temperature
|
|
204
|
+
},
|
|
205
|
+
// Provider-specific options (caching, reasoning, etc.)
|
|
206
|
+
...providerOptions !== void 0 && {
|
|
207
|
+
providerOptions
|
|
208
|
+
},
|
|
209
|
+
// Log stream-level errors (tool errors, API errors during streaming)
|
|
210
|
+
onError: (error) => {
|
|
211
|
+
this.logger.error("Stream error", { error });
|
|
212
|
+
}
|
|
213
|
+
})
|
|
214
|
+
);
|
|
193
215
|
lastStepTokens = result.usage;
|
|
194
216
|
lastFinishReason = result.finishReason;
|
|
195
217
|
lastText = result.text;
|
|
@@ -433,8 +455,8 @@ class TurnExecutor {
|
|
|
433
455
|
);
|
|
434
456
|
const metadata = (() => {
|
|
435
457
|
const meta = {};
|
|
436
|
-
if (executionResult.
|
|
437
|
-
meta.
|
|
458
|
+
if (executionResult.presentationSnapshot !== void 0) {
|
|
459
|
+
meta.presentationSnapshot = executionResult.presentationSnapshot;
|
|
438
460
|
}
|
|
439
461
|
if (executionResult.requireApproval !== void 0) {
|
|
440
462
|
meta.requireApproval = executionResult.requireApproval;
|
|
@@ -113,7 +113,15 @@ class VercelMessageFormatter {
|
|
|
113
113
|
}
|
|
114
114
|
break;
|
|
115
115
|
case "assistant":
|
|
116
|
-
formatted.push({
|
|
116
|
+
formatted.push({
|
|
117
|
+
role: "assistant",
|
|
118
|
+
...this.formatAssistantMessage(msg, {
|
|
119
|
+
// OpenAI/OpenRouter reasoning items can require strict output-item replay.
|
|
120
|
+
// Keep those providers on "no reasoning replay" to avoid invalid_request errors.
|
|
121
|
+
// For other providers we continue to round-trip reasoning where available.
|
|
122
|
+
includeReasoning: this.shouldRoundTripReasoning(context)
|
|
123
|
+
})
|
|
124
|
+
});
|
|
117
125
|
if (msg.toolCalls && msg.toolCalls.length > 0) {
|
|
118
126
|
for (const toolCall of msg.toolCalls) {
|
|
119
127
|
pendingToolCalls.set(toolCall.id, toolCall.function.name);
|
|
@@ -166,10 +174,14 @@ class VercelMessageFormatter {
|
|
|
166
174
|
formatSystemPrompt() {
|
|
167
175
|
return null;
|
|
168
176
|
}
|
|
177
|
+
shouldRoundTripReasoning(context) {
|
|
178
|
+
return context.provider !== "openai" && context.provider !== "openai-compatible" && context.provider !== "openrouter" && context.provider !== "dexto-nova";
|
|
179
|
+
}
|
|
169
180
|
// Helper to format Assistant messages (with optional tool calls and reasoning)
|
|
170
|
-
formatAssistantMessage(msg) {
|
|
181
|
+
formatAssistantMessage(msg, config) {
|
|
171
182
|
const contentParts = [];
|
|
172
|
-
|
|
183
|
+
const includeReasoning = config?.includeReasoning ?? false;
|
|
184
|
+
if (includeReasoning && msg.reasoning) {
|
|
173
185
|
const reasoningPart = {
|
|
174
186
|
type: "reasoning",
|
|
175
187
|
text: msg.reasoning,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/llm/formatters/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAiD,MAAM,IAAI,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAiC,MAAM,wBAAwB,CAAC;AAE7F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAmBvD;;;;;;;;;;GAUG;AACH,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAG1B;;;;;;OAMG;IACH,MAAM,CACF,OAAO,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,EACpC,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,MAAM,GAAG,IAAI,GAC5B,YAAY,EAAE;
|
|
1
|
+
{"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/llm/formatters/vercel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAiD,MAAM,IAAI,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAiC,MAAM,wBAAwB,CAAC;AAE7F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAmBvD;;;;;;;;;;GAUG;AACH,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,MAAM;IAG1B;;;;;;OAMG;IACH,MAAM,CACF,OAAO,EAAE,QAAQ,CAAC,eAAe,EAAE,CAAC,EACpC,OAAO,EAAE,UAAU,EACnB,YAAY,EAAE,MAAM,GAAG,IAAI,GAC5B,YAAY,EAAE;IA8JjB;;;;;;OAMG;IACH,kBAAkB,IAAI,IAAI;IAI1B,OAAO,CAAC,wBAAwB;IAUhC,OAAO,CAAC,sBAAsB;IAmG9B,OAAO,CAAC,iBAAiB;CAoE5B"}
|
|
@@ -91,7 +91,15 @@ class VercelMessageFormatter {
|
|
|
91
91
|
}
|
|
92
92
|
break;
|
|
93
93
|
case "assistant":
|
|
94
|
-
formatted.push({
|
|
94
|
+
formatted.push({
|
|
95
|
+
role: "assistant",
|
|
96
|
+
...this.formatAssistantMessage(msg, {
|
|
97
|
+
// OpenAI/OpenRouter reasoning items can require strict output-item replay.
|
|
98
|
+
// Keep those providers on "no reasoning replay" to avoid invalid_request errors.
|
|
99
|
+
// For other providers we continue to round-trip reasoning where available.
|
|
100
|
+
includeReasoning: this.shouldRoundTripReasoning(context)
|
|
101
|
+
})
|
|
102
|
+
});
|
|
95
103
|
if (msg.toolCalls && msg.toolCalls.length > 0) {
|
|
96
104
|
for (const toolCall of msg.toolCalls) {
|
|
97
105
|
pendingToolCalls.set(toolCall.id, toolCall.function.name);
|
|
@@ -144,10 +152,14 @@ class VercelMessageFormatter {
|
|
|
144
152
|
formatSystemPrompt() {
|
|
145
153
|
return null;
|
|
146
154
|
}
|
|
155
|
+
shouldRoundTripReasoning(context) {
|
|
156
|
+
return context.provider !== "openai" && context.provider !== "openai-compatible" && context.provider !== "openrouter" && context.provider !== "dexto-nova";
|
|
157
|
+
}
|
|
147
158
|
// Helper to format Assistant messages (with optional tool calls and reasoning)
|
|
148
|
-
formatAssistantMessage(msg) {
|
|
159
|
+
formatAssistantMessage(msg, config) {
|
|
149
160
|
const contentParts = [];
|
|
150
|
-
|
|
161
|
+
const includeReasoning = config?.includeReasoning ?? false;
|
|
162
|
+
if (includeReasoning && msg.reasoning) {
|
|
151
163
|
const reasoningPart = {
|
|
152
164
|
type: "reasoning",
|
|
153
165
|
text: msg.reasoning,
|
package/dist/llm/index.cjs
CHANGED
|
@@ -19,13 +19,16 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
|
|
|
19
19
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
20
|
var llm_exports = {};
|
|
21
21
|
__export(llm_exports, {
|
|
22
|
+
getCachedOpenRouterModelsWithInfo: () => import_openrouter_model_registry.getCachedOpenRouterModelsWithInfo,
|
|
22
23
|
getLlmRegistryAutoUpdateStatus: () => import_auto_update.getLlmRegistryAutoUpdateStatus,
|
|
24
|
+
getOpenRouterModelCacheInfo: () => import_openrouter_model_registry.getOpenRouterModelCacheInfo,
|
|
23
25
|
getOpenRouterModelContextLength: () => import_openrouter_model_registry.getOpenRouterModelContextLength,
|
|
24
26
|
getOpenRouterModelInfo: () => import_openrouter_model_registry.getOpenRouterModelInfo,
|
|
25
27
|
loadLlmRegistryCache: () => import_auto_update.loadLlmRegistryCache,
|
|
26
28
|
lookupOpenRouterModel: () => import_openrouter_model_registry.lookupOpenRouterModel,
|
|
27
29
|
refreshLlmRegistryCache: () => import_auto_update.refreshLlmRegistryCache,
|
|
28
30
|
refreshOpenRouterModelCache: () => import_openrouter_model_registry.refreshOpenRouterModelCache,
|
|
31
|
+
scheduleOpenRouterModelRefresh: () => import_openrouter_model_registry.scheduleOpenRouterModelRefresh,
|
|
29
32
|
startLlmRegistryAutoUpdate: () => import_auto_update.startLlmRegistryAutoUpdate
|
|
30
33
|
});
|
|
31
34
|
module.exports = __toCommonJS(llm_exports);
|
|
@@ -35,6 +38,7 @@ __reExport(llm_exports, require("./registry/index.js"), module.exports);
|
|
|
35
38
|
__reExport(llm_exports, require("./curation.js"), module.exports);
|
|
36
39
|
__reExport(llm_exports, require("./validation.js"), module.exports);
|
|
37
40
|
__reExport(llm_exports, require("./types.js"), module.exports);
|
|
41
|
+
__reExport(llm_exports, require("./reasoning/profile.js"), module.exports);
|
|
38
42
|
__reExport(llm_exports, require("./services/index.js"), module.exports);
|
|
39
43
|
__reExport(llm_exports, require("./schemas.js"), module.exports);
|
|
40
44
|
var import_openrouter_model_registry = require("./providers/openrouter-model-registry.js");
|
|
@@ -42,13 +46,16 @@ var import_auto_update = require("./registry/auto-update.js");
|
|
|
42
46
|
__reExport(llm_exports, require("./providers/local/index.js"), module.exports);
|
|
43
47
|
// Annotate the CommonJS export names for ESM import in node:
|
|
44
48
|
0 && (module.exports = {
|
|
49
|
+
getCachedOpenRouterModelsWithInfo,
|
|
45
50
|
getLlmRegistryAutoUpdateStatus,
|
|
51
|
+
getOpenRouterModelCacheInfo,
|
|
46
52
|
getOpenRouterModelContextLength,
|
|
47
53
|
getOpenRouterModelInfo,
|
|
48
54
|
loadLlmRegistryCache,
|
|
49
55
|
lookupOpenRouterModel,
|
|
50
56
|
refreshLlmRegistryCache,
|
|
51
57
|
refreshOpenRouterModelCache,
|
|
58
|
+
scheduleOpenRouterModelRefresh,
|
|
52
59
|
startLlmRegistryAutoUpdate,
|
|
53
60
|
...require("./errors.js"),
|
|
54
61
|
...require("./error-codes.js"),
|
|
@@ -56,6 +63,7 @@ __reExport(llm_exports, require("./providers/local/index.js"), module.exports);
|
|
|
56
63
|
...require("./curation.js"),
|
|
57
64
|
...require("./validation.js"),
|
|
58
65
|
...require("./types.js"),
|
|
66
|
+
...require("./reasoning/profile.js"),
|
|
59
67
|
...require("./services/index.js"),
|
|
60
68
|
...require("./schemas.js"),
|
|
61
69
|
...require("./providers/local/index.js")
|
package/dist/llm/index.d.ts
CHANGED
|
@@ -4,9 +4,10 @@ export * from './registry/index.js';
|
|
|
4
4
|
export * from './curation.js';
|
|
5
5
|
export * from './validation.js';
|
|
6
6
|
export * from './types.js';
|
|
7
|
+
export * from './reasoning/profile.js';
|
|
7
8
|
export * from './services/index.js';
|
|
8
9
|
export * from './schemas.js';
|
|
9
|
-
export { lookupOpenRouterModel, refreshOpenRouterModelCache, getOpenRouterModelContextLength, getOpenRouterModelInfo, type LookupStatus, type OpenRouterModelInfo, } from './providers/openrouter-model-registry.js';
|
|
10
|
+
export { getCachedOpenRouterModelsWithInfo, lookupOpenRouterModel, scheduleOpenRouterModelRefresh, refreshOpenRouterModelCache, getOpenRouterModelCacheInfo, getOpenRouterModelContextLength, getOpenRouterModelInfo, type LookupStatus, type OpenRouterModelInfo, } from './providers/openrouter-model-registry.js';
|
|
10
11
|
export { startLlmRegistryAutoUpdate, refreshLlmRegistryCache, loadLlmRegistryCache, getLlmRegistryAutoUpdateStatus, type LlmRegistryAutoUpdateStatus, } from './registry/auto-update.js';
|
|
11
12
|
export * from './providers/local/index.js';
|
|
12
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/llm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,OAAO,EACH,qBAAqB,EACrB,2BAA2B,EAC3B,+BAA+B,EAC/B,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,mBAAmB,GAC3B,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EACH,0BAA0B,EAC1B,uBAAuB,EACvB,oBAAoB,EACpB,8BAA8B,EAC9B,KAAK,2BAA2B,GACnC,MAAM,2BAA2B,CAAC;AAGnC,cAAc,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,OAAO,EACH,iCAAiC,EACjC,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,EAC/B,sBAAsB,EACtB,KAAK,YAAY,EACjB,KAAK,mBAAmB,GAC3B,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EACH,0BAA0B,EAC1B,uBAAuB,EACvB,oBAAoB,EACpB,8BAA8B,EAC9B,KAAK,2BAA2B,GACnC,MAAM,2BAA2B,CAAC;AAGnC,cAAc,4BAA4B,CAAC"}
|
package/dist/llm/index.js
CHANGED
|
@@ -5,11 +5,15 @@ export * from "./registry/index.js";
|
|
|
5
5
|
export * from "./curation.js";
|
|
6
6
|
export * from "./validation.js";
|
|
7
7
|
export * from "./types.js";
|
|
8
|
+
export * from "./reasoning/profile.js";
|
|
8
9
|
export * from "./services/index.js";
|
|
9
10
|
export * from "./schemas.js";
|
|
10
11
|
import {
|
|
12
|
+
getCachedOpenRouterModelsWithInfo,
|
|
11
13
|
lookupOpenRouterModel,
|
|
14
|
+
scheduleOpenRouterModelRefresh,
|
|
12
15
|
refreshOpenRouterModelCache,
|
|
16
|
+
getOpenRouterModelCacheInfo,
|
|
13
17
|
getOpenRouterModelContextLength,
|
|
14
18
|
getOpenRouterModelInfo
|
|
15
19
|
} from "./providers/openrouter-model-registry.js";
|
|
@@ -21,12 +25,15 @@ import {
|
|
|
21
25
|
} from "./registry/auto-update.js";
|
|
22
26
|
export * from "./providers/local/index.js";
|
|
23
27
|
export {
|
|
28
|
+
getCachedOpenRouterModelsWithInfo,
|
|
24
29
|
getLlmRegistryAutoUpdateStatus,
|
|
30
|
+
getOpenRouterModelCacheInfo,
|
|
25
31
|
getOpenRouterModelContextLength,
|
|
26
32
|
getOpenRouterModelInfo,
|
|
27
33
|
loadLlmRegistryCache,
|
|
28
34
|
lookupOpenRouterModel,
|
|
29
35
|
refreshLlmRegistryCache,
|
|
30
36
|
refreshOpenRouterModelCache,
|
|
37
|
+
scheduleOpenRouterModelRefresh,
|
|
31
38
|
startLlmRegistryAutoUpdate
|
|
32
39
|
};
|
|
@@ -51,7 +51,7 @@ export declare const LocalModelInfoSchema: z.ZodObject<{
|
|
|
51
51
|
quantization: "Q2_K" | "Q3_K_S" | "Q3_K_M" | "Q3_K_L" | "Q4_0" | "Q4_K_S" | "Q4_K_M" | "Q5_0" | "Q5_K_S" | "Q5_K_M" | "Q6_K" | "Q8_0" | "F16" | "F32";
|
|
52
52
|
sizeBytes: number;
|
|
53
53
|
contextLength: number;
|
|
54
|
-
categories: ("
|
|
54
|
+
categories: ("small" | "reasoning" | "general" | "coding" | "vision")[];
|
|
55
55
|
license?: string | undefined;
|
|
56
56
|
supportsVision?: boolean | undefined;
|
|
57
57
|
supportsTools?: boolean | undefined;
|
|
@@ -68,7 +68,7 @@ export declare const LocalModelInfoSchema: z.ZodObject<{
|
|
|
68
68
|
quantization: "Q2_K" | "Q3_K_S" | "Q3_K_M" | "Q3_K_L" | "Q4_0" | "Q4_K_S" | "Q4_K_M" | "Q5_0" | "Q5_K_S" | "Q5_K_M" | "Q6_K" | "Q8_0" | "F16" | "F32";
|
|
69
69
|
sizeBytes: number;
|
|
70
70
|
contextLength: number;
|
|
71
|
-
categories: ("
|
|
71
|
+
categories: ("small" | "reasoning" | "general" | "coding" | "vision")[];
|
|
72
72
|
license?: string | undefined;
|
|
73
73
|
supportsVision?: boolean | undefined;
|
|
74
74
|
supportsTools?: boolean | undefined;
|
|
@@ -30,6 +30,7 @@ var openrouter_model_registry_exports = {};
|
|
|
30
30
|
__export(openrouter_model_registry_exports, {
|
|
31
31
|
__TEST_ONLY__: () => __TEST_ONLY__,
|
|
32
32
|
getCachedOpenRouterModels: () => getCachedOpenRouterModels,
|
|
33
|
+
getCachedOpenRouterModelsWithInfo: () => getCachedOpenRouterModelsWithInfo,
|
|
33
34
|
getOpenRouterModelCacheInfo: () => getOpenRouterModelCacheInfo,
|
|
34
35
|
getOpenRouterModelContextLength: () => getOpenRouterModelContextLength,
|
|
35
36
|
getOpenRouterModelInfo: () => getOpenRouterModelInfo,
|
|
@@ -61,6 +62,23 @@ class OpenRouterModelRegistry {
|
|
|
61
62
|
refreshPromise = null;
|
|
62
63
|
lastRefreshAttemptAt = null;
|
|
63
64
|
lastUsedApiKey;
|
|
65
|
+
parseExpirationDateEndUtc(expirationDate) {
|
|
66
|
+
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(expirationDate.trim());
|
|
67
|
+
if (!match) return null;
|
|
68
|
+
const year = Number(match[1]);
|
|
69
|
+
const monthIndex = Number(match[2]) - 1;
|
|
70
|
+
const day = Number(match[3]);
|
|
71
|
+
if (!Number.isFinite(year) || !Number.isFinite(monthIndex) || !Number.isFinite(day)) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
return Date.UTC(year, monthIndex, day, 23, 59, 59, 999);
|
|
75
|
+
}
|
|
76
|
+
isExpired(model) {
|
|
77
|
+
if (!model.expirationDate) return false;
|
|
78
|
+
const expiresAt = this.parseExpirationDateEndUtc(model.expirationDate);
|
|
79
|
+
if (!expiresAt) return false;
|
|
80
|
+
return Date.now() > expiresAt;
|
|
81
|
+
}
|
|
64
82
|
/**
|
|
65
83
|
* Look up a model ID against the OpenRouter catalog.
|
|
66
84
|
* @returns 'valid' if model exists, 'invalid' if not found, 'unknown' if cache is stale/empty
|
|
@@ -78,7 +96,11 @@ class OpenRouterModelRegistry {
|
|
|
78
96
|
this.scheduleRefresh();
|
|
79
97
|
return "unknown";
|
|
80
98
|
}
|
|
81
|
-
|
|
99
|
+
const info = this.models.get(normalized);
|
|
100
|
+
if (info && this.isExpired(info)) {
|
|
101
|
+
return "invalid";
|
|
102
|
+
}
|
|
103
|
+
return info ? "valid" : "invalid";
|
|
82
104
|
}
|
|
83
105
|
/**
|
|
84
106
|
* Get context length for a model ID.
|
|
@@ -93,6 +115,7 @@ class OpenRouterModelRegistry {
|
|
|
93
115
|
return null;
|
|
94
116
|
}
|
|
95
117
|
const info = this.models.get(normalized);
|
|
118
|
+
if (info && this.isExpired(info)) return null;
|
|
96
119
|
return info?.contextLength ?? null;
|
|
97
120
|
}
|
|
98
121
|
/**
|
|
@@ -107,7 +130,9 @@ class OpenRouterModelRegistry {
|
|
|
107
130
|
if (!this.models || this.models.size === 0 || !this.isCacheFresh()) {
|
|
108
131
|
return null;
|
|
109
132
|
}
|
|
110
|
-
|
|
133
|
+
const info = this.models.get(normalized) ?? null;
|
|
134
|
+
if (info && this.isExpired(info)) return null;
|
|
135
|
+
return info;
|
|
111
136
|
}
|
|
112
137
|
/**
|
|
113
138
|
* Schedule a non-blocking background refresh of the model cache.
|
|
@@ -117,6 +142,9 @@ class OpenRouterModelRegistry {
|
|
|
117
142
|
if (apiKey) {
|
|
118
143
|
this.lastUsedApiKey = apiKey;
|
|
119
144
|
}
|
|
145
|
+
if ((process.env.NODE_ENV === "test" || process.env.VITEST) && options?.allowInTests !== true) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
120
148
|
if (this.refreshPromise) {
|
|
121
149
|
return;
|
|
122
150
|
}
|
|
@@ -125,7 +153,7 @@ class OpenRouterModelRegistry {
|
|
|
125
153
|
return;
|
|
126
154
|
}
|
|
127
155
|
this.lastRefreshAttemptAt = now;
|
|
128
|
-
this.refreshPromise = this.refreshInternal(apiKey).catch((error) => {
|
|
156
|
+
this.refreshPromise = this.refreshInternal(apiKey, options?.timeoutMs).catch((error) => {
|
|
129
157
|
import_logger.logger.warn(
|
|
130
158
|
`Failed to refresh OpenRouter model registry: ${error instanceof Error ? error.message : String(error)}`
|
|
131
159
|
);
|
|
@@ -141,6 +169,9 @@ class OpenRouterModelRegistry {
|
|
|
141
169
|
if (apiKey) {
|
|
142
170
|
this.lastUsedApiKey = apiKey;
|
|
143
171
|
}
|
|
172
|
+
if ((process.env.NODE_ENV === "test" || process.env.VITEST) && options?.allowInTests !== true) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
144
175
|
if (!options?.force && this.refreshPromise) {
|
|
145
176
|
await this.refreshPromise;
|
|
146
177
|
return;
|
|
@@ -157,7 +188,7 @@ class OpenRouterModelRegistry {
|
|
|
157
188
|
} else {
|
|
158
189
|
this.lastRefreshAttemptAt = Date.now();
|
|
159
190
|
}
|
|
160
|
-
const promise = this.refreshInternal(apiKey).finally(() => {
|
|
191
|
+
const promise = this.refreshInternal(apiKey, options?.timeoutMs).finally(() => {
|
|
161
192
|
this.refreshPromise = null;
|
|
162
193
|
});
|
|
163
194
|
this.refreshPromise = promise;
|
|
@@ -170,7 +201,12 @@ class OpenRouterModelRegistry {
|
|
|
170
201
|
if (!this.models || this.models.size === 0) {
|
|
171
202
|
return null;
|
|
172
203
|
}
|
|
173
|
-
|
|
204
|
+
const ids = [];
|
|
205
|
+
for (const info of this.models.values()) {
|
|
206
|
+
if (this.isExpired(info)) continue;
|
|
207
|
+
ids.push(info.id);
|
|
208
|
+
}
|
|
209
|
+
return ids;
|
|
174
210
|
}
|
|
175
211
|
/**
|
|
176
212
|
* Get all cached model info (or null if cache is empty).
|
|
@@ -179,19 +215,20 @@ class OpenRouterModelRegistry {
|
|
|
179
215
|
if (!this.models || this.models.size === 0) {
|
|
180
216
|
return null;
|
|
181
217
|
}
|
|
182
|
-
return Array.from(this.models.values());
|
|
218
|
+
return Array.from(this.models.values()).filter((info) => !this.isExpired(info));
|
|
183
219
|
}
|
|
184
220
|
/**
|
|
185
221
|
* Get cache metadata for debugging/monitoring.
|
|
186
222
|
*/
|
|
187
223
|
getCacheMetadata() {
|
|
224
|
+
const modelCount = this.models ? Array.from(this.models.values()).filter((info) => !this.isExpired(info)).length : 0;
|
|
188
225
|
return {
|
|
189
226
|
lastFetchedAt: this.lastFetchedAt ? new Date(this.lastFetchedAt) : null,
|
|
190
|
-
modelCount
|
|
227
|
+
modelCount,
|
|
191
228
|
isFresh: this.isCacheFresh()
|
|
192
229
|
};
|
|
193
230
|
}
|
|
194
|
-
async refreshInternal(apiKey) {
|
|
231
|
+
async refreshInternal(apiKey, timeoutMs) {
|
|
195
232
|
try {
|
|
196
233
|
const headers = {
|
|
197
234
|
Accept: "application/json"
|
|
@@ -200,7 +237,10 @@ class OpenRouterModelRegistry {
|
|
|
200
237
|
headers.Authorization = `Bearer ${apiKey}`;
|
|
201
238
|
}
|
|
202
239
|
import_logger.logger.debug("Refreshing OpenRouter model registry from remote source");
|
|
203
|
-
const response = await fetch(OPENROUTER_MODELS_ENDPOINT, {
|
|
240
|
+
const response = await fetch(OPENROUTER_MODELS_ENDPOINT, {
|
|
241
|
+
headers,
|
|
242
|
+
signal: AbortSignal.timeout(timeoutMs ?? 3e4)
|
|
243
|
+
});
|
|
204
244
|
if (!response.ok) {
|
|
205
245
|
const body = await response.text();
|
|
206
246
|
throw new Error(`HTTP ${response.status}: ${body}`);
|
|
@@ -229,7 +269,7 @@ class OpenRouterModelRegistry {
|
|
|
229
269
|
}
|
|
230
270
|
this.models = /* @__PURE__ */ new Map();
|
|
231
271
|
for (const model of parsed.models) {
|
|
232
|
-
if (typeof model === "object" && model.id && typeof model.contextLength === "number") {
|
|
272
|
+
if (typeof model === "object" && typeof model.id === "string" && model.id.trim().length > 0 && typeof model.contextLength === "number") {
|
|
233
273
|
this.models.set(model.id.toLowerCase(), model);
|
|
234
274
|
}
|
|
235
275
|
}
|
|
@@ -294,7 +334,18 @@ class OpenRouterModelRegistry {
|
|
|
294
334
|
} else if (record.top_provider && typeof record.top_provider === "object" && typeof record.top_provider.context_length === "number") {
|
|
295
335
|
contextLength = record.top_provider.context_length;
|
|
296
336
|
}
|
|
297
|
-
|
|
337
|
+
const displayName = typeof record.name === "string" && record.name.trim().length > 0 ? record.name : void 0;
|
|
338
|
+
const expirationDate = typeof record.expiration_date === "string" && record.expiration_date.trim().length > 0 ? record.expiration_date : void 0;
|
|
339
|
+
const supportedParameters = Array.isArray(record.supported_parameters) ? record.supported_parameters.filter(
|
|
340
|
+
(p) => typeof p === "string" && p.trim().length > 0
|
|
341
|
+
) : void 0;
|
|
342
|
+
models.push({
|
|
343
|
+
id,
|
|
344
|
+
contextLength,
|
|
345
|
+
...displayName ? { displayName } : {},
|
|
346
|
+
...expirationDate ? { expirationDate } : {},
|
|
347
|
+
...supportedParameters ? { supportedParameters } : {}
|
|
348
|
+
});
|
|
298
349
|
}
|
|
299
350
|
}
|
|
300
351
|
}
|
|
@@ -323,6 +374,9 @@ async function refreshOpenRouterModelCache(options) {
|
|
|
323
374
|
function getCachedOpenRouterModels() {
|
|
324
375
|
return openRouterModelRegistry.getCachedModels();
|
|
325
376
|
}
|
|
377
|
+
function getCachedOpenRouterModelsWithInfo() {
|
|
378
|
+
return openRouterModelRegistry.getCachedModelsWithInfo();
|
|
379
|
+
}
|
|
326
380
|
function getOpenRouterModelContextLength(modelId) {
|
|
327
381
|
return openRouterModelRegistry.getContextLength(modelId);
|
|
328
382
|
}
|
|
@@ -340,6 +394,7 @@ const __TEST_ONLY__ = {
|
|
|
340
394
|
0 && (module.exports = {
|
|
341
395
|
__TEST_ONLY__,
|
|
342
396
|
getCachedOpenRouterModels,
|
|
397
|
+
getCachedOpenRouterModelsWithInfo,
|
|
343
398
|
getOpenRouterModelCacheInfo,
|
|
344
399
|
getOpenRouterModelContextLength,
|
|
345
400
|
getOpenRouterModelInfo,
|
|
@@ -15,10 +15,29 @@ export type LookupStatus = 'valid' | 'invalid' | 'unknown';
|
|
|
15
15
|
export interface OpenRouterModelInfo {
|
|
16
16
|
id: string;
|
|
17
17
|
contextLength: number;
|
|
18
|
+
/**
|
|
19
|
+
* Human-friendly model name from OpenRouter (e.g. "Claude Sonnet 4.5").
|
|
20
|
+
*/
|
|
21
|
+
displayName?: string;
|
|
22
|
+
/**
|
|
23
|
+
* OpenRouter expiration date (YYYY-MM-DD) when present.
|
|
24
|
+
* Models past this date should be treated as invalid/deprecated.
|
|
25
|
+
*/
|
|
26
|
+
expirationDate?: string;
|
|
27
|
+
/**
|
|
28
|
+
* OpenRouter supported parameters (e.g. includes "reasoning" for reasoning-capable models).
|
|
29
|
+
*/
|
|
30
|
+
supportedParameters?: string[];
|
|
18
31
|
}
|
|
19
32
|
interface RefreshOptions {
|
|
20
33
|
apiKey?: string;
|
|
21
34
|
force?: boolean;
|
|
35
|
+
timeoutMs?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Test-only escape hatch for unit tests that want to validate refresh behavior.
|
|
38
|
+
* Network fetch is disabled by default when NODE_ENV === 'test' or VITEST is set.
|
|
39
|
+
*/
|
|
40
|
+
allowInTests?: boolean;
|
|
22
41
|
}
|
|
23
42
|
declare class OpenRouterModelRegistry {
|
|
24
43
|
private readonly cachePath;
|
|
@@ -29,6 +48,8 @@ declare class OpenRouterModelRegistry {
|
|
|
29
48
|
private lastRefreshAttemptAt;
|
|
30
49
|
private lastUsedApiKey?;
|
|
31
50
|
constructor(cachePath: string);
|
|
51
|
+
private parseExpirationDateEndUtc;
|
|
52
|
+
private isExpired;
|
|
32
53
|
/**
|
|
33
54
|
* Look up a model ID against the OpenRouter catalog.
|
|
34
55
|
* @returns 'valid' if model exists, 'invalid' if not found, 'unknown' if cache is stale/empty
|
|
@@ -94,6 +115,11 @@ export declare function refreshOpenRouterModelCache(options?: RefreshOptions): P
|
|
|
94
115
|
* Get all cached OpenRouter model IDs (or null if cache is empty).
|
|
95
116
|
*/
|
|
96
117
|
export declare function getCachedOpenRouterModels(): string[] | null;
|
|
118
|
+
/**
|
|
119
|
+
* Get all cached OpenRouter model info (or null if cache is empty).
|
|
120
|
+
* Expired models are filtered out.
|
|
121
|
+
*/
|
|
122
|
+
export declare function getCachedOpenRouterModelsWithInfo(): OpenRouterModelInfo[] | null;
|
|
97
123
|
/**
|
|
98
124
|
* Get context length for an OpenRouter model.
|
|
99
125
|
* @returns context length if model is in cache, null if not found or cache is stale
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openrouter-model-registry.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/openrouter-model-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;AAE3D,iCAAiC;AACjC,MAAM,WAAW,mBAAmB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"openrouter-model-registry.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/openrouter-model-registry.ts"],"names":[],"mappings":"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"}
|