This commit is contained in:
Michael Yang 2025-10-28 20:53:23 -07:00
parent a3df958032
commit 929542140f
4 changed files with 60 additions and 60 deletions

View File

@ -352,15 +352,6 @@ func (c *Client) Create(ctx context.Context, req *CreateRequest, fn CreateProgre
}) })
} }
// List lists models that are available locally.
func (c *Client) List(ctx context.Context) (*ListResponse, error) {
var lr ListResponse
if err := c.do(ctx, http.MethodGet, "/api/tags", nil, &lr); err != nil {
return nil, err
}
return &lr, nil
}
// ListRunning lists running models. // ListRunning lists running models.
func (c *Client) ListRunning(ctx context.Context) (*ProcessResponse, error) { func (c *Client) ListRunning(ctx context.Context) (*ProcessResponse, error) {
var lr ProcessResponse var lr ProcessResponse

View File

@ -620,46 +620,6 @@ func PushHandler(cmd *cobra.Command, args []string) error {
return nil return nil
} }
func ListHandler(cmd *cobra.Command, args []string) error {
client, err := api.ClientFromEnvironment()
if err != nil {
return err
}
models, err := client.List(cmd.Context())
if err != nil {
return err
}
var data [][]string
for _, m := range models.Models {
if len(args) == 0 || strings.HasPrefix(strings.ToLower(m.Name), strings.ToLower(args[0])) {
var size string
if m.RemoteModel != "" {
size = "-"
} else {
size = format.HumanBytes(m.Size)
}
data = append(data, []string{m.Name, m.Digest[:12], size, format.HumanTime(m.ModifiedAt, "Never")})
}
}
table := tablewriter.NewWriter(os.Stdout)
table.SetHeader([]string{"NAME", "ID", "SIZE", "MODIFIED"})
table.SetHeaderAlignment(tablewriter.ALIGN_LEFT)
table.SetAlignment(tablewriter.ALIGN_LEFT)
table.SetHeaderLine(false)
table.SetBorder(false)
table.SetNoWhiteSpace(true)
table.SetTablePadding(" ")
table.AppendBulk(data)
table.Render()
return nil
}
func ListRunningHandler(cmd *cobra.Command, args []string) error { func ListRunningHandler(cmd *cobra.Command, args []string) error {
client, err := api.ClientFromEnvironment() client, err := api.ClientFromEnvironment()
if err != nil { if err != nil {
@ -1728,14 +1688,6 @@ func NewCLI() *cobra.Command {
RunE: SignoutHandler, RunE: SignoutHandler,
} }
listCmd := &cobra.Command{
Use: "list",
Aliases: []string{"ls"},
Short: "List models",
PreRunE: checkServerHeartbeat,
RunE: ListHandler,
}
psCmd := &cobra.Command{ psCmd := &cobra.Command{
Use: "ps", Use: "ps",
Short: "List running models", Short: "List running models",
@ -1781,7 +1733,6 @@ func NewCLI() *cobra.Command {
stopCmd, stopCmd,
pullCmd, pullCmd,
pushCmd, pushCmd,
listCmd,
psCmd, psCmd,
copyCmd, copyCmd,
deleteCmd, deleteCmd,
@ -1824,7 +1775,7 @@ func NewCLI() *cobra.Command {
pushCmd, pushCmd,
signinCmd, signinCmd,
signoutCmd, signoutCmd,
listCmd, cmdList(),
psCmd, psCmd,
copyCmd, copyCmd,
deleteCmd, deleteCmd,

View File

@ -186,7 +186,7 @@ func generateInteractive(cmd *cobra.Command, opts runOptions) error {
continue continue
case strings.HasPrefix(line, "/list"): case strings.HasPrefix(line, "/list"):
args := strings.Fields(line) args := strings.Fields(line)
if err := ListHandler(cmd, args[1:]); err != nil { if err := listHandler(cmd, args[1:]); err != nil {
return err return err
} }
case strings.HasPrefix(line, "/load"): case strings.HasPrefix(line, "/load"):

58
cmd/list.go Normal file
View File

@ -0,0 +1,58 @@
package cmd
import (
"os"
"strings"
"github.com/olekukonko/tablewriter"
"github.com/ollama/ollama/client"
"github.com/ollama/ollama/format"
"github.com/spf13/cobra"
)
func cmdList() *cobra.Command {
return &cobra.Command{
Use: "list [pattern]",
Aliases: []string{"ls"},
Short: "List available models in the local repository",
Args: cobra.MaximumNArgs(1),
PreRunE: checkServerHeartbeat,
RunE: listHandler,
}
}
func listHandler(cmd *cobra.Command, args []string) error {
c := client.New()
w, err := c.List(cmd.Context())
if err != nil {
return err
}
table := tablewriter.NewWriter(os.Stdout)
table.SetHeader([]string{"NAME", "ID", "SIZE", "MODIFIED"})
table.SetHeaderAlignment(tablewriter.ALIGN_LEFT)
table.SetAlignment(tablewriter.ALIGN_LEFT)
table.SetHeaderLine(false)
table.SetBorder(false)
table.SetNoWhiteSpace(true)
table.SetTablePadding(" ")
for _, m := range w.Models {
if len(args) == 0 || strings.HasPrefix(strings.ToLower(m.Name), strings.ToLower(args[0])) {
size := format.HumanBytes(m.Size)
if m.RemoteModel != "" {
size = "-"
}
table.Append([]string{
m.Model,
m.Digest[:12],
size,
format.HumanTime(m.ModifiedAt, "Never"),
})
}
}
table.Render()
return nil
}