@@ -9,7 +9,7 @@ import type {
99} from "@t3tools/contracts" ;
1010import { Effect , Equal , Layer , Option , Result , Stream } from "effect" ;
1111import { ChildProcess , ChildProcessSpawner } from "effect/unstable/process" ;
12- import { getDefaultEffort , hasEffortLevel , trimOrNull } from "@t3tools/shared/model" ;
12+ import { resolveContextWindow , resolveEffort } from "@t3tools/shared/model" ;
1313
1414import {
1515 buildServerProvider ,
@@ -42,6 +42,10 @@ const BUILT_IN_MODELS: ReadonlyArray<ServerProviderModel> = [
4242 ] ,
4343 supportsFastMode : true ,
4444 supportsThinkingToggle : false ,
45+ contextWindowOptions : [
46+ { value : "200k" , label : "200k" } ,
47+ { value : "1m" , label : "1M" , isDefault : true } ,
48+ ] ,
4549 promptInjectedEffortLevels : [ "ultrathink" ] ,
4650 } satisfies ModelCapabilities ,
4751 } ,
@@ -58,6 +62,10 @@ const BUILT_IN_MODELS: ReadonlyArray<ServerProviderModel> = [
5862 ] ,
5963 supportsFastMode : false ,
6064 supportsThinkingToggle : false ,
65+ contextWindowOptions : [
66+ { value : "200k" , label : "200k" } ,
67+ { value : "1m" , label : "1M" , isDefault : true } ,
68+ ] ,
6169 promptInjectedEffortLevels : [ "ultrathink" ] ,
6270 } satisfies ModelCapabilities ,
6371 } ,
@@ -69,6 +77,7 @@ const BUILT_IN_MODELS: ReadonlyArray<ServerProviderModel> = [
6977 reasoningEffortLevels : [ ] ,
7078 supportsFastMode : false ,
7179 supportsThinkingToggle : true ,
80+ contextWindowOptions : [ ] ,
7281 promptInjectedEffortLevels : [ ] ,
7382 } satisfies ModelCapabilities ,
7483 } ,
@@ -81,6 +90,7 @@ export function getClaudeModelCapabilities(model: string | null | undefined): Mo
8190 reasoningEffortLevels : [ ] ,
8291 supportsFastMode : false ,
8392 supportsThinkingToggle : false ,
93+ contextWindowOptions : [ ] ,
8494 promptInjectedEffortLevels : [ ] ,
8595 }
8696 ) ;
@@ -91,23 +101,16 @@ export function normalizeClaudeModelOptions(
91101 modelOptions : ClaudeModelOptions | null | undefined ,
92102) : ClaudeModelOptions | undefined {
93103 const caps = getClaudeModelCapabilities ( model ) ;
94- const defaultReasoningEffort = getDefaultEffort ( caps ) ;
95- const resolvedEffort = trimOrNull ( modelOptions ?. effort ) ;
96- const isPromptInjected = caps . promptInjectedEffortLevels . includes ( resolvedEffort ?? "" ) ;
97- const effort =
98- resolvedEffort &&
99- ! isPromptInjected &&
100- hasEffortLevel ( caps , resolvedEffort ) &&
101- resolvedEffort !== defaultReasoningEffort
102- ? resolvedEffort
103- : undefined ;
104+ const effort = resolveEffort ( caps , modelOptions ?. effort ) ;
104105 const thinking =
105106 caps . supportsThinkingToggle && modelOptions ?. thinking === false ? false : undefined ;
106107 const fastMode = caps . supportsFastMode && modelOptions ?. fastMode === true ? true : undefined ;
108+ const contextWindow = resolveContextWindow ( caps , modelOptions ?. contextWindow ) ;
107109 const nextOptions : ClaudeModelOptions = {
108110 ...( thinking === false ? { thinking : false } : { } ) ,
109- ...( effort ? { effort } : { } ) ,
111+ ...( effort ? { effort : effort as ClaudeModelOptions [ "effort" ] } : { } ) ,
110112 ...( fastMode ? { fastMode : true } : { } ) ,
113+ ...( contextWindow ? { contextWindow } : { } ) ,
111114 } ;
112115 return Object . keys ( nextOptions ) . length > 0 ? nextOptions : undefined ;
113116}
0 commit comments