From f9a42811248620106adea733ab3713f631c84ae5 Mon Sep 17 00:00:00 2001 From: Bruce MacDonald Date: Mon, 30 Oct 2023 11:10:18 -0400 Subject: [PATCH 1/3] clean up: remove server functions from client (#937) --- cmd/cmd.go | 39 ++++++++++++--------------------------- server/routes.go | 16 ++++++++++++++++ 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index b0f9681c..a26ec5a0 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -11,6 +11,7 @@ import ( "io" "log" "net" + "net/http" "os" "os/exec" "os/signal" @@ -98,22 +99,21 @@ func RunHandler(cmd *cobra.Command, args []string) error { return err } - models, err := client.List(context.Background()) + name := args[0] + // check if the model exists on the server + _, err = client.Show(context.Background(), &api.ShowRequest{Name: name}) if err != nil { - return err - } - - canonicalModelPath := server.ParseModelPath(args[0]) - for _, model := range models.Models { - if model.Name == canonicalModelPath.GetShortTagname() { - return RunGenerate(cmd, args) + var statusError api.StatusError + switch { + case errors.As(err, &statusError) && statusError.StatusCode == http.StatusNotFound: + if err := PullHandler(cmd, args); err != nil { + return err + } + case err != nil: + return err } } - if err := PullHandler(cmd, args); err != nil { - return err - } - return RunGenerate(cmd, args) } @@ -731,21 +731,6 @@ func RunServer(cmd *cobra.Command, _ []string) error { origins = strings.Split(o, ",") } - if noprune := os.Getenv("OLLAMA_NOPRUNE"); noprune == "" { - if err := server.PruneLayers(); err != nil { - return err - } - - manifestsPath, err := server.GetManifestPath() - if err != nil { - return err - } - - if err := server.PruneDirectory(manifestsPath); err != nil { - return err - } - } - return server.Serve(ln, origins) } diff --git a/server/routes.go b/server/routes.go index 5c52dbfe..34aa4146 100644 --- a/server/routes.go +++ b/server/routes.go @@ -614,6 +614,22 @@ var defaultAllowOrigins = []string{ } func Serve(ln net.Listener, allowOrigins []string) error { + if noprune := os.Getenv("OLLAMA_NOPRUNE"); noprune == "" { + // clean up unused layers and manifests + if err := PruneLayers(); err != nil { + return err + } + + manifestsPath, err := GetManifestPath() + if err != nil { + return err + } + + if err := PruneDirectory(manifestsPath); err != nil { + return err + } + } + config := cors.DefaultConfig() config.AllowWildcard = true From 874bb31986ad723487c95fed12a0c3c8a70f4e8e Mon Sep 17 00:00:00 2001 From: Dirk Loss Date: Mon, 30 Oct 2023 19:34:29 +0100 Subject: [PATCH 2/3] Fix conversion command for gptneox (#948) --- docs/import.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/import.md b/docs/import.md index 6885830a..db0a53cb 100644 --- a/docs/import.md +++ b/docs/import.md @@ -185,7 +185,7 @@ python convert.py python convert-falcon-hf-to-gguf.py # GPTNeoXForCausalLM -python convert-falcon-hf-to-gguf.py +python convert-gptneox-hf-to-gguf.py # GPTBigCodeForCausalLM python convert-starcoder-hf-to-gguf.py From 0818b5e318b8ffc10daf91e9d676e8668680d343 Mon Sep 17 00:00:00 2001 From: Bruce MacDonald Date: Mon, 30 Oct 2023 16:18:12 -0400 Subject: [PATCH 3/3] readline windows terminal support (#950) - update the readline package to have basic support on windows, this is not full feature parity with the unix cli yet --- readline/buffer.go | 4 ++- readline/readline.go | 5 ++-- readline/term_windows.go | 62 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 readline/term_windows.go diff --git a/readline/buffer.go b/readline/buffer.go index 8b680282..d66b512a 100644 --- a/readline/buffer.go +++ b/readline/buffer.go @@ -2,6 +2,7 @@ package readline import ( "fmt" + "os" "github.com/emirpasic/gods/lists/arraylist" "golang.org/x/term" @@ -17,7 +18,8 @@ type Buffer struct { } func NewBuffer(prompt *Prompt) (*Buffer, error) { - width, height, err := term.GetSize(0) + fd := int(os.Stdout.Fd()) + width, height, err := term.GetSize(fd) if err != nil { fmt.Println("Error getting size:", err) return nil, err diff --git a/readline/readline.go b/readline/readline.go index d1fe2c8d..d3fcc537 100644 --- a/readline/readline.go +++ b/readline/readline.go @@ -51,11 +51,12 @@ func (i *Instance) Readline() (string, error) { } fmt.Print(prompt) - termios, err := SetRawMode(syscall.Stdin) + fd := int(syscall.Stdin) + termios, err := SetRawMode(fd) if err != nil { return "", err } - defer UnsetRawMode(syscall.Stdin, termios) + defer UnsetRawMode(fd, termios) buf, _ := NewBuffer(i.Prompt) diff --git a/readline/term_windows.go b/readline/term_windows.go new file mode 100644 index 00000000..3d1c80e1 --- /dev/null +++ b/readline/term_windows.go @@ -0,0 +1,62 @@ +package readline + +import ( + "syscall" + "unsafe" +) + +const ( + enableLineInput = 2 + enableWindowInput = 8 + enableMouseInput = 16 + enableInsertMode = 32 + enableQuickEditMode = 64 + enableExtendedFlags = 128 + enableProcessedOutput = 1 + enableWrapAtEolOutput = 2 + enableAutoPosition = 256 // Cursor position is not affected by writing data to the console. + enableEchoInput = 4 // Characters are written to the console as they're read. + enableProcessedInput = 1 // Enables input processing (like recognizing Ctrl+C). +) + +var kernel32 = syscall.NewLazyDLL("kernel32.dll") + +var ( + procGetConsoleMode = kernel32.NewProc("GetConsoleMode") + procSetConsoleMode = kernel32.NewProc("SetConsoleMode") +) + +type State struct { + mode uint32 +} + +// IsTerminal checks if the given file descriptor is associated with a terminal +func IsTerminal(fd int) bool { + var st uint32 + r, _, e := syscall.SyscallN(procGetConsoleMode.Addr(), uintptr(fd), uintptr(unsafe.Pointer(&st)), 0) + // if the call succeeds and doesn't produce an error, it's a terminal + return r != 0 && e == 0 +} + +func SetRawMode(fd int) (*State, error) { + var st uint32 + // retrieve the current mode of the terminal + _, _, e := syscall.SyscallN(procGetConsoleMode.Addr(), uintptr(fd), uintptr(unsafe.Pointer(&st)), 0) + if e != 0 { + return nil, error(e) + } + // modify the mode to set it to raw + raw := st &^ (enableEchoInput | enableProcessedInput | enableLineInput | enableProcessedOutput) + // apply the new mode to the terminal + _, _, e = syscall.SyscallN(procSetConsoleMode.Addr(), uintptr(fd), uintptr(raw), 0) + if e != 0 { + return nil, error(e) + } + // return the original state so that it can be restored later + return &State{st}, nil +} + +func UnsetRawMode(fd int, state *State) error { + _, _, err := syscall.SyscallN(procSetConsoleMode.Addr(), uintptr(fd), uintptr(state.mode), 0) + return err +}