mirror of
https://github.com/lordmathis/llamactl.git
synced 2025-12-22 17:14:22 +00:00
Add ExtraArgs support for Llama, Mlx, and Vllm server options
This commit is contained in:
@@ -93,3 +93,22 @@ func BuildDockerCommand(backendConfig *config.BackendSettings, instanceArgs []st
|
|||||||
|
|
||||||
return "docker", dockerArgs, nil
|
return "docker", dockerArgs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// convertExtraArgsToFlags converts map[string]string to command flags
|
||||||
|
// Empty values become boolean flags: {"flag": ""} → ["--flag"]
|
||||||
|
// Non-empty values: {"flag": "value"} → ["--flag", "value"]
|
||||||
|
func convertExtraArgsToFlags(extraArgs map[string]string) []string {
|
||||||
|
var args []string
|
||||||
|
|
||||||
|
for key, value := range extraArgs {
|
||||||
|
if value == "" {
|
||||||
|
// Boolean flag
|
||||||
|
args = append(args, "--"+key)
|
||||||
|
} else {
|
||||||
|
// Value flag
|
||||||
|
args = append(args, "--"+key, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return args
|
||||||
|
}
|
||||||
|
|||||||
@@ -187,6 +187,10 @@ type LlamaServerOptions struct {
|
|||||||
FIMQwen7BDefault bool `json:"fim_qwen_7b_default,omitempty"`
|
FIMQwen7BDefault bool `json:"fim_qwen_7b_default,omitempty"`
|
||||||
FIMQwen7BSpec bool `json:"fim_qwen_7b_spec,omitempty"`
|
FIMQwen7BSpec bool `json:"fim_qwen_7b_spec,omitempty"`
|
||||||
FIMQwen14BSpec bool `json:"fim_qwen_14b_spec,omitempty"`
|
FIMQwen14BSpec bool `json:"fim_qwen_14b_spec,omitempty"`
|
||||||
|
|
||||||
|
// ExtraArgs are additional command line arguments.
|
||||||
|
// Example: {"verbose": "", "log-file": "/logs/llama.log"}
|
||||||
|
ExtraArgs map[string]string `json:"extra_args,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnmarshalJSON implements custom JSON unmarshaling to support multiple field names
|
// UnmarshalJSON implements custom JSON unmarshaling to support multiple field names
|
||||||
@@ -354,6 +358,18 @@ func (o *LlamaServerOptions) Validate() error {
|
|||||||
return validation.ValidationError(fmt.Errorf("invalid port range: %d", o.Port))
|
return validation.ValidationError(fmt.Errorf("invalid port range: %d", o.Port))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Validate extra_args keys and values
|
||||||
|
for key, value := range o.ExtraArgs {
|
||||||
|
if err := validation.ValidateStringForInjection(key); err != nil {
|
||||||
|
return validation.ValidationError(fmt.Errorf("extra_args key %q: %w", key, err))
|
||||||
|
}
|
||||||
|
if value != "" {
|
||||||
|
if err := validation.ValidateStringForInjection(value); err != nil {
|
||||||
|
return validation.ValidationError(fmt.Errorf("extra_args value for %q: %w", key, err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -361,7 +377,12 @@ func (o *LlamaServerOptions) Validate() error {
|
|||||||
func (o *LlamaServerOptions) BuildCommandArgs() []string {
|
func (o *LlamaServerOptions) BuildCommandArgs() []string {
|
||||||
// Llama uses multiple flags for arrays by default (not comma-separated)
|
// Llama uses multiple flags for arrays by default (not comma-separated)
|
||||||
// Use package-level llamaMultiValuedFlags variable
|
// Use package-level llamaMultiValuedFlags variable
|
||||||
return BuildCommandArgs(o, llamaMultiValuedFlags)
|
args := BuildCommandArgs(o, llamaMultiValuedFlags)
|
||||||
|
|
||||||
|
// Append extra args at the end
|
||||||
|
args = append(args, convertExtraArgsToFlags(o.ExtraArgs)...)
|
||||||
|
|
||||||
|
return args
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *LlamaServerOptions) BuildDockerArgs() []string {
|
func (o *LlamaServerOptions) BuildDockerArgs() []string {
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ type MlxServerOptions struct {
|
|||||||
TopK int `json:"top_k,omitempty"`
|
TopK int `json:"top_k,omitempty"`
|
||||||
MinP float64 `json:"min_p,omitempty"`
|
MinP float64 `json:"min_p,omitempty"`
|
||||||
MaxTokens int `json:"max_tokens,omitempty"`
|
MaxTokens int `json:"max_tokens,omitempty"`
|
||||||
|
|
||||||
|
// ExtraArgs are additional command line arguments.
|
||||||
|
// Example: {"verbose": "", "log-file": "/logs/mlx.log"}
|
||||||
|
ExtraArgs map[string]string `json:"extra_args,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *MlxServerOptions) GetPort() int {
|
func (o *MlxServerOptions) GetPort() int {
|
||||||
@@ -57,13 +61,30 @@ func (o *MlxServerOptions) Validate() error {
|
|||||||
return validation.ValidationError(fmt.Errorf("invalid port range: %d", o.Port))
|
return validation.ValidationError(fmt.Errorf("invalid port range: %d", o.Port))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Validate extra_args keys and values
|
||||||
|
for key, value := range o.ExtraArgs {
|
||||||
|
if err := validation.ValidateStringForInjection(key); err != nil {
|
||||||
|
return validation.ValidationError(fmt.Errorf("extra_args key %q: %w", key, err))
|
||||||
|
}
|
||||||
|
if value != "" {
|
||||||
|
if err := validation.ValidateStringForInjection(value); err != nil {
|
||||||
|
return validation.ValidationError(fmt.Errorf("extra_args value for %q: %w", key, err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildCommandArgs converts to command line arguments
|
// BuildCommandArgs converts to command line arguments
|
||||||
func (o *MlxServerOptions) BuildCommandArgs() []string {
|
func (o *MlxServerOptions) BuildCommandArgs() []string {
|
||||||
multipleFlags := map[string]struct{}{} // MLX doesn't currently have []string fields
|
multipleFlags := map[string]struct{}{} // MLX doesn't currently have []string fields
|
||||||
return BuildCommandArgs(o, multipleFlags)
|
args := BuildCommandArgs(o, multipleFlags)
|
||||||
|
|
||||||
|
// Append extra args at the end
|
||||||
|
args = append(args, convertExtraArgsToFlags(o.ExtraArgs)...)
|
||||||
|
|
||||||
|
return args
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *MlxServerOptions) BuildDockerArgs() []string {
|
func (o *MlxServerOptions) BuildDockerArgs() []string {
|
||||||
|
|||||||
@@ -142,6 +142,10 @@ type VllmServerOptions struct {
|
|||||||
OverridePoolingConfig string `json:"override_pooling_config,omitempty"`
|
OverridePoolingConfig string `json:"override_pooling_config,omitempty"`
|
||||||
OverrideNeuronConfig string `json:"override_neuron_config,omitempty"`
|
OverrideNeuronConfig string `json:"override_neuron_config,omitempty"`
|
||||||
OverrideKVCacheALIGNSize int `json:"override_kv_cache_align_size,omitempty"`
|
OverrideKVCacheALIGNSize int `json:"override_kv_cache_align_size,omitempty"`
|
||||||
|
|
||||||
|
// ExtraArgs are additional command line arguments.
|
||||||
|
// Example: {"verbose": "", "log-file": "/logs/vllm.log"}
|
||||||
|
ExtraArgs map[string]string `json:"extra_args,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *VllmServerOptions) GetPort() int {
|
func (o *VllmServerOptions) GetPort() int {
|
||||||
@@ -171,6 +175,18 @@ func (o *VllmServerOptions) Validate() error {
|
|||||||
return validation.ValidationError(fmt.Errorf("invalid port range: %d", o.Port))
|
return validation.ValidationError(fmt.Errorf("invalid port range: %d", o.Port))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Validate extra_args keys and values
|
||||||
|
for key, value := range o.ExtraArgs {
|
||||||
|
if err := validation.ValidateStringForInjection(key); err != nil {
|
||||||
|
return validation.ValidationError(fmt.Errorf("extra_args key %q: %w", key, err))
|
||||||
|
}
|
||||||
|
if value != "" {
|
||||||
|
if err := validation.ValidateStringForInjection(value); err != nil {
|
||||||
|
return validation.ValidationError(fmt.Errorf("extra_args value for %q: %w", key, err))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,6 +209,9 @@ func (o *VllmServerOptions) BuildCommandArgs() []string {
|
|||||||
flagArgs := BuildCommandArgs(&optionsCopy, vllmMultiValuedFlags)
|
flagArgs := BuildCommandArgs(&optionsCopy, vllmMultiValuedFlags)
|
||||||
args = append(args, flagArgs...)
|
args = append(args, flagArgs...)
|
||||||
|
|
||||||
|
// Append extra args at the end
|
||||||
|
args = append(args, convertExtraArgsToFlags(o.ExtraArgs)...)
|
||||||
|
|
||||||
return args
|
return args
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,6 +222,9 @@ func (o *VllmServerOptions) BuildDockerArgs() []string {
|
|||||||
flagArgs := BuildCommandArgs(o, vllmMultiValuedFlags)
|
flagArgs := BuildCommandArgs(o, vllmMultiValuedFlags)
|
||||||
args = append(args, flagArgs...)
|
args = append(args, flagArgs...)
|
||||||
|
|
||||||
|
// Append extra args at the end
|
||||||
|
args = append(args, convertExtraArgsToFlags(o.ExtraArgs)...)
|
||||||
|
|
||||||
return args
|
return args
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user