Spaces:
Configuration error
Configuration error
| package fiberContext | |
| import ( | |
| "fmt" | |
| "strings" | |
| "github.com/gofiber/fiber/v2" | |
| "github.com/mudler/LocalAI/core/config" | |
| "github.com/mudler/LocalAI/core/services" | |
| "github.com/mudler/LocalAI/pkg/model" | |
| "github.com/rs/zerolog/log" | |
| ) | |
| // ModelFromContext returns the model from the context | |
| // If no model is specified, it will take the first available | |
| // Takes a model string as input which should be the one received from the user request. | |
| // It returns the model name resolved from the context and an error if any. | |
| func ModelFromContext(ctx *fiber.Ctx, cl *config.BackendConfigLoader, loader *model.ModelLoader, modelInput string, firstModel bool) (string, error) { | |
| if ctx.Params("model") != "" { | |
| modelInput = ctx.Params("model") | |
| } | |
| if ctx.Query("model") != "" { | |
| modelInput = ctx.Query("model") | |
| } | |
| // Set model from bearer token, if available | |
| bearer := strings.TrimLeft(ctx.Get("authorization"), "Bear ") // Reduced duplicate characters of Bearer | |
| bearerExists := bearer != "" && loader.ExistsInModelPath(bearer) | |
| // If no model was specified, take the first available | |
| if modelInput == "" && !bearerExists && firstModel { | |
| models, _ := services.ListModels(cl, loader, config.NoFilterFn, services.SKIP_IF_CONFIGURED) | |
| if len(models) > 0 { | |
| modelInput = models[0] | |
| log.Debug().Msgf("No model specified, using: %s", modelInput) | |
| } else { | |
| log.Debug().Msgf("No model specified, returning error") | |
| return "", fmt.Errorf("no model specified") | |
| } | |
| } | |
| // If a model is found in bearer token takes precedence | |
| if bearerExists { | |
| log.Debug().Msgf("Using model from bearer token: %s", bearer) | |
| modelInput = bearer | |
| } | |
| return modelInput, nil | |
| } | |