Skip to main content
All docs
V24.2

DevExpress v24.2 Update — Your Feedback Matters

Our What's New in v24.2 webpage includes product-specific surveys. Your response to our survey questions will help us measure product satisfaction for features released in this major update and help us refine our plans for our next major release.

Take the survey Not interested

Custom AI-powered Extensions

  • 2 minutes to read

The following example creates a custom AI-powered extension (“AuthoredStyleExtension”) and integrates it into the DevExpress Rich Text Editor.

Custom AI-powered Extension - WinForms Rich Text Editor, DevExpress

#Create an Extension

The AuthoredStyleExtension is based on the DevExpress ChangeStyleExtension. The example overrides the GetSystemPrompt method to customize the prompt:

C#
using DevExpress.AIIntegration.Extensions;

public class AuthoredStyleExtension : ChangeTextExtension<AuthoredStyleRequest> {
    public AuthoredStyleExtension(IServiceProvider serviceProvider) : base(serviceProvider) { }
    protected override string GetSystemPrompt(AuthoredStyleRequest request) {
        return String.Format("Rewrite this text in the {0} style", request.Author);
    }
}

public class AuthoredStyleRequest : TextRequest {
    public AuthoredStyleRequest(string Author, string Text) : base(Text) {
        this.Author = Author;
    }
    public string Author { get; set; }
}

#Integrate an AI-powered Extension into a Rich Text Editor

Register the AuthoredStyleExtension and handle the RichEditControl.PopupMenuShowing event to display a submenu (“Authored Style”) in the popup menu:

C#
using DevExpress.AIIntegration;
using DevExpress.AIIntegration.WinForms;
using DevExpress.Utils.Menu;
using DevExpress.XtraBars.Ribbon;
using DevExpress.XtraRichEdit.API.Native;

public partial class Form1 : RibbonForm {
    public Form1() {
        InitializeComponent();

        var defaultContainer = AIExtensionsContainerDesktop.Default;
        defaultContainer.Register<AuthoredStyleRequest, AuthoredStyleExtension>();

        string menuCaption = "Authored Style";
        richEditControl.PopupMenuShowing += (s, e) => {
            var menuItem = e.Menu.Items.FirstOrDefault(x => x.Caption == menuCaption) as DXSubMenuItem;
            if (menuItem == null) {
                menuItem = new DXSubMenuItem(menuCaption);
                string[] authors = ["Mark Twain", "Ernest Hemingway", "Maya Angelou"];
                foreach (string author in authors) {
                    menuItem.Items.Add(new DXMenuItem(author, async (ss, ee) => {
                        var extension = (AuthoredStyleExtension)defaultContainer.GetExtension(typeof(AuthoredStyleRequest));
                        DocumentRange selection = richEditControl.Document.Selection;
                        var request = new AuthoredStyleRequest(author, richEditControl.Document.GetText(selection));
                        string result = await AIOverlayForm.Execute(richEditControl, extension, request);
                        richEditControl.Document.Replace(selection, result);
                    }));
                }
                e.Menu.Items.Add(menuItem);
            }
        };
    }
}

Run Demo: Create Custom Extension in MemoEdit

See Also