@copilotkit/react-core
Version:
<img src="https://github.com/user-attachments/assets/0a6b64d9-e193-4940-a3f6-60334ac34084" alt="banner" style="border-radius: 12px; border: 2px solid #d6d4fa;" />
79 lines (77 loc) • 2.35 kB
JavaScript
import {
useToast
} from "./chunk-ZP2IMXFY.mjs";
// src/components/CopilotListeners.tsx
import { useCallback, useEffect, useRef } from "react";
import {
useAgent,
useCopilotChatConfiguration,
useCopilotKit
} from "@copilotkitnext/react";
import { parseJson } from "@copilotkit/shared";
import { CopilotKitLowLevelError } from "@copilotkit/shared";
var usePredictStateSubscription = (agent) => {
const predictStateToolsRef = useRef([]);
const getSubscriber = useCallback(
(agent2) => ({
onCustomEvent: ({ event }) => {
if (event.name === "PredictState") {
predictStateToolsRef.current = event.value;
}
},
onToolCallArgsEvent: ({ partialToolCallArgs, toolCallName }) => {
predictStateToolsRef.current.forEach((t) => {
if ((t == null ? void 0 : t.tool) !== toolCallName)
return;
const emittedState = typeof partialToolCallArgs === "string" ? parseJson(
partialToolCallArgs,
partialToolCallArgs
) : partialToolCallArgs;
agent2.setState({
[t.state_key]: emittedState[t.state_key]
});
});
}
}),
[]
);
useEffect(() => {
if (!agent)
return;
const subscriber = getSubscriber(agent);
const { unsubscribe } = agent.subscribe(subscriber);
return () => {
unsubscribe();
};
}, [agent, getSubscriber]);
};
function CopilotListeners() {
const { copilotkit } = useCopilotKit();
const existingConfig = useCopilotChatConfiguration();
const resolvedAgentId = existingConfig == null ? void 0 : existingConfig.agentId;
const { setBannerError } = useToast();
const { agent } = useAgent({ agentId: resolvedAgentId });
usePredictStateSubscription(agent);
useEffect(() => {
const subscriber = {
onError: ({ error }) => {
setBannerError(
new CopilotKitLowLevelError({
error,
message: error.message,
url: typeof window !== "undefined" ? window.location.href : ""
})
);
}
};
const subscription = copilotkit.subscribe(subscriber);
return () => {
subscription.unsubscribe();
};
}, [copilotkit == null ? void 0 : copilotkit.subscribe]);
return null;
}
export {
CopilotListeners
};
//# sourceMappingURL=chunk-WRALJIW5.mjs.map