omk-ai 1.5.2 → 1.5.4
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/CHANGELOG.md +17 -3
- package/dist/cli.js +0 -0
- package/dist/env-api-keys.d.ts.map +1 -1
- package/dist/env-api-keys.js +1 -0
- package/dist/env-api-keys.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/models.generated.d.ts +67 -0
- package/dist/models.generated.d.ts.map +1 -1
- package/dist/models.generated.js +55 -2
- package/dist/models.generated.js.map +1 -1
- package/dist/providers/amazon-bedrock.d.ts.map +1 -1
- package/dist/providers/amazon-bedrock.js +1 -15
- package/dist/providers/amazon-bedrock.js.map +1 -1
- package/dist/providers/bedrock-thinking.d.ts +6 -0
- package/dist/providers/bedrock-thinking.d.ts.map +1 -1
- package/dist/providers/bedrock-thinking.js +14 -0
- package/dist/providers/bedrock-thinking.js.map +1 -1
- package/dist/providers/simple-options.d.ts +8 -0
- package/dist/providers/simple-options.d.ts.map +1 -1
- package/dist/providers/simple-options.js +23 -7
- package/dist/providers/simple-options.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bedrock-thinking.js","sourceRoot":"","sources":["../../src/providers/bedrock-thinking.ts"],"names":[],"mappings":"AAIA,8FAA8F;AAC9F,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,SAAkB,EAAY;IACtF,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IAAA,CAChD,CAAC,CAAC;AAAA,CACH;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,SAAkB,EAAW;IACtF,OAAO,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CACtD,CAAC,KAAK,EAAE,EAAE,CAAC,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CACzF,CAAC;AAAA,CACF;AAED,MAAM,UAAU,wBAAwB,CACvC,KAAuC,EACvC,KAAuC,EAC9B;IACT,IACC,KAAK,KAAK,OAAO;QACjB,uBAAuB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iCAAiC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5G,OAAO,OAAO,CAAC;IAChB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,KAAK;QACzG,OAAO,MAAM,CAAC;IACf,QAAQ,KAAK,EAAE,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,KAAK;YACT,OAAO,KAAK,CAAC;QACd,KAAK,QAAQ;YACZ,OAAO,QAAQ,CAAC;QACjB;YACC,OAAO,MAAM,CAAC;IAChB,CAAC;AAAA,CACD","sourcesContent":["import type { Model, SimpleStreamOptions } from \"../types.ts\";\n\ntype Effort = \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n\n/** Application inference profiles may identify their model by display name instead of ARN. */\nexport function getModelMatchCandidates(modelId: string, modelName?: string): string[] {\n\tconst values = modelName ? [modelId, modelName] : [modelId];\n\treturn values.flatMap((value) => {\n\t\tconst lower = value.toLowerCase();\n\t\treturn [lower, lower.replace(/[\\s_.:]+/g, \"-\")];\n\t});\n}\n\nexport function supportsAdaptiveThinking(modelId: string, modelName?: string): boolean {\n\treturn getModelMatchCandidates(modelId, modelName).some(\n\t\t(value) => /opus-(?:4-[678]|5(?:-5)?)(?:-|$)/.test(value) || value.includes(\"sonnet-4-6\"),\n\t);\n}\n\nexport function mapThinkingLevelToEffort(\n\tmodel: Model<\"bedrock-converse-stream\">,\n\tlevel: SimpleStreamOptions[\"reasoning\"],\n): Effort {\n\tif (\n\t\tlevel === \"xhigh\" &&\n\t\tgetModelMatchCandidates(model.id, model.name).some((value) => /opus-(?:4-[78]|5(?:-5)?)(?:-|$)/.test(value))\n\t)\n\t\treturn \"xhigh\";\n\tconst mapped = level ? model.thinkingLevelMap?.[level] : undefined;\n\tif (mapped === \"low\" || mapped === \"medium\" || mapped === \"high\" || mapped === \"xhigh\" || mapped === \"max\")\n\t\treturn mapped;\n\tswitch (level) {\n\t\tcase \"minimal\":\n\t\tcase \"low\":\n\t\t\treturn \"low\";\n\t\tcase \"medium\":\n\t\t\treturn \"medium\";\n\t\tdefault:\n\t\t\treturn \"high\";\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"bedrock-thinking.js","sourceRoot":"","sources":["../../src/providers/bedrock-thinking.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAuC,EAAW;IACxF,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC7C,OAAO,CACN,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC/B,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACvB,CAAC;AAAA,CACF;AAED,8FAA8F;AAC9F,MAAM,UAAU,uBAAuB,CAAC,OAAe,EAAE,SAAkB,EAAY;IACtF,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5D,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IAAA,CAChD,CAAC,CAAC;AAAA,CACH;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAe,EAAE,SAAkB,EAAW;IACtF,OAAO,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CACtD,CAAC,KAAK,EAAE,EAAE,CAAC,kCAAkC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CACzF,CAAC;AAAA,CACF;AAED,MAAM,UAAU,wBAAwB,CACvC,KAAuC,EACvC,KAAuC,EAC9B;IACT,IACC,KAAK,KAAK,OAAO;QACjB,uBAAuB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iCAAiC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5G,OAAO,OAAO,CAAC;IAChB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,KAAK;QACzG,OAAO,MAAM,CAAC;IACf,QAAQ,KAAK,EAAE,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,KAAK;YACT,OAAO,KAAK,CAAC;QACd,KAAK,QAAQ;YACZ,OAAO,QAAQ,CAAC;QACjB;YACC,OAAO,MAAM,CAAC;IAChB,CAAC;AAAA,CACD","sourcesContent":["import type { Model, SimpleStreamOptions } from \"../types.ts\";\n\ntype Effort = \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n\n/**\n * Check if the model is an Anthropic Claude model on Bedrock.\n * Checks both model ID and model name to support application inference profiles\n * whose ARNs don't contain the model name.\n */\nexport function isAnthropicClaudeModel(model: Model<\"bedrock-converse-stream\">): boolean {\n\tconst id = model.id.toLowerCase();\n\tconst name = model.name?.toLowerCase() ?? \"\";\n\treturn (\n\t\tid.includes(\"anthropic.claude\") ||\n\t\tid.includes(\"anthropic/claude\") ||\n\t\tname.includes(\"anthropic.claude\") ||\n\t\tname.includes(\"anthropic/claude\") ||\n\t\tname.includes(\"claude\")\n\t);\n}\n\n/** Application inference profiles may identify their model by display name instead of ARN. */\nexport function getModelMatchCandidates(modelId: string, modelName?: string): string[] {\n\tconst values = modelName ? [modelId, modelName] : [modelId];\n\treturn values.flatMap((value) => {\n\t\tconst lower = value.toLowerCase();\n\t\treturn [lower, lower.replace(/[\\s_.:]+/g, \"-\")];\n\t});\n}\n\nexport function supportsAdaptiveThinking(modelId: string, modelName?: string): boolean {\n\treturn getModelMatchCandidates(modelId, modelName).some(\n\t\t(value) => /opus-(?:4-[678]|5(?:-5)?)(?:-|$)/.test(value) || value.includes(\"sonnet-4-6\"),\n\t);\n}\n\nexport function mapThinkingLevelToEffort(\n\tmodel: Model<\"bedrock-converse-stream\">,\n\tlevel: SimpleStreamOptions[\"reasoning\"],\n): Effort {\n\tif (\n\t\tlevel === \"xhigh\" &&\n\t\tgetModelMatchCandidates(model.id, model.name).some((value) => /opus-(?:4-[78]|5(?:-5)?)(?:-|$)/.test(value))\n\t)\n\t\treturn \"xhigh\";\n\tconst mapped = level ? model.thinkingLevelMap?.[level] : undefined;\n\tif (mapped === \"low\" || mapped === \"medium\" || mapped === \"high\" || mapped === \"xhigh\" || mapped === \"max\")\n\t\treturn mapped;\n\tswitch (level) {\n\t\tcase \"minimal\":\n\t\tcase \"low\":\n\t\t\treturn \"low\";\n\t\tcase \"medium\":\n\t\t\treturn \"medium\";\n\t\tdefault:\n\t\t\treturn \"high\";\n\t}\n}\n"]}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { Api, Model, SimpleStreamOptions, StreamOptions, ThinkingBudgets, ThinkingLevel } from "../types.ts";
|
|
2
|
+
/** Default token budgets per thinking level (token-based providers). */
|
|
3
|
+
export declare const DEFAULT_THINKING_BUDGETS: Readonly<Required<ThinkingBudgets>>;
|
|
4
|
+
/**
|
|
5
|
+
* True when the provider's simple stream adds the thinking budget on top of an
|
|
6
|
+
* explicit `maxTokens` via {@link adjustMaxTokensForThinking} (so a caller cap
|
|
7
|
+
* sizes only the answer).
|
|
8
|
+
*/
|
|
9
|
+
export declare function addsThinkingBudgetToMaxTokens(model: Model<Api>): boolean;
|
|
2
10
|
export declare function buildBaseOptions(_model: Model<Api>, options?: SimpleStreamOptions, apiKey?: string): StreamOptions;
|
|
3
11
|
export declare function clampReasoning(effort: ThinkingLevel | undefined): Exclude<ThinkingLevel, "xhigh" | "max" | "ultra"> | undefined;
|
|
4
12
|
export declare function adjustMaxTokensForThinking(baseMaxTokens: number | undefined, modelMaxTokens: number, reasoningLevel: ThinkingLevel, customBudgets?: ThinkingBudgets): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple-options.d.ts","sourceRoot":"","sources":["../../src/providers/simple-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"simple-options.d.ts","sourceRoot":"","sources":["../../src/providers/simple-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGlH,wEAAwE;AACxE,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAKxE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAOxE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,aAAa,CAoBlH;AAED,wBAAgB,cAAc,CAC7B,MAAM,EAAE,aAAa,GAAG,SAAS,GAC/B,OAAO,CAAC,aAAa,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC,GAAG,SAAS,CAE/D;AAED,wBAAgB,0BAA0B,CAEzC,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,aAAa,EAC7B,aAAa,CAAC,EAAE,eAAe,GAC7B;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAc/C","sourcesContent":["import type { Api, Model, SimpleStreamOptions, StreamOptions, ThinkingBudgets, ThinkingLevel } from \"../types.ts\";\nimport { isAnthropicClaudeModel, supportsAdaptiveThinking } from \"./bedrock-thinking.ts\";\n\n/** Default token budgets per thinking level (token-based providers). */\nexport const DEFAULT_THINKING_BUDGETS: Readonly<Required<ThinkingBudgets>> = {\n\tminimal: 1024,\n\tlow: 2048,\n\tmedium: 8192,\n\thigh: 16384,\n};\n\n/**\n * True when the provider's simple stream adds the thinking budget on top of an\n * explicit `maxTokens` via {@link adjustMaxTokensForThinking} (so a caller cap\n * sizes only the answer).\n */\nexport function addsThinkingBudgetToMaxTokens(model: Model<Api>): boolean {\n\tif (model.api === \"anthropic-messages\") return true;\n\tif (model.api === \"bedrock-converse-stream\") {\n\t\tconst bedrock = model as Model<\"bedrock-converse-stream\">;\n\t\treturn isAnthropicClaudeModel(bedrock) && !supportsAdaptiveThinking(bedrock.id, bedrock.name);\n\t}\n\treturn false;\n}\n\nexport function buildBaseOptions(_model: Model<Api>, options?: SimpleStreamOptions, apiKey?: string): StreamOptions {\n\treturn {\n\t\ttemperature: options?.temperature,\n\t\tmaxTokens: options?.maxTokens,\n\t\tsignal: options?.signal,\n\t\tapiKey: apiKey || options?.apiKey,\n\t\ttransport: options?.transport,\n\t\tcacheRetention: options?.cacheRetention,\n\t\tsessionId: options?.sessionId,\n\t\tcwd: options?.cwd,\n\t\theaders: options?.headers,\n\t\tonPayload: options?.onPayload,\n\t\tonResponse: options?.onResponse,\n\t\tonRateLimit: options?.onRateLimit,\n\t\ttimeoutMs: options?.timeoutMs,\n\t\twebsocketConnectTimeoutMs: options?.websocketConnectTimeoutMs,\n\t\tmaxRetries: options?.maxRetries,\n\t\tmaxRetryDelayMs: options?.maxRetryDelayMs,\n\t\tmetadata: options?.metadata,\n\t};\n}\n\nexport function clampReasoning(\n\teffort: ThinkingLevel | undefined,\n): Exclude<ThinkingLevel, \"xhigh\" | \"max\" | \"ultra\"> | undefined {\n\treturn effort === \"xhigh\" || effort === \"max\" || effort === \"ultra\" ? \"high\" : effort;\n}\n\nexport function adjustMaxTokensForThinking(\n\t// Undefined means no explicit caller cap. Use the model cap and fit thinking inside it.\n\tbaseMaxTokens: number | undefined,\n\tmodelMaxTokens: number,\n\treasoningLevel: ThinkingLevel,\n\tcustomBudgets?: ThinkingBudgets,\n): { maxTokens: number; thinkingBudget: number } {\n\tconst budgets = { ...DEFAULT_THINKING_BUDGETS, ...customBudgets };\n\n\tconst minOutputTokens = 1024;\n\tconst level = clampReasoning(reasoningLevel)!;\n\tlet thinkingBudget = budgets[level]!;\n\tconst maxTokens =\n\t\tbaseMaxTokens === undefined ? modelMaxTokens : Math.min(baseMaxTokens + thinkingBudget, modelMaxTokens);\n\n\tif (maxTokens <= thinkingBudget) {\n\t\tthinkingBudget = Math.max(0, maxTokens - minOutputTokens);\n\t}\n\n\treturn { maxTokens, thinkingBudget };\n}\n"]}
|
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
import { isAnthropicClaudeModel, supportsAdaptiveThinking } from "./bedrock-thinking.js";
|
|
2
|
+
/** Default token budgets per thinking level (token-based providers). */
|
|
3
|
+
export const DEFAULT_THINKING_BUDGETS = {
|
|
4
|
+
minimal: 1024,
|
|
5
|
+
low: 2048,
|
|
6
|
+
medium: 8192,
|
|
7
|
+
high: 16384,
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* True when the provider's simple stream adds the thinking budget on top of an
|
|
11
|
+
* explicit `maxTokens` via {@link adjustMaxTokensForThinking} (so a caller cap
|
|
12
|
+
* sizes only the answer).
|
|
13
|
+
*/
|
|
14
|
+
export function addsThinkingBudgetToMaxTokens(model) {
|
|
15
|
+
if (model.api === "anthropic-messages")
|
|
16
|
+
return true;
|
|
17
|
+
if (model.api === "bedrock-converse-stream") {
|
|
18
|
+
const bedrock = model;
|
|
19
|
+
return isAnthropicClaudeModel(bedrock) && !supportsAdaptiveThinking(bedrock.id, bedrock.name);
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
1
23
|
export function buildBaseOptions(_model, options, apiKey) {
|
|
2
24
|
return {
|
|
3
25
|
temperature: options?.temperature,
|
|
@@ -25,13 +47,7 @@ export function clampReasoning(effort) {
|
|
|
25
47
|
export function adjustMaxTokensForThinking(
|
|
26
48
|
// Undefined means no explicit caller cap. Use the model cap and fit thinking inside it.
|
|
27
49
|
baseMaxTokens, modelMaxTokens, reasoningLevel, customBudgets) {
|
|
28
|
-
const
|
|
29
|
-
minimal: 1024,
|
|
30
|
-
low: 2048,
|
|
31
|
-
medium: 8192,
|
|
32
|
-
high: 16384,
|
|
33
|
-
};
|
|
34
|
-
const budgets = { ...defaultBudgets, ...customBudgets };
|
|
50
|
+
const budgets = { ...DEFAULT_THINKING_BUDGETS, ...customBudgets };
|
|
35
51
|
const minOutputTokens = 1024;
|
|
36
52
|
const level = clampReasoning(reasoningLevel);
|
|
37
53
|
let thinkingBudget = budgets[level];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple-options.js","sourceRoot":"","sources":["../../src/providers/simple-options.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"simple-options.js","sourceRoot":"","sources":["../../src/providers/simple-options.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEzF,wEAAwE;AACxE,MAAM,CAAC,MAAM,wBAAwB,GAAwC;IAC5E,OAAO,EAAE,IAAI;IACb,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,KAAK;CACX,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,KAAiB,EAAW;IACzE,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,KAAK,CAAC,GAAG,KAAK,yBAAyB,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAyC,CAAC;QAC1D,OAAO,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/F,CAAC;IACD,OAAO,KAAK,CAAC;AAAA,CACb;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAkB,EAAE,OAA6B,EAAE,MAAe,EAAiB;IACnH,OAAO;QACN,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,MAAM,EAAE,OAAO,EAAE,MAAM;QACvB,MAAM,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM;QACjC,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,cAAc,EAAE,OAAO,EAAE,cAAc;QACvC,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,GAAG,EAAE,OAAO,EAAE,GAAG;QACjB,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,UAAU,EAAE,OAAO,EAAE,UAAU;QAC/B,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,yBAAyB,EAAE,OAAO,EAAE,yBAAyB;QAC7D,UAAU,EAAE,OAAO,EAAE,UAAU;QAC/B,eAAe,EAAE,OAAO,EAAE,eAAe;QACzC,QAAQ,EAAE,OAAO,EAAE,QAAQ;KAC3B,CAAC;AAAA,CACF;AAED,MAAM,UAAU,cAAc,CAC7B,MAAiC,EAC+B;IAChE,OAAO,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAAA,CACtF;AAED,MAAM,UAAU,0BAA0B;AACzC,wFAAwF;AACxF,aAAiC,EACjC,cAAsB,EACtB,cAA6B,EAC7B,aAA+B,EACiB;IAChD,MAAM,OAAO,GAAG,EAAE,GAAG,wBAAwB,EAAE,GAAG,aAAa,EAAE,CAAC;IAElE,MAAM,eAAe,GAAG,IAAI,CAAC;IAC7B,MAAM,KAAK,GAAG,cAAc,CAAC,cAAc,CAAE,CAAC;IAC9C,IAAI,cAAc,GAAG,OAAO,CAAC,KAAK,CAAE,CAAC;IACrC,MAAM,SAAS,GACd,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,cAAc,EAAE,cAAc,CAAC,CAAC;IAEzG,IAAI,SAAS,IAAI,cAAc,EAAE,CAAC;QACjC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,eAAe,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AAAA,CACrC","sourcesContent":["import type { Api, Model, SimpleStreamOptions, StreamOptions, ThinkingBudgets, ThinkingLevel } from \"../types.ts\";\nimport { isAnthropicClaudeModel, supportsAdaptiveThinking } from \"./bedrock-thinking.ts\";\n\n/** Default token budgets per thinking level (token-based providers). */\nexport const DEFAULT_THINKING_BUDGETS: Readonly<Required<ThinkingBudgets>> = {\n\tminimal: 1024,\n\tlow: 2048,\n\tmedium: 8192,\n\thigh: 16384,\n};\n\n/**\n * True when the provider's simple stream adds the thinking budget on top of an\n * explicit `maxTokens` via {@link adjustMaxTokensForThinking} (so a caller cap\n * sizes only the answer).\n */\nexport function addsThinkingBudgetToMaxTokens(model: Model<Api>): boolean {\n\tif (model.api === \"anthropic-messages\") return true;\n\tif (model.api === \"bedrock-converse-stream\") {\n\t\tconst bedrock = model as Model<\"bedrock-converse-stream\">;\n\t\treturn isAnthropicClaudeModel(bedrock) && !supportsAdaptiveThinking(bedrock.id, bedrock.name);\n\t}\n\treturn false;\n}\n\nexport function buildBaseOptions(_model: Model<Api>, options?: SimpleStreamOptions, apiKey?: string): StreamOptions {\n\treturn {\n\t\ttemperature: options?.temperature,\n\t\tmaxTokens: options?.maxTokens,\n\t\tsignal: options?.signal,\n\t\tapiKey: apiKey || options?.apiKey,\n\t\ttransport: options?.transport,\n\t\tcacheRetention: options?.cacheRetention,\n\t\tsessionId: options?.sessionId,\n\t\tcwd: options?.cwd,\n\t\theaders: options?.headers,\n\t\tonPayload: options?.onPayload,\n\t\tonResponse: options?.onResponse,\n\t\tonRateLimit: options?.onRateLimit,\n\t\ttimeoutMs: options?.timeoutMs,\n\t\twebsocketConnectTimeoutMs: options?.websocketConnectTimeoutMs,\n\t\tmaxRetries: options?.maxRetries,\n\t\tmaxRetryDelayMs: options?.maxRetryDelayMs,\n\t\tmetadata: options?.metadata,\n\t};\n}\n\nexport function clampReasoning(\n\teffort: ThinkingLevel | undefined,\n): Exclude<ThinkingLevel, \"xhigh\" | \"max\" | \"ultra\"> | undefined {\n\treturn effort === \"xhigh\" || effort === \"max\" || effort === \"ultra\" ? \"high\" : effort;\n}\n\nexport function adjustMaxTokensForThinking(\n\t// Undefined means no explicit caller cap. Use the model cap and fit thinking inside it.\n\tbaseMaxTokens: number | undefined,\n\tmodelMaxTokens: number,\n\treasoningLevel: ThinkingLevel,\n\tcustomBudgets?: ThinkingBudgets,\n): { maxTokens: number; thinkingBudget: number } {\n\tconst budgets = { ...DEFAULT_THINKING_BUDGETS, ...customBudgets };\n\n\tconst minOutputTokens = 1024;\n\tconst level = clampReasoning(reasoningLevel)!;\n\tlet thinkingBudget = budgets[level]!;\n\tconst maxTokens =\n\t\tbaseMaxTokens === undefined ? modelMaxTokens : Math.min(baseMaxTokens + thinkingBudget, modelMaxTokens);\n\n\tif (maxTokens <= thinkingBudget) {\n\t\tthinkingBudget = Math.max(0, maxTokens - minOutputTokens);\n\t}\n\n\treturn { maxTokens, thinkingBudget };\n}\n"]}
|