fetch_ml/internal/api/server_gen.go
Jeremie Fraeys 23e5f3d1dc
refactor(api): internal refactoring for TUI and worker modules
- Refactor internal/worker and internal/queue packages
- Update cmd/tui for monitoring interface
- Update test configurations
2026-02-20 15:51:23 -05:00

642 lines
23 KiB
Go

// Package api provides primitives to interact with the openapi HTTP API.
//
// Code generated by github.com/oapi-codegen/oapi-codegen/v2 version v2.5.1 DO NOT EDIT.
package api
import (
"bytes"
"compress/gzip"
"encoding/base64"
"fmt"
"net/http"
"net/url"
"path"
"strings"
"time"
"github.com/getkin/kin-openapi/openapi3"
"github.com/labstack/echo/v4"
"github.com/oapi-codegen/runtime"
)
const (
ApiKeyAuthScopes = "ApiKeyAuth.Scopes"
)
// Defines values for ErrorResponseCode.
const (
BADREQUEST ErrorResponseCode = "BAD_REQUEST"
CONFLICT ErrorResponseCode = "CONFLICT"
FORBIDDEN ErrorResponseCode = "FORBIDDEN"
INTERNALERROR ErrorResponseCode = "INTERNAL_ERROR"
NOTFOUND ErrorResponseCode = "NOT_FOUND"
RATELIMITED ErrorResponseCode = "RATE_LIMITED"
SERVICEUNAVAILABLE ErrorResponseCode = "SERVICE_UNAVAILABLE"
UNAUTHORIZED ErrorResponseCode = "UNAUTHORIZED"
VALIDATIONERROR ErrorResponseCode = "VALIDATION_ERROR"
)
// Defines values for ExperimentStatus.
const (
Active ExperimentStatus = "active"
Archived ExperimentStatus = "archived"
Deleted ExperimentStatus = "deleted"
)
// Defines values for HealthResponseStatus.
const (
Degraded HealthResponseStatus = "degraded"
Healthy HealthResponseStatus = "healthy"
Unhealthy HealthResponseStatus = "unhealthy"
)
// Defines values for JupyterServiceStatus.
const (
JupyterServiceStatusError JupyterServiceStatus = "error"
JupyterServiceStatusRunning JupyterServiceStatus = "running"
JupyterServiceStatusStarting JupyterServiceStatus = "starting"
JupyterServiceStatusStopped JupyterServiceStatus = "stopped"
JupyterServiceStatusStopping JupyterServiceStatus = "stopping"
)
// Defines values for TaskStatus.
const (
TaskStatusCollecting TaskStatus = "collecting"
TaskStatusCompleted TaskStatus = "completed"
TaskStatusFailed TaskStatus = "failed"
TaskStatusPreparing TaskStatus = "preparing"
TaskStatusQueued TaskStatus = "queued"
TaskStatusRunning TaskStatus = "running"
)
// Defines values for GetV1TasksParamsStatus.
const (
Completed GetV1TasksParamsStatus = "completed"
Failed GetV1TasksParamsStatus = "failed"
Queued GetV1TasksParamsStatus = "queued"
Running GetV1TasksParamsStatus = "running"
)
// CreateExperimentRequest defines model for CreateExperimentRequest.
type CreateExperimentRequest struct {
Description *string `json:"description,omitempty"`
Name string `json:"name"`
}
// CreateTaskRequest defines model for CreateTaskRequest.
type CreateTaskRequest struct {
// Args Command-line arguments for the training script
Args *string `json:"args,omitempty"`
// Cpu CPU cores requested
Cpu *int `json:"cpu,omitempty"`
DatasetSpecs *[]DatasetSpec `json:"dataset_specs,omitempty"`
Datasets *[]string `json:"datasets,omitempty"`
// Gpu GPUs requested
Gpu *int `json:"gpu,omitempty"`
// JobName Unique identifier for the job
JobName string `json:"job_name"`
// MemoryGb Memory (GB) requested
MemoryGb *int `json:"memory_gb,omitempty"`
Metadata *map[string]string `json:"metadata,omitempty"`
Priority *int `json:"priority,omitempty"`
// SnapshotId Reference to experiment snapshot
SnapshotId *string `json:"snapshot_id,omitempty"`
}
// DatasetSpec defines model for DatasetSpec.
type DatasetSpec struct {
MountPath *string `json:"mount_path,omitempty"`
Name *string `json:"name,omitempty"`
Sha256 *string `json:"sha256,omitempty"`
Source *string `json:"source,omitempty"`
}
// ErrorResponse defines model for ErrorResponse.
type ErrorResponse struct {
Code ErrorResponseCode `json:"code"`
// Error Sanitized error message
Error string `json:"error"`
// TraceId Support correlation ID
TraceId string `json:"trace_id"`
}
// ErrorResponseCode defines model for ErrorResponse.Code.
type ErrorResponseCode string
// Experiment defines model for Experiment.
type Experiment struct {
CommitId *string `json:"commit_id,omitempty"`
CreatedAt *time.Time `json:"created_at,omitempty"`
Id *string `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Status *ExperimentStatus `json:"status,omitempty"`
}
// ExperimentStatus defines model for Experiment.Status.
type ExperimentStatus string
// HealthResponse defines model for HealthResponse.
type HealthResponse struct {
Status *HealthResponseStatus `json:"status,omitempty"`
Timestamp *time.Time `json:"timestamp,omitempty"`
Version *string `json:"version,omitempty"`
}
// HealthResponseStatus defines model for HealthResponse.Status.
type HealthResponseStatus string
// JupyterService defines model for JupyterService.
type JupyterService struct {
CreatedAt *time.Time `json:"created_at,omitempty"`
Id *string `json:"id,omitempty"`
Name *string `json:"name,omitempty"`
Status *JupyterServiceStatus `json:"status,omitempty"`
Token *string `json:"token,omitempty"`
Url *string `json:"url,omitempty"`
}
// JupyterServiceStatus defines model for JupyterService.Status.
type JupyterServiceStatus string
// QueueStats defines model for QueueStats.
type QueueStats struct {
// Completed Tasks completed today
Completed *int `json:"completed,omitempty"`
// Failed Tasks failed today
Failed *int `json:"failed,omitempty"`
// Queued Tasks waiting to run
Queued *int `json:"queued,omitempty"`
// Running Tasks currently executing
Running *int `json:"running,omitempty"`
// Workers Active workers
Workers *int `json:"workers,omitempty"`
}
// StartJupyterRequest defines model for StartJupyterRequest.
type StartJupyterRequest struct {
Image *string `json:"image,omitempty"`
Name string `json:"name"`
Workspace *string `json:"workspace,omitempty"`
}
// Task defines model for Task.
type Task struct {
Cpu *int `json:"cpu,omitempty"`
CreatedAt *time.Time `json:"created_at,omitempty"`
Datasets *[]string `json:"datasets,omitempty"`
EndedAt *time.Time `json:"ended_at,omitempty"`
Error *string `json:"error,omitempty"`
Gpu *int `json:"gpu,omitempty"`
// Id Unique task identifier
Id *string `json:"id,omitempty"`
JobName *string `json:"job_name,omitempty"`
MaxRetries *int `json:"max_retries,omitempty"`
MemoryGb *int `json:"memory_gb,omitempty"`
Output *string `json:"output,omitempty"`
Priority *int `json:"priority,omitempty"`
RetryCount *int `json:"retry_count,omitempty"`
SnapshotId *string `json:"snapshot_id,omitempty"`
StartedAt *time.Time `json:"started_at,omitempty"`
Status *TaskStatus `json:"status,omitempty"`
UserId *string `json:"user_id,omitempty"`
WorkerId *string `json:"worker_id,omitempty"`
}
// TaskStatus defines model for Task.Status.
type TaskStatus string
// TaskList defines model for TaskList.
type TaskList struct {
Limit *int `json:"limit,omitempty"`
Offset *int `json:"offset,omitempty"`
Tasks *[]Task `json:"tasks,omitempty"`
Total *int `json:"total,omitempty"`
}
// BadRequest defines model for BadRequest.
type BadRequest = ErrorResponse
// NotFound defines model for NotFound.
type NotFound = ErrorResponse
// RateLimited defines model for RateLimited.
type RateLimited = ErrorResponse
// Unauthorized defines model for Unauthorized.
type Unauthorized = ErrorResponse
// ValidationError defines model for ValidationError.
type ValidationError = ErrorResponse
// GetV1TasksParams defines parameters for GetV1Tasks.
type GetV1TasksParams struct {
Status *GetV1TasksParamsStatus `form:"status,omitempty" json:"status,omitempty"`
Limit *int `form:"limit,omitempty" json:"limit,omitempty"`
Offset *int `form:"offset,omitempty" json:"offset,omitempty"`
}
// GetV1TasksParamsStatus defines parameters for GetV1Tasks.
type GetV1TasksParamsStatus string
// PostV1ExperimentsJSONRequestBody defines body for PostV1Experiments for application/json ContentType.
type PostV1ExperimentsJSONRequestBody = CreateExperimentRequest
// PostV1JupyterServicesJSONRequestBody defines body for PostV1JupyterServices for application/json ContentType.
type PostV1JupyterServicesJSONRequestBody = StartJupyterRequest
// PostV1TasksJSONRequestBody defines body for PostV1Tasks for application/json ContentType.
type PostV1TasksJSONRequestBody = CreateTaskRequest
// ServerInterface represents all server handlers.
type ServerInterface interface {
// Health check
// (GET /health)
GetHealth(ctx echo.Context) error
// List experiments
// (GET /v1/experiments)
GetV1Experiments(ctx echo.Context) error
// Create experiment
// (POST /v1/experiments)
PostV1Experiments(ctx echo.Context) error
// List Jupyter services
// (GET /v1/jupyter/services)
GetV1JupyterServices(ctx echo.Context) error
// Start Jupyter service
// (POST /v1/jupyter/services)
PostV1JupyterServices(ctx echo.Context) error
// Stop Jupyter service
// (DELETE /v1/jupyter/services/{serviceId})
DeleteV1JupyterServicesServiceId(ctx echo.Context, serviceId string) error
// Queue status
// (GET /v1/queue)
GetV1Queue(ctx echo.Context) error
// List tasks
// (GET /v1/tasks)
GetV1Tasks(ctx echo.Context, params GetV1TasksParams) error
// Create task
// (POST /v1/tasks)
PostV1Tasks(ctx echo.Context) error
// Cancel/delete task
// (DELETE /v1/tasks/{taskId})
DeleteV1TasksTaskId(ctx echo.Context, taskId string) error
// Get task details
// (GET /v1/tasks/{taskId})
GetV1TasksTaskId(ctx echo.Context, taskId string) error
// WebSocket connection
// (GET /ws)
GetWs(ctx echo.Context) error
}
// ServerInterfaceWrapper converts echo contexts to parameters.
type ServerInterfaceWrapper struct {
Handler ServerInterface
}
// GetHealth converts echo context to params.
func (w *ServerInterfaceWrapper) GetHealth(ctx echo.Context) error {
var err error
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.GetHealth(ctx)
return err
}
// GetV1Experiments converts echo context to params.
func (w *ServerInterfaceWrapper) GetV1Experiments(ctx echo.Context) error {
var err error
ctx.Set(ApiKeyAuthScopes, []string{})
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.GetV1Experiments(ctx)
return err
}
// PostV1Experiments converts echo context to params.
func (w *ServerInterfaceWrapper) PostV1Experiments(ctx echo.Context) error {
var err error
ctx.Set(ApiKeyAuthScopes, []string{})
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.PostV1Experiments(ctx)
return err
}
// GetV1JupyterServices converts echo context to params.
func (w *ServerInterfaceWrapper) GetV1JupyterServices(ctx echo.Context) error {
var err error
ctx.Set(ApiKeyAuthScopes, []string{})
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.GetV1JupyterServices(ctx)
return err
}
// PostV1JupyterServices converts echo context to params.
func (w *ServerInterfaceWrapper) PostV1JupyterServices(ctx echo.Context) error {
var err error
ctx.Set(ApiKeyAuthScopes, []string{})
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.PostV1JupyterServices(ctx)
return err
}
// DeleteV1JupyterServicesServiceId converts echo context to params.
func (w *ServerInterfaceWrapper) DeleteV1JupyterServicesServiceId(ctx echo.Context) error {
var err error
// ------------- Path parameter "serviceId" -------------
var serviceId string
err = runtime.BindStyledParameterWithOptions("simple", "serviceId", ctx.Param("serviceId"), &serviceId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true})
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter serviceId: %s", err))
}
ctx.Set(ApiKeyAuthScopes, []string{})
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.DeleteV1JupyterServicesServiceId(ctx, serviceId)
return err
}
// GetV1Queue converts echo context to params.
func (w *ServerInterfaceWrapper) GetV1Queue(ctx echo.Context) error {
var err error
ctx.Set(ApiKeyAuthScopes, []string{})
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.GetV1Queue(ctx)
return err
}
// GetV1Tasks converts echo context to params.
func (w *ServerInterfaceWrapper) GetV1Tasks(ctx echo.Context) error {
var err error
ctx.Set(ApiKeyAuthScopes, []string{})
// Parameter object where we will unmarshal all parameters from the context
var params GetV1TasksParams
// ------------- Optional query parameter "status" -------------
err = runtime.BindQueryParameter("form", true, false, "status", ctx.QueryParams(), &params.Status)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter status: %s", err))
}
// ------------- Optional query parameter "limit" -------------
err = runtime.BindQueryParameter("form", true, false, "limit", ctx.QueryParams(), &params.Limit)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter limit: %s", err))
}
// ------------- Optional query parameter "offset" -------------
err = runtime.BindQueryParameter("form", true, false, "offset", ctx.QueryParams(), &params.Offset)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter offset: %s", err))
}
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.GetV1Tasks(ctx, params)
return err
}
// PostV1Tasks converts echo context to params.
func (w *ServerInterfaceWrapper) PostV1Tasks(ctx echo.Context) error {
var err error
ctx.Set(ApiKeyAuthScopes, []string{})
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.PostV1Tasks(ctx)
return err
}
// DeleteV1TasksTaskId converts echo context to params.
func (w *ServerInterfaceWrapper) DeleteV1TasksTaskId(ctx echo.Context) error {
var err error
// ------------- Path parameter "taskId" -------------
var taskId string
err = runtime.BindStyledParameterWithOptions("simple", "taskId", ctx.Param("taskId"), &taskId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true})
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter taskId: %s", err))
}
ctx.Set(ApiKeyAuthScopes, []string{})
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.DeleteV1TasksTaskId(ctx, taskId)
return err
}
// GetV1TasksTaskId converts echo context to params.
func (w *ServerInterfaceWrapper) GetV1TasksTaskId(ctx echo.Context) error {
var err error
// ------------- Path parameter "taskId" -------------
var taskId string
err = runtime.BindStyledParameterWithOptions("simple", "taskId", ctx.Param("taskId"), &taskId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true})
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter taskId: %s", err))
}
ctx.Set(ApiKeyAuthScopes, []string{})
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.GetV1TasksTaskId(ctx, taskId)
return err
}
// GetWs converts echo context to params.
func (w *ServerInterfaceWrapper) GetWs(ctx echo.Context) error {
var err error
ctx.Set(ApiKeyAuthScopes, []string{})
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.GetWs(ctx)
return err
}
// This is a simple interface which specifies echo.Route addition functions which
// are present on both echo.Echo and echo.Group, since we want to allow using
// either of them for path registration
type EchoRouter interface {
CONNECT(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
DELETE(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
GET(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
HEAD(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
OPTIONS(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
PATCH(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
POST(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
PUT(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
TRACE(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
}
// RegisterHandlers adds each server route to the EchoRouter.
func RegisterHandlers(router EchoRouter, si ServerInterface) {
RegisterHandlersWithBaseURL(router, si, "")
}
// Registers handlers, and prepends BaseURL to the paths, so that the paths
// can be served under a prefix.
func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL string) {
wrapper := ServerInterfaceWrapper{
Handler: si,
}
router.GET(baseURL+"/health", wrapper.GetHealth)
router.GET(baseURL+"/v1/experiments", wrapper.GetV1Experiments)
router.POST(baseURL+"/v1/experiments", wrapper.PostV1Experiments)
router.GET(baseURL+"/v1/jupyter/services", wrapper.GetV1JupyterServices)
router.POST(baseURL+"/v1/jupyter/services", wrapper.PostV1JupyterServices)
router.DELETE(baseURL+"/v1/jupyter/services/:serviceId", wrapper.DeleteV1JupyterServicesServiceId)
router.GET(baseURL+"/v1/queue", wrapper.GetV1Queue)
router.GET(baseURL+"/v1/tasks", wrapper.GetV1Tasks)
router.POST(baseURL+"/v1/tasks", wrapper.PostV1Tasks)
router.DELETE(baseURL+"/v1/tasks/:taskId", wrapper.DeleteV1TasksTaskId)
router.GET(baseURL+"/v1/tasks/:taskId", wrapper.GetV1TasksTaskId)
router.GET(baseURL+"/ws", wrapper.GetWs)
}
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"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",
}
// GetSwagger returns the content of the embedded swagger specification file
// or error if failed to decode
func decodeSpec() ([]byte, error) {
zipped, err := base64.StdEncoding.DecodeString(strings.Join(swaggerSpec, ""))
if err != nil {
return nil, fmt.Errorf("error base64 decoding spec: %w", err)
}
zr, err := gzip.NewReader(bytes.NewReader(zipped))
if err != nil {
return nil, fmt.Errorf("error decompressing spec: %w", err)
}
var buf bytes.Buffer
_, err = buf.ReadFrom(zr)
if err != nil {
return nil, fmt.Errorf("error decompressing spec: %w", err)
}
return buf.Bytes(), nil
}
var rawSpec = decodeSpecCached()
// a naive cached of a decoded swagger spec
func decodeSpecCached() func() ([]byte, error) {
data, err := decodeSpec()
return func() ([]byte, error) {
return data, err
}
}
// Constructs a synthetic filesystem for resolving external references when loading openapi specifications.
func PathToRawSpec(pathToFile string) map[string]func() ([]byte, error) {
res := make(map[string]func() ([]byte, error))
if len(pathToFile) > 0 {
res[pathToFile] = rawSpec
}
return res
}
// GetSwagger returns the Swagger specification corresponding to the generated code
// in this file. The external references of Swagger specification are resolved.
// The logic of resolving external references is tightly connected to "import-mapping" feature.
// Externally referenced files must be embedded in the corresponding golang packages.
// Urls can be supported but this task was out of the scope.
func GetSwagger() (swagger *openapi3.T, err error) {
resolvePath := PathToRawSpec("")
loader := openapi3.NewLoader()
loader.IsExternalRefsAllowed = true
loader.ReadFromURIFunc = func(loader *openapi3.Loader, url *url.URL) ([]byte, error) {
pathToFile := url.String()
pathToFile = path.Clean(pathToFile)
getSpec, ok := resolvePath[pathToFile]
if !ok {
err1 := fmt.Errorf("path not found: %s", pathToFile)
return nil, err1
}
return getSpec()
}
var specData []byte
specData, err = rawSpec()
if err != nil {
return
}
swagger, err = loader.LoadFromData(specData)
if err != nil {
return
}
return
}