62aea0e83d
- refactor shared http functionality into internal/shared/http.go - remove stripping of Authorization and x-api-key - add Request Context middleware to internal/server - add /ui and /metrics behind auth middleware, fixes #717 Fix #717 Updates: #834
53 lines
1.7 KiB
Go
53 lines
1.7 KiB
Go
package router
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/mostlygeek/llama-swap/internal/logmon"
|
|
"github.com/mostlygeek/llama-swap/internal/process"
|
|
"github.com/mostlygeek/llama-swap/internal/shared"
|
|
)
|
|
|
|
var (
|
|
ErrNoRouterFound = shared.ErrNoRouterFound
|
|
ErrNoPeerModelFound = shared.ErrNoPeerModelFound
|
|
ErrNoLocalModelFound = shared.ErrNoLocalModelFound
|
|
)
|
|
|
|
type Router interface {
|
|
// Shutdown blocks until the router has shutdown returning nil
|
|
// when the router has shutdown successfully.
|
|
//
|
|
// timeout controls how long to wait for inflight requests to finish. After
|
|
// the timeout all inflight requests will be cancelled.
|
|
Shutdown(timeout time.Duration) error
|
|
|
|
// ServeHTTP implements the http.Handler and requests coming in will
|
|
// trigger any model swapping and routing logic.
|
|
ServeHTTP(http.ResponseWriter, *http.Request)
|
|
|
|
// Handles reports whether this router can serve requests for the given model.
|
|
Handles(model string) bool
|
|
}
|
|
|
|
// LocalRouter is a Router backed by local processes whose state can be
|
|
// inspected and which can be individually stopped. Peer routers, which only
|
|
// forward to remote hosts, do not implement it.
|
|
type LocalRouter interface {
|
|
Router
|
|
|
|
// RunningModels returns the current state of every process that is not
|
|
// stopped or shut down, keyed by model ID.
|
|
RunningModels() map[string]process.ProcessState
|
|
|
|
// Unload stops the named models, or every running model when none are
|
|
// named. It blocks until each targeted process has stopped.
|
|
Unload(timeout time.Duration, models ...string)
|
|
|
|
// ProcessLogger returns the log monitor for the named model's process.
|
|
// modelID must be a real (non-alias) config key. Returns false when the
|
|
// model is not known to this router.
|
|
ProcessLogger(modelID string) (*logmon.Monitor, bool)
|
|
}
|