| import type { | |
| AiApplySuggestionRequestDto, | |
| AiAskRequestDto, | |
| AiChatRequestDto, | |
| } from '@n8n/api-types'; | |
| import { GlobalConfig } from '@n8n/config'; | |
| import { Service } from '@n8n/di'; | |
| import { AiAssistantClient } from '@n8n_io/ai-assistant-sdk'; | |
| import { assert, type IUser } from 'n8n-workflow'; | |
| import { N8N_VERSION } from '../constants'; | |
| import { License } from '../license'; | |
| () | |
| export class AiService { | |
| private client: AiAssistantClient | undefined; | |
| constructor( | |
| private readonly licenseService: License, | |
| private readonly globalConfig: GlobalConfig, | |
| ) {} | |
| async init() { | |
| const aiAssistantEnabled = this.licenseService.isAiAssistantEnabled(); | |
| if (!aiAssistantEnabled) { | |
| return; | |
| } | |
| const licenseCert = await this.licenseService.loadCertStr(); | |
| const consumerId = this.licenseService.getConsumerId(); | |
| const baseUrl = this.globalConfig.aiAssistant.baseUrl; | |
| const logLevel = this.globalConfig.logging.level; | |
| this.client = new AiAssistantClient({ | |
| licenseCert, | |
| consumerId, | |
| n8nVersion: N8N_VERSION, | |
| baseUrl, | |
| logLevel, | |
| }); | |
| } | |
| async chat(payload: AiChatRequestDto, user: IUser) { | |
| if (!this.client) { | |
| await this.init(); | |
| } | |
| assert(this.client, 'Assistant client not setup'); | |
| return await this.client.chat(payload, { id: user.id }); | |
| } | |
| async applySuggestion(payload: AiApplySuggestionRequestDto, user: IUser) { | |
| if (!this.client) { | |
| await this.init(); | |
| } | |
| assert(this.client, 'Assistant client not setup'); | |
| return await this.client.applySuggestion(payload, { id: user.id }); | |
| } | |
| async askAi(payload: AiAskRequestDto, user: IUser) { | |
| if (!this.client) { | |
| await this.init(); | |
| } | |
| assert(this.client, 'Assistant client not setup'); | |
| return await this.client.askAi(payload, { id: user.id }); | |
| } | |
| async createFreeAiCredits(user: IUser) { | |
| if (!this.client) { | |
| await this.init(); | |
| } | |
| assert(this.client, 'Assistant client not setup'); | |
| return await this.client.generateAiCreditsCredentials(user); | |
| } | |
| } | |