|
@@ -287,38 +287,12 @@ func createBlob(cmd *cobra.Command, client *api.Client, path string) (string, er
|
|
|
}
|
|
|
|
|
|
func RunHandler(cmd *cobra.Command, args []string) error {
|
|
|
- client, err := api.ClientFromEnvironment()
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
-
|
|
|
- name := args[0]
|
|
|
-
|
|
|
- // check if the model exists on the server
|
|
|
- show, err := client.Show(cmd.Context(), &api.ShowRequest{Name: name})
|
|
|
- var statusError api.StatusError
|
|
|
- switch {
|
|
|
- case errors.As(err, &statusError) && statusError.StatusCode == http.StatusNotFound:
|
|
|
- if err := PullHandler(cmd, []string{name}); err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
-
|
|
|
- show, err = client.Show(cmd.Context(), &api.ShowRequest{Name: name})
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
- }
|
|
|
- case err != nil:
|
|
|
- return err
|
|
|
- }
|
|
|
-
|
|
|
interactive := true
|
|
|
|
|
|
opts := runOptions{
|
|
|
- Model: args[0],
|
|
|
- WordWrap: os.Getenv("TERM") == "xterm-256color",
|
|
|
- Options: map[string]interface{}{},
|
|
|
- MultiModal: slices.Contains(show.Details.Families, "clip"),
|
|
|
- ParentModel: show.Details.ParentModel,
|
|
|
+ Model: args[0],
|
|
|
+ WordWrap: os.Getenv("TERM") == "xterm-256color",
|
|
|
+ Options: map[string]interface{}{},
|
|
|
}
|
|
|
|
|
|
format, err := cmd.Flags().GetString("format")
|
|
@@ -362,11 +336,38 @@ func RunHandler(cmd *cobra.Command, args []string) error {
|
|
|
}
|
|
|
opts.WordWrap = !nowrap
|
|
|
|
|
|
- if !interactive {
|
|
|
- return generate(cmd, opts)
|
|
|
+ // Fill out the rest of the options based on information about the
|
|
|
+ // model.
|
|
|
+ client, err := api.ClientFromEnvironment()
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
}
|
|
|
|
|
|
- return generateInteractive(cmd, opts)
|
|
|
+ name := args[0]
|
|
|
+ info, err := func() (*api.ShowResponse, error) {
|
|
|
+ showReq := &api.ShowRequest{Name: name}
|
|
|
+ info, err := client.Show(cmd.Context(), showReq)
|
|
|
+ var se api.StatusError
|
|
|
+ if errors.As(err, &se) && se.StatusCode == http.StatusNotFound {
|
|
|
+ if err := PullHandler(cmd, []string{name}); err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ return client.Show(cmd.Context(), &api.ShowRequest{Name: name})
|
|
|
+ }
|
|
|
+ return info, err
|
|
|
+ }()
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ opts.MultiModal = slices.Contains(info.Details.Families, "clip")
|
|
|
+ opts.ParentModel = info.Details.ParentModel
|
|
|
+ opts.Messages = append(opts.Messages, info.Messages...)
|
|
|
+
|
|
|
+ if interactive {
|
|
|
+ return generateInteractive(cmd, opts)
|
|
|
+ }
|
|
|
+ return generate(cmd, opts)
|
|
|
}
|
|
|
|
|
|
func errFromUnknownKey(unknownKeyErr error) error {
|