/* eslint-disable @typescript-eslint/no-explicit-any */ import { useEffect, useState } from 'react' import { Slider, Input } from '@janhq/uikit' import { useAtomValue } from 'jotai' import useUpdateModelParameters from '@/hooks/useUpdateModelParameters' import { getActiveThreadIdAtom, getActiveThreadModelRuntimeParamsAtom, } from '@/helpers/atoms/Thread.atom' type Props = { name: string title: string min: number max: number step: number value: number register: any } const SliderRightPanel: React.FC = ({ name, title, min, max, step, value, register, }) => { const [currentValue, setCurrentValue] = useState(value) const { updateModelParameter } = useUpdateModelParameters() const threadId = useAtomValue(getActiveThreadIdAtom) const activeModelParams = useAtomValue(getActiveThreadModelRuntimeParamsAtom) useEffect(() => { setCurrentValue(value) // eslint-disable-next-line react-hooks/exhaustive-deps }, [value]) useEffect(() => { updateSetting() // eslint-disable-next-line react-hooks/exhaustive-deps }, [currentValue]) const updateValue = [name].reduce((accumulator, value) => { return { ...accumulator, [value]: currentValue } }, {}) const updateSetting = () => { return updateModelParameter(String(threadId), { ...activeModelParams, ...updateValue, }) } return (

{title}

parseInt(v), })} value={[currentValue]} onValueChange={async (e) => { setCurrentValue(Number(e[0])) await updateSetting() }} type="range" min={min} max={max} step={step} />

{min}

{max / 2}

{max}

{ setCurrentValue(Number(e.target.value)) await updateSetting() }} />
) } export default SliderRightPanel