Migrating from NLUX v1 to v2
Overview
NLUX v1.x was released in January 2024, and NLUX v2.x was released in May 2024, with several major improvements and
new features. The new version of NLUX introduces breaking changes to the theming system, TypeScript types, and the
AiChat UI component's config options.
If you're a user of NLUX v1.x looking to migrate to v2.x, this guide is for you.
Scope of the breaking changes:
- Theming system and default theme
- TypeScript types
- Config options
- Custom adapters API
Theming System
NLUX v2.x comes with a new default theme called Nova.
When you set up NLUX as per documentation and guides, you are expected to load the Nova theme's CSS into your
web page, as following:
import '@nlux/themes/nova.css';
We recommend using the default Nova theme, as it's a more user-friendly and accessible theme, that supports both
dark and light modes. But if you would like to keep the old legacy theme, you have that option.
Keeping the v1.x theme
The NLUX v1.x's default theme is called Luna and it's still included as part of the v2.x release, but not as a
default theme. If you're interested in keeping the Luna theme while using NLUX v2.x, you can that by providing
themeId prop to the AiChat component's displayOptions, as following:
- React JS ⚛️
- JavaScript 🟨
import {AiChat} from '@nlux/react';
<AiChat displayOptions={{ themeId: 'luna' }} />
import {createAiChat} from '@nlux/core';
const aiChat = createAiChat().withDisplayOptions({themeId: 'luna'});
In addition to that, you will also need to import the Luna theme's CSS into your web page.
If your project bundler supports CSS imports, you can do that as following:
import '@nlux/themes/luna.css';
Otherwise, you can download the Luna theme's CSS file
from @nlux/themes NPM and include it in your HTML file.
Type Changes
NLUX v2.x has updated the name and value of certain types. Here's a list of the updated types:
Participant Role
This value is used in the ChatItem type to define the role of the participant in the conversation.
Old value:
type ParticipantRole = 'user' | 'system' | 'ai';
New value:
type ParticipantRole = 'user' | 'system' | 'assistant';
The ai role has been renamed to assistant to better reflect the role of the AI in the conversation,
and to match the naming convention of OpenAI APIs that are considered as an industry standard.
AiChat Config Options
AiChat UI component's config options have been updated in NLUX v2.x.
If you're using AiChat component in your project, you will need to update the config options as per the new API.
Here's a list of the updated config options:
| Old Config Option | New Config Option | Change Description | 
|---|---|---|
| themeId | displayOptions.themeId | themeIdprop has been moved todisplayOptionsobject. | 
| personaOptions.bot | personaOptions.assistant | personaOptions.bothas been renamed topersonaOptions.assistant. | 
| personaOptions.bot.picture | personaOptions.assistant.avatar | personaOptions.bot.picturehas been renamed topersonaOptions.assistant.avatar. | 
| personaOptions.user.picture | personaOptions.user.avatar | personaOptions.user.picturehas been renamed topersonaOptions.user.avatar. | 
| conversationOptions.scrollWhenGenerating | conversationOptions.autoScroll | conversationOptions.scrollWhenGeneratinghas been renamed toconversationOptions.autoScroll. | 
| conversationOptions.streamingAnimationSpeed | messageOptions.streamingAnimationSpeed | conversationOptions.streamingAnimationSpeedhas been moved tomessageOptions. | 
| conversationOptions.historyPayloadSize | - | The type of conversationOptions.historyPayloadSizehas been changed fromnumber | 'none' | 'max'tonumber | 'max'. | 
| layoutOptions.width | displayOptions.width | layoutOptions.widthhas been moved todisplayOptions. | 
| layoutOptions.height | displayOptions.height | layoutOptions.heighthas been moved todisplayOptions. | 
| layoutOptions.maxWidth | - | layoutOptions.maxWidthhas been removed. The default width is now100%. | 
| layoutOptions.maxHeight | - | layoutOptions.maxHeighthas been removed. The default height is now100%. | 
| promptBoxOptions.autoFocus | componentOptions.autoFocus | promptOptions.autoFocushas been moved tocomponentOptions. | 
| promptBoxOptions.placeholder | componentOptions.placeholder | promptOptions.placeholderhas been moved tocomponentOptions. | 
| syntaxHighlightingOptions | messageOptions.syntaxHighlighting | syntaxHighlightingOptionshas been moved tomessageOptions. | 
Please note that this is not an exhaustive list of changes, and you should refer to the
NLUX v2.x AI Chat component documentation for a complete list of changes.
Custom Adapters
If you have implemented custom adapters in your project, you will need to update them to work with NLUX v2.x.
The new version of NLUX has updated the adapter API to provide better flexibility and more control over the
conversation flow.
The most important change in the adapter API is the introduction of generic types for the ChatAdapter interface.
Please refer to the NLUX v2.x custom adapters documentation for more information on how to
update your custom adapters.