mirror of
https://github.com/mudler/LocalAI.git
synced 2026-08-04 12:22:22 -04:00
* feat(mcp): add scheduling client contracts Assisted-by: Hephaestus:openai/gpt-5.5 Signed-off-by: Owen Adirah <owenadira@gmail.com> * feat(mcp): add scheduling HTTP client support Assisted-by: Hephaestus:openai/gpt-5.5 Signed-off-by: Owen Adirah <owenadira@gmail.com> * feat(mcp): add in-process scheduling stubs Assisted-by: Hephaestus:openai/gpt-5.5 Signed-off-by: Owen Adirah <owenadira@gmail.com> * feat(mcp): register scheduling tools Assisted-by: Hephaestus:openai/gpt-5.5 Signed-off-by: Owen Adirah <owenadira@gmail.com> * test(mcp): map scheduling tools to REST routes Assisted-by: Hephaestus:openai/gpt-5.5 Signed-off-by: Owen Adirah <owenadira@gmail.com> * docs(mcp): document scheduling assistant tools Assisted-by: Hephaestus:openai/gpt-5.5 Signed-off-by: Owen Adirah <owenadira@gmail.com> * fix(mcp): wire in-process scheduling Use an explicit MCP scheduling DTO and route in-process scheduling calls through the distributed node registry so the embedded assistant matches the REST scheduling surface. Assisted-by: Hephaestus:openai/gpt-5.5 Signed-off-by: Owen Adirah <owenadira@gmail.com> * fix(mcp): narrow scheduling dto Assisted-by: Hephaestus:openai/gpt-5.5 [opencode] Signed-off-by: Owen Adirah <owenadira@gmail.com> --------- Signed-off-by: Owen Adirah <owenadira@gmail.com>
74 lines
2.4 KiB
Go
74 lines
2.4 KiB
Go
package httpapi
|
|
|
|
import (
|
|
"fmt"
|
|
"net/url"
|
|
)
|
|
|
|
// Route paths for the LocalAI admin REST surface that this client targets.
|
|
// Static paths are constants; dynamic paths are builders that handle
|
|
// url.PathEscape on segment values. Keep these aligned with the server-side
|
|
// registrations in core/http/routes/localai.go — the Tool↔REST drift detector
|
|
// in coverage_test.go documents the mapping.
|
|
const (
|
|
routeWelcome = "/"
|
|
routeModelsApply = "/models/apply"
|
|
routeModelsAvail = "/models/available"
|
|
routeModelsGall = "/models/galleries"
|
|
routeModelsImport = "/models/import-uri"
|
|
routeModelImport = "/models/import"
|
|
routeAliases = "/api/aliases"
|
|
routeModelsReload = "/models/reload"
|
|
routeBackendLoad = "/backend/load"
|
|
routeBackends = "/backends"
|
|
routeBackendsKnown = "/backends/known"
|
|
routeBackendsApply = "/backends/apply"
|
|
routeNodes = "/api/nodes"
|
|
routeScheduling = "/api/nodes/scheduling"
|
|
routeVRAMEstimate = "/api/models/vram-estimate"
|
|
routeBranding = "/api/branding"
|
|
routeSettings = "/api/settings"
|
|
routeUsage = "/api/usage"
|
|
routeUsageAll = "/api/usage/all"
|
|
routePIIEvents = "/api/pii/events"
|
|
routeMiddleware = "/api/middleware/status"
|
|
routeRouterDecisions = "/api/router/decisions"
|
|
routeVoiceProfiles = "/api/voice-profiles"
|
|
)
|
|
|
|
func routeJobStatus(jobID string) string {
|
|
return "/models/jobs/" + url.PathEscape(jobID)
|
|
}
|
|
|
|
func routeModelDelete(name string) string {
|
|
return "/models/delete/" + url.PathEscape(name)
|
|
}
|
|
|
|
func routeModelConfigJSON(name string) string {
|
|
return "/api/models/config-json/" + url.PathEscape(name)
|
|
}
|
|
|
|
func routeBackendUpgrade(name string) string {
|
|
return "/backends/upgrade/" + url.PathEscape(name)
|
|
}
|
|
|
|
func routeToggleModelState(name, action string) string {
|
|
return fmt.Sprintf("/models/toggle-state/%s/%s", url.PathEscape(name), url.PathEscape(action))
|
|
}
|
|
|
|
func routeToggleModelPinned(name, action string) string {
|
|
return fmt.Sprintf("/models/toggle-pinned/%s/%s", url.PathEscape(name), url.PathEscape(action))
|
|
}
|
|
|
|
func routeVoiceProfileDelete(id string) string {
|
|
return "/api/voice-profiles/" + url.PathEscape(id)
|
|
}
|
|
|
|
func routeNodeVRAMBudget(id string) string {
|
|
return "/api/nodes/" + url.PathEscape(id) + "/vram-budget"
|
|
}
|
|
|
|
func routeModelScheduling(modelName string) string {
|
|
return "/api/nodes/scheduling/" + url.PathEscape(modelName)
|
|
}
|