n8n
Version:
n8n Workflow Automation Tool
101 lines • 5.42 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.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