@@ -26,8 +26,10 @@ func (s ModelSelector) QualifiedModel() string {
2626// - model only: "gpt-4o"
2727// - model with prefix: "openai/gpt-4o"
2828// - explicit provider field: provider="openai", model="gpt-4o"
29+ // - explicit provider with raw slash model: provider="groq", model="openai/gpt-oss-120b"
2930//
30- // If provider is present in both places, values must match.
31+ // When provider is explicit, it is authoritative. A matching leading
32+ // "provider/" prefix on the model is stripped once as redundant qualification.
3133func ParseModelSelector (model , provider string ) (ModelSelector , error ) {
3234 model = strings .TrimSpace (model )
3335 provider = strings .TrimSpace (provider )
@@ -36,17 +38,13 @@ func ParseModelSelector(model, provider string) (ModelSelector, error) {
3638 return ModelSelector {}, fmt .Errorf ("model is required" )
3739 }
3840
39- parts := strings .SplitN (model , "/" , 2 )
40- if len (parts ) == 2 {
41- prefix := strings .TrimSpace (parts [0 ])
42- rest := strings .TrimSpace (parts [1 ])
43- if prefix != "" && rest != "" {
44- if provider != "" && provider != prefix {
45- return ModelSelector {}, fmt .Errorf ("provider field %q conflicts with model prefix %q" , provider , prefix )
46- }
47- provider = prefix
41+ if provider != "" {
42+ if prefix , rest , ok := splitQualifiedModel (model ); ok && prefix == provider {
4843 model = rest
4944 }
45+ } else if prefix , rest , ok := splitQualifiedModel (model ); ok {
46+ provider = prefix
47+ model = rest
5048 }
5149
5250 if model == "" {
@@ -58,3 +56,16 @@ func ParseModelSelector(model, provider string) (ModelSelector, error) {
5856 Provider : provider ,
5957 }, nil
6058}
59+
60+ func splitQualifiedModel (model string ) (prefix , rest string , ok bool ) {
61+ parts := strings .SplitN (model , "/" , 2 )
62+ if len (parts ) != 2 {
63+ return "" , "" , false
64+ }
65+ prefix = strings .TrimSpace (parts [0 ])
66+ rest = strings .TrimSpace (parts [1 ])
67+ if prefix == "" || rest == "" {
68+ return "" , "" , false
69+ }
70+ return prefix , rest , true
71+ }
0 commit comments