remix-nlux
Version:
Remix IDE NLUX integration. Remix IDE is the leading IDE for building and deploying smart contracts on Ethereum. NLUX is a JavaScript and React library for building conversational AI experiences.
57 lines (49 loc) • 1.71 kB
text/typescript
import {ChatAdapterOptions, StandardChatAdapter} from '@nlux/hf';
import {debug} from '@shared/utils/debug';
import {useEffect, useState} from 'react';
import {getAdapterBuilder} from './getAdapterBuilder';
const source = 'hooks/useChatAdapter';
export const useChatAdapter = <AiMsg = string>(
options: ChatAdapterOptions<AiMsg>,
): StandardChatAdapter<AiMsg> => {
if (!options.model) {
throw new Error('You must provide either a model or an endpoint to use Hugging Face Inference API.');
}
const [isInitialized, setIsInitialized] = useState(false);
const [adapter] = useState<StandardChatAdapter<AiMsg>>(
getAdapterBuilder<AiMsg>(options).create(),
);
const {
authToken,
dataTransferMode,
model,
systemMessage,
preProcessors: {
input: inputPreProcessor = undefined,
output: outputPreProcessor = undefined,
} = {},
maxNewTokens,
} = options || {};
useEffect(() => {
if (!isInitialized) {
setIsInitialized(true);
return;
}
debug({
source,
message: 'A new parameter has changed in useChatAdapter(). Adapter cannot be changed after ' +
'initialization and the new parameter will not be applied. Please re-initialize the adapter ' +
'with the new parameter. or user adapter methods to change the options and behaviour of ' +
'the adapter.',
});
}, [
authToken,
dataTransferMode,
model,
systemMessage,
inputPreProcessor,
outputPreProcessor,
maxNewTokens,
]);
return adapter;
};