@assistant-ui/react
Version:
Typescript/React library for AI Chat
44 lines • 1.67 kB
JavaScript
"use client";
import { useEffect, useMemo, useState } from "react";
import { LocalRuntimeCore } from "./LocalRuntimeCore";
import { useRuntimeAdapters } from "../adapters/RuntimeAdapterProvider";
import { useRemoteThreadListRuntime } from "../remote-thread-list/useRemoteThreadListRuntime";
import { useCloudThreadListAdapter } from "../remote-thread-list/adapter/cloud";
import { AssistantRuntimeImpl } from "../../internal";
const useLocalThreadRuntime = (adapter, { initialMessages, ...options }) => {
const { modelContext, ...threadListAdapters } = useRuntimeAdapters() ?? {};
const opt = useMemo(
() => ({
...options,
adapters: {
...threadListAdapters,
...options.adapters,
chatModel: adapter
}
}),
[adapter, options, threadListAdapters]
);
const [runtime] = useState(() => new LocalRuntimeCore(opt, initialMessages));
useEffect(() => {
runtime.threads.getMainThreadRuntimeCore().__internal_setOptions(opt);
runtime.threads.getMainThreadRuntimeCore().__internal_load();
}, [runtime, opt]);
useEffect(() => {
if (!modelContext) return void 0;
return runtime.registerModelContextProvider(modelContext);
}, [modelContext, runtime]);
return useMemo(() => new AssistantRuntimeImpl(runtime), [runtime]);
};
const useLocalRuntime = (adapter, { cloud, ...options } = {}) => {
const cloudAdapter = useCloudThreadListAdapter({ cloud });
return useRemoteThreadListRuntime({
runtimeHook: function RuntimeHook() {
return useLocalThreadRuntime(adapter, options);
},
adapter: cloudAdapter
});
};
export {
useLocalRuntime
};
//# sourceMappingURL=useLocalRuntime.js.map