chat-indic-ui / src /components /system-prompt.tsx
sam2ai's picture
Synced repo using 'sync_with_huggingface' Github Action
0971cc4 verified
"use client";
import { Dispatch, SetStateAction, useEffect, useState } from "react";
import { toast } from "sonner";
import { useDebounce } from "use-debounce";
import { useHasMounted } from "@/lib/utils";
import { ChatOptions } from "./chat/chat-options";
import { Textarea } from "./ui/textarea";
export interface SystemPromptProps {
chatOptions: ChatOptions;
setChatOptions: Dispatch<SetStateAction<ChatOptions>>;
}
export default function SystemPrompt({
chatOptions,
setChatOptions,
}: SystemPromptProps) {
const hasMounted = useHasMounted();
const systemPrompt = chatOptions ? chatOptions.systemPrompt : "";
const [text, setText] = useState<string>(systemPrompt || "");
const [debouncedText] = useDebounce(text, 500);
useEffect(() => {
if (!hasMounted) {
return;
}
if (debouncedText !== systemPrompt) {
setChatOptions({ ...chatOptions, systemPrompt: debouncedText });
toast.success("System prompt updated", { duration: 1000 });
}
}, [hasMounted, debouncedText]);
return (
<div>
<div className="justify-start gap-2 w-full rounded-sm px-2 text-xs">
<p>System prompt</p>
</div>
<div className="m-2">
<Textarea
className="resize-none bg-white/20 dark:bg-card/35"
autoComplete="off"
rows={7}
value={text}
onChange={(e) => setText(e.currentTarget.value)}
name="systemPrompt"
placeholder="You are a helpful assistant."
/>
</div>
</div>
);
}