@@ -15,15 +15,12 @@ import {
1515 resolveReasoningDefault ,
1616 resolveThinkingDefault ,
1717} from "../../agents/model-selection.js" ;
18- import { resolveSessionParentSessionKey } from "../../channels/plugins/session-conversation.js" ;
1918import type { OpenClawConfig } from "../../config/config.js" ;
2019import type { SessionEntry } from "../../config/sessions/types.js" ;
2120import { applyModelOverrideToSessionEntry } from "../../sessions/model-overrides.js" ;
22- import {
23- normalizeLowercaseStringOrEmpty ,
24- normalizeOptionalString ,
25- } from "../../shared/string-coerce.js" ;
21+ import { normalizeLowercaseStringOrEmpty } from "../../shared/string-coerce.js" ;
2622import type { ThinkLevel } from "./directives.js" ;
23+ import { resolveStoredModelOverride } from "./stored-model-override.js" ;
2724
2825export type ModelDirectiveSelection = {
2926 provider : string ;
@@ -142,61 +139,6 @@ function boundedLevenshteinDistance(a: string, b: string, maxDistance: number):
142139 return dist ;
143140}
144141
145- export type StoredModelOverride = {
146- provider ?: string ;
147- model : string ;
148- source : "session" | "parent" ;
149- } ;
150-
151- function resolveParentSessionKeyCandidate ( params : {
152- sessionKey ?: string ;
153- parentSessionKey ?: string ;
154- } ) : string | null {
155- const explicit = normalizeOptionalString ( params . parentSessionKey ) ;
156- if ( explicit && explicit !== params . sessionKey ) {
157- return explicit ;
158- }
159- const derived = resolveSessionParentSessionKey ( params . sessionKey ) ;
160- if ( derived && derived !== params . sessionKey ) {
161- return derived ;
162- }
163- return null ;
164- }
165-
166- export function resolveStoredModelOverride ( params : {
167- sessionEntry ?: SessionEntry ;
168- sessionStore ?: Record < string , SessionEntry > ;
169- sessionKey ?: string ;
170- parentSessionKey ?: string ;
171- defaultProvider : string ;
172- } ) : StoredModelOverride | null {
173- const direct = resolvePersistedOverrideModelRef ( {
174- defaultProvider : params . defaultProvider ,
175- overrideProvider : params . sessionEntry ?. providerOverride ,
176- overrideModel : params . sessionEntry ?. modelOverride ,
177- } ) ;
178- if ( direct ) {
179- return { ...direct , source : "session" } ;
180- }
181- const parentKey = resolveParentSessionKeyCandidate ( {
182- sessionKey : params . sessionKey ,
183- parentSessionKey : params . parentSessionKey ,
184- } ) ;
185- if ( ! parentKey || ! params . sessionStore ) {
186- return null ;
187- }
188- const parentEntry = params . sessionStore [ parentKey ] ;
189- const parentOverride = resolvePersistedOverrideModelRef ( {
190- defaultProvider : params . defaultProvider ,
191- overrideProvider : parentEntry ?. providerOverride ,
192- overrideModel : parentEntry ?. modelOverride ,
193- } ) ;
194- if ( ! parentOverride ) {
195- return null ;
196- }
197- return { ...parentOverride , source : "parent" } ;
198- }
199-
200142function scoreFuzzyMatch ( params : {
201143 provider : string ;
202144 model : string ;
0 commit comments