@dataclouder/nest-vertex 0.0.54 → 0.0.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,7 +54,7 @@ __decorate([
54
54
  },
55
55
  voiceName: {
56
56
  type: 'string',
57
- example: 'Charon',
57
+ example: 'en-US-Chirp3-HD-Puck',
58
58
  description: 'Optional specific voice name (default: Charon)',
59
59
  },
60
60
  languageCode: {
@@ -62,6 +62,11 @@ __decorate([
62
62
  example: 'en-US',
63
63
  description: 'Optional language code (default: en-US)',
64
64
  },
65
+ model_name: {
66
+ type: 'string',
67
+ example: 'gemini-2.5-flash-tts',
68
+ description: 'Optional model name (default: gemini-2.5-flash-tts)',
69
+ },
65
70
  },
66
71
  required: ['text'],
67
72
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dataclouder/nest-vertex",
3
- "version": "0.0.54",
3
+ "version": "0.0.56",
4
4
  "description": "NestJS Vertex AI library for Dataclouder",
5
5
  "author": "dataclouder",
6
6
  "license": "MIT",
@@ -16,4 +16,5 @@ export declare class KeyBalancerClientService {
16
16
  getKeys(): Promise<AvailableKeyResult[]>;
17
17
  private getUnavailableServiceResult;
18
18
  recordFailedRequest(keyId: string, error: any, modelType: ModelType, model: string, ttlSeconds?: number): Promise<void>;
19
+ updateUsage(keyUsageId: string, usageCount: number): Promise<any>;
19
20
  }
@@ -42,7 +42,7 @@ let KeyBalancerClientService = KeyBalancerClientService_1 = class KeyBalancerCli
42
42
  token,
43
43
  keyRequest,
44
44
  };
45
- const keyBalancerHost = process.env.KEY_BALANCER_HOST || 'http://localhost:3000';
45
+ const keyBalancerHost = process.env.KEY_BALANCER_HOST || 'http://localhost:8085';
46
46
  const url = `${keyBalancerHost}/api/key-usage/best-key-balanced`;
47
47
  const { data } = await (0, rxjs_1.firstValueFrom)(this.httpService.post(url, finalRquest));
48
48
  return data;
@@ -51,7 +51,7 @@ let KeyBalancerClientService = KeyBalancerClientService_1 = class KeyBalancerCli
51
51
  const appFilter = {
52
52
  filters: { provider: 'google', keyType: 'service_account' },
53
53
  };
54
- const keyBalancerHost = process.env.KEY_BALANCER_HOST || 'http://localhost:3000';
54
+ const keyBalancerHost = process.env.KEY_BALANCER_HOST || 'http://localhost:8085';
55
55
  const url = `${keyBalancerHost}/api/key-balancer/query`;
56
56
  const { data } = await (0, rxjs_1.firstValueFrom)(this.httpService.post(url, appFilter));
57
57
  return data.rows;
@@ -74,6 +74,19 @@ let KeyBalancerClientService = KeyBalancerClientService_1 = class KeyBalancerCli
74
74
  this.logger.warn(`Failed to get LLM key for model ${model} from the external service.`, data);
75
75
  return;
76
76
  }
77
+ async updateUsage(keyUsageId, usageCount) {
78
+ const keyBalancerHost = process.env.KEY_BALANCER_HOST || 'http://localhost:8085';
79
+ const url = `${keyBalancerHost}/api/key-usage/update-usage`;
80
+ try {
81
+ const { data } = await (0, rxjs_1.firstValueFrom)(this.httpService.post(url, { keyUsageId, usageCount }));
82
+ this.logger.verbose(`Usage updated for keyUsageId: ${keyUsageId} with usageCount: ${usageCount}`);
83
+ return data;
84
+ }
85
+ catch (error) {
86
+ this.logger.error(`Failed to update usage for keyUsageId: ${keyUsageId}`, error.stack);
87
+ throw error;
88
+ }
89
+ }
77
90
  };
78
91
  exports.KeyBalancerClientService = KeyBalancerClientService;
