UNPKG

n8n

Version:

n8n Workflow Automation Tool

148 lines • 6.81 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.AgentModelCatalogService = void 0; const api_types_1 = require("@n8n/api-types"); const backend_common_1 = require("@n8n/backend-common"); const di_1 = require("@n8n/di"); const model_discovery_1 = require("@n8n/ai-utilities/model-discovery"); const builder_model_live_lookup_service_1 = require("./builder/builder-model-live-lookup.service"); const GOOGLE_MODEL_ID_PREFIX = 'models/'; function getProviderCredentialType(provider) { if (!(0, model_discovery_1.isModelDiscoveryProvider)(provider)) return undefined; return (0, api_types_1.getAgentModelProviderCredentialTypes)(provider)[0]; } function normalizeLiveModelValue(provider, value) { if (provider === 'google' && value.startsWith(GOOGLE_MODEL_ID_PREFIX)) { return value.slice(GOOGLE_MODEL_ID_PREFIX.length); } return value; } const SNAPSHOT_SUFFIX = /-(?:\d{8}|\d{4}-\d{2}-\d{2})$/; function liveModelIdVariants(id) { const alias = id.replace(SNAPSHOT_SUFFIX, ''); return alias === id ? [id] : [id, alias]; } let AgentModelCatalogService = class AgentModelCatalogService { constructor(logger, builderModelLiveLookupService) { this.logger = logger; this.builderModelLiveLookupService = builderModelLiveLookupService; } async getProviderModels(user, projectId, provider, credentialId) { const credentialType = getProviderCredentialType(provider); if (!credentialId || !credentialType) { const catalogModels = await this.getCatalogModels(provider); return { provider, verified: false, models: Object.values(catalogModels) }; } let lookup; try { lookup = await this.builderModelLiveLookupService.lookup(user, projectId, credentialId, credentialType, provider); } catch (error) { this.logLiveLookupFailure(provider, error); if (credentialId === api_types_1.AI_GATEWAY_MANAGED_TAG) { return { provider, verified: true, unavailable: true, models: [] }; } const catalogModels = await this.getCatalogModels(provider); return { provider, verified: false, models: Object.values(catalogModels) }; } if (lookup.policy === 'endpoint-only') { if (lookup.status === 'unavailable') { this.logLiveLookupFailure(provider, lookup.error); return { provider, verified: true, unavailable: true, models: [] }; } return { provider, verified: true, models: lookup.models.map((live) => ({ id: live.value, name: live.name || live.value, toolCall: true, })), }; } if (lookup.status === 'unavailable') { this.logLiveLookupFailure(provider, lookup.error); if (lookup.policy === 'managed' || credentialId === api_types_1.AI_GATEWAY_MANAGED_TAG) { return { provider, verified: true, unavailable: true, models: [] }; } const catalogModels = await this.getCatalogModels(provider); return { provider, verified: false, models: Object.values(catalogModels) }; } const liveModels = lookup.models; const catalogModels = await this.getCatalogModels(provider); if (lookup.policy === 'managed') { return { provider, verified: true, models: liveModels.map((live) => { const id = normalizeLiveModelValue(provider, live.value); const catalogMatch = catalogModels[id] ?? catalogModels[id.replace(SNAPSHOT_SUFFIX, '')]; return catalogMatch ? { ...catalogMatch, id } : { id, name: normalizeLiveModelValue(provider, live.name) || id, toolCall: true, }; }), }; } const liveModelIds = new Set(liveModels.flatMap((live) => liveModelIdVariants(normalizeLiveModelValue(provider, live.value)))); const catalogList = Object.values(catalogModels); if (catalogList.length > 0) { return { provider, verified: true, models: catalogList.filter((model) => liveModelIds.has(model.id)), }; } return { provider, verified: true, models: liveModels.map((live) => { const id = normalizeLiveModelValue(provider, live.value); return { id, name: normalizeLiveModelValue(provider, live.name) || id, toolCall: true, }; }), }; } logLiveLookupFailure(provider, error) { this.logger.warn('Live model list failed', { provider, error: error instanceof Error ? error.message : String(error), }); } async getCatalogModels(provider) { try { const { fetchProviderCatalog } = await import('@n8n/agents'); const catalog = await fetchProviderCatalog(); return catalog[provider]?.models ?? {}; } catch (error) { this.logger.warn('Model catalog fetch failed', { provider, error: error instanceof Error ? error.message : String(error), }); return {}; } } }; exports.AgentModelCatalogService = AgentModelCatalogService; exports.AgentModelCatalogService = AgentModelCatalogService = __decorate([ (0, di_1.Service)(), __metadata("design:paramtypes", [backend_common_1.Logger, builder_model_live_lookup_service_1.BuilderModelLiveLookupService]) ], AgentModelCatalogService); //# sourceMappingURL=agent-model-catalog.service.js.map