Copilot component
<wy-copilot> | WyCopilot
The copilot component renders a complete and functional user interface for a contextual AI bot chat. It needs to be configured with a chat bot and can have instructions and use any contextual data you provide (as long as it's a string).
The copilot chat is bot-to-user which means each user has their own chat with the bot. Each time the chat is loaded a fresh chat is started. It can optionally be configured with a uid
to persist the conversation. The uid
needs to be unique to each user and each bot (if you intend to use several bots). You can make a uid with automatically appended user and bot by using the autoUid
property instead, which generates a value for the uid
property.
Importing
If you installed the UIKit with npm
you can use the following snippet to import the component into your project.
Otherwise, if you installed the UIKit as a <script>
you can ignore this section.
import { WyCopilot } from "@weavy/uikit-web";
Examples
Generic copilot
The bot name is required and should correspond to any configured bot you have. You may switch between different bots whenever you like, but remember that the conversation also changes.
Here we use the built-in assistant chat bot.
<wy-copilot bot="assistant"></wy-copilot>
It's optional to provide a
uid
and in many cases not needed. When using a uid it's often useful to base theuid
on something that identifies the location where the component is rendered. Typically you would use something like a product id, page id, path or URL.
Copilot with instructions and contextual data
<div id="my-sample-content">
<h1>ACME</h1>
<ul>
<li>Wile E. Coyote</li>
<li>Daffy Duck</li>
<li>Porky Pig</li>
</ul>
</div>
<wy-copilot id="my-copilot" bot="assistant"></wy-copilot>
<script>
const copilot = document.querySelector("#my-copilot");
const sampleContent = document.querySelector("#my-sample-content");
copilot.instructions = "Answer in a whacky way with many emojis.";
copilot.data = [sampleContent.innerHTML];
</script>
Copilot with a custom button and suggestions
You may use slots to provide custom functionality to the copilot. This example shows a button to reset the conversation and some custom suggestions.
When the suggestions have the .suggestion
class, they automatically get their text inserted into the editor when clicked.
In this example we use the pre-styled weavy sub components, but you may use any elements or components you like.
<wy-copilot id="my-copilot" bot="assistant">
<wy-button
slot="actions"
kind="icon"
onclick="document.querySelector('#my-copilot').reset()"
>
<wy-icon name="stars"></wy-icon>
</wy-button>
<wy-button slot="suggestion-list" class="suggestion"
>Summarize this page</wy-button
>
<wy-button slot="suggestion-list" class="suggestion"
>What keywords are used?</wy-button
>
</wy-copilot>
All Weavy sub components can be found by importing
WeavyComponents
from the UI Kit.
Properties
Most properties are optional and/or has sensible default values. Required properties are indicated with an asterisk (*).
Property | Type | Description |
---|---|---|
bot * |
string |
The configured uid of the bot. |
instructions |
string |
Any specific instructions for the bot. Overrides any pre configured bot instructions. |
data |
string[] |
Array with any contextual data. The data is uploaded upon change. Note: Only the first item in the array is currently used. |
uid |
string |
Optional unique identifier for the app, to persist the conversation. The uid should be unique per bot and user. |
autoUid |
string |
Sets the uid property with automatically appended user and bot name. |
name |
string |
Optional display name for the app (used in notifications etc.) |
notifications |
"button-list", "none" |
Set the appearance of notifications. Defaults to "button-list" . |
notificationsBadge |
"count", "dot", "none" |
Set the appearance of the notification badge. Defaults to "count" . |
features |
string |
Explicit space separated list of enabled features. All default features are enabled when this property is not defined. |
reactions |
string |
Space separated string of unicode emojis to use for reactions. Defaults to reactions from the Weavy instance or <wy-context> . |
Learn more about attributes and properties.
Available features
Features that are available but disabled by default are indicated by parenthesis ().
Feature | Description |
---|---|
(attachments ) |
Possibility to upload local files. The support for files may be restricted by the bot provider. |
context_data |
Possibility to upload contextual data. |
embeds |
Creating embeds from urls in editor text. |
(mentions ) |
Possibility to mention other people from the current directory in the editor. |
previews |
Previews of files and attachments. |
(reactions ) |
Possibility to add emoji reactions to a message, post or comment. This has currently no effect on the bot. |
typing |
Typing indicators in the chat when the bot types. |
Events
Name | Type | Description |
---|---|---|
wy-app |
WyAppEventType |
Emitted when the app changes. |
wy-message |
WyMessageEventType |
Emitted when a message is received. |
wy-link |
WyLinkEventType |
Emitted when a notification is clicked. |
wy-preview-open |
WyPreviewOpenEventType |
Emitted when preview is about to be opened. The event may be prevented. |
wy-preview-close |
WyPreviewCloseEventType |
Emitted when preview is closed. |
Learn more about events.
Slots
The slots can be used to inject elements into the component. All predefined child nodes of the slot will be replaced with the injected content.
actions
- Floating buttons placed in the top right.empty
- All the content for the empty state.header
- Header for the empty state.icon
- Display icon in the header.
suggestions
- Suggestion content.suggestion-list
- Items for the list in the suggestion content.
footer
- Footer for the empty state.
To prevent child nodes from rendering before the component has loaded you can hide them using CSS.
wy-copilot:not(:defined) {
display: none;
}
Methods
The component exposes the following methods.
setSuggestion(text: string)
Sets the editor input to a suggested text. This replaces the text content of the editor. This can be used to create any custom suggestions.
reset()
This resets the app/conversation. I sets the component to it's initial state and clears the conversation when is not persistent (when no uid is used).