UNPKG

@ckeditor/ckeditor5-ai

Version:

AI features for CKEditor 5.

316 lines (315 loc) • 10.1 kB
/** * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options */ /** * @module ai/aicore/aiconnector */ import { type EventSourceMessage } from 'eventsource-parser'; import { type Editor, type Context, ContextPlugin } from 'ckeditor5/src/core.js'; import { type AIContextItemRequestData, type AIContextItemType } from './model/aicontext.js'; import { type AICapabilitiesRequestData } from './model/aicapabilities.js'; import { type AIQuickActionRequestData } from '../aiquickactions/aiquickactions.js'; export declare enum AIActionsNames { CONTINUE = "continue", FIX_GRAMMAR = "fix-grammar", IMPROVE_WRITING = "improve-writing", MAKE_LONGER = "make-longer", MAKE_SHORTER = "make-shorter", MAKE_TONE_CASUAL = "make-tone-casual", MAKE_TONE_FORMAL = "make-tone-formal", TRANSLATE = "translate" } /** * A plugin that handles communication with the AI API. */ export declare class AIConnector extends ContextPlugin { /** * @inheritDoc */ static get requires(): readonly ["CloudServices"]; /** * @inheritDoc */ static get pluginName(): "AIConnector"; /** * @inheritDoc */ static get isOfficialPlugin(): true; /** * @inheritDoc */ static get isPremiumPlugin(): true; constructor(context: Context | Editor); /** * @inheritDoc */ init(): void; /** * Creates a new conversation session with the AI API. */ startConversation(id: string, group: string): AIConversationStartRequest; /** * Sends a request to the AI API '/conversations/{conversationId}/messages' endpoint and returns a response stream reader. */ queryAssistant({ message, conversationId, parts, capabilities, model, quickActionData }: AIConnectorQueryAssistantData): AIConnectorRequest; /** * Sends a request to the /actions/custom/calls endpoint and returns a response stream reader. */ executeCustomAction({ content, message, model, outputFormat }: AIConnectorExecuteCustomActionData): AIConnectorRequest; /** * Sends a request to the /actions/system/{actionName}/calls endpoint and returns a response stream reader. */ executeAction({ actionName, content, args }: AIConnectorExecuteActionData): AIConnectorRequest; /** * Uploads a file to the AI API for a specific conversation. */ uploadFile(conversationId: string, file: File, attributes?: { resourceId: string; label: string; }): AIUploadRequest; /** * Fetches a specific document by its ID from a conversation. */ fetchDocument(conversationId: string, documentId: string): AIFetchDocumentRequest; /** * Gets a document from the AI API for a specific conversation. */ uploadDocument(conversationId: string, content: string, attributes?: Record<string, unknown>): AIUploadRequest; /** * Fetches the list of conversations from the AI API. */ fetchConversations(group: string, search?: string): AIFetchConversationsRequest; /** * Deletes a conversation by its ID. */ deleteConversation(id: string): AIDeleteConversationRequest; /** * Updates the title and pinned status of a conversation by its ID. */ updateConversation(id: string, updates: { title?: string; pinned?: boolean; }): AIUpdateConversationRequest; /** * Fetches a specific conversation by its ID. */ fetchConversation(id: string): AIGetConversationRequest; /** * Fetches messages for a specific conversation by its ID. */ fetchConversationMessages(conversationId: string): AIGetConversationMessagesRequest; /** * Uploads a URL to the AI API for a specific conversation. */ uploadUrl(conversationId: string, url: string, attributes?: { resourceId: string; label: string; }): AIUploadRequest; /** * Returns a list of available AI models. */ getModels(): AIModelRequest; /** * Deletes a file from a conversation. */ deleteFile(conversationId: string, fileId: string): AIDeleteFileRequest; /** * Deletes a document from a conversation. */ deleteDocument(conversationId: string, documentId: string): AIDeleteDocumentRequest; /** * Deletes a web resource from a conversation. */ deleteWebResource(conversationId: string, webResourceId: string): AIDeleteWebResourceRequest; /** * Sends a request to the AI API '/reviews/system/{reviewName}/calls' endpoint and returns a response stream reader. */ callSystemReview({ reviewName, content, args }: AIConnectorSystemReviewData): AIConnectorRequest; /** * Sends a request to the AI API '/reviews/custom/calls' endpoint and returns a response stream reader. */ callCustomReview({ content, prompt, model }: AIConnectorCustomReviewData): AIConnectorRequest; upsertAIChatRating(conversationId: string, messageId: string, rating: AIRating): AIUpdateRating; upsertAIActionRating(actionName: string, callId: string, rating: AIRating): AIUpdateRating; upsertCustomAIActionRating(callId: string, rating: AIRating): AIUpdateRating; upsertAIReviewRating(reviewName: string, callId: string, rating: AIRating, dataId?: string): AIUpdateRating; upsertCustomAIReviewRating(callId: string, rating: AIRating, dataId?: string): AIUpdateRating; } export type AIGenericRequest = { request: Promise<Response>; abortController: AbortController; }; export type AIConversationStartReply = { id: string; }; export type AIConversationStartRequest = { getConversation: () => Promise<AIConversationStartReply>; abortController: AbortController; }; export type AIEventSourceMessageParsed = EventSourceMessage & { data: Record<string, any>; }; export type AIQueryAssistantReply = AsyncGenerator<AIEventSourceMessageParsed, void, undefined>; export type AIConnectorRequest = { getStream: () => Promise<AIQueryAssistantReply>; abortController: AbortController; }; export type AIConnectorQueryAssistantData = { message: string; conversationId: string; parts: Array<AIContextItemRequestData>; capabilities: AICapabilitiesRequestData | undefined; model: string; quickActionData?: AIQuickActionRequestData; }; export type AIFetchDocumentReply = { id: string; content: string; attributes?: { version: number; sessionId: string | null; }; }; export type AIFetchDocumentRequest = { getDocument: () => Promise<AIFetchDocumentReply>; abortController: AbortController; }; export type AIUploadReply = { id: string; }; export type AIUploadRequest = { getId: () => Promise<AIUploadReply>; abortController: AbortController; }; export type AIConversationItem = { id: string; title: string; createdAt: string; updatedAt?: string; pinned: boolean; }; export type AIFetchConversationsRequest = { getConversations: () => Promise<Array<AIConversationItem>>; abortController: AbortController; }; export type AIUpdateConversationRequest = { getResult: () => Promise<{ title?: string; pinned?: boolean; }>; abortController: AbortController; }; export type AIDeleteConversationRequest = { execute: () => Promise<void>; abortController: AbortController; }; export type AIUserMessage = { capabilities: Record<string, any>; content: Array<{ id: string; type: AIContextItemType; content: string; name?: string; url?: string; attributes?: { resourceId: string; label: string; }; }>; prompt: string; model: string; id: string; role: 'user'; attributes: Record<string, any>; }; export type AIAssistantMessage = { content: Array<{ id: string; type: 'text' | 'modification'; content: string; }>; id: string; role: 'assistant'; }; export type AIConversationMessage = AIUserMessage | AIAssistantMessage; export type AIGetConversationReply = { id: string; model: string; title: string; pinned: boolean; }; export type AIGetConversationRequest = { getConversation: () => Promise<AIGetConversationReply>; abortController: AbortController; }; export type AIGetConversationMessagesRequest = { getMessages: () => Promise<Array<AIConversationMessage>>; abortController: AbortController; }; export type AIModelData = { id: string; name: string; provider: string; description: string; capabilities: { webSearch: { enabled: boolean; }; reasoning: { enabled: boolean; }; }; }; export type AIModelRequest = { list: () => Promise<{ items: Array<AIModelData>; }>; abortController: AbortController; }; export type AIDeleteFileRequest = { execute: () => Promise<void>; abortController: AbortController; }; export type AIDeleteDocumentRequest = { execute: () => Promise<void>; abortController: AbortController; }; export type AIDeleteWebResourceRequest = { execute: () => Promise<void>; abortController: AbortController; }; export type AIConnectorExecuteCustomActionData = { content: string; message: string; model: string; outputFormat: 'plainText' | 'html'; }; export type AIConnectorExecuteActionData = { actionName: AIActionsNames; content: string; args?: { language?: string; }; }; export type AIConnectorSystemReviewData = { reviewName: string; content: string; args?: { language?: string; }; }; export type AIConnectorCustomReviewData = { content: string; prompt: string; model: string; }; export type AIUpdateRating = { execute: () => Promise<void>; abortController: AbortController; }; export type AIRating = { positiveCount: number; totalCount: number; modificationId?: string; };