mirror of
https://github.com/lordmathis/llamactl.git
synced 2025-11-06 09:04:27 +00:00
Improve comments
This commit is contained in:
@@ -12,11 +12,13 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// errorResponse represents an error response returned by the API
|
||||||
type errorResponse struct {
|
type errorResponse struct {
|
||||||
Error string `json:"error"`
|
Error string `json:"error"`
|
||||||
Details string `json:"details,omitempty"`
|
Details string `json:"details,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// writeError writes a JSON error response with the specified HTTP status code
|
||||||
func writeError(w http.ResponseWriter, status int, code, details string) {
|
func writeError(w http.ResponseWriter, status int, code, details string) {
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
w.WriteHeader(status)
|
w.WriteHeader(status)
|
||||||
@@ -25,6 +27,7 @@ func writeError(w http.ResponseWriter, status int, code, details string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// writeJSON writes a JSON response with the specified HTTP status code
|
||||||
func writeJSON(w http.ResponseWriter, status int, data any) {
|
func writeJSON(w http.ResponseWriter, status int, data any) {
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
w.WriteHeader(status)
|
w.WriteHeader(status)
|
||||||
@@ -33,6 +36,7 @@ func writeJSON(w http.ResponseWriter, status int, data any) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// writeText writes a plain text response with the specified HTTP status code
|
||||||
func writeText(w http.ResponseWriter, status int, data string) {
|
func writeText(w http.ResponseWriter, status int, data string) {
|
||||||
w.Header().Set("Content-Type", "text/plain")
|
w.Header().Set("Content-Type", "text/plain")
|
||||||
w.WriteHeader(status)
|
w.WriteHeader(status)
|
||||||
@@ -41,12 +45,14 @@ func writeText(w http.ResponseWriter, status int, data string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handler provides HTTP handlers for the llamactl server API
|
||||||
type Handler struct {
|
type Handler struct {
|
||||||
InstanceManager manager.InstanceManager
|
InstanceManager manager.InstanceManager
|
||||||
cfg config.AppConfig
|
cfg config.AppConfig
|
||||||
httpClient *http.Client
|
httpClient *http.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewHandler creates a new Handler instance with the provided instance manager and configuration
|
||||||
func NewHandler(im manager.InstanceManager, cfg config.AppConfig) *Handler {
|
func NewHandler(im manager.InstanceManager, cfg config.AppConfig) *Handler {
|
||||||
return &Handler{
|
return &Handler{
|
||||||
InstanceManager: im,
|
InstanceManager: im,
|
||||||
@@ -57,6 +63,7 @@ func NewHandler(im manager.InstanceManager, cfg config.AppConfig) *Handler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getInstance retrieves an instance by name from the request query parameters
|
||||||
func (h *Handler) getInstance(r *http.Request) (*instance.Instance, error) {
|
func (h *Handler) getInstance(r *http.Request) (*instance.Instance, error) {
|
||||||
name := r.URL.Query().Get("name")
|
name := r.URL.Query().Get("name")
|
||||||
validatedName, err := validation.ValidateInstanceName(name)
|
validatedName, err := validation.ValidateInstanceName(name)
|
||||||
@@ -72,6 +79,8 @@ func (h *Handler) getInstance(r *http.Request) (*instance.Instance, error) {
|
|||||||
return inst, nil
|
return inst, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ensureInstanceRunning ensures the instance is running by starting it if on-demand start is enabled
|
||||||
|
// It handles LRU eviction when the maximum number of running instances is reached
|
||||||
func (h *Handler) ensureInstanceRunning(inst *instance.Instance) error {
|
func (h *Handler) ensureInstanceRunning(inst *instance.Instance) error {
|
||||||
options := inst.GetOptions()
|
options := inst.GetOptions()
|
||||||
allowOnDemand := options != nil && options.OnDemandStart != nil && *options.OnDemandStart
|
allowOnDemand := options != nil && options.OnDemandStart != nil && *options.OnDemandStart
|
||||||
|
|||||||
@@ -10,11 +10,12 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ParseCommandRequest represents the request body for command parsing
|
// ParseCommandRequest represents the request body for backend command parsing
|
||||||
type ParseCommandRequest struct {
|
type ParseCommandRequest struct {
|
||||||
Command string `json:"command"`
|
Command string `json:"command"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// validateLlamaCppInstance validates that the instance specified in the request is a llama.cpp instance
|
||||||
func (h *Handler) validateLlamaCppInstance(r *http.Request) (*instance.Instance, error) {
|
func (h *Handler) validateLlamaCppInstance(r *http.Request) (*instance.Instance, error) {
|
||||||
inst, err := h.getInstance(r)
|
inst, err := h.getInstance(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -33,6 +34,7 @@ func (h *Handler) validateLlamaCppInstance(r *http.Request) (*instance.Instance,
|
|||||||
return inst, nil
|
return inst, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// stripLlamaCppPrefix removes the llama.cpp proxy prefix from the request URL path
|
||||||
func (h *Handler) stripLlamaCppPrefix(r *http.Request, instName string) {
|
func (h *Handler) stripLlamaCppPrefix(r *http.Request, instName string) {
|
||||||
// Strip the "/llama-cpp/<name>" prefix from the request URL
|
// Strip the "/llama-cpp/<name>" prefix from the request URL
|
||||||
prefix := fmt.Sprintf("/llama-cpp/%s", instName)
|
prefix := fmt.Sprintf("/llama-cpp/%s", instName)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import (
|
|||||||
"github.com/go-chi/chi/v5"
|
"github.com/go-chi/chi/v5"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NodeResponse represents a sanitized node configuration for API responses
|
// NodeResponse represents a node configuration in API responses
|
||||||
type NodeResponse struct {
|
type NodeResponse struct {
|
||||||
Address string `json:"address"`
|
Address string `json:"address"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,13 +8,13 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
// OpenAIListInstancesResponse represents the response structure for listing instances (models) in OpenAI format
|
// OpenAIListInstancesResponse represents the response structure for listing instances (models) in OpenAI-compatible format
|
||||||
type OpenAIListInstancesResponse struct {
|
type OpenAIListInstancesResponse struct {
|
||||||
Object string `json:"object"`
|
Object string `json:"object"`
|
||||||
Data []OpenAIInstance `json:"data"`
|
Data []OpenAIInstance `json:"data"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// OpenAIInstance represents a single instance (model) in OpenAI format
|
// OpenAIInstance represents a single instance (model) in OpenAI-compatible format
|
||||||
type OpenAIInstance struct {
|
type OpenAIInstance struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
Object string `json:"object"`
|
Object string `json:"object"`
|
||||||
|
|||||||
Reference in New Issue
Block a user