@@ -120,8 +120,6 @@ export async function selectModel(
120120 configModel ?: string ,
121121 workspaceDir ?: string
122122) : Promise < ModelSelectionResult > {
123- logger ?. info ( 'model-selector' , 'Model selection started' , { currentModel, configModel, workspaceDir } ) ;
124-
125123 // Lazy import with retry logic - handles plugin initialization timing issues
126124 // Some providers (like openai via @openhax/codex) may not be ready on first attempt
127125 // Pass workspaceDir so OpencodeAI can find project-level config and plugins
@@ -133,32 +131,20 @@ export async function selectModel(
133131 if ( configModel ) {
134132 const parts = configModel . split ( '/' ) ;
135133 if ( parts . length !== 2 ) {
136- logger ?. warn ( 'model-selector' , '✗ Invalid config model format, expected "provider/model"' , {
137- configModel
138- } ) ;
134+ logger ?. warn ( 'model-selector' , 'Invalid config model format' , { configModel } ) ;
139135 } else {
140136 const [ providerID , modelID ] = parts ;
141- logger ?. debug ( 'model-selector' , 'Attempting to use config-specified model' , {
142- providerID,
143- modelID
144- } ) ;
145137
146138 try {
147139 const model = await opencodeAI . getLanguageModel ( providerID , modelID ) ;
148- logger ?. info ( 'model-selector' , '✓ Successfully using config-specified model' , {
149- providerID,
150- modelID
151- } ) ;
152140 return {
153141 model,
154142 modelInfo : { providerID, modelID } ,
155143 source : 'config' ,
156144 reason : 'Using model specified in dcp.jsonc config'
157145 } ;
158146 } catch ( error : any ) {
159- logger ?. warn ( 'model-selector' , '✗ Failed to use config-specified model, falling back' , {
160- providerID,
161- modelID,
147+ logger ?. warn ( 'model-selector' , `Config model failed: ${ providerID } /${ modelID } ` , {
162148 error : error . message
163149 } ) ;
164150 failedModelInfo = { providerID, modelID } ;
@@ -169,39 +155,20 @@ export async function selectModel(
169155 // Step 2: Try user's current model (if not skipped provider)
170156 if ( currentModel ) {
171157 if ( shouldSkipProvider ( currentModel . providerID ) ) {
172- logger ?. info ( 'model-selector' , 'Skipping user model (provider not suitable for background tasks)' , {
173- providerID : currentModel . providerID ,
174- modelID : currentModel . modelID ,
175- reason : 'github-copilot and anthropic are skipped for analysis'
176- } ) ;
177158 // Track as failed so we can show toast
178159 if ( ! failedModelInfo ) {
179160 failedModelInfo = currentModel ;
180161 }
181162 } else {
182- logger ?. debug ( 'model-selector' , 'Attempting to use user\'s current model' , {
183- providerID : currentModel . providerID ,
184- modelID : currentModel . modelID
185- } ) ;
186-
187163 try {
188164 const model = await opencodeAI . getLanguageModel ( currentModel . providerID , currentModel . modelID ) ;
189- logger ?. info ( 'model-selector' , '✓ Successfully using user\'s current model' , {
190- providerID : currentModel . providerID ,
191- modelID : currentModel . modelID
192- } ) ;
193165 return {
194166 model,
195167 modelInfo : currentModel ,
196168 source : 'user-model' ,
197169 reason : 'Using current session model'
198170 } ;
199171 } catch ( error : any ) {
200- logger ?. warn ( 'model-selector' , '✗ Failed to use user\'s current model' , {
201- providerID : currentModel . providerID ,
202- modelID : currentModel . modelID ,
203- error : error . message
204- } ) ;
205172 if ( ! failedModelInfo ) {
206173 failedModelInfo = currentModel ;
207174 }
@@ -210,43 +177,16 @@ export async function selectModel(
210177 }
211178
212179 // Step 3: Try fallback models from authenticated providers
213- logger ?. debug ( 'model-selector' , 'Fetching available authenticated providers' ) ;
214180 const providers = await opencodeAI . listProviders ( ) ;
215- const availableProviderIDs = Object . keys ( providers ) ;
216- logger ?. info ( 'model-selector' , 'Available authenticated providers' , {
217- providerCount : availableProviderIDs . length ,
218- providerIDs : availableProviderIDs ,
219- providers : Object . entries ( providers ) . map ( ( [ id , info ] : [ string , any ] ) => ( {
220- id,
221- source : info . source ,
222- name : info . info ?. name
223- } ) )
224- } ) ;
225-
226- logger ?. debug ( 'model-selector' , 'Attempting fallback models from providers' , {
227- priorityOrder : PROVIDER_PRIORITY
228- } ) ;
229181
230182 for ( const providerID of PROVIDER_PRIORITY ) {
231- if ( ! providers [ providerID ] ) {
232- logger ?. debug ( 'model-selector' , `Skipping ${ providerID } (not authenticated)` ) ;
233- continue ;
234- }
183+ if ( ! providers [ providerID ] ) continue ;
235184
236185 const fallbackModelID = FALLBACK_MODELS [ providerID ] ;
237- if ( ! fallbackModelID ) {
238- logger ?. debug ( 'model-selector' , `Skipping ${ providerID } (no fallback model configured)` ) ;
239- continue ;
240- }
241-
242- logger ?. debug ( 'model-selector' , `Attempting ${ providerID } /${ fallbackModelID } ` ) ;
186+ if ( ! fallbackModelID ) continue ;
243187
244188 try {
245189 const model = await opencodeAI . getLanguageModel ( providerID , fallbackModelID ) ;
246- logger ?. info ( 'model-selector' , `✓ Successfully using fallback model` , {
247- providerID,
248- modelID : fallbackModelID
249- } ) ;
250190 return {
251191 model,
252192 modelInfo : { providerID, modelID : fallbackModelID } ,
@@ -255,9 +195,6 @@ export async function selectModel(
255195 failedModel : failedModelInfo
256196 } ;
257197 } catch ( error : any ) {
258- logger ?. warn ( 'model-selector' , `✗ Failed to use ${ providerID } /${ fallbackModelID } ` , {
259- error : error . message
260- } ) ;
261198 continue ;
262199 }
263200 }
@@ -270,14 +207,8 @@ export async function selectModel(
270207 * This can be used by the plugin to get the current session's model
271208 */
272209export function extractModelFromSession ( sessionState : any , logger ?: Logger ) : ModelInfo | undefined {
273- logger ?. debug ( 'model-selector' , 'Extracting model from session state' ) ;
274-
275210 // Try to get from ACP session state
276211 if ( sessionState ?. model ?. providerID && sessionState ?. model ?. modelID ) {
277- logger ?. info ( 'model-selector' , 'Found model in ACP session state' , {
278- providerID : sessionState . model . providerID ,
279- modelID : sessionState . model . modelID
280- } ) ;
281212 return {
282213 providerID : sessionState . model . providerID ,
283214 modelID : sessionState . model . modelID
@@ -288,17 +219,12 @@ export function extractModelFromSession(sessionState: any, logger?: Logger): Mod
288219 if ( sessionState ?. messages && Array . isArray ( sessionState . messages ) ) {
289220 const lastMessage = sessionState . messages [ sessionState . messages . length - 1 ] ;
290221 if ( lastMessage ?. model ?. providerID && lastMessage ?. model ?. modelID ) {
291- logger ?. info ( 'model-selector' , 'Found model in last message' , {
292- providerID : lastMessage . model . providerID ,
293- modelID : lastMessage . model . modelID
294- } ) ;
295222 return {
296223 providerID : lastMessage . model . providerID ,
297224 modelID : lastMessage . model . modelID
298225 } ;
299226 }
300227 }
301228
302- logger ?. warn ( 'model-selector' , 'Could not extract model from session state' ) ;
303229 return undefined ;
304230}
0 commit comments