UNPKG

n8n

Version:

n8n Workflow Automation Tool

129 lines 5.9 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ChatHubSettingsService = void 0; const bad_request_error_1 = require("../../errors/response-errors/bad-request.error"); const api_types_1 = require("@n8n/api-types"); const db_1 = require("@n8n/db"); const di_1 = require("@n8n/di"); const n8n_workflow_1 = require("n8n-workflow"); const chat_hub_constants_1 = require("./chat-hub.constants"); const chat_hub_1 = require("@n8n/chat-hub"); const CHAT_PROVIDER_SETTINGS_KEY_PREFIX = 'chat.provider.'; const CHAT_PROVIDER_SETTINGS_KEY = (provider) => `${CHAT_PROVIDER_SETTINGS_KEY_PREFIX}${provider}`; const CHAT_ENABLED_KEY = 'chat.access.enabled'; const CHAT_SEMANTIC_SEARCH_SETTINGS_KEY = 'chat.semantic-search'; const getDefaultProviderSettings = (provider) => ({ provider, credentialId: null, allowedModels: [], createdAt: new Date().toISOString(), updatedAt: null, enabled: true, }); let ChatHubSettingsService = class ChatHubSettingsService { constructor(settingsRepository) { this.settingsRepository = settingsRepository; } async getEnabled() { const row = await this.settingsRepository.findByKey(CHAT_ENABLED_KEY); if (!row) return true; return row.value === 'true'; } async setEnabled(enabled) { const value = enabled ? 'true' : 'false'; await this.settingsRepository.upsert({ key: CHAT_ENABLED_KEY, value, loadOnStartup: true }, [ 'key', ]); } async ensureModelIsAllowed(model, trx) { if (model.provider === 'custom-agent' || model.provider === 'n8n') { return; } const settings = await this.getProviderSettings(model.provider, trx); if (!settings.enabled) { throw new bad_request_error_1.BadRequestError('Provider is not enabled'); } if (settings.allowedModels.length > 0 && !settings.allowedModels.some((m) => m.model === model.model)) { throw new bad_request_error_1.BadRequestError(`Model ${model.model} is not allowed`); } return; } async getProviderSettings(provider, trx) { const settings = await this.settingsRepository.findByKey(CHAT_PROVIDER_SETTINGS_KEY(provider), trx); if (!settings) { return getDefaultProviderSettings(provider); } return (0, n8n_workflow_1.jsonParse)(settings.value, { fallbackValue: getDefaultProviderSettings(provider), }); } async getAllProviderSettings() { const settings = await this.settingsRepository.findByKeyPrefix(CHAT_PROVIDER_SETTINGS_KEY_PREFIX); const persistedByProvider = new Map(); for (const setting of settings) { const parsed = (0, n8n_workflow_1.jsonParse)(setting.value); persistedByProvider.set(parsed.provider, parsed); } const result = {}; for (const provider of api_types_1.chatHubLLMProviderSchema.options) { result[provider] = persistedByProvider.get(provider) ?? getDefaultProviderSettings(provider); } return result; } async getSemanticSearchSettings() { const row = await this.settingsRepository.findByKey(CHAT_SEMANTIC_SEARCH_SETTINGS_KEY); if (!row) { return chat_hub_1.DEFAULT_SEMANTIC_SEARCH_SETTINGS; } return (0, n8n_workflow_1.jsonParse)(row.value); } async setProviderSettings(provider, settings) { const value = JSON.stringify({ ...settings, createdAt: settings.createdAt ?? new Date().toISOString(), updatedAt: new Date().toISOString(), }); await this.settingsRepository.upsert({ key: CHAT_PROVIDER_SETTINGS_KEY(provider), value, loadOnStartup: true }, ['key']); } async setSemanticSearchSettings(settings) { await this.settingsRepository.upsert({ key: CHAT_SEMANTIC_SEARCH_SETTINGS_KEY, value: JSON.stringify(settings), loadOnStartup: true, }, ['key']); } async getSemanticSearchOptions() { const settings = await this.getSemanticSearchSettings(); if (!settings.embeddingModel.credentialId || !settings.vectorStore.credentialId) { return null; } return { embeddingModel: { provider: settings.embeddingModel.provider, credentialId: settings.embeddingModel.credentialId, }, vectorStore: { nodeType: chat_hub_constants_1.VECTOR_STORE_NODE_TYPE_MAP[settings.vectorStore.provider], credentialType: api_types_1.VECTOR_STORE_PROVIDER_CREDENTIAL_TYPE_MAP[settings.vectorStore.provider], credentialId: settings.vectorStore.credentialId, }, }; } }; exports.ChatHubSettingsService = ChatHubSettingsService; exports.ChatHubSettingsService = ChatHubSettingsService = __decorate([ (0, di_1.Service)(), __metadata("design:paramtypes", [db_1.SettingsRepository]) ], ChatHubSettingsService); //# sourceMappingURL=chat-hub.settings.service.js.map