Browse Source

AI prompt endpoint extended with mode

pull/4395/head
csehatt741 6 months ago
committed by Attila Cseh
parent
commit
fe08b49cfa
  1. 9
      apps/api/src/app/endpoints/ai/ai.controller.ts
  2. 6
      apps/api/src/app/endpoints/ai/ai.service.ts

9
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 { permissions } from '@ghostfolio/common/permissions';
import type { RequestWithUser } from '@ghostfolio/common/types'; 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 { REQUEST } from '@nestjs/core';
import { AuthGuard } from '@nestjs/passport'; import { AuthGuard } from '@nestjs/passport';
@ -21,14 +21,17 @@ export class AiController {
@Inject(REQUEST) private readonly request: RequestWithUser @Inject(REQUEST) private readonly request: RequestWithUser
) {} ) {}
@Get('prompt') @Get('prompt/:mode')
@HasPermission(permissions.readAiPrompt) @HasPermission(permissions.readAiPrompt)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) @UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getPrompt(): Promise<AiPromptResponse> { public async getPrompt(
@Param('mode') mode: 'analysis' | 'portfolio'
): Promise<AiPromptResponse> {
const prompt = await this.aiService.getPrompt({ const prompt = await this.aiService.getPrompt({
impersonationId: undefined, impersonationId: undefined,
languageCode: languageCode:
this.request.user.Settings.settings.language ?? DEFAULT_LANGUAGE_CODE, this.request.user.Settings.settings.language ?? DEFAULT_LANGUAGE_CODE,
mode,
userCurrency: userCurrency:
this.request.user.Settings.settings.baseCurrency ?? DEFAULT_CURRENCY, this.request.user.Settings.settings.baseCurrency ?? DEFAULT_CURRENCY,
userId: this.request.user.id userId: this.request.user.id

6
apps/api/src/app/endpoints/ai/ai.service.ts

@ -9,11 +9,13 @@ export class AiService {
public async getPrompt({ public async getPrompt({
impersonationId, impersonationId,
languageCode, languageCode,
mode,
userCurrency, userCurrency,
userId userId
}: { }: {
impersonationId: string; impersonationId: string;
languageCode: string; languageCode: string;
mode: 'analysis' | 'portfolio';
userCurrency: string; userCurrency: string;
userId: string; userId: string;
}) { }) {
@ -43,6 +45,10 @@ export class AiService {
) )
]; ];
if (mode === 'portfolio') {
return holdingsTable.join('\n');
}
return [ return [
`You are a neutral financial assistant. Please analyze the following investment portfolio (base currency being ${userCurrency}) in simple words.`, `You are a neutral financial assistant. Please analyze the following investment portfolio (base currency being ${userCurrency}) in simple words.`,
...holdingsTable, ...holdingsTable,

Loading…
Cancel
Save