Add Docker badge to UI

This commit is contained in:
2025-09-25 23:04:24 +02:00
parent 031d6c7017
commit 2cd9d374a7
4 changed files with 46 additions and 13 deletions

View File

@@ -221,14 +221,33 @@ func (i *Process) MarshalJSON() ([]byte, error) {
i.mu.RLock() i.mu.RLock()
defer i.mu.RUnlock() defer i.mu.RUnlock()
// Determine if docker is enabled for this instance's backend
var dockerEnabled bool
if i.options != nil {
switch i.options.BackendType {
case backends.BackendTypeLlamaCpp:
if i.globalBackendSettings != nil && i.globalBackendSettings.LlamaCpp.Docker != nil && i.globalBackendSettings.LlamaCpp.Docker.Enabled {
dockerEnabled = true
}
case backends.BackendTypeVllm:
if i.globalBackendSettings != nil && i.globalBackendSettings.VLLM.Docker != nil && i.globalBackendSettings.VLLM.Docker.Enabled {
dockerEnabled = true
}
case backends.BackendTypeMlxLm:
// MLX does not support docker currently
}
}
// Use anonymous struct to avoid recursion // Use anonymous struct to avoid recursion
type Alias Process type Alias Process
return json.Marshal(&struct { return json.Marshal(&struct {
*Alias *Alias
Options *CreateInstanceOptions `json:"options,omitempty"` Options *CreateInstanceOptions `json:"options,omitempty"`
DockerEnabled bool `json:"docker_enabled,omitempty"`
}{ }{
Alias: (*Alias)(i), Alias: (*Alias)(i),
Options: i.options, Options: i.options,
DockerEnabled: dockerEnabled,
}) })
} }

View File

@@ -1,13 +1,14 @@
import React from "react"; import React from "react";
import { Badge } from "@/components/ui/badge"; import { Badge } from "@/components/ui/badge";
import { BackendType, type BackendTypeValue } from "@/types/instance"; import { BackendType, type BackendTypeValue } from "@/types/instance";
import { Server } from "lucide-react"; import { Server, Package } from "lucide-react";
interface BackendBadgeProps { interface BackendBadgeProps {
backend?: BackendTypeValue; backend?: BackendTypeValue;
docker?: boolean;
} }
const BackendBadge: React.FC<BackendBadgeProps> = ({ backend }) => { const BackendBadge: React.FC<BackendBadgeProps> = ({ backend, docker }) => {
if (!backend) { if (!backend) {
return null; return null;
} }
@@ -39,6 +40,7 @@ const BackendBadge: React.FC<BackendBadgeProps> = ({ backend }) => {
}; };
return ( return (
<div className="flex items-center gap-1">
<Badge <Badge
variant="outline" variant="outline"
className={`flex items-center gap-1.5 ${getColorClasses()}`} className={`flex items-center gap-1.5 ${getColorClasses()}`}
@@ -46,6 +48,17 @@ const BackendBadge: React.FC<BackendBadgeProps> = ({ backend }) => {
<Server className="h-3 w-3" /> <Server className="h-3 w-3" />
<span className="text-xs">{getText()}</span> <span className="text-xs">{getText()}</span>
</Badge> </Badge>
{docker && (
<Badge
variant="outline"
className="flex items-center gap-1.5 bg-orange-100 text-orange-800 border-orange-200 dark:bg-orange-900 dark:text-orange-200 dark:border-orange-800"
title="Docker enabled"
>
<Package className="h-3 w-3" />
<span className="text-[10px] uppercase tracking-wide">Docker</span>
</Badge>
)}
</div>
); );
}; };

View File

@@ -66,7 +66,7 @@ function InstanceCard({
{/* Badges row */} {/* Badges row */}
<div className="flex items-center gap-2 flex-wrap"> <div className="flex items-center gap-2 flex-wrap">
<BackendBadge backend={instance.options?.backend_type} /> <BackendBadge backend={instance.options?.backend_type} docker={instance.docker_enabled} />
{running && <HealthBadge health={health} />} {running && <HealthBadge health={health} />}
</div> </div>
</div> </div>

View File

@@ -23,4 +23,5 @@ export interface Instance {
name: string; name: string;
status: InstanceStatus; status: InstanceStatus;
options?: CreateInstanceOptions; options?: CreateInstanceOptions;
docker_enabled?: boolean; // indicates backend is running via Docker
} }