Skip to content

Commit f28b89b

Browse files
authored
feat(linking): use canonical model name when linking to lm-studio (#209)
1 parent d4df10d commit f28b89b

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

operations.go

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
tea "github.com/charmbracelet/bubbletea"
1717
"github.com/charmbracelet/lipgloss"
1818
"github.com/ollama/ollama/api"
19+
ollama_model "github.com/ollama/ollama/types/model"
1920
"github.com/sammcj/gollama/config"
2021
"github.com/sammcj/gollama/logging"
2122
"github.com/sammcj/gollama/styles"
@@ -1052,22 +1053,24 @@ func linkModel(modelName, lmStudioModelsDir string, noCleanup bool, dryRun bool,
10521053
if err != nil {
10531054
return "", fmt.Errorf("error getting model files for %s: %v", modelName, err)
10541055
}
1056+
fullModelName := ollama_model.ParseName(modelName)
10551057

1056-
// Extract author from model name (e.g., "fleo/tiny-r1-32b-preview:latest" -> "fleo")
1057-
parts := strings.Split(modelName, ":")
1058-
author := "unknown"
1059-
if len(parts) > 1 && strings.Contains(parts[0], "/") {
1060-
authorParts := strings.Split(parts[0], "/")
1061-
author = authorParts[0]
1062-
} else if strings.Contains(modelName, "/") {
1063-
authorParts := strings.Split(modelName, "/")
1064-
author = authorParts[0]
1058+
// Extract author from model name, e.g.:
1059+
// * "fleo/tiny-r1-32b-preview:latest" -> "registry.ollama.ai/fleo/tiny-r1-32b-preview" -> "fleo"
1060+
// * "huggingface.co/fleo/tiny-r1-32b-preview" -> "fleo"
1061+
// * "tiny-r1-32b-preview:latest" -> "registry.ollama.ai/library/tiny-r1-32b-preview" -> "registry.ollama.ai" (Use host as author if the namespace is default `library`)
1062+
author := fullModelName.Namespace
1063+
if author == ollama_model.DefaultName().Namespace {
1064+
author = fullModelName.Host
10651065
}
10661066

10671067
// Create a clean model name for the file
1068-
lmStudioModelName := strings.ReplaceAll(strings.ReplaceAll(modelName, ":", "-"), "_", "-")
1069-
lmStudioModelName = strings.ReplaceAll(lmStudioModelName, "/", "-")
1070-
lmStudioModelDir := filepath.Join(lmStudioModelsDir, author, lmStudioModelName+"-GGUF")
1068+
// * model tag is appended to the model name if it's not the default `latest` tag
1069+
lmStudioModelName := fullModelName.Model
1070+
if fullModelName.Tag != ollama_model.DefaultName().Tag {
1071+
lmStudioModelName += "-" + fullModelName.Tag
1072+
}
1073+
lmStudioModelDir := filepath.Join(lmStudioModelsDir, author, lmStudioModelName)
10711074

10721075
// Check if the main model path is a valid file
10731076
fileInfo, err := os.Stat(modelFiles.MainModel)

0 commit comments

Comments
 (0)