diff --git a/cmd/cmd_test.go b/cmd/cmd_test.go index ea4cf5983..fe21e400a 100644 --- a/cmd/cmd_test.go +++ b/cmd/cmd_test.go @@ -1345,6 +1345,20 @@ func TestNewCreateRequest(t *testing.T) { Model: "newmodel", }, }, + { + "explicit cloud model preserves source when parent lacks it", + "newmodel", + runOptions{ + Model: "qwen3.5:cloud", + ParentModel: "qwen3.5", + Messages: []api.Message{}, + WordWrap: true, + }, + &api.CreateRequest{ + From: "qwen3.5:cloud", + Model: "newmodel", + }, + }, { "parent model as filepath test", "newmodel", diff --git a/cmd/interactive.go b/cmd/interactive.go index 1f91f9eca..cf922d130 100644 --- a/cmd/interactive.go +++ b/cmd/interactive.go @@ -17,6 +17,7 @@ import ( "github.com/ollama/ollama/api" "github.com/ollama/ollama/envconfig" + "github.com/ollama/ollama/internal/modelref" "github.com/ollama/ollama/readline" "github.com/ollama/ollama/types/errtypes" "github.com/ollama/ollama/types/model" @@ -540,6 +541,13 @@ func NewCreateRequest(name string, opts runOptions) *api.CreateRequest { parentModel = "" } + // Preserve explicit cloud intent for sessions started with `:cloud`. + // Cloud model metadata can return a source-less parent_model (for example + // "qwen3.5"), which would otherwise make `/save` create a local derivative. + if modelref.HasExplicitCloudSource(opts.Model) && !modelref.HasExplicitCloudSource(parentModel) { + parentModel = "" + } + req := &api.CreateRequest{ Model: name, From: cmp.Or(parentModel, opts.Model),