diff --git a/api/types.go b/api/types.go index 85bdd31671..d3f6fc5a47 100644 --- a/api/types.go +++ b/api/types.go @@ -888,7 +888,7 @@ func (d *Duration) UnmarshalJSON(b []byte) (err error) { if t < 0 { d.Duration = time.Duration(math.MaxInt64) } else { - d.Duration = time.Duration(int(t) * int(time.Second)) + d.Duration = time.Duration(t * float64(time.Second)) } case string: d.Duration, err = time.ParseDuration(t) diff --git a/api/types_test.go b/api/types_test.go index fadaa646d6..5393b46230 100644 --- a/api/types_test.go +++ b/api/types_test.go @@ -17,6 +17,11 @@ func TestKeepAliveParsingFromJSON(t *testing.T) { req string exp *Duration }{ + { + name: "Unset", + req: `{ }`, + exp: nil, + }, { name: "Positive Integer", req: `{ "keep_alive": 42 }`, @@ -25,7 +30,7 @@ func TestKeepAliveParsingFromJSON(t *testing.T) { { name: "Positive Float", req: `{ "keep_alive": 42.5 }`, - exp: &Duration{42 * time.Second}, + exp: &Duration{42500 * time.Millisecond}, }, { name: "Positive Integer String", diff --git a/server/routes.go b/server/routes.go index ae1662148c..e6e4e2c476 100644 --- a/server/routes.go +++ b/server/routes.go @@ -189,7 +189,7 @@ func (s *Server) GenerateHandler(c *gin.Context) { } // expire the runner - if req.Prompt == "" && req.KeepAlive != nil && int(req.KeepAlive.Seconds()) == 0 { + if req.Prompt == "" && req.KeepAlive != nil && req.KeepAlive.Duration == 0 { s.sched.expireRunner(m) c.JSON(http.StatusOK, api.GenerateResponse{ @@ -1544,7 +1544,7 @@ func (s *Server) ChatHandler(c *gin.Context) { } // expire the runner - if len(req.Messages) == 0 && req.KeepAlive != nil && int(req.KeepAlive.Seconds()) == 0 { + if len(req.Messages) == 0 && req.KeepAlive != nil && req.KeepAlive.Duration == 0 { model, err := GetModel(req.Model) if err != nil { switch {