81 lines
2.3 KiB
Go
81 lines
2.3 KiB
Go
package launch
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/ollama/ollama/api"
|
|
modelpkg "github.com/ollama/ollama/types/model"
|
|
)
|
|
|
|
func TestModelInventoryResolveRefreshesLocalMiss(t *testing.T) {
|
|
calls := 0
|
|
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
if r.URL.Path != "/api/tags" {
|
|
http.NotFound(w, r)
|
|
return
|
|
}
|
|
calls++
|
|
if calls == 1 {
|
|
fmt.Fprint(w, `{"models":[]}`)
|
|
return
|
|
}
|
|
fmt.Fprint(w, `{"models":[{"name":"new-model","size":123,"details":{"context_length":65536,"embedding_length":1024},"capabilities":["vision","tools"]}]}`)
|
|
}))
|
|
defer srv.Close()
|
|
|
|
u, _ := url.Parse(srv.URL)
|
|
inventory := newModelInventory(api.NewClient(u, srv.Client()))
|
|
|
|
got := inventory.Resolve(context.Background(), []string{"new-model"})
|
|
if calls != 2 {
|
|
t.Fatalf("List calls = %d, want 2", calls)
|
|
}
|
|
if len(got) != 1 {
|
|
t.Fatalf("Resolve returned %d models, want 1", len(got))
|
|
}
|
|
if got[0].Name != "new-model" {
|
|
t.Fatalf("Name = %q, want new-model", got[0].Name)
|
|
}
|
|
if got[0].ContextLength != 65_536 || got[0].EmbeddingLength != 1_024 {
|
|
t.Fatalf("metadata = context %d embedding %d, want refreshed metadata", got[0].ContextLength, got[0].EmbeddingLength)
|
|
}
|
|
if !got[0].HasCapability(modelpkg.CapabilityVision) || !got[0].ToolCapable {
|
|
t.Fatalf("capabilities = %v toolCapable=%v, want refreshed capabilities", got[0].Capabilities, got[0].ToolCapable)
|
|
}
|
|
}
|
|
|
|
func TestModelInventoryResolveDoesNotRefreshCloudMiss(t *testing.T) {
|
|
calls := 0
|
|
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
if r.URL.Path != "/api/tags" {
|
|
http.NotFound(w, r)
|
|
return
|
|
}
|
|
calls++
|
|
fmt.Fprint(w, `{"models":[]}`)
|
|
}))
|
|
defer srv.Close()
|
|
|
|
u, _ := url.Parse(srv.URL)
|
|
inventory := newModelInventory(api.NewClient(u, srv.Client()))
|
|
|
|
got := inventory.Resolve(context.Background(), []string{"glm-5.1:cloud"})
|
|
if calls != 1 {
|
|
t.Fatalf("List calls = %d, want 1", calls)
|
|
}
|
|
if len(got) != 1 {
|
|
t.Fatalf("Resolve returned %d models, want 1", len(got))
|
|
}
|
|
if got[0].Name != "glm-5.1:cloud" || !got[0].Remote {
|
|
t.Fatalf("resolved model = %#v, want cloud fallback", got[0])
|
|
}
|
|
if got[0].ContextLength <= 0 || got[0].MaxOutputTokens <= 0 {
|
|
t.Fatalf("cloud limits not applied: %#v", got[0])
|
|
}
|
|
}
|