import { Combobox } from "@kobalte/core/combobox" import { createEffect, createMemo } from "solid-js" import { providers, fetchProviders } from "../stores/sessions" import { ChevronDown } from "lucide-solid" import { getLogger } from "../lib/logger" import { getModelThinkingSelection, setModelThinkingSelection } from "../stores/preferences" import { useI18n } from "../lib/i18n" const log = getLogger("session") interface ThinkingSelectorProps { instanceId: string currentModel: { providerId: string; modelId: string } } type ThinkingOption = { key: string label: string value: string | undefined } export default function ThinkingSelector(props: ThinkingSelectorProps) { const { t } = useI18n() const instanceProviders = () => providers().get(props.instanceId) || [] createEffect(() => { if (instanceProviders().length === 0) { fetchProviders(props.instanceId).catch((error) => log.error("Failed to fetch providers", error)) } }) const variantKeys = createMemo(() => { const { providerId, modelId } = props.currentModel const provider = instanceProviders().find((p) => p.id === providerId) const model = provider?.models.find((m) => m.id === modelId) return model?.variantKeys ?? [] }) const options = createMemo(() => { const keys = variantKeys() return [ { key: "__default__", label: t("thinkingSelector.variant.default"), value: undefined }, ...keys.map((k) => ({ key: k, label: k, value: k })), ] }) const currentValue = createMemo(() => { const selected = getModelThinkingSelection(props.currentModel) const keys = variantKeys() if (selected && keys.includes(selected)) { return options().find((opt) => opt.value === selected) } return options()[0] }) const handleChange = (value: ThinkingOption | null) => { if (!value) return setModelThinkingSelection(props.currentModel, value.value) } const triggerPrimary = createMemo(() => { const selected = currentValue()?.value const variant = selected ?? t("thinkingSelector.variant.default") return t("thinkingSelector.label", { variant }) }) return ( ) }