UNPKG

n8n

Version:

n8n Workflow Automation Tool

104 lines 4.83 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 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 llm_provider_defaults_1 = require("./llm-provider-defaults"); const GOOGLE_MODEL_ID_PREFIX = 'models/'; function getProviderCredentialType(provider) { if (!(0, model_discovery_1.isModelDiscoveryProvider)(provider)) return undefined; for (const [credentialType, entry] of Object.entries(llm_provider_defaults_1.LLM_PROVIDER_DEFAULTS)) { if (entry.provider === provider) return credentialType; } return undefined; } 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 catalogModels = await this.getCatalogModels(provider); const credentialType = getProviderCredentialType(provider); if (!credentialId || !credentialType) { return { provider, verified: false, models: Object.values(catalogModels) }; } let liveModels; try { liveModels = await this.builderModelLiveLookupService.list(user, projectId, credentialId, credentialType, provider); } catch (error) { this.logger.warn('Live model list failed — falling back to the static catalog', { provider, error: error instanceof Error ? error.message : String(error), }); return { provider, verified: false, models: Object.values(catalogModels) }; } 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, reasoning: false, toolCall: true, }; }), }; } 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