Download frontend/src/utils/chat/agent.js from leowuming/rag: direct link, hf CLI and curl.
- Browser
- Download file 3.17 kB
-
https://huggingface.co/spaces/leowuming/rag/resolve/main/frontend/src/utils/chat/agent.js
- Command line
-
hf download hf://spaces/leowuming/rag/frontend/src/utils/chat/agent.js
-
curl -L -o agent.js https://huggingface.co/spaces/leowuming/rag/resolve/main/frontend/src/utils/chat/agent.js
3.17 kB
| import { v4 } from "uuid"; | |
| import { safeJsonParse } from "../request"; | |
| import { saveAs } from "file-saver"; | |
| import { API_BASE } from "../constants"; | |
| import { useEffect, useState } from "react"; | |
| export const AGENT_SESSION_START = "agentSessionStart"; | |
| export const AGENT_SESSION_END = "agentSessionEnd"; | |
| const handledEvents = [ | |
| "statusResponse", | |
| "fileDownload", | |
| "awaitingFeedback", | |
| "wssFailure", | |
| "rechartVisualize", | |
| ]; | |
| export function websocketURI() { | |
| const wsProtocol = window.location.protocol === "https:" ? "wss:" : "ws:"; | |
| if (API_BASE === "/api") return `${wsProtocol}//${window.location.host}`; | |
| return `${wsProtocol}//${new URL(import.meta.env.VITE_API_BASE).host}`; | |
| } | |
| export default function handleSocketResponse(event, setChatHistory) { | |
| const data = safeJsonParse(event.data, null); | |
| if (data === null) return; | |
| // No message type is defined then this is a generic message | |
| // that we need to print to the user as a system response | |
| if (!data.hasOwnProperty("type")) { | |
| return setChatHistory((prev) => { | |
| return [ | |
| ...prev.filter((msg) => !!msg.content), | |
| { | |
| uuid: v4(), | |
| content: data.content, | |
| role: "assistant", | |
| sources: [], | |
| closed: true, | |
| error: null, | |
| animate: false, | |
| pending: false, | |
| }, | |
| ]; | |
| }); | |
| } | |
| if (!handledEvents.includes(data.type) || !data.content) return; | |
| if (data.type === "fileDownload") { | |
| saveAs(data.content.b64Content, data.content.filename ?? "unknown.txt"); | |
| return; | |
| } | |
| if (data.type === "rechartVisualize") { | |
| return setChatHistory((prev) => { | |
| return [ | |
| ...prev.filter((msg) => !!msg.content), | |
| { | |
| type: "rechartVisualize", | |
| uuid: v4(), | |
| content: data.content, | |
| role: "assistant", | |
| sources: [], | |
| closed: true, | |
| error: null, | |
| animate: false, | |
| pending: false, | |
| }, | |
| ]; | |
| }); | |
| } | |
| if (data.type === "wssFailure") { | |
| return setChatHistory((prev) => { | |
| return [ | |
| ...prev.filter((msg) => !!msg.content), | |
| { | |
| uuid: v4(), | |
| content: data.content, | |
| role: "assistant", | |
| sources: [], | |
| closed: true, | |
| error: data.content, | |
| animate: false, | |
| pending: false, | |
| }, | |
| ]; | |
| }); | |
| } | |
| return setChatHistory((prev) => { | |
| return [ | |
| ...prev.filter((msg) => !!msg.content), | |
| { | |
| uuid: v4(), | |
| type: data.type, | |
| content: data.content, | |
| role: "assistant", | |
| sources: [], | |
| closed: true, | |
| error: null, | |
| animate: data?.animate || false, | |
| pending: false, | |
| }, | |
| ]; | |
| }); | |
| } | |
| export function useIsAgentSessionActive() { | |
| const [activeSession, setActiveSession] = useState(false); | |
| useEffect(() => { | |
| function listenForAgentSession() { | |
| if (!window) return; | |
| window.addEventListener(AGENT_SESSION_START, () => | |
| setActiveSession(true) | |
| ); | |
| window.addEventListener(AGENT_SESSION_END, () => setActiveSession(false)); | |
| } | |
| listenForAgentSession(); | |
| }, []); | |
| return activeSession; | |
| } | |