import { Select, Slider, Stack, Switch, Text, TextInput } from "@mantine/core"; import { useForm } from "@mantine/form"; import { usePubSub } from "create-pubsub/react"; import { useMemo } from "react"; import { settingsPubSub } from "../../../../../modules/pubSub"; import { defaultSettings, inferenceTypes, } from "../../../../../modules/settings"; import { isWebGPUAvailable } from "../../../../../modules/webGpu"; import { AIParameterSlider } from "./components/AIParameterSlider"; import { BrowserSettings } from "./components/BrowserSettings"; import { HordeSettings } from "./components/HordeSettings"; import { OpenAISettings } from "./components/OpenAISettings"; import { SystemPromptInput } from "./components/SystemPromptInput"; import { useHordeModels } from "./hooks/useHordeModels"; import { useHordeUserInfo } from "./hooks/useHordeUserInfo"; import { useOpenAiModels } from "./hooks/useOpenAiModels"; export default function AISettingsForm() { const [settings, setSettings] = usePubSub(settingsPubSub); const { openAiModels, useTextInput } = useOpenAiModels(settings); const hordeModels = useHordeModels(settings); const hordeUserInfo = useHordeUserInfo(settings); const form = useForm({ initialValues: settings, onValuesChange: setSettings, }); const inferenceTypeSupportsMinP = form.values.inferenceType === "browser" || form.values.inferenceType === "horde"; const penaltySliderMarks = useMemo( () => [ { value: -2.0, label: "-2.0" }, { value: 0.0, label: "0" }, { value: 2.0, label: "2.0" }, ], [], ); const probabilitySliderMarks = useMemo( () => Array.from({ length: 3 }, (_, index) => ({ value: index / 2, label: (index / 2).toString(), })), [], ); const searchResultsToConsiderSliderMarks = useMemo( () => Array.from({ length: 7 }, (_, index) => ({ value: index, label: index.toString(), })), [], ); const temperatureSliderMarks = useMemo( () => [ { value: 0, label: "0" }, { value: 1, label: "1" }, { value: 2, label: "2" }, ], [], ); return ( {form.values.enableAiResponse && ( <> Search results to consider Determines the number of search results to consider when generating AI responses. A higher value may enhance accuracy, but it will also increase response time.