From e2b64620b5ba01b3e77b1d9035a69ff39952a5ee Mon Sep 17 00:00:00 2001 From: LordMathis Date: Thu, 7 Aug 2025 19:10:06 +0200 Subject: [PATCH] Expose version endpoint --- cmd/server/main.go | 5 +++++ pkg/config/config.go | 9 ++++++--- pkg/server/handlers.go | 28 ++++++++++++++++++++++------ pkg/server/routes.go | 8 +++++--- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/cmd/server/main.go b/cmd/server/main.go index 4d56eb5..7433c78 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -39,6 +39,11 @@ func main() { fmt.Println("Using default configuration.") } + // Set version information + cfg.Version = version + cfg.CommitHash = commitHash + cfg.BuildTime = buildTime + // Create the data directory if it doesn't exist if cfg.Instances.AutoCreateDirs { if err := os.MkdirAll(cfg.Instances.InstancesDir, 0755); err != nil { diff --git a/pkg/config/config.go b/pkg/config/config.go index dac781c..fd33715 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -12,9 +12,12 @@ import ( // AppConfig represents the configuration for llamactl type AppConfig struct { - Server ServerConfig `yaml:"server"` - Instances InstancesConfig `yaml:"instances"` - Auth AuthConfig `yaml:"auth"` + Server ServerConfig `yaml:"server"` + Instances InstancesConfig `yaml:"instances"` + Auth AuthConfig `yaml:"auth"` + Version string `yaml:"-"` + CommitHash string `yaml:"-"` + BuildTime string `yaml:"-"` } // ServerConfig contains HTTP server configuration diff --git a/pkg/server/handlers.go b/pkg/server/handlers.go index 9eeb2a2..a5147e5 100644 --- a/pkg/server/handlers.go +++ b/pkg/server/handlers.go @@ -28,7 +28,23 @@ func NewHandler(im manager.InstanceManager, cfg config.AppConfig) *Handler { } } -// HelpHandler godoc +// VersionHandler godoc +// @Summary Get llamactl version +// @Description Returns the version of the llamactl command +// @Tags version +// @Security ApiKeyAuth +// @Produces text/plain +// @Success 200 {string} string "Version information" +// @Failure 500 {string} string "Internal Server Error" +// @Router /version [get] +func (h *Handler) VersionHandler() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "text/plain") + fmt.Fprintf(w, "Version: %s\nCommit: %s\nBuild Time: %s\n", h.cfg.Version, h.cfg.CommitHash, h.cfg.BuildTime) + } +} + +// LlamaServerHelpHandler godoc // @Summary Get help for llama server // @Description Returns the help text for the llama server command // @Tags server @@ -37,7 +53,7 @@ func NewHandler(im manager.InstanceManager, cfg config.AppConfig) *Handler { // @Success 200 {string} string "Help text" // @Failure 500 {string} string "Internal Server Error" // @Router /server/help [get] -func (h *Handler) HelpHandler() http.HandlerFunc { +func (h *Handler) LlamaServerHelpHandler() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { helpCmd := exec.Command("llama-server", "--help") output, err := helpCmd.CombinedOutput() @@ -50,7 +66,7 @@ func (h *Handler) HelpHandler() http.HandlerFunc { } } -// VersionHandler godoc +// LlamaServerVersionHandler godoc // @Summary Get version of llama server // @Description Returns the version of the llama server command // @Tags server @@ -59,7 +75,7 @@ func (h *Handler) HelpHandler() http.HandlerFunc { // @Success 200 {string} string "Version information" // @Failure 500 {string} string "Internal Server Error" // @Router /server/version [get] -func (h *Handler) VersionHandler() http.HandlerFunc { +func (h *Handler) LlamaServerVersionHandler() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { versionCmd := exec.Command("llama-server", "--version") output, err := versionCmd.CombinedOutput() @@ -72,7 +88,7 @@ func (h *Handler) VersionHandler() http.HandlerFunc { } } -// ListDevicesHandler godoc +// LlamaServerListDevicesHandler godoc // @Summary List available devices for llama server // @Description Returns a list of available devices for the llama server // @Tags server @@ -81,7 +97,7 @@ func (h *Handler) VersionHandler() http.HandlerFunc { // @Success 200 {string} string "List of devices" // @Failure 500 {string} string "Internal Server Error" // @Router /server/devices [get] -func (h *Handler) ListDevicesHandler() http.HandlerFunc { +func (h *Handler) LlamaServerListDevicesHandler() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { listCmd := exec.Command("llama-server", "--list-devices") output, err := listCmd.CombinedOutput() diff --git a/pkg/server/routes.go b/pkg/server/routes.go index b400742..a867131 100644 --- a/pkg/server/routes.go +++ b/pkg/server/routes.go @@ -42,10 +42,12 @@ func SetupRouter(handler *Handler) *chi.Mux { r.Use(authMiddleware.AuthMiddleware(KeyTypeManagement)) } + r.Get("/version", handler.VersionHandler()) // Get server version + r.Route("/server", func(r chi.Router) { - r.Get("/help", handler.HelpHandler()) - r.Get("/version", handler.VersionHandler()) - r.Get("/devices", handler.ListDevicesHandler()) + r.Get("/help", handler.LlamaServerHelpHandler()) + r.Get("/version", handler.LlamaServerVersionHandler()) + r.Get("/devices", handler.LlamaServerListDevicesHandler()) }) // Instance management endpoints