Descriptive arg error messages and other fixes

This commit is contained in:
Roy Han 2024-06-06 17:24:14 -07:00
parent cdbda76fa9
commit ebbaa8b513
3 changed files with 40 additions and 46 deletions

View File

@ -239,7 +239,7 @@ type ShowResponse struct {
System string `json:"system,omitempty"` System string `json:"system,omitempty"`
Details ModelDetails `json:"details,omitempty"` Details ModelDetails `json:"details,omitempty"`
Messages []Message `json:"messages,omitempty"` Messages []Message `json:"messages,omitempty"`
ModelInfo json.RawMessage `json:"model_info,omitempty"` ModelInfo map[string]any `json:"model_info,omitempty"`
} }
// CopyRequest is the request passed to [Client.Copy]. // CopyRequest is the request passed to [Client.Copy].

View File

@ -579,8 +579,10 @@ func ShowHandler(cmd *cobra.Command, args []string) error {
return err return err
} }
if len(args) != 1 { if len(args) == 0 {
return errors.New("missing model name") 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") license, errLicense := cmd.Flags().GetBool("license")
@ -623,12 +625,10 @@ func ShowHandler(cmd *cobra.Command, args []string) error {
showType = "template" showType = "template"
} }
if flagsSet > 1 { switch flagsSet {
return errors.New("only one of '--license', '--modelfile', '--parameters', '--system', or '--template' can be specified") case 0:
} else if flagsSet == 0 {
return errors.New("one of '--license', '--modelfile', '--parameters', '--system', or '--template' must be specified") return errors.New("one of '--license', '--modelfile', '--parameters', '--system', or '--template' must be specified")
} case 1:
req := api.ShowRequest{Name: args[0]} req := api.ShowRequest{Name: args[0]}
resp, err := client.Show(cmd.Context(), &req) resp, err := client.Show(cmd.Context(), &req)
if err != nil { if err != nil {
@ -647,6 +647,9 @@ func ShowHandler(cmd *cobra.Command, args []string) error {
case "template": case "template":
fmt.Println(resp.Template) fmt.Println(resp.Template)
} }
default:
return errors.New("only one of '--license', '--modelfile', '--parameters', '--system', or '--template' can be specified")
}
return nil return nil
} }
@ -1122,7 +1125,6 @@ func NewCLI() *cobra.Command {
showCmd := &cobra.Command{ showCmd := &cobra.Command{
Use: "show MODEL", Use: "show MODEL",
Short: "Show information for a model", Short: "Show information for a model",
Args: cobra.ExactArgs(1),
PreRunE: checkServerHeartbeat, PreRunE: checkServerHeartbeat,
RunE: ShowHandler, RunE: ShowHandler,
} }

View File

@ -729,38 +729,30 @@ func GetModelInfo(req api.ShowRequest) (*api.ShowResponse, error) {
return resp, nil return resp, nil
} }
func getGGMLData(model *Model) ([]byte, error) { func getGGMLData(model *Model) (llm.KV, error) {
f, err := os.Open(model.ModelPath) f, err := os.Open(model.ModelPath)
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer f.Close()
ggml, _, err := llm.DecodeGGML(f) ggml, _, err := llm.DecodeGGML(f)
if err != nil { if err != nil {
return nil, err return nil, err
} }
f.Close()
kv := ggml.KV() kv := ggml.KV()
for k := range kv { for k := range kv {
switch v := kv[k].(type) { if t, ok := kv[k].([]any); ok {
case []interface{}: kv[k] = fmt.Sprintf("(%d items)", len(t))
if len(v) > 5 {
kv[k] = []string{}
}
} }
} }
kv["embedding_model"] = model.IsEmbedding() // kv["embedding_model"] = model.IsEmbedding()
ggmlJson, err := json.Marshal(kv) return kv, nil
if err != nil {
return nil, err
}
return ggmlJson, nil
} }
func (s *Server) ListModelsHandler(c *gin.Context) { func (s *Server) ListModelsHandler(c *gin.Context) {