import { IconBulb, IconCheck } from "@tabler/icons-react"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { cn } from "@/lib/utils"; import type { ThinkingMode } from "shared/legacy-sdk"; interface ThinkingButtonProps { mode: ThinkingMode; effort: string; efforts?: string[]; alwaysOn?: boolean; disabled?: boolean; /** When set, rendered as a muted wrapping note below the effort options * (e.g. the mid-conversation switch cache-cost notice). */ cacheNote?: string; onToggle: () => void; onSelectEffort: (effort: string) => void; } function label(effort: string): string { return effort.charAt(0).toUpperCase() + effort.slice(1); } export function ThinkingButton({ mode, effort, efforts = [], alwaysOn = false, disabled, cacheNote, onToggle, onSelectEffort }: ThinkingButtonProps) { if (mode === "none") return null; const active = effort !== "off" || alwaysOn; const button = ( ); if (mode === "effort") { const options = alwaysOn ? efforts : ["off", ...efforts]; return ( {button} Thinking effort: {label(effort)} {options.map((option) => ( onSelectEffort(option)} className="text-xs gap-2"> {label(option)} ))} {cacheNote !== undefined && (
{cacheNote}
)}
); } const tooltip = mode === "always" ? "Thinking is always enabled for this model" : active ? "Thinking enabled" : "Enable thinking"; return ( {button} {tooltip} ); }