From ebbaa8b51387b8118075a5e2a0fcb25c469053cf Mon Sep 17 00:00:00 2001 From: Roy Han Date: Thu, 6 Jun 2024 17:24:14 -0700 Subject: [PATCH] Descriptive arg error messages and other fixes --- api/types.go | 16 ++++++++-------- cmd/cmd.go | 48 +++++++++++++++++++++++++----------------------- server/routes.go | 22 +++++++--------------- 3 files changed, 40 insertions(+), 46 deletions(-) diff --git a/api/types.go b/api/types.go index efd8593fb..65d5763bd 100644 --- a/api/types.go +++ b/api/types.go @@ -232,14 +232,14 @@ type ShowRequest struct { // ShowResponse is the response returned from [Client.Show]. type ShowResponse struct { - License string `json:"license,omitempty"` - Modelfile string `json:"modelfile,omitempty"` - Parameters string `json:"parameters,omitempty"` - Template string `json:"template,omitempty"` - System string `json:"system,omitempty"` - Details ModelDetails `json:"details,omitempty"` - Messages []Message `json:"messages,omitempty"` - ModelInfo json.RawMessage `json:"model_info,omitempty"` + License string `json:"license,omitempty"` + Modelfile string `json:"modelfile,omitempty"` + Parameters string `json:"parameters,omitempty"` + Template string `json:"template,omitempty"` + System string `json:"system,omitempty"` + Details ModelDetails `json:"details,omitempty"` + Messages []Message `json:"messages,omitempty"` + ModelInfo map[string]any `json:"model_info,omitempty"` } // CopyRequest is the request passed to [Client.Copy]. diff --git a/cmd/cmd.go b/cmd/cmd.go index b5747543c..591e860b2 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -579,8 +579,10 @@ func ShowHandler(cmd *cobra.Command, args []string) error { return err } - if len(args) != 1 { + if len(args) == 0 { return errors.New("missing model name") + } else if len(args) > 1 { + return errors.New("only one model name can be specified") } license, errLicense := cmd.Flags().GetBool("license") @@ -623,29 +625,30 @@ func ShowHandler(cmd *cobra.Command, args []string) error { showType = "template" } - if flagsSet > 1 { - return errors.New("only one of '--license', '--modelfile', '--parameters', '--system', or '--template' can be specified") - } else if flagsSet == 0 { + switch flagsSet { + case 0: return errors.New("one of '--license', '--modelfile', '--parameters', '--system', or '--template' must be specified") - } + case 1: + req := api.ShowRequest{Name: args[0]} + resp, err := client.Show(cmd.Context(), &req) + if err != nil { + return err + } - req := api.ShowRequest{Name: args[0]} - resp, err := client.Show(cmd.Context(), &req) - if err != nil { - return err - } - - switch showType { - case "license": - fmt.Println(resp.License) - case "modelfile": - fmt.Println(resp.Modelfile) - case "parameters": - fmt.Println(resp.Parameters) - case "system": - fmt.Println(resp.System) - case "template": - fmt.Println(resp.Template) + switch showType { + case "license": + fmt.Println(resp.License) + case "modelfile": + fmt.Println(resp.Modelfile) + case "parameters": + fmt.Println(resp.Parameters) + case "system": + fmt.Println(resp.System) + case "template": + fmt.Println(resp.Template) + } + default: + return errors.New("only one of '--license', '--modelfile', '--parameters', '--system', or '--template' can be specified") } return nil @@ -1122,7 +1125,6 @@ func NewCLI() *cobra.Command { showCmd := &cobra.Command{ Use: "show MODEL", Short: "Show information for a model", - Args: cobra.ExactArgs(1), PreRunE: checkServerHeartbeat, RunE: ShowHandler, } diff --git a/server/routes.go b/server/routes.go index 08e9bb60a..ea8bc28a0 100644 --- a/server/routes.go +++ b/server/routes.go @@ -729,38 +729,30 @@ func GetModelInfo(req api.ShowRequest) (*api.ShowResponse, error) { return resp, nil } -func getGGMLData(model *Model) ([]byte, error) { +func getGGMLData(model *Model) (llm.KV, error) { f, err := os.Open(model.ModelPath) if err != nil { return nil, err } + defer f.Close() + ggml, _, err := llm.DecodeGGML(f) if err != nil { return nil, err } - f.Close() - kv := ggml.KV() for k := range kv { - switch v := kv[k].(type) { - case []interface{}: - if len(v) > 5 { - kv[k] = []string{} - } + if t, ok := kv[k].([]any); ok { + kv[k] = fmt.Sprintf("(%d items)", len(t)) } } - kv["embedding_model"] = model.IsEmbedding() + // kv["embedding_model"] = model.IsEmbedding() - ggmlJson, err := json.Marshal(kv) - if err != nil { - return nil, err - } - - return ggmlJson, nil + return kv, nil } func (s *Server) ListModelsHandler(c *gin.Context) {