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.
110 lines (95 loc) • 3.65 kB
text/typescript
import {SanitizerExtension} from '@shared/sanitizer/sanitizer';
import {HighlighterExtension} from '../highlighter/highlighter';
/**
* Props for the custom function that renders a message sent by the server in batch mode.
* @template AiMsg The type of the message received from the AI. Defaults to string for standard NLUX adapters.
*
* @property {string} uid The unique identifier of the message.
* @property {'batch'} dataTransferMode The data transfer mode used by the adapter.
* @property {'complete'} status The status of the message.
*
* @property {AiMsg} content The content of the message. The content is a single message.
* @property {unknown} serverResponse The raw server response. The server response is a single object or string
* representing the raw response received from the server.
*/
export type ResponseRendererProps<AiMsg> = {
uid: string
dataTransferMode: 'stream' | 'batch'
status: 'streaming' | 'complete'
content: [AiMsg]
serverResponse: unknown[]
trackSentiment?: (sentiment: string) => void
};
export type ResponseRenderer<AiMsg> = (props: ResponseRendererProps<AiMsg>) => HTMLElement | null;
export type PromptRendererProps = {
uid: string;
prompt: string;
};
export type PromptRenderer = (props: PromptRendererProps) => HTMLElement | null;
export type MessageOptions<AiMsg = string> = {
/**
* Highlighter extension for code blocks inside messages.
*/
syntaxHighlighter?: HighlighterExtension;
/**
* Custom function to sanitize the HTML content of the messages. This function is called before any HTML content
* is rendered in the chat.
*
* @param {string} html
* @returns {string}
*/
htmlSanitizer?: SanitizerExtension;
/**
* Indicates the target of the links in the markdown messages.
* - 'blank': Open links in a new tab.
* - 'self': Open links in the same tab.
*
* @default 'blank'
*/
markdownLinkTarget?: 'blank' | 'self';
/**
* Indicates whether the copy button should be shown for code blocks.
*
* @default true
*/
showCodeBlockCopyButton?: boolean;
/**
* Indicates whether the streaming animation should be skipped.
*
* @default false
*/
skipStreamingAnimation?: boolean;
/**
* The interval in milliseconds at which new characters are added when a message is being generated and
* streamed to the user.
*
* @default 10
*/
streamingAnimationSpeed?: number;
/**
* In streaming data transfer mode, this represents the wait time in milliseconds after last chunk of data
* is received before marking the streaming as complete. This can be used to prevent the streaming from being
* marked as complete too early.
*
* If set to 'never', the streaming will never be automatically be marked as complete. It will be up to the
* adapter to manually mark the streaming as complete by calling the `observer.complete()` method.
*
* @default 2000
*/
waitTimeBeforeStreamCompletion?: number | 'never';
/**
* Custom function to render the message received from the AI.
*/
responseRenderer?: ResponseRenderer<AiMsg>;
/**
* Custom function to render the message sent by the user.
*/
promptRenderer?: PromptRenderer;
/**
* Indicates whether the user should be able to edit the message after sending it.
* Editing a message will replace the original message and will remove all subsequent messages in the conversation.
*
* @default false
*/
editableUserMessages?: boolean;
}