import { useCallback, useContext, useEffect, useMemo, useState } from "preact/hooks"; import { useBool } from "@common/hooks/useBool"; import { Modal } from "@common/components/modal/modal"; import { Instruct, StateContext } from "../../contexts/state"; import { LLMContext } from "../../contexts/llm"; import { MiniChat } from "../minichat/minichat"; import { AutoTextarea } from "../autoTextarea"; import styles from './header.module.css'; import { Ace } from "../ace"; export const Header = () => { const { modelName, modelTemplate, contextLength, promptTokens, blockConnection } = useContext(LLMContext); const { messages, connectionUrl, systemPrompt, lore, userPrompt, bannedWords, instruct, setConnectionUrl, setSystemPrompt, setLore, setUserPrompt, addSwipe, setBannedWords, setInstruct } = useContext(StateContext); const loreOpen = useBool(); const promptsOpen = useBool(); const assistantOpen = useBool(); const bannedWordsInput = useMemo(() => bannedWords.join('\n'), [bannedWords]); const urlValid = useMemo(() => contextLength > 0, [contextLength]); const handleBlurUrl = useCallback(() => { const regex = /^(?:http(s?):\/\/)?(.*?)\/?$/i const normalizedConnectionUrl = connectionUrl.replace(regex, 'http$1://$2'); setConnectionUrl(normalizedConnectionUrl); blockConnection.setFalse(); }, [connectionUrl, setConnectionUrl, blockConnection]); 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.split('\n').sort(); setBannedWords(words); } }, [setBannedWords]); return (
{promptTokens} / {contextLength}

Lore Editor

Prompts Editor

System prompt


User prompt template


Banned phrases

); }