Add command override to webui

This commit is contained in:
2025-11-14 18:44:39 +01:00
parent 511889e56d
commit 91d8a9008f
3 changed files with 56 additions and 9 deletions

View File

@@ -106,6 +106,14 @@ const InstanceDialog: React.FC<InstanceDialogProps> = ({
return;
}
// Validate docker_enabled and command_override relationship
if (formData.backend_type !== BackendType.MLX_LM) {
if (formData.docker_enabled === true && formData.command_override) {
setNameError("Command override cannot be set when Docker is enabled");
return;
}
}
// Clean up undefined values to avoid sending empty fields
const cleanOptions: CreateInstanceOptions = {} as CreateInstanceOptions;
Object.entries(formData).forEach(([key, value]) => {

View File

@@ -1,5 +1,5 @@
import React, { useState, useEffect } from 'react'
import type { CreateInstanceOptions } from '@/types/instance'
import { BackendType, type CreateInstanceOptions } from '@/types/instance'
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'
import { Label } from '@/components/ui/label'
import { Input } from '@/components/ui/input'
@@ -8,6 +8,7 @@ import NumberInput from '@/components/form/NumberInput'
import CheckboxInput from '@/components/form/CheckboxInput'
import EnvVarsInput from '@/components/form/EnvVarsInput'
import SelectInput from '@/components/form/SelectInput'
import TextInput from '@/components/form/TextInput'
import { nodesApi, type NodesMap } from '@/lib/api'
interface InstanceSettingsCardProps {
@@ -105,6 +106,48 @@ const InstanceSettingsCard: React.FC<InstanceSettingsCardProps> = ({
/>
)}
{/* Execution Context */}
<div className="space-y-4">
<h3 className="text-lg font-medium">Execution Context</h3>
{/* Docker Mode Toggle - only for backends that support Docker */}
{formData.backend_type !== BackendType.MLX_LM && (
<CheckboxInput
id="docker_enabled"
label="Enable Docker"
value={formData.docker_enabled}
onChange={(value) => onChange('docker_enabled', value)}
description="Run backend in Docker container (overrides config default)"
/>
)}
{/* Command Override - only shown when Docker is disabled or backend is MLX */}
{(formData.backend_type === BackendType.MLX_LM || formData.docker_enabled !== true) && (
<TextInput
id="command_override"
label="Command Override"
value={formData.command_override || ''}
onChange={(value) => onChange('command_override', value)}
placeholder={
formData.backend_type === BackendType.LLAMA_CPP
? "/usr/local/bin/llama-server"
: formData.backend_type === BackendType.VLLM
? "/usr/local/bin/vllm"
: "/usr/local/bin/mlx_lm.server"
}
description="Custom path to backend executable"
/>
)}
<EnvVarsInput
id="environment"
label="Environment Variables"
value={formData.environment}
onChange={(value) => onChange('environment', value)}
description="Custom environment variables for the instance"
/>
</div>
{/* Auto Restart Configuration */}
<AutoRestartConfiguration
formData={formData}
@@ -131,14 +174,6 @@ const InstanceSettingsCard: React.FC<InstanceSettingsCardProps> = ({
onChange={(value) => onChange('on_demand_start', value)}
description="Start instance only when needed"
/>
<EnvVarsInput
id="environment"
label="Environment Variables"
value={formData.environment}
onChange={(value) => onChange('environment', value)}
description="Custom environment variables for the instance"
/>
</div>
</CardContent>
</Card>

View File

@@ -36,6 +36,10 @@ export const CreateInstanceOptionsSchema = z.object({
// Environment variables
environment: z.record(z.string(), z.string()).optional(),
// Execution context overrides
docker_enabled: z.boolean().optional(),
command_override: z.string().optional(),
// Backend configuration
backend_type: z.enum([BackendType.LLAMA_CPP, BackendType.MLX_LM, BackendType.VLLM]).optional(),
backend_options: BackendOptionsSchema.optional(),