@dataclouder/nest-vertex 0.0.54 → 0.0.55
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.
- package/controllers/tts/vertex-gemini-tts.controller.js +6 -1
- package/package.json +1 -1
- package/services/key-balancer-api.service.js +2 -2
- package/services/vertex-gemini-tts.service.d.ts +6 -2
- package/services/vertex-gemini-tts.service.js +26 -2
- package/services/vertex-tts.service.d.ts +2 -3
- package/services/vertex-tts.service.js +21 -26
|
@@ -54,7 +54,7 @@ __decorate([
|
|
|
54
54
|
},
|
|
55
55
|
voiceName: {
|
|
56
56
|
type: 'string',
|
|
57
|
-
example: '
|
|
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
|
@@ -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:
|
|
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:
|
|
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;
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,42 @@ 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
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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.logger.verbose(` Balanced key Found : ${selectedKey.name} ${selectedKey.id}`);
|
|
36
|
+
try {
|
|
37
|
+
const credentials = JSON.parse(selectedKey.key);
|
|
38
|
+
client = new text_to_speech_1.TextToSpeechClient({ credentials });
|
|
47
39
|
}
|
|
48
|
-
|
|
49
|
-
this.logger.
|
|
40
|
+
catch (error) {
|
|
41
|
+
this.logger.error('Failed to parse key credentials', error);
|
|
50
42
|
}
|
|
51
43
|
}
|
|
52
44
|
const voiceId = this._resolveVoice(input.voice, input.languageCode);
|
|
53
45
|
const request = this._buildSynthesizeSpeechRequest(input, voiceId);
|
|
54
46
|
this.logger.log(`Synthesizing speech for text: "${input.text.substring(0, 50)}..." with voice: ${voiceId}`);
|
|
55
47
|
if (client) {
|
|
48
|
+
this.logger.debug(` 🍷AUDIO TTS🎤 📣 Using balanced key Service Account : ${selectedKey.name} ${selectedKey.id}`);
|
|
56
49
|
return this.handleSynthesisWithClient(request, client);
|
|
57
50
|
}
|
|
58
|
-
|
|
51
|
+
else {
|
|
52
|
+
this.logger.warn(' CHECK ! ❗️ 🍷AUDIO TTS🎤 USING DEFAULT KEY');
|
|
53
|
+
return this.handleSynthesis(request);
|
|
54
|
+
}
|
|
59
55
|
}
|
|
60
56
|
async handleSynthesisWithClient(request, client) {
|
|
61
57
|
try {
|
|
@@ -70,7 +66,7 @@ let VertextTtsService = class VertextTtsService extends base_tts_service_1.BaseT
|
|
|
70
66
|
}
|
|
71
67
|
}
|
|
72
68
|
catch (error) {
|
|
73
|
-
this.logger.error('Error synthesizing speech:', error);
|
|
69
|
+
this.logger.error('Error synthesizing speech:', error.message);
|
|
74
70
|
throw new Error(`Failed to synthesize speech: ${error.message}`);
|
|
75
71
|
}
|
|
76
72
|
}
|
|
@@ -113,7 +109,6 @@ let VertextTtsService = class VertextTtsService extends base_tts_service_1.BaseT
|
|
|
113
109
|
exports.VertextTtsService = VertextTtsService;
|
|
114
110
|
exports.VertextTtsService = VertextTtsService = __decorate([
|
|
115
111
|
(0, common_1.Injectable)(),
|
|
116
|
-
__metadata("design:paramtypes", [key_balancer_api_service_1.KeyBalancerClientService
|
|
117
|
-
metric_ai_service_1.MetricAIService])
|
|
112
|
+
__metadata("design:paramtypes", [key_balancer_api_service_1.KeyBalancerClientService])
|
|
118
113
|
], VertextTtsService);
|
|
119
114
|
//# sourceMappingURL=vertex-tts.service.js.map
|