launch: use vram bytes for model recommendations (#15885)

This commit is contained in:
Parth Sareen
2026-04-29 18:40:14 -07:00
committed by GitHub
parent bad32c7244
commit b6447caebc
6 changed files with 36 additions and 20 deletions

View File

@@ -1659,7 +1659,7 @@ func TestBuildModelList_Descriptions(t *testing.T) {
for _, item := range items {
if item.Name == "qwen3.5" {
if !strings.Contains(item.Description, "~11GB") {
if !strings.Contains(item.Description, "~14GB") {
t.Errorf("not-installed qwen3.5 should show VRAM hint, got %q", item.Description)
}
return
@@ -1676,7 +1676,7 @@ func TestBuildModelList_Descriptions(t *testing.T) {
for _, item := range items {
if item.Name == "qwen3.5" {
if strings.Contains(item.Description, "~11GB") {
if strings.Contains(item.Description, "~14GB") {
t.Errorf("installed qwen3.5 should not show VRAM hint, got %q", item.Description)
}
return

View File

@@ -186,7 +186,7 @@ type ModelItem struct {
Name string
Description string
Recommended bool
VRAM string
VRAMBytes int64
ContextLength int
MaxOutputTokens int
}
@@ -783,7 +783,7 @@ func (c *launcherClient) requestRecommendations(ctx context.Context) ([]ModelIte
Name: name,
Description: description,
Recommended: true,
VRAM: strings.TrimSpace(rec.VRAM),
VRAMBytes: rec.VRAMBytes,
ContextLength: rec.ContextLength,
MaxOutputTokens: rec.MaxOutputTokens,
})

View File

@@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
"math"
"net/http"
"os"
"os/exec"
@@ -16,6 +17,7 @@ import (
"github.com/ollama/ollama/api"
"github.com/ollama/ollama/cmd/config"
"github.com/ollama/ollama/cmd/internal/fileutil"
"github.com/ollama/ollama/format"
internalcloud "github.com/ollama/ollama/internal/cloud"
"github.com/ollama/ollama/internal/modelref"
"github.com/ollama/ollama/progress"
@@ -26,8 +28,19 @@ var recommendedModels = []ModelItem{
{Name: "qwen3.5:cloud", Description: "Reasoning, coding, and agentic tool use with vision", Recommended: true, ContextLength: 262_144, MaxOutputTokens: 32_768},
{Name: "glm-5.1:cloud", Description: "Reasoning and code generation", Recommended: true, ContextLength: 202_752, MaxOutputTokens: 131_072},
{Name: "minimax-m2.7:cloud", Description: "Fast, efficient coding and real-world productivity", Recommended: true, ContextLength: 204_800, MaxOutputTokens: 128_000},
{Name: "gemma4", Description: "Reasoning and code generation locally", Recommended: true, VRAM: "~16GB"},
{Name: "qwen3.5", Description: "Reasoning, coding, and visual understanding locally", Recommended: true, VRAM: "~11GB"},
{Name: "gemma4", Description: "Reasoning and code generation locally", Recommended: true, VRAMBytes: 12 * format.GigaByte},
{Name: "qwen3.5", Description: "Reasoning, coding, and visual understanding locally", Recommended: true, VRAMBytes: 14 * format.GigaByte},
}
func displayVRAM(vramBytes int64) string {
if vramBytes <= 0 {
return ""
}
gb := float64(vramBytes) / format.GigaByte
if gb == math.Trunc(gb) {
return fmt.Sprintf("~%.0fGB", gb)
}
return fmt.Sprintf("~%.1fGB", gb)
}
// cloudModelLimit holds context and output token limits for a cloud model.
@@ -403,8 +416,8 @@ func buildModelListWithRecommendations(existing []modelInfo, recommendations []M
if items[i].Description != "" {
parts = append(parts, items[i].Description)
}
if items[i].VRAM != "" {
parts = append(parts, items[i].VRAM)
if vram := displayVRAM(items[i].VRAMBytes); vram != "" {
parts = append(parts, vram)
}
parts = append(parts, "(not downloaded)")
items[i].Description = strings.Join(parts, ", ")