diff --git a/api/client.go b/api/client.go index 4453a90a..1330b890 100644 --- a/api/client.go +++ b/api/client.go @@ -27,7 +27,7 @@ func checkError(resp *http.Response, body []byte) error { err := json.Unmarshal(body, &apiError) if err != nil { // Use the full body as the message if we fail to decode a response. - apiError.Message = string(body) + apiError.ErrorMessage = string(body) } return apiError @@ -92,7 +92,6 @@ func (c *Client) do(ctx context.Context, method, path string, reqData, respData } } return nil - } func (c *Client) stream(ctx context.Context, method, path string, data any, fn func([]byte) error) error { @@ -137,9 +136,9 @@ func (c *Client) stream(ctx context.Context, method, path string, data any, fn f if response.StatusCode >= 400 { return StatusError{ - StatusCode: response.StatusCode, - Status: response.Status, - Message: errorResponse.Error, + StatusCode: response.StatusCode, + Status: response.Status, + ErrorMessage: errorResponse.Error, } } diff --git a/api/types.go b/api/types.go index 11c9b8f9..b0433596 100644 --- a/api/types.go +++ b/api/types.go @@ -8,16 +8,23 @@ import ( ) type StatusError struct { - StatusCode int - Status string - Message string + StatusCode int + Status string + ErrorMessage string `json:"error"` } func (e StatusError) Error() string { - if e.Message != "" { - return fmt.Sprintf("%s: %s", e.Status, e.Message) + switch { + case e.Status != "" && e.ErrorMessage != "": + return fmt.Sprintf("%s: %s", e.Status, e.ErrorMessage) + case e.Status != "": + return e.Status + case e.ErrorMessage != "": + return e.ErrorMessage + default: + // this should not happen + return "something went wrong, please see the ollama server logs for details" } - return e.Status } type GenerateRequest struct { diff --git a/server/routes.go b/server/routes.go index 5b6846b0..c1a32209 100644 --- a/server/routes.go +++ b/server/routes.go @@ -2,6 +2,7 @@ package server import ( "encoding/json" + "errors" "io" "log" "net" @@ -178,6 +179,10 @@ func ListModelsHandler(c *gin.Context) { } err = filepath.Walk(fp, func(path string, info os.FileInfo, err error) error { if err != nil { + if errors.Is(err, os.ErrNotExist) { + log.Printf("manifest file does not exist: %s", fp) + return nil + } return err } if !info.IsDir() {