79
92
  exports.KeyBalancerClientService = KeyBalancerClientService = KeyBalancerClientService_1 = __decorate([
@@ -1,6 +1,10 @@
1
1
  import { BaseTtsService } from './base-tts.service';
2
- import { SynthesizeSpeechInput } from './vertex-tts.service';
2
+ import { SynthesizeSpeechInput, VertextTtsService } from './vertex-tts.service';
3
+ import { KeyBalancerClientService } from './key-balancer-api.service';
3
4
  export declare class VertexGeminiTtsService extends BaseTtsService {
4
- constructor();
5
+ private readonly keyBalancerClientService;
6
+ private readonly vertexTtsService;
7
+ constructor(keyBalancerClientService: KeyBalancerClientService, vertexTtsService: VertextTtsService);
5
8
  synthesizeSpeech(input: SynthesizeSpeechInput): Promise<Buffer | null>;
9
+ synthesizeSpeechTest(input: SynthesizeSpeechInput): Promise<Buffer | null>;
6
10
  }
@@ -12,13 +12,36 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.VertexGeminiTtsService = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const base_tts_service_1 = require("./base-tts.service");
15
+ const vertex_tts_service_1 = require("./vertex-tts.service");
15
16
  const gemini_config_1 = require("../config/gemini.config");
17
+ const key_balancer_api_service_1 = require("./key-balancer-api.service");
16
18
  let VertexGeminiTtsService = class VertexGeminiTtsService extends base_tts_service_1.BaseTtsService {
17
- constructor() {
19
+ keyBalancerClientService;
20
+ vertexTtsService;
21
+ constructor(keyBalancerClientService, vertexTtsService) {
18
22
  const credentials = JSON.parse(gemini_config_1.GEMINI_API_KEY);
19
23
  super('VertexGeminiTtsService', { credentials });
24
+ this.keyBalancerClientService = keyBalancerClientService;
25
+ this.vertexTtsService = vertexTtsService;
20
26
  }
21
27
  async synthesizeSpeech(input) {
28
+ const { text, voice: voiceName = 'Charon', languageCode = 'en-US' } = input;
29
+ this.logger.log(`Synthesizing speech for text: "${input.text.substring(0, 50)}..." with voice: ${input.voiceName}`);
30
+ const request = {
31
+ text: input.text,
32
+ voice: input.voiceName,
33
+ languageCode: input.languageCode,
34
+ modelName: input.modelName || undefined,
35
+ };
36
+ return this.vertexTtsService.synthesizeSpeech(request);
37
+ }
38
+ async synthesizeSpeechTest(input) {
39
+ const { text, voice: voiceName = 'Charon', languageCode = 'en-US' } = input;
40
+ const geminiKey = await this.keyBalancerClientService.getBestKey({
41
+ service: 'chirp-3-hd',
42
+ provider: 'google',
43
+ }, null);
44
+ console.log(geminiKey);
22
45
  this.logger.log(`Synthesizing speech for text: "${input.text.substring(0, 50)}..." with voice: ${input.voiceName}`);
23
46
  const request = {
24
47
  input: { text: input.text, prompt: input.prompt },
@@ -37,6 +60,7 @@ let VertexGeminiTtsService = class VertexGeminiTtsService extends base_tts_servi
37
60
  exports.VertexGeminiTtsService = VertexGeminiTtsService;
38
61
  exports.VertexGeminiTtsService = VertexGeminiTtsService = __decorate([
39
62
  (0, common_1.Injectable)(),
40
- __metadata("design:paramtypes", [])
63
+ __metadata("design:paramtypes", [key_balancer_api_service_1.KeyBalancerClientService,
64
+ vertex_tts_service_1.VertextTtsService])
41
65
  ], VertexGeminiTtsService);
42
66
  //# sourceMappingURL=vertex-gemini-tts.service.js.map
@@ -3,11 +3,11 @@ import { AudioSpeed } from '../models/audio.settings';
3
3
  import { BaseTtsService } from './base-tts.service';
4
4
  import { AppToken } from '@dataclouder/nest-auth';
5
5
  import { KeyBalancerClientService } from './key-balancer-api.service';
6
- import { MetricAIService } from './metric-ai.service';
7
6
  export interface SynthesizeSpeechInput {
8
7
  text: string;
9
8
  prompt?: string;
10
9
  languageCode?: string;
10
+ modelName?: string;
11
11
  ssmlGender?: google.cloud.texttospeech.v1.SsmlVoiceGender;
12
12
  voice?: string;
13
13
  voiceName?: string;
@@ -19,8 +19,7 @@ export interface SynthesizeSpeechInput {
19
19
  }
20
20
  export declare class VertextTtsService extends BaseTtsService {
21
21
  private readonly keyBalancerClient;
22
- private readonly metricAIService;
23
- constructor(keyBalancerClient: KeyBalancerClientService, metricAIService: MetricAIService);
22
+ constructor(keyBalancerClient: KeyBalancerClientService);
24
23
  synthesizeSpeech(input: SynthesizeSpeechInput, token?: AppToken): Promise<Buffer | null>;
25
24
  private handleSynthesisWithClient;
26
25
  private _resolveVoice;
@@ -16,46 +16,43 @@ const google_voices_1 = require("../models/google-voices");
16
16
  const base_tts_service_1 = require("./base-tts.service");
17
17
  const key_balancer_api_service_1 = require("./key-balancer-api.service");
18
18
  const text_to_speech_1 = require("@google-cloud/text-to-speech");
19
- const metric_ai_service_1 = require("./metric-ai.service");
20
19
  const gemini_models_1 = require("../models/gemini-models");
21
20
  let VertextTtsService = class VertextTtsService extends base_tts_service_1.BaseTtsService {
22
21
  keyBalancerClient;
23
- metricAIService;
24
- constructor(keyBalancerClient, metricAIService) {
22
+ constructor(keyBalancerClient) {
25
23
  super('VertexTtsService');
26
24
  this.keyBalancerClient = keyBalancerClient;
27
- this.metricAIService = metricAIService;
28
25
  }
29
26
  async synthesizeSpeech(input, token) {
30
27
  let client;
31
- if (token) {
32
- this.logger.log(`Synthesizing speech for user: ${token.email}`);
33
- const selectedKey = await this.keyBalancerClient.getBestKey({
34
- provider: 'google',
35
- service: gemini_models_1.GoogleTTSModels.Chirp3HD,
36
- keyType: 'service_account',
37
- }, token);
38
- if (selectedKey.key) {
39
- this.logger.debug(` 🎤 📣 Using balanced key Service Account : ${selectedKey.name} ${selectedKey.id}`);
40
- try {
41
- const credentials = JSON.parse(selectedKey.key);
42
- client = new text_to_speech_1.TextToSpeechClient({ credentials });
43
- }
44
- catch (error) {
45
- this.logger.error('Failed to parse key credentials', error);
46
- }
28
+ this.logger.log(`Synthesizing speech for user: ${token?.email}`);
29
+ const selectedKey = await this.keyBalancerClient.getBestKey({
30
+ provider: 'google',
31
+ service: gemini_models_1.GoogleTTSModels.Chirp3HD,
32
+ keyType: 'service_account',
33
+ }, token);
34
+ if (selectedKey.key) {
35
+ this.keyBalancerClient.updateUsage(selectedKey.id, input.text.length);
36
+ this.logger.verbose(` Balanced key Found : ${selectedKey.name} ${selectedKey.id}`);
37
+ try {
38
+ const credentials = JSON.parse(selectedKey.key);
39
+ client = new text_to_speech_1.TextToSpeechClient({ credentials });
47
40
  }
48
- else {
49
- this.logger.warn(' CHECK ! ❗️ No balanced key found, USING service account');
41
+ catch (error) {
42
+ this.logger.error('Failed to parse key credentials', error);
50
43
  }
51
44
  }
52
45
  const voiceId = this._resolveVoice(input.voice, input.languageCode);
53
46
  const request = this._buildSynthesizeSpeechRequest(input, voiceId);
54
47
  this.logger.log(`Synthesizing speech for text: "${input.text.substring(0, 50)}..." with voice: ${voiceId}`);
55
48
  if (client) {
49
+ this.logger.debug(` 🍷AUDIO TTS🎤 📣 Using balanced key Service Account : ${selectedKey.name} ${selectedKey.id}`);
56
50
  return this.handleSynthesisWithClient(request, client);
57
51
  }
58
- return this.handleSynthesis(request);
52
+ else {
53
+ this.logger.warn(' CHECK ! ❗️ 🍷AUDIO TTS🎤 USING DEFAULT KEY');
54
+ return this.handleSynthesis(request);
55
+ }
59
56
  }
60
57
  async handleSynthesisWithClient(request, client) {
61
58
  try {
@@ -70,7 +67,7 @@ let VertextTtsService = class VertextTtsService extends base_tts_service_1.BaseT
70
67
  }
71
68
  }
72
69
  catch (error) {
73
- this.logger.error('Error synthesizing speech:', error);
70
+ this.logger.error('Error synthesizing speech:', error.message);
74
71
  throw new Error(`Failed to synthesize speech: ${error.message}`);
75
72
  }
76
73
  }
@@ -113,7 +110,6 @@ let VertextTtsService = class VertextTtsService extends base_tts_service_1.BaseT
113
110
  exports.VertextTtsService = VertextTtsService;
114
111
  exports.VertextTtsService = VertextTtsService = __decorate([
115
112
  (0, common_1.Injectable)(),
116
- __metadata("design:paramtypes", [key_balancer_api_service_1.KeyBalancerClientService,
117
- metric_ai_service_1.MetricAIService])
113
+ __metadata("design:paramtypes", [key_balancer_api_service_1.KeyBalancerClientService])
118
114
  ], VertextTtsService);
119
115
  //# sourceMappingURL=vertex-tts.service.js.map