Download src/hooks/useChatLogic.ts from IOE-IFAD/test: direct link, hf CLI and curl.
- Browser
- Download file 3.13 kB
-
https://huggingface.co/spaces/IOE-IFAD/test/resolve/main/src/hooks/useChatLogic.ts
- Command line
-
hf download hf://spaces/IOE-IFAD/test/src/hooks/useChatLogic.ts
-
curl -L -o useChatLogic.ts https://huggingface.co/spaces/IOE-IFAD/test/resolve/main/src/hooks/useChatLogic.ts
3.13 kB
| import React, { useCallback, useRef, useState } from "react"; | |
| import { Chat, Message } from "@/lib/types"; | |
| import { useChatStore } from "@/stores/chatStore"; | |
| import { sendChat, getNameForNewChat } from "@/lib/api"; | |
| import { init_message, init_message_meeting_minutes } from "@/lib/prompts"; | |
| import { useToast } from "@/hooks/use-toast"; | |
| export const useChatLogic = ( | |
| selectedChat: Chat | null, | |
| selectedChatId: string | null, | |
| scrollToBottom: () => void | |
| ) => { | |
| const [isLoading, setIsLoading] = useState<boolean>(false); | |
| const { toast } = useToast(); | |
| const { sendMessage, removeMessage, loadChat, updateChatName } = | |
| useChatStore(); | |
| const handleSubmit = useCallback( | |
| async (inputValue: string) => { | |
| const currentInput = inputValue.trim(); | |
| if (!currentInput || isLoading || !selectedChatId || !selectedChat) | |
| return; | |
| setIsLoading(true); | |
| let userMessageId = ""; | |
| try { | |
| const userMessage: Message = { | |
| content: currentInput, | |
| transcripts: [], | |
| role: "user", | |
| timestamp: new Date(), | |
| id: crypto.randomUUID(), | |
| }; | |
| // if (selectedChat.messages.length === 0) { | |
| // // getting the initial message from the environment variable | |
| // const initial_message = | |
| // process.env.NEXT_PUBLIC_INITIAL_MESSAGE == "CLE" | |
| // ? init_message_meeting_minutes | |
| // : process.env.NEXT_PUBLIC_INITIAL_MESSAGE == "CSPE" | |
| // ? init_message | |
| // : init_message_meeting_minutes; | |
| // await sendMessage(initial_message); | |
| // } | |
| userMessageId = await sendMessage(userMessage); | |
| const chat = await loadChat(selectedChatId); | |
| const aiResponse = await sendChat(chat.messages, userMessage); | |
| if (!aiResponse?.ok) { | |
| throw new Error("Failed to send message"); | |
| } | |
| const aiResponseData = await aiResponse.json(); | |
| const aiMessage: Message = { | |
| content: aiResponseData.response, | |
| transcripts: aiResponseData.timestamps, | |
| role: "assistant", | |
| timestamp: new Date(), | |
| id: crypto.randomUUID(), | |
| }; | |
| await sendMessage(aiMessage); | |
| scrollToBottom(); | |
| const chatLength = (await loadChat(selectedChatId)).messages.length; | |
| if (chatLength === 3) { | |
| const name = await getNameForNewChat( | |
| userMessage.content, | |
| aiMessage.content | |
| ); | |
| if (name) updateChatName(selectedChatId, name); | |
| } | |
| } catch (error) { | |
| console.error("Error in chat submission:", error); | |
| removeMessage(userMessageId); | |
| toast({ | |
| title: "Error", | |
| description: "Failed to send message. Please try again.", | |
| variant: "destructive", | |
| }); | |
| } finally { | |
| setIsLoading(false); | |
| } | |
| }, | |
| [ | |
| isLoading, | |
| selectedChatId, | |
| selectedChat, | |
| sendMessage, | |
| loadChat, | |
| updateChatName, | |
| removeMessage, | |
| scrollToBottom, | |
| toast, | |
| ] | |
| ); | |
| return { isLoading, handleSubmit }; | |
| }; | |