74 lines
2.1 KiB
JavaScript
74 lines
2.1 KiB
JavaScript
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
const require_CopilotKitProvider = require('../providers/CopilotKitProvider.cjs');
|
|
const require_use_frontend_tool = require('./use-frontend-tool.cjs');
|
|
let react = require("react");
|
|
react = require_runtime.__toESM(react);
|
|
|
|
//#region src/hooks/use-human-in-the-loop.tsx
|
|
function useHumanInTheLoop(tool, deps) {
|
|
const { copilotkit } = require_CopilotKitProvider.useCopilotKit();
|
|
const resolvePromiseRef = (0, react.useRef)(null);
|
|
const respond = (0, react.useCallback)(async (result) => {
|
|
if (resolvePromiseRef.current) {
|
|
resolvePromiseRef.current(result);
|
|
resolvePromiseRef.current = null;
|
|
}
|
|
}, []);
|
|
const handler = (0, react.useCallback)(async () => {
|
|
return new Promise((resolve) => {
|
|
resolvePromiseRef.current = resolve;
|
|
});
|
|
}, []);
|
|
const RenderComponent = (0, react.useCallback)((props) => {
|
|
const ToolComponent = tool.render;
|
|
if (props.status === "inProgress") {
|
|
const enhancedProps = {
|
|
...props,
|
|
name: tool.name,
|
|
description: tool.description || "",
|
|
respond: void 0
|
|
};
|
|
return react.default.createElement(ToolComponent, enhancedProps);
|
|
} else if (props.status === "executing") {
|
|
const enhancedProps = {
|
|
...props,
|
|
name: tool.name,
|
|
description: tool.description || "",
|
|
respond
|
|
};
|
|
return react.default.createElement(ToolComponent, enhancedProps);
|
|
} else if (props.status === "complete") {
|
|
const enhancedProps = {
|
|
...props,
|
|
name: tool.name,
|
|
description: tool.description || "",
|
|
respond: void 0
|
|
};
|
|
return react.default.createElement(ToolComponent, enhancedProps);
|
|
}
|
|
return react.default.createElement(ToolComponent, props);
|
|
}, [
|
|
tool.render,
|
|
tool.name,
|
|
tool.description,
|
|
respond
|
|
]);
|
|
require_use_frontend_tool.useFrontendTool({
|
|
...tool,
|
|
handler,
|
|
render: RenderComponent
|
|
}, deps);
|
|
(0, react.useEffect)(() => {
|
|
return () => {
|
|
copilotkit.removeHookRenderToolCall(tool.name, tool.agentId);
|
|
};
|
|
}, [
|
|
copilotkit,
|
|
tool.name,
|
|
tool.agentId
|
|
]);
|
|
}
|
|
|
|
//#endregion
|
|
exports.useHumanInTheLoop = useHumanInTheLoop;
|
|
//# sourceMappingURL=use-human-in-the-loop.cjs.map
|