n8n
Version:
n8n Workflow Automation Tool
104 lines • 4.83 kB
JavaScript
;
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