Files
deerflow-code/frontend-web/src/components/workspace/model-name-select.tsx
T

62 lines
1.7 KiB
TypeScript

"use client";
import {
Select,
SelectContent,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { useModels } from "@/core/models/hooks";
import { cn } from "@/lib/utils";
/** Sentinel for "use the backend's default/configured model" (no override). */
const DEFAULT_VALUE = "__default__";
/**
* Compact dropdown to optionally pick an LLM model for a one-off action
* (skill-name generation, knowledge ingestion, …). The value is the model
* `name`; `null` means "use the configured default" (no override sent).
*/
export function ModelNameSelect({
value,
onChange,
disabled,
className,
triggerClassName,
defaultLabel = "默认模型",
title = "选择用于本次操作的大模型(默认使用系统配置的模型)",
}: {
value: string | null;
onChange: (modelName: string | null) => void;
disabled?: boolean;
className?: string;
triggerClassName?: string;
defaultLabel?: string;
title?: string;
}) {
const { models } = useModels();
return (
<Select
value={value ?? DEFAULT_VALUE}
onValueChange={(v) => onChange(v === DEFAULT_VALUE ? null : v)}
disabled={disabled}
>
<SelectTrigger
className={cn("h-8 gap-1.5 text-xs", triggerClassName, className)}
title={title}
>
<SelectValue placeholder={defaultLabel} />
</SelectTrigger>
<SelectContent position="popper" side="bottom" sideOffset={4}>
<SelectItem value={DEFAULT_VALUE}>{defaultLabel}</SelectItem>
{models.map((m) => (
<SelectItem key={m.name} value={m.name}>
{m.display_name || m.name}
</SelectItem>
))}
</SelectContent>
</Select>
);
}