import { useCallback, useContext, useMemo } from "preact/hooks"; import { useBool } from "@common/hooks/useBool"; import { Modal } from "@common/components/modal/Modal"; import { StateContext } from "../../contexts/state"; import { LLMContext } from "../../contexts/llm"; import { MiniChat } from "../minichat/minichat"; import { AutoTextarea } from "../autoTextarea"; import { Ace } from "../ace"; import { ConnectionEditor } from "./connectionEditor"; import styles from './header.module.css'; export const Header = () => { const { contextLength, promptTokens, modelName, spentKudos } = useContext(LLMContext); const { messages, connection, systemPrompt, lore, userPrompt, bannedWords, summarizePrompt, summaryEnabled, totalSpentKudos, setSystemPrompt, setLore, setUserPrompt, addSwipe, setBannedWords, setInstruct, setSummarizePrompt, setSummaryEnabled, setConnection, } = useContext(StateContext); const connectionsOpen = useBool(); const loreOpen = useBool(); const promptsOpen = useBool(); const genparamsOpen = useBool(); const assistantOpen = useBool(); const isOnline = useMemo(() => contextLength > 0, [contextLength]); const bannedWordsInput = useMemo(() => bannedWords.join('\n'), [bannedWords]); const handleAssistantAddSwipe = useCallback((answer: string) => { const index = messages.findLastIndex(m => m.role === 'assistant'); addSwipe(index, answer); assistantOpen.setFalse(); }, [addSwipe, messages]); const handleSetBannedWords = useCallback((e: Event) => { if (e.target instanceof HTMLTextAreaElement) { const words = e.target.value.split('\n'); setBannedWords(words); } }, [setBannedWords]); const handleBlurBannedWords = useCallback((e: Event) => { if (e.target instanceof HTMLTextAreaElement) { const words = e.target.value.toLowerCase().split('\n').sort(); setBannedWords(words); } }, [setBannedWords]); const handleSetSummaryEnabled = useCallback((e: Event) => { if (e.target instanceof HTMLInputElement) { setSummaryEnabled(e.target.checked); } }, [setSummaryEnabled]); return (