@assistant-ui/react
Version:
Typescript/React library for AI Chat
57 lines • 1.82 kB
JavaScript
"use client";
import { jsx, jsxs } from "react/jsx-runtime";
import {
memo,
useEffect,
useMemo,
useState
} from "react";
import { AssistantContext } from "../react/AssistantContext";
import { makeAssistantToolUIsStore } from "../stores/AssistantToolUIs";
import { ThreadRuntimeProvider } from "./ThreadRuntimeProvider";
import { create } from "zustand";
import { writableStore } from "../ReadonlyStore";
import { ensureBinding } from "../react/utils/ensureBinding";
const useAssistantRuntimeStore = (runtime) => {
const [store] = useState(() => create(() => runtime));
useEffect(() => {
ensureBinding(runtime);
ensureBinding(runtime.threads);
writableStore(store).setState(runtime, true);
}, [runtime, store]);
return store;
};
const useAssistantToolUIsStore = () => {
return useMemo(() => makeAssistantToolUIsStore(), []);
};
const getRenderComponent = (runtime) => {
return runtime._core?.RenderComponent;
};
const AssistantRuntimeProviderImpl = ({ children, runtime }) => {
const useAssistantRuntime = useAssistantRuntimeStore(runtime);
const useToolUIs = useAssistantToolUIsStore();
const [context] = useState(() => {
return {
useToolUIs,
useAssistantRuntime
};
});
const RenderComponent = getRenderComponent(runtime);
return /* @__PURE__ */ jsxs(AssistantContext.Provider, { value: context, children: [
RenderComponent && /* @__PURE__ */ jsx(RenderComponent, {}),
/* @__PURE__ */ jsx(
ThreadRuntimeProvider,
{
runtime: runtime.thread,
listItemRuntime: runtime.threads.mainItem,
children
}
)
] });
};
const AssistantRuntimeProvider = memo(AssistantRuntimeProviderImpl);
export {
AssistantRuntimeProvider,
AssistantRuntimeProviderImpl
};
//# sourceMappingURL=AssistantRuntimeProvider.js.map