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.
32 lines (25 loc) • 1.61 kB
text/typescript
import {ChatAdapter as CoreChatAdapter, DataTransferMode} from '../../../types/adapters/chat/chatAdapter';
import {ServerComponentChatAdapter} from '../../../types/adapters/chat/serverComponentChatAdapter';
import {isStandardChatAdapter, StandardChatAdapter} from '../../../types/adapters/chat/standardChatAdapter';
export const getDataTransferModeToUse = <AiMsg>(
adapter: CoreChatAdapter<AiMsg> | ServerComponentChatAdapter<AiMsg> | StandardChatAdapter<AiMsg>,
): DataTransferMode => {
const supportedDataTransferModes: DataTransferMode[] = [];
const adapterAsCoreAdapter: CoreChatAdapter<AiMsg> | undefined = adapter as CoreChatAdapter<AiMsg> | undefined;
const adapterAsEsmAdapter: ServerComponentChatAdapter<AiMsg> | undefined = adapter as ServerComponentChatAdapter<AiMsg> | undefined;
if (adapterAsCoreAdapter?.streamText !== undefined || adapterAsEsmAdapter?.streamServerComponent !== undefined) {
supportedDataTransferModes.push('stream');
}
if (adapterAsCoreAdapter?.batchText !== undefined) {
supportedDataTransferModes.push('batch');
}
const adapterAsStandardAdapter: StandardChatAdapter<AiMsg> | undefined = isStandardChatAdapter(
adapter,
) ? adapter as StandardChatAdapter<AiMsg> : undefined;
const adapterDataTransferMode: DataTransferMode | undefined = adapterAsStandardAdapter?.dataTransferMode
?? undefined;
const defaultDataTransferMode = supportedDataTransferModes.length === 1
? supportedDataTransferModes[0]
: 'stream';
return adapterDataTransferMode ?? defaultDataTransferMode;
};