@@ -378,8 +378,12 @@ func (s *Session) resolveModelOverride(pattern string) (string, string, agentcor
378378
379379 if strings .Contains (pattern , "/" ) {
380380 if prov , model , ok := strings .Cut (pattern , "/" ); ok {
381+ provType , err := s .providerType (prov )
382+ if err != nil {
383+ return "" , "" , nil , err
384+ }
381385 apiKey , baseURL := s .resolveCredentials (prov )
382- chatModel , err := s .createModel (s . providerType ( prov ) , model , apiKey , baseURL )
386+ chatModel , err := s .createModel (provType , model , apiKey , baseURL )
383387 if err == nil {
384388 return prov , model , chatModel , nil
385389 }
@@ -401,12 +405,20 @@ func (s *Session) resolveModelOverride(pattern string) (string, string, agentcor
401405 switch len (matches ) {
402406 case 1 :
403407 m := matches [0 ]
408+ provType , err := s .providerType (m .provider )
409+ if err != nil {
410+ return "" , "" , nil , err
411+ }
404412 apiKey , baseURL := s .resolveCredentials (m .provider )
405- chatModel , err := s .createModel (s . providerType ( m . provider ) , m .model , apiKey , baseURL )
413+ chatModel , err := s .createModel (provType , m .model , apiKey , baseURL )
406414 return m .provider , m .model , chatModel , err
407415 case 0 :
416+ provType , err := s .providerType (curProv )
417+ if err != nil {
418+ return "" , "" , nil , err
419+ }
408420 apiKey , baseURL := s .resolveCredentials (curProv )
409- chatModel , err := s .createModel (s . providerType ( curProv ) , pattern , apiKey , baseURL )
421+ chatModel , err := s .createModel (provType , pattern , apiKey , baseURL )
410422 if err != nil {
411423 return "" , "" , nil , err
412424 }
@@ -437,7 +449,10 @@ func (s *Session) reclampThinkingTemporary() {
437449}
438450
439451func (s * Session ) SetModel (prov , model string ) error {
440- provType := s .providerType (prov )
452+ provType , err := s .providerType (prov )
453+ if err != nil {
454+ return err
455+ }
441456 apiKey , baseURL := s .resolveCredentials (prov )
442457 s .mu .Lock ()
443458 store := s .store
@@ -500,17 +515,14 @@ func (s *Session) SetModel(prov, model string) error {
500515}
501516
502517// providerType returns the protocol type for a provider key.
503- func (s * Session ) providerType (prov string ) string {
518+ func (s * Session ) providerType (prov string ) ( string , error ) {
504519 s .mu .Lock ()
505520 pc , ok := s .providers [prov ]
506521 s .mu .Unlock ()
507522 if ok {
508523 return pc .ProviderType (prov )
509524 }
510- if t , ok := config .KnownProviderTypes [prov ]; ok {
511- return t
512- }
513- return "openai"
525+ return config .ResolveProviderType (prov , "" )
514526}
515527
516528func (s * Session ) ResolveAndSetModel (pattern string ) (string , error ) {
@@ -583,13 +595,20 @@ func (s *Session) updateContextFromRegistry(providerKey, modelID string) {
583595 return
584596 }
585597 // Try provider-qualified lookup using the protocol type.
586- provType := s .providerType (providerKey )
587- entry , _ , err := s .registry .Resolve (provType + "/" + modelID )
588- if err != nil {
589- // Fallback to bare model ID for custom providers.
590- entry , _ , err = s .registry .Resolve (modelID )
598+ provType , err := s .providerType (providerKey )
599+ if err == nil {
600+ entry , _ , err := s .registry .Resolve (provType + "/" + modelID )
601+ if err == nil && entry .ContextWindow > 0 {
602+ s .agent .SetContextWindow (entry .ContextWindow )
603+ s .mu .Lock ()
604+ s .settings .ContextWindow = entry .ContextWindow
605+ s .mu .Unlock ()
606+ return
607+ }
591608 }
609+ entry , _ , err := s .registry .Resolve (modelID )
592610 if err != nil || entry .ContextWindow <= 0 {
611+ // Fallback to bare model ID for custom providers.
593612 return
594613 }
595614 s .agent .SetContextWindow (entry .ContextWindow )
@@ -756,7 +775,10 @@ func (s *Session) SwitchSession(id string) error {
756775
757776 var restoredModel agentcore.ChatModel
758777 if snapshot .Model != "" || snapshot .Provider != "" {
759- targetType := s .providerType (targetProvider )
778+ targetType , err := s .providerType (targetProvider )
779+ if err != nil {
780+ return err
781+ }
760782 restoredModel , err = s .createModel (targetType , targetModel , targetKey , targetBase )
761783 if err != nil {
762784 return fmt .Errorf ("restore model %s/%s: %w" , targetProvider , targetModel , err )
0 commit comments