mirror of https://github.com/ollama/ollama.git
				
				
				
			
		
			
	
	
		
			207 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			207 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Go
		
	
	
	
|  | package cmd | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"bytes" | ||
|  | 	"os" | ||
|  | 	"path/filepath" | ||
|  | 	"testing" | ||
|  | 
 | ||
|  | 	"github.com/google/go-cmp/cmp" | ||
|  | 
 | ||
|  | 	"github.com/ollama/ollama/api" | ||
|  | ) | ||
|  | 
 | ||
|  | func TestShowInfo(t *testing.T) { | ||
|  | 	t.Run("bare details", func(t *testing.T) { | ||
|  | 		var b bytes.Buffer | ||
|  | 		if err := showInfo(&api.ShowResponse{ | ||
|  | 			Details: api.ModelDetails{ | ||
|  | 				Family:            "test", | ||
|  | 				ParameterSize:     "7B", | ||
|  | 				QuantizationLevel: "FP16", | ||
|  | 			}, | ||
|  | 		}, &b); err != nil { | ||
|  | 			t.Fatal(err) | ||
|  | 		} | ||
|  | 
 | ||
|  | 		expect := `  Model | ||
|  |     architecture    test     | ||
|  |     parameters      7B       | ||
|  |     quantization    FP16     | ||
|  | 
 | ||
|  | ` | ||
|  | 
 | ||
|  | 		if diff := cmp.Diff(expect, b.String()); diff != "" { | ||
|  | 			t.Errorf("unexpected output (-want +got):\n%s", diff) | ||
|  | 		} | ||
|  | 	}) | ||
|  | 
 | ||
|  | 	t.Run("bare model info", func(t *testing.T) { | ||
|  | 		var b bytes.Buffer | ||
|  | 		if err := showInfo(&api.ShowResponse{ | ||
|  | 			ModelInfo: map[string]any{ | ||
|  | 				"general.architecture":    "test", | ||
|  | 				"general.parameter_count": float64(7_000_000_000), | ||
|  | 				"test.context_length":     float64(0), | ||
|  | 				"test.embedding_length":   float64(0), | ||
|  | 			}, | ||
|  | 			Details: api.ModelDetails{ | ||
|  | 				Family:            "test", | ||
|  | 				ParameterSize:     "7B", | ||
|  | 				QuantizationLevel: "FP16", | ||
|  | 			}, | ||
|  | 		}, &b); err != nil { | ||
|  | 			t.Fatal(err) | ||
|  | 		} | ||
|  | 
 | ||
|  | 		expect := `  Model | ||
|  |     architecture        test     | ||
|  |     parameters          7B       | ||
|  |     context length      0        | ||
|  |     embedding length    0        | ||
|  |     quantization        FP16     | ||
|  | 
 | ||
|  | ` | ||
|  | 		if diff := cmp.Diff(expect, b.String()); diff != "" { | ||
|  | 			t.Errorf("unexpected output (-want +got):\n%s", diff) | ||
|  | 		} | ||
|  | 	}) | ||
|  | 
 | ||
|  | 	t.Run("parameters", func(t *testing.T) { | ||
|  | 		var b bytes.Buffer | ||
|  | 		if err := showInfo(&api.ShowResponse{ | ||
|  | 			Details: api.ModelDetails{ | ||
|  | 				Family:            "test", | ||
|  | 				ParameterSize:     "7B", | ||
|  | 				QuantizationLevel: "FP16", | ||
|  | 			}, | ||
|  | 			Parameters: ` | ||
|  | 			stop never | ||
|  | 			stop gonna | ||
|  | 			stop give | ||
|  | 			stop you | ||
|  | 			stop up | ||
|  | 			temperature 99`, | ||
|  | 		}, &b); err != nil { | ||
|  | 			t.Fatal(err) | ||
|  | 		} | ||
|  | 
 | ||
|  | 		expect := `  Model | ||
|  |     architecture    test     | ||
|  |     parameters      7B       | ||
|  |     quantization    FP16     | ||
|  | 
 | ||
|  |   Parameters | ||
|  |     stop           never     | ||
|  |     stop           gonna     | ||
|  |     stop           give      | ||
|  |     stop           you       | ||
|  |     stop           up        | ||
|  |     temperature    99        | ||
|  | 
 | ||
|  | ` | ||
|  | 		if diff := cmp.Diff(expect, b.String()); diff != "" { | ||
|  | 			t.Errorf("unexpected output (-want +got):\n%s", diff) | ||
|  | 		} | ||
|  | 	}) | ||
|  | 
 | ||
|  | 	t.Run("project info", func(t *testing.T) { | ||
|  | 		var b bytes.Buffer | ||
|  | 		if err := showInfo(&api.ShowResponse{ | ||
|  | 			Details: api.ModelDetails{ | ||
|  | 				Family:            "test", | ||
|  | 				ParameterSize:     "7B", | ||
|  | 				QuantizationLevel: "FP16", | ||
|  | 			}, | ||
|  | 			ProjectorInfo: map[string]any{ | ||
|  | 				"general.architecture":         "clip", | ||
|  | 				"general.parameter_count":      float64(133_700_000), | ||
|  | 				"clip.vision.embedding_length": float64(0), | ||
|  | 				"clip.vision.projection_dim":   float64(0), | ||
|  | 			}, | ||
|  | 		}, &b); err != nil { | ||
|  | 			t.Fatal(err) | ||
|  | 		} | ||
|  | 
 | ||
|  | 		expect := `  Model | ||
|  |     architecture    test     | ||
|  |     parameters      7B       | ||
|  |     quantization    FP16     | ||
|  | 
 | ||
|  |   Projector | ||
|  |     architecture        clip        | ||
|  |     parameters          133.70M     | ||
|  |     embedding length    0           | ||
|  |     dimensions          0           | ||
|  | 
 | ||
|  | ` | ||
|  | 		if diff := cmp.Diff(expect, b.String()); diff != "" { | ||
|  | 			t.Errorf("unexpected output (-want +got):\n%s", diff) | ||
|  | 		} | ||
|  | 	}) | ||
|  | 
 | ||
|  | 	t.Run("system", func(t *testing.T) { | ||
|  | 		var b bytes.Buffer | ||
|  | 		if err := showInfo(&api.ShowResponse{ | ||
|  | 			Details: api.ModelDetails{ | ||
|  | 				Family:            "test", | ||
|  | 				ParameterSize:     "7B", | ||
|  | 				QuantizationLevel: "FP16", | ||
|  | 			}, | ||
|  | 			System: `You are a pirate! | ||
|  | Ahoy, matey! | ||
|  | Weigh anchor! | ||
|  | 			`, | ||
|  | 		}, &b); err != nil { | ||
|  | 			t.Fatal(err) | ||
|  | 		} | ||
|  | 
 | ||
|  | 		expect := `  Model | ||
|  |     architecture    test     | ||
|  |     parameters      7B       | ||
|  |     quantization    FP16     | ||
|  | 
 | ||
|  |   System | ||
|  |     You are a pirate!     | ||
|  |     Ahoy, matey!          | ||
|  | 
 | ||
|  | ` | ||
|  | 		if diff := cmp.Diff(expect, b.String()); diff != "" { | ||
|  | 			t.Errorf("unexpected output (-want +got):\n%s", diff) | ||
|  | 		} | ||
|  | 	}) | ||
|  | 
 | ||
|  | 	t.Run("license", func(t *testing.T) { | ||
|  | 		var b bytes.Buffer | ||
|  | 		license, err := os.ReadFile(filepath.Join("..", "LICENSE")) | ||
|  | 		if err != nil { | ||
|  | 			t.Fatal(err) | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if err := showInfo(&api.ShowResponse{ | ||
|  | 			Details: api.ModelDetails{ | ||
|  | 				Family:            "test", | ||
|  | 				ParameterSize:     "7B", | ||
|  | 				QuantizationLevel: "FP16", | ||
|  | 			}, | ||
|  | 			License: string(license), | ||
|  | 		}, &b); err != nil { | ||
|  | 			t.Fatal(err) | ||
|  | 		} | ||
|  | 
 | ||
|  | 		expect := `  Model | ||
|  |     architecture    test     | ||
|  |     parameters      7B       | ||
|  |     quantization    FP16     | ||
|  | 
 | ||
|  |   License | ||
|  |     MIT License              | ||
|  |     Copyright (c) Ollama     | ||
|  | 
 | ||
|  | ` | ||
|  | 		if diff := cmp.Diff(expect, b.String()); diff != "" { | ||
|  | 			t.Errorf("unexpected output (-want +got):\n%s", diff) | ||
|  | 		} | ||
|  | 	}) | ||
|  | } |