UNPKG

n8n

Version:

n8n Workflow Automation Tool

101 lines 5.42 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.InstanceAiModelService = void 0; const api_types_1 = require("@n8n/api-types"); const backend_network_1 = require("@n8n/backend-network"); const di_1 = require("@n8n/di"); const nanoid_1 = require("nanoid"); const constants_1 = require("../../constants"); const ai_service_1 = require("../../services/ai.service"); const proxy_token_manager_1 = require("../../services/proxy-token-manager"); const ai_proxy_fetch_1 = require("../../utils/ai-proxy-fetch"); const ai_service_retry_1 = require("../../utils/ai-service-retry"); const instance_ai_settings_service_1 = require("./instance-ai-settings.service"); let InstanceAiModelService = class InstanceAiModelService { constructor(settingsService, aiService, outboundHttp) { this.settingsService = settingsService; this.aiService = aiService; this.outboundHttp = outboundHttp; } isProxyEnabled() { return this.aiService.isProxyEnabled(); } async resolveAgentModelConfig(user) { if (this.aiService.isProxyEnabled()) { const client = await this.aiService.getClient(); const proxyBaseUrl = client.getApiProxyBaseUrl(); const tokenManager = new proxy_token_manager_1.ProxyTokenManager(async () => { return await client.getInstanceAiApiProxyToken({ id: user.id }, { userMessageId: (0, nanoid_1.nanoid)() }); }); return await this.resolveProxyModel(user, proxyBaseUrl, tokenManager); } const httpProxyModel = await this.resolveHttpProxyModel(user); if (httpProxyModel) return httpProxyModel; return await this.settingsService.resolveModelConfig(user); } async resolveProxyModel(user, proxyBaseUrl, tokenManager) { const modelName = this.settingsService.resolveModelName(user); const { createAnthropic } = await import('@ai-sdk/anthropic'); const modelFetch = (0, ai_proxy_fetch_1.createAiProxyFetch)(this.outboundHttp); const provider = createAnthropic({ baseURL: proxyBaseUrl + '/anthropic/v1', apiKey: 'proxy-managed', fetch: async (input, init) => { const headers = new Headers(init?.headers); const auth = await tokenManager.getAuthHeaders(); for (const [k, v] of Object.entries(auth)) { headers.set(k, v); } for (const [k, v] of Object.entries((0, api_types_1.buildProxyHeaders)({ feature: 'instance-ai', n8nVersion: constants_1.N8N_VERSION }))) { headers.set(k, v); } return await modelFetch(input, { ...init, headers }); }, }); return provider(modelName); } async resolveHttpProxyModel(user) { const hasHttpProxy = Boolean(process.env.HTTPS_PROXY || process.env.HTTP_PROXY); if (!hasHttpProxy) return undefined; const config = await this.settingsService.resolveModelConfig(user); const modelId = typeof config === 'string' ? config : 'id' in config ? config.id : null; if (!modelId) return undefined; const [provider, ...rest] = modelId.split('/'); const modelName = rest.join('/'); const apiKey = typeof config === 'object' && 'apiKey' in config ? config.apiKey : undefined; const baseURL = typeof config === 'object' && 'url' in config ? config.url : undefined; if (provider !== 'anthropic') return undefined; const { createAnthropic } = await import('@ai-sdk/anthropic'); return createAnthropic({ apiKey, baseURL: baseURL || undefined, fetch: (0, ai_proxy_fetch_1.createAiProxyFetch)(this.outboundHttp), })(modelName); } async getCredits(user) { if (!this.aiService.isProxyEnabled()) { return { creditsQuota: api_types_1.UNLIMITED_CREDITS, creditsClaimed: 0 }; } const client = await this.aiService.getClient(); return await (0, ai_service_retry_1.callAiServiceWithRetry)('Instance AI credits fetch', async () => await client.getInstanceAiCredits({ id: user.id })); } }; exports.InstanceAiModelService = InstanceAiModelService; exports.InstanceAiModelService = InstanceAiModelService = __decorate([ (0, di_1.Service)(), __metadata("design:paramtypes", [instance_ai_settings_service_1.InstanceAiSettingsService, ai_service_1.AiService, backend_network_1.OutboundHttp]) ], InstanceAiModelService); //# sourceMappingURL=instance-ai-model.service.js.map