From fe08b49cfa333157dfb0e589e2514124c91ddeab Mon Sep 17 00:00:00 2001 From: csehatt741 Date: Tue, 4 Mar 2025 10:03:11 +0100 Subject: [PATCH] AI prompt endpoint extended with mode --- apps/api/src/app/endpoints/ai/ai.controller.ts | 9 ++++++--- apps/api/src/app/endpoints/ai/ai.service.ts | 6 ++++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/apps/api/src/app/endpoints/ai/ai.controller.ts b/apps/api/src/app/endpoints/ai/ai.controller.ts index 981b26aa2..8be0fd97c 100644 --- a/apps/api/src/app/endpoints/ai/ai.controller.ts +++ b/apps/api/src/app/endpoints/ai/ai.controller.ts @@ -8,7 +8,7 @@ import { AiPromptResponse } from '@ghostfolio/common/interfaces'; import { permissions } from '@ghostfolio/common/permissions'; import type { RequestWithUser } from '@ghostfolio/common/types'; -import { Controller, Get, Inject, UseGuards } from '@nestjs/common'; +import { Controller, Get, Inject, Param, UseGuards } from '@nestjs/common'; import { REQUEST } from '@nestjs/core'; import { AuthGuard } from '@nestjs/passport'; @@ -21,14 +21,17 @@ export class AiController { @Inject(REQUEST) private readonly request: RequestWithUser ) {} - @Get('prompt') + @Get('prompt/:mode') @HasPermission(permissions.readAiPrompt) @UseGuards(AuthGuard('jwt'), HasPermissionGuard) - public async getPrompt(): Promise { + public async getPrompt( + @Param('mode') mode: 'analysis' | 'portfolio' + ): Promise { const prompt = await this.aiService.getPrompt({ impersonationId: undefined, languageCode: this.request.user.Settings.settings.language ?? DEFAULT_LANGUAGE_CODE, + mode, userCurrency: this.request.user.Settings.settings.baseCurrency ?? DEFAULT_CURRENCY, userId: this.request.user.id diff --git a/apps/api/src/app/endpoints/ai/ai.service.ts b/apps/api/src/app/endpoints/ai/ai.service.ts index 59dec6add..9545643af 100644 --- a/apps/api/src/app/endpoints/ai/ai.service.ts +++ b/apps/api/src/app/endpoints/ai/ai.service.ts @@ -9,11 +9,13 @@ export class AiService { public async getPrompt({ impersonationId, languageCode, + mode, userCurrency, userId }: { impersonationId: string; languageCode: string; + mode: 'analysis' | 'portfolio'; userCurrency: string; userId: string; }) { @@ -43,6 +45,10 @@ export class AiService { ) ]; + if (mode === 'portfolio') { + return holdingsTable.join('\n'); + } + return [ `You are a neutral financial assistant. Please analyze the following investment portfolio (base currency being ${userCurrency}) in simple words.`, ...holdingsTable,