Browse Source

Refactor AI service to utilize PropertyService and remove OpenRouterService. Updated package.json to use exact versions for dependencies.

pull/5025/head
Jack Ulf 6 days ago
parent
commit
790174c009
  1. 29
      apps/api/src/app/endpoints/ai/ai.service.ts
  2. 34
      apps/api/src/services/data-provider/openrouter/openrouter.service.ts
  3. 3
      libs/common/src/lib/config.ts
  4. 7
      libs/common/src/lib/config/properties.ts
  5. 4
      package.json

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

@ -1,15 +1,21 @@
import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service';
import { OpenRouterService } from '@ghostfolio/api/services/data-provider/openrouter/openrouter.service';
import { PropertyService } from '@ghostfolio/api/services/property/property.service';
import {
PROPERTY_API_KEY_OPENROUTER,
PROPERTY_OPENROUTER_MODEL
} from '@ghostfolio/common/config.ts';
import { Filter } from '@ghostfolio/common/interfaces';
import type { AiPromptMode } from '@ghostfolio/common/types';
import { Injectable } from '@nestjs/common';
import { createOpenRouter } from '@openrouter/ai-sdk-provider';
import { streamText } from 'ai';
@Injectable()
export class AiService {
public constructor(
private readonly openRouterService: OpenRouterService,
private readonly portfolioService: PortfolioService
private readonly portfolioService: PortfolioService,
private readonly propertyService: PropertyService
) {}
public async getCompletion({
@ -36,7 +42,22 @@ export class AiService {
userId
});
return this.openRouterService.getCompletion(prompt);
const openRouterApiKey = await this.propertyService.getByKey(
PROPERTY_API_KEY_OPENROUTER
);
const openRouterModel = await this.propertyService.getByKey(
PROPERTY_OPENROUTER_MODEL
);
const { chat } = createOpenRouter({
apiKey: openRouterApiKey as string
});
return streamText({
model: chat(openRouterModel as string),
prompt
});
}
public async getPrompt({

34
apps/api/src/services/data-provider/openrouter/openrouter.service.ts

@ -1,34 +0,0 @@
import {
PROPERTY_API_KEY_OPENROUTER,
PROPERTY_OPENROUTER_MODEL
} from '@ghostfolio/common/config/properties';
import { Injectable } from '@nestjs/common';
import { createOpenRouter } from '@openrouter/ai-sdk-provider';
import { streamText } from 'ai';
import { PropertyService } from '../../property/property.service';
@Injectable()
export class OpenRouterService {
public constructor(private readonly propertyService: PropertyService) {}
public async getCompletion(prompt: string) {
const openRouterApiKey = await this.propertyService.getByKey(
PROPERTY_API_KEY_OPENROUTER
);
const openRouterModel = await this.propertyService.getByKey(
PROPERTY_OPENROUTER_MODEL
);
const openrouter = createOpenRouter({
apiKey: openRouterApiKey as string
});
return streamText({
model: openrouter.chat(openRouterModel as string),
prompt
});
}
}

3
libs/common/src/lib/config.ts

@ -125,6 +125,9 @@ export const PROPERTY_DEMO_USER_ID = 'DEMO_USER_ID';
export const PROPERTY_IS_DATA_GATHERING_ENABLED = 'IS_DATA_GATHERING_ENABLED';
export const PROPERTY_IS_READ_ONLY_MODE = 'IS_READ_ONLY_MODE';
export const PROPERTY_IS_USER_SIGNUP_ENABLED = 'IS_USER_SIGNUP_ENABLED';
export const PROPERTY_MAX_PORTFOLIOS = 'MAX_PORTFOLIOS';
export const PROPERTY_MAX_USERS = 'MAX_USERS';
export const PROPERTY_OPENROUTER_MODEL = 'OPENROUTER_MODEL';
export const PROPERTY_SLACK_COMMUNITY_USERS = 'SLACK_COMMUNITY_USERS';
export const PROPERTY_STRIPE_CONFIG = 'STRIPE_CONFIG';
export const PROPERTY_SYSTEM_MESSAGE = 'SYSTEM_MESSAGE';

7
libs/common/src/lib/config/properties.ts

@ -1,8 +1,3 @@
export const PROPERTY_DATA_GATHERING_QUEUE_INTERVAL =
'DATA_GATHERING_QUEUE_INTERVAL';
export const PROPERTY_IS_DEMO_MODE = 'IS_DEMO_MODE';
export const PROPERTY_IS_USER_SIGNUP_ENABLED = 'IS_USER_SIGNUP_ENABLED';
export const PROPERTY_MAX_PORTFOLIOS = 'MAX_PORTFOLIOS';
export const PROPERTY_MAX_USERS = 'MAX_USERS';
export const PROPERTY_API_KEY_OPENROUTER = 'API_KEY_OPENROUTER';
export const PROPERTY_OPENROUTER_MODEL = 'OPENROUTER_MODEL';

4
package.json

@ -88,12 +88,12 @@
"@nestjs/platform-express": "11.1.3",
"@nestjs/schedule": "6.0.0",
"@nestjs/serve-static": "5.0.3",
"@openrouter/ai-sdk-provider": "^0.7.2",
"@openrouter/ai-sdk-provider": "0.7.2",
"@prisma/client": "6.10.1",
"@simplewebauthn/browser": "13.1.0",
"@simplewebauthn/server": "13.1.1",
"@stripe/stripe-js": "7.3.1",
"ai": "^4.3.16",
"ai": "4.3.16",
"alphavantage": "2.2.0",
"big.js": "7.0.1",
"bootstrap": "4.6.2",

Loading…
Cancel
Save