checkpoint

This commit is contained in:
Devon Rifkin
2026-02-02 15:42:57 -08:00
parent ba75143e71
commit 152b922265
3 changed files with 35 additions and 12 deletions

View File

@@ -11,13 +11,12 @@ import (
"strings"
"sync"
"github.com/ollama/ollama/envconfig"
"github.com/ollama/ollama/manifest"
"github.com/ollama/ollama/types/model"
)
const (
routerConfigFilename = "router.json"
routerConfigFilename = "config.json"
routerConfigVersion = 1
)
@@ -80,8 +79,8 @@ func (s *aliasStore) load() error {
continue
}
canonicalAlias := aliasName.String()
canonicalTarget := targetName.String()
canonicalAlias := displayAliasName(aliasName)
canonicalTarget := displayAliasName(targetName)
s.entries[normalizeAliasKey(aliasName)] = aliasEntry{
Alias: canonicalAlias,
Target: canonicalTarget,
@@ -156,7 +155,7 @@ func (s *aliasStore) ResolveName(name model.Name) (model.Name, bool, error) {
}
visited := map[string]struct{}{key: {}}
targetKey := strings.ToLower(entry.Target)
targetKey := normalizeAliasKeyString(entry.Target)
current := entry.Target
for {
@@ -178,7 +177,7 @@ func (s *aliasStore) ResolveName(name model.Name) (model.Name, bool, error) {
}
current = next.Target
targetKey = strings.ToLower(current)
targetKey = normalizeAliasKeyString(current)
}
}
@@ -205,12 +204,12 @@ func (s *aliasStore) Set(alias, target model.Name) error {
if !ok {
break
}
currentKey = strings.ToLower(next.Target)
currentKey = normalizeAliasKeyString(next.Target)
}
s.entries[aliasKey] = aliasEntry{
Alias: alias.String(),
Target: target.String(),
Alias: displayAliasName(alias),
Target: displayAliasName(target),
}
return s.saveLocked()
@@ -245,7 +244,25 @@ func (s *aliasStore) List() []aliasEntry {
}
func normalizeAliasKey(name model.Name) string {
return strings.ToLower(name.String())
return strings.ToLower(displayAliasName(name))
}
func normalizeAliasKeyString(value string) string {
n := model.ParseName(value)
if !n.IsValid() {
return strings.ToLower(strings.TrimSpace(value))
}
return normalizeAliasKey(n)
}
func displayAliasName(n model.Name) string {
display := n.DisplayShortest()
if strings.EqualFold(n.Tag, "latest") {
if idx := strings.LastIndex(display, ":"); idx != -1 {
return display[:idx]
}
}
return display
}
func localModelExists(name model.Name) (bool, error) {
@@ -263,7 +280,11 @@ func localModelExists(name model.Name) (bool, error) {
}
func routerConfigPath() string {
return filepath.Join(envconfig.Models(), routerConfigFilename)
home, err := os.UserHomeDir()
if err != nil {
return filepath.Join(".ollama", routerConfigFilename)
}
return filepath.Join(home, ".ollama", routerConfigFilename)
}
func (s *Server) aliasStore() (*aliasStore, error) {

View File

@@ -93,7 +93,7 @@ func (s *Server) CreateAliasHandler(c *gin.Context) {
return
}
c.JSON(http.StatusOK, aliasEntry{Alias: aliasName.String(), Target: targetName.String()})
c.JSON(http.StatusOK, aliasEntry{Alias: displayAliasName(aliasName), Target: displayAliasName(targetName)})
}
func (s *Server) DeleteAliasHandler(c *gin.Context) {

View File

@@ -14,6 +14,7 @@ import (
func TestAliasShadowingRejected(t *testing.T) {
gin.SetMode(gin.TestMode)
t.Setenv("HOME", t.TempDir())
s := Server{}
w := createRequest(t, s.CreateHandler, api.CreateRequest{
@@ -37,6 +38,7 @@ func TestAliasShadowingRejected(t *testing.T) {
func TestAliasResolvesForChatRemote(t *testing.T) {
gin.SetMode(gin.TestMode)
t.Setenv("HOME", t.TempDir())
var remoteModel string
rs := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {