@dataclouder/nest-vertex 0.0.46 → 0.0.47

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.
Files changed (64) hide show
  1. package/comfyui/models/comfy.models.d.ts +1 -0
  2. package/comfyui/services/comfy-sdk.service.d.ts +3 -3
  3. package/comfyui/services/comfy-sdk.service.js +17 -16
  4. package/config/gemini.config.d.ts +1 -0
  5. package/config/gemini.config.js +17 -0
  6. package/controllers/vertex-gemini-chat.controller.d.ts +13 -1
  7. package/controllers/vertex-gemini-chat.controller.js +57 -1
  8. package/controllers/vertex-gemini-tts.controller.d.ts +9 -0
  9. package/controllers/vertex-gemini-tts.controller.js +82 -0
  10. package/controllers/vertex-tts-adapter.controller.d.ts +4 -3
  11. package/controllers/vertex-tts-adapter.controller.js +7 -5
  12. package/drizzle/drizzle.module.d.ts +2 -0
  13. package/drizzle/drizzle.module.js +35 -0
  14. package/drizzle/drizzle.service.d.ts +10 -0
  15. package/drizzle/drizzle.service.js +68 -0
  16. package/drizzle/dto/create-key-balancer.dto.d.ts +9 -0
  17. package/drizzle/dto/create-key-balancer.dto.js +54 -0
  18. package/drizzle/dto/create-key-usage.dto.d.ts +6 -0
  19. package/drizzle/dto/create-key-usage.dto.js +11 -0
  20. package/drizzle/dto/create-user-request.dto.d.ts +7 -0
  21. package/drizzle/dto/create-user-request.dto.js +47 -0
  22. package/drizzle/dto/update-key-balancer.dto.d.ts +5 -0
  23. package/drizzle/dto/update-key-balancer.dto.js +9 -0
  24. package/drizzle/dto/update-user-request.dto.d.ts +5 -0
  25. package/drizzle/dto/update-user-request.dto.js +9 -0
  26. package/drizzle/key-balancer.controller.d.ts +13 -0
  27. package/drizzle/key-balancer.controller.js +103 -0
  28. package/drizzle/key-balancer.model.d.ts +10 -0
  29. package/drizzle/key-balancer.model.js +3 -0
  30. package/drizzle/key-balancer.service.d.ts +11 -0
  31. package/drizzle/key-balancer.service.js +50 -0
  32. package/drizzle/key-usage.service.d.ts +17 -0
  33. package/drizzle/key-usage.service.js +63 -0
  34. package/drizzle/schema.d.ts +395 -0
  35. package/drizzle/schema.js +33 -0
  36. package/drizzle/user-requests.controller.d.ts +47 -0
  37. package/drizzle/user-requests.controller.js +81 -0
  38. package/drizzle/user-requests.service.d.ts +47 -0
  39. package/drizzle/user-requests.service.js +47 -0
  40. package/models/gemini-models.d.ts +5 -0
  41. package/models/gemini-models.js +7 -1
  42. package/models/key-balancer.models.d.ts +2 -1
  43. package/nest-vertex.module.js +19 -6
  44. package/package.json +1 -1
  45. package/services/adapter-audio-gen.service.d.ts +2 -2
  46. package/services/adapter-audio-gen.service.js +1 -1
  47. package/services/base-tts.service.d.ts +15 -0
  48. package/services/base-tts.service.js +81 -0
  49. package/services/google-genai.service.d.ts +3 -3
  50. package/services/google-genai.service.js +12 -13
  51. package/services/key-balancer-api.service.d.ts +9 -6
  52. package/services/key-balancer-api.service.js +29 -9
  53. package/services/metric-ai.service.d.ts +11 -0
  54. package/services/metric-ai.service.js +48 -0
  55. package/services/vertex-gemini-chat.service.d.ts +2 -2
  56. package/services/vertex-gemini-chat.service.js +5 -5
  57. package/services/vertex-gemini-tts.service.d.ts +6 -0
  58. package/services/vertex-gemini-tts.service.js +42 -0
  59. package/services/vertex-image.service.d.ts +2 -2
  60. package/services/vertex-image.service.js +7 -7
  61. package/services/vertex-tts.service.d.ts +12 -6
  62. package/services/vertex-tts.service.js +52 -52
  63. package/services/whisper/groq.service.d.ts +2 -2
  64. package/services/whisper/groq.service.js +3 -3
@@ -20,4 +20,5 @@ export interface VideoGenRequest {
20
20
  height?: number;
21
21
  seconds?: number;
22
22
  storagePath?: string;
23
+ fileName?: string;
23
24
  }
@@ -2,15 +2,15 @@ import { StatusResponse } from '../models/comfy-sdk.models';
2
2
  import { GeneratedAssetService } from '../../services/generated-asset.service';
3
3
  import { HttpService } from '@nestjs/axios';
4
4
  import { VideoGenRequest } from '../models/comfy.models';
5
- import { CloudStorageService } from '@dataclouder/nest-storage';
5
+ import { StorageFactory } from '@dataclouder/nest-storage';
6
6
  export declare class ComfySDKService {
7
7
  private readonly generatedAssetService;
8
8
  private readonly httpService;
9
- private readonly cloudStorageService;
9
+ private readonly storageFactory;
10
10
  private readonly logger;
11
11
  private outputDirectory;
12
12
  private api;
13
- constructor(generatedAssetService: GeneratedAssetService, httpService: HttpService, cloudStorageService: CloudStorageService);
13
+ constructor(generatedAssetService: GeneratedAssetService, httpService: HttpService, storageFactory: StorageFactory);
14
14
  private init;
15
15
  testMethod(): Promise<{
16
16
  status: string;
@@ -54,14 +54,14 @@ const nest_storage_1 = require("@dataclouder/nest-storage");
54
54
  let ComfySDKService = ComfySDKService_1 = class ComfySDKService {
55
55
  generatedAssetService;
56
56
  httpService;
57
- cloudStorageService;
57
+ storageFactory;
58
58
  logger = new common_1.Logger(ComfySDKService_1.name);
59
59
  outputDirectory = './comfyui_generated_images';
60
60
  api;
61
- constructor(generatedAssetService, httpService, cloudStorageService) {
61
+ constructor(generatedAssetService, httpService, storageFactory) {
62
62
  this.generatedAssetService = generatedAssetService;
63
63
  this.httpService = httpService;
64
- this.cloudStorageService = cloudStorageService;
64
+ this.storageFactory = storageFactory;
65
65
  this.api = new comfyui_sdk_1.ComfyApi('http://192.168.2.224:8188').init();
66
66
  console.log('what is in the comfy api?', this.api.apiHost);
67
67
  }
@@ -119,15 +119,12 @@ let ComfySDKService = ComfySDKService_1 = class ComfySDKService {
119
119
  const imageUrl = genAsset.assets.firstFrame.url;
120
120
  const response = await this.httpService.axiosRef.get(imageUrl, { responseType: 'arraybuffer' });
121
121
  const imageBuffer = Buffer.from(response.data, 'binary');
122
- const videoRequest = {
123
- workflowPath: path.join(process.cwd(), 'comfy_workflows', 'video-15_seconds.json'),
124
- inputImage: imageBuffer,
125
- positivePrompt: genAsset.prompt || genAsset?.description || 'Random movement for video',
126
- negativePrompt: 'low quality, blurry, static',
127
- width: genAsset.request?.width || null,
128
- height: genAsset.request?.height || null,
129
- seconds: genAsset.request?.seconds || null,
130
- };
122
+ const videoRequest = { ...genAsset.request };
123
+ videoRequest.inputImage = imageBuffer;
124
+ videoRequest.positivePrompt = genAsset.prompt || genAsset?.description || 'Random movement for video';
125
+ videoRequest.negativePrompt = 'low quality, blurry, static';
126
+ videoRequest.workflowPath = path.join(process.cwd(), 'comfy_workflows', 'video-15_seconds.json');
127
+ console.log(' -> USANDO el viejo confiable flujo: garantizar que exite: video-15_seconds.json');
131
128
  try {
132
129
  const result = await this.runVideoGenerationFromWorkflow(videoRequest, assetId);
133
130
  this.logger.log(`Video generation for asset ${assetId} completed successfully.`, result);
@@ -183,9 +180,13 @@ let ComfySDKService = ComfySDKService_1 = class ComfySDKService {
183
180
  const videoBuffer = Buffer.from(await videoBlob.arrayBuffer());
184
181
  if (videoBuffer) {
185
182
  const storageFolder = videoRequest?.storagePath || `generated-videos`;
186
- const storageFinalPath = `${storageFolder}/${assetId}.mp4`;
187
- console.log('Saving video to storage path:', storageFinalPath);
188
- const uploadResult = await this.cloudStorageService.uploadFileAndMakePublic(process.env.STORAGE_BUCKET || '', storageFinalPath, videoBuffer, 'video/mp4');
183
+ const storageFileName = videoRequest?.fileName || `${assetId}.mp4`;
184
+ const storageFinalPath = `${storageFolder}/${storageFileName}`;
185
+ console.log(' -> 📼 Saving video to storage path:', storageFinalPath);
186
+ const storageService = this.storageFactory.getStorageService('CLOUDFLARE');
187
+ console.log(' -> USING STORAGE SERVICE:', storageService);
188
+ const options = { fileName: storageFinalPath, fileBuffer: videoBuffer, contentType: 'video/mp4' };
189
+ const uploadResult = await storageService.uploadPublicFile(options);
189
190
  this.logger.log(`Successfully uploaded video to: ${uploadResult.url}`);
190
191
  await this.generatedAssetService.partialUpdate(assetId, {
191
192
  url: uploadResult.url,
@@ -221,6 +222,6 @@ exports.ComfySDKService = ComfySDKService = ComfySDKService_1 = __decorate([
221
222
  (0, common_1.Injectable)(),
222
223
  __metadata("design:paramtypes", [generated_asset_service_1.GeneratedAssetService,
223
224
  axios_1.HttpService,
224
- nest_storage_1.CloudStorageService])
225
+ nest_storage_1.StorageFactory])
225
226
  ], ComfySDKService);
226
227
  //# sourceMappingURL=comfy-sdk.service.js.map
@@ -0,0 +1 @@
1
+ export declare const GEMINI_API_KEY = "{\n \"type\": \"service_account\",\n \"project_id\": \"dataclouder-dev\",\n \"private_key_id\": \"044453d30d7f99ec3b2231a6e293f003f7dc6e14\",\n \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCn+rv6kYKpuXtI\\noCe/3pcacKejTfYFAcd63JYGsqXe/iNa1ou4gESG5xVNQ20/0nB0Ubb+x4KpWWNv\\n7Y/LlNN+7V4eTk+fORxt4iZ3iQXBCQfQKMBPEvr/T1h1vviKmiknrFdKEByvXo1Y\\nfLkFtyAUg8B/mSecsQDFlPnqfQnUPARFVtajvy8S8RlRleshoJbaMX0YcLDO6lCa\\np6wx/BoEBdICg9XpNiYm2edvoGwgWQU8PMZmNtHGX6WVLWHlvP9w1k6wPEKBQTry\\nnpFMDVkll63XGgFBiFKO7KKvxVcyrKRafbBXRXHrafDRLljkeltFNRGYw83Xht6Y\\nFLaNsubZAgMBAAECggEAAmYVWd9K1EFksi1uT+I9+mfOLwnxl9H2Dyo3/r29mmT6\\n7ITIj0COqfYCEv3B4UHQLwsNL895zVEMV1h3P5cfG46Ic+qWnr2WKzgJ6FZVtZNb\\nUBTK5T4uRSfVCa5p1nHb4VgH0ZQQEs2I+3DhhARA0iYtAS122DkbW5b0aC2zrpsM\\nW88P5obIg4eWCYTbGnesYLLbJ9ZqpduD6IoSKme+RKNP6dSsH2v62tFmK64067jV\\nMB2LziNGguCJKUe3+/hIhopzxab7+wgxD3Jd58vCDsEUTwjrLfx700rmDDk5mjLG\\nAQCSzeIF15QGvqUbRYMmwfywXUfqUT3ABj1v4TEI4QKBgQDhBAJeRvJtg8RhiQbb\\nJfFOZ61K63d8NHu+a1C/qlVytDEEO5G7BEPrcbHk6fM46xl4wDpGQ7n0kY7ZmH78\\n8eZNkfXgMLvpNzKpj4oTCqAcY4abHuYA0IMA56hp+Sgn+pos7drdVFXCELD6Mys9\\nnh0rP1D/Kiuv2htmHkshchd84QKBgQC/HCZsgfN8O9HrE+oVd9Sp5aW13eaBkG/v\\nNUKxuaGdMGulxFLZQMJrugt2T4yNdjaUq625fmja1ujtIsU7JtlltBLZOAC9ZphF\\nPIfdgX48pvLdJIgOjgoxD4bfVav4Flum16wBskE+PSowdV0XEiOIi0GyofGBAMlT\\nNWDrnThw+QKBgQCcRLaIVulCGUKnIgy64WzmMKZu43yFq8VMhyb7FQZmtLFd6Sja\\nIqowtzL+cWNS4iM8cvOFnL9mFDiK8Zcvf6ebs4R4gB/gZU8v5tnTQ4vSa2QuEpVV\\nd3mjhT626ixzJ10vWrinAUzVi9X8zNB46HgFcuGDc/wHEof4sY0n2x5owQKBgQCY\\nXr1T7hhPiPJJV0tfancoLmz8n7tUufBE7FYMlVCBn0V0mR7lEHjyoxbYcXxCnWnP\\nB0IvjtXTBV4ZE4vlKYhTSkts3PXaDJ6DNUuuE7yuZv1jy+iekikWDKcgEZJW7pyM\\nXZBKmfDiyqmEkU5zQocKKt1qqyt+Cz55FSn9MRD7IQKBgDeUMSwAwQgtRu4RHNCJ\\n5IBaEfEX4fVIRscvFWKxUyhvUb5hpGj1asO0SoUboBw1wGjW/HcKZ7Gw/v+8103v\\n7y1fFqQxMY7eWrLegLtywAfnQW+Uyvaha6n85Ekpuk6X6mSd/IFhe4TPknCbb4+d\\n+NwWPEalsS86ekmB4TeZLQ+H\\n-----END PRIVATE KEY-----\\n\",\n \"client_email\": \"app-keys-dataclouder-dev@dataclouder-dev.iam.gserviceaccount.com\",\n \"client_id\": \"107525823981418207310\",\n \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n \"token_uri\": \"https://oauth2.googleapis.com/token\",\n \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/app-keys-dataclouder-dev%40dataclouder-dev.iam.gserviceaccount.com\",\n \"universe_domain\": \"googleapis.com\"\n}";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GEMINI_API_KEY = void 0;
4
+ exports.GEMINI_API_KEY = `{
5
+ "type": "service_account",
6
+ "project_id": "dataclouder-dev",
7
+ "private_key_id": "044453d30d7f99ec3b2231a6e293f003f7dc6e14",
8
+ "private_key": "-----BEGIN PRIVATE KEY-----\\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCn+rv6kYKpuXtI\\noCe/3pcacKejTfYFAcd63JYGsqXe/iNa1ou4gESG5xVNQ20/0nB0Ubb+x4KpWWNv\\n7Y/LlNN+7V4eTk+fORxt4iZ3iQXBCQfQKMBPEvr/T1h1vviKmiknrFdKEByvXo1Y\\nfLkFtyAUg8B/mSecsQDFlPnqfQnUPARFVtajvy8S8RlRleshoJbaMX0YcLDO6lCa\\np6wx/BoEBdICg9XpNiYm2edvoGwgWQU8PMZmNtHGX6WVLWHlvP9w1k6wPEKBQTry\\nnpFMDVkll63XGgFBiFKO7KKvxVcyrKRafbBXRXHrafDRLljkeltFNRGYw83Xht6Y\\nFLaNsubZAgMBAAECggEAAmYVWd9K1EFksi1uT+I9+mfOLwnxl9H2Dyo3/r29mmT6\\n7ITIj0COqfYCEv3B4UHQLwsNL895zVEMV1h3P5cfG46Ic+qWnr2WKzgJ6FZVtZNb\\nUBTK5T4uRSfVCa5p1nHb4VgH0ZQQEs2I+3DhhARA0iYtAS122DkbW5b0aC2zrpsM\\nW88P5obIg4eWCYTbGnesYLLbJ9ZqpduD6IoSKme+RKNP6dSsH2v62tFmK64067jV\\nMB2LziNGguCJKUe3+/hIhopzxab7+wgxD3Jd58vCDsEUTwjrLfx700rmDDk5mjLG\\nAQCSzeIF15QGvqUbRYMmwfywXUfqUT3ABj1v4TEI4QKBgQDhBAJeRvJtg8RhiQbb\\nJfFOZ61K63d8NHu+a1C/qlVytDEEO5G7BEPrcbHk6fM46xl4wDpGQ7n0kY7ZmH78\\n8eZNkfXgMLvpNzKpj4oTCqAcY4abHuYA0IMA56hp+Sgn+pos7drdVFXCELD6Mys9\\nnh0rP1D/Kiuv2htmHkshchd84QKBgQC/HCZsgfN8O9HrE+oVd9Sp5aW13eaBkG/v\\nNUKxuaGdMGulxFLZQMJrugt2T4yNdjaUq625fmja1ujtIsU7JtlltBLZOAC9ZphF\\nPIfdgX48pvLdJIgOjgoxD4bfVav4Flum16wBskE+PSowdV0XEiOIi0GyofGBAMlT\\nNWDrnThw+QKBgQCcRLaIVulCGUKnIgy64WzmMKZu43yFq8VMhyb7FQZmtLFd6Sja\\nIqowtzL+cWNS4iM8cvOFnL9mFDiK8Zcvf6ebs4R4gB/gZU8v5tnTQ4vSa2QuEpVV\\nd3mjhT626ixzJ10vWrinAUzVi9X8zNB46HgFcuGDc/wHEof4sY0n2x5owQKBgQCY\\nXr1T7hhPiPJJV0tfancoLmz8n7tUufBE7FYMlVCBn0V0mR7lEHjyoxbYcXxCnWnP\\nB0IvjtXTBV4ZE4vlKYhTSkts3PXaDJ6DNUuuE7yuZv1jy+iekikWDKcgEZJW7pyM\\nXZBKmfDiyqmEkU5zQocKKt1qqyt+Cz55FSn9MRD7IQKBgDeUMSwAwQgtRu4RHNCJ\\n5IBaEfEX4fVIRscvFWKxUyhvUb5hpGj1asO0SoUboBw1wGjW/HcKZ7Gw/v+8103v\\n7y1fFqQxMY7eWrLegLtywAfnQW+Uyvaha6n85Ekpuk6X6mSd/IFhe4TPknCbb4+d\\n+NwWPEalsS86ekmB4TeZLQ+H\\n-----END PRIVATE KEY-----\\n",
9
+ "client_email": "app-keys-dataclouder-dev@dataclouder-dev.iam.gserviceaccount.com",
10
+ "client_id": "107525823981418207310",
11
+ "auth_uri": "https://accounts.google.com/o/oauth2/auth",
12
+ "token_uri": "https://oauth2.googleapis.com/token",
13
+ "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
14
+ "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/app-keys-dataclouder-dev%40dataclouder-dev.iam.gserviceaccount.com",
15
+ "universe_domain": "googleapis.com"
16
+ }`;
17
+ //# sourceMappingURL=gemini.config.js.map
@@ -1,8 +1,20 @@
1
1
  import { GeminiChatService } from '../services/vertex-gemini-chat.service';
2
2
  import { GenerateTextDto } from '../dto/generate-text.dto';
3
+ import { ChatMessageDict, IAIModel } from '../models/adapter.models';
4
+ export declare class ConversationDTO {
5
+ id?: string;
6
+ entityId?: string;
7
+ type?: string;
8
+ createdAt?: Date;
9
+ messages: Array<ChatMessageDict>;
10
+ transcription?: boolean;
11
+ model?: IAIModel;
12
+ returnJson?: boolean;
13
+ }
3
14
  export declare class GeminiChatController {
4
15
  private readonly geminiChatService;
5
16
  private readonly logger;
6
17
  constructor(geminiChatService: GeminiChatService);
7
- generateText(generateTextDto: GenerateTextDto): Promise<import("..").ChatMessageDict>;
18
+ generateText(generateTextDto: GenerateTextDto): Promise<ChatMessageDict>;
19
+ continueConversation(conversation: ConversationDTO): Promise<ChatMessageDict>;
8
20
  }
@@ -13,12 +13,25 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
13
13
  };
14
14
  var GeminiChatController_1;
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.GeminiChatController = void 0;
16
+ exports.GeminiChatController = exports.ConversationDTO = void 0;
17
17
  const common_1 = require("@nestjs/common");
18
18
  const vertex_gemini_chat_service_1 = require("../services/vertex-gemini-chat.service");
19
19
  const swagger_1 = require("@nestjs/swagger");
20
20
  const generate_text_dto_1 = require("../dto/generate-text.dto");
21
21
  const nest_core_1 = require("@dataclouder/nest-core");
22
+ const gemini_models_1 = require("../models/gemini-models");
23
+ const adapter_models_1 = require("../models/adapter.models");
24
+ class ConversationDTO {
25
+ id;
26
+ entityId;
27
+ type;
28
+ createdAt;
29
+ messages;
30
+ transcription;
31
+ model;
32
+ returnJson;
33
+ }
34
+ exports.ConversationDTO = ConversationDTO;
22
35
  let GeminiChatController = GeminiChatController_1 = class GeminiChatController {
23
36
  geminiChatService;
24
37
  logger = new common_1.Logger(GeminiChatController_1.name);
@@ -36,6 +49,40 @@ let GeminiChatController = GeminiChatController_1 = class GeminiChatController {
36
49
  throw error;
37
50
  }
38
51
  }
52
+ async continueConversation(conversation) {
53
+ const startTime = Date.now();
54
+ if (!conversation?.model) {
55
+ conversation.model = { provider: 'google', modelName: gemini_models_1.GeminiModels.Gemini2_5Lite, id: 'no-id' };
56
+ }
57
+ if (conversation?.model?.quality) {
58
+ conversation.model.provider = 'google';
59
+ conversation.model.modelName = this.geminiChatService.getDefaultQualityModel(conversation.model.quality);
60
+ }
61
+ const returnJson = conversation.returnJson;
62
+ if (returnJson) {
63
+ const obj = await this.geminiChatService.chatAndExtractJson(conversation.messages, conversation.model.modelName);
64
+ const endTime = Date.now();
65
+ const processTime = (endTime - startTime) / 1000;
66
+ const metadata = {
67
+ type: 'json',
68
+ provider: conversation.model.provider,
69
+ model: conversation.model.modelName,
70
+ processTime,
71
+ ...obj?.metadata,
72
+ };
73
+ return { content: obj.json, role: adapter_models_1.ChatRole.Assistant, metadata };
74
+ }
75
+ else {
76
+ const response = await this.geminiChatService.chat(conversation.messages, conversation.model.modelName);
77
+ const endTime = Date.now();
78
+ const processTime = (endTime - startTime) / 1000;
79
+ return {
80
+ content: response.content,
81
+ role: response.role,
82
+ metadata: { provider: conversation.model.provider, model: conversation.model.modelName, processTime, tokens: response.metadata.tokens },
83
+ };
84
+ }
85
+ }
39
86
  };
40
87
  exports.GeminiChatController = GeminiChatController;
41
88
  __decorate([
@@ -45,6 +92,15 @@ __decorate([
45
92
  __metadata("design:paramtypes", [generate_text_dto_1.GenerateTextDto]),
46
93
  __metadata("design:returntype", Promise)
47
94
  ], GeminiChatController.prototype, "generateText", null);
95
+ __decorate([
96
+ (0, common_1.Post)('/chat'),
97
+ (0, swagger_1.ApiOperation)({ summary: 'Continue the conversation' }),
98
+ (0, swagger_1.ApiResponse)({ status: 200, description: 'Return the conversation.' }),
99
+ __param(0, (0, common_1.Body)()),
100
+ __metadata("design:type", Function),
101
+ __metadata("design:paramtypes", [ConversationDTO]),
102
+ __metadata("design:returntype", Promise)
103
+ ], GeminiChatController.prototype, "continueConversation", null);
48
104
  exports.GeminiChatController = GeminiChatController = GeminiChatController_1 = __decorate([
49
105
  (0, swagger_1.ApiTags)('LLM Gemini '),
50
106
  (0, common_1.Controller)('api/ai-services/gemini'),
@@ -0,0 +1,9 @@
1
+ import { type FastifyReply } from 'fastify';
2
+ import { VertexGeminiTtsService } from '../services/vertex-gemini-tts.service';
3
+ import { type SynthesizeSpeechInput } from '../services/vertex-tts.service';
4
+ export declare class VertexGeminiTtsController {
5
+ private readonly vertexGeminiTtsService;
6
+ private readonly logger;
7
+ constructor(vertexGeminiTtsService: VertexGeminiTtsService);
8
+ synthesizeSpeech(body: SynthesizeSpeechInput, res: FastifyReply): Promise<Buffer<ArrayBufferLike>>;
9
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.VertexGeminiTtsController = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const swagger_1 = require("@nestjs/swagger");
18
+ const vertex_gemini_tts_service_1 = require("../services/vertex-gemini-tts.service");
19
+ const nest_core_1 = require("@dataclouder/nest-core");
20
+ let VertexGeminiTtsController = class VertexGeminiTtsController {
21
+ vertexGeminiTtsService;
22
+ logger = new common_1.Logger('VertexGeminiTtsController');
23
+ constructor(vertexGeminiTtsService) {
24
+ this.vertexGeminiTtsService = vertexGeminiTtsService;
25
+ }
26
+ async synthesizeSpeech(body, res) {
27
+ this.logger.log(`Received Gemini synthesize request for text: "${body.text.substring(0, 50)}..."`);
28
+ const audioBuffer = await this.vertexGeminiTtsService.synthesizeSpeech(body);
29
+ if (!audioBuffer) {
30
+ this.logger.error('Synthesis resulted in null buffer');
31
+ throw new nest_core_1.AppException({
32
+ error_message: 'Could not generate audio for the given input.',
33
+ });
34
+ }
35
+ res.header('Content-Length', audioBuffer.length.toString());
36
+ this.logger.log(`Successfully synthesized audio (${audioBuffer.length} bytes)`);
37
+ return audioBuffer;
38
+ }
39
+ };
40
+ exports.VertexGeminiTtsController = VertexGeminiTtsController;
41
+ __decorate([
42
+ (0, common_1.Post)('synthesize'),
43
+ (0, swagger_1.ApiOperation)({ summary: 'Synthesize speech from text using Gemini' }),
44
+ (0, swagger_1.ApiBody)({
45
+ description: 'Text and configuration for speech synthesis with Gemini',
46
+ schema: {
47
+ type: 'object',
48
+ properties: {
49
+ text: { type: 'string', example: 'Hello, this is a test.' },
50
+ prompt: {
51
+ type: 'string',
52
+ example: 'Say it in a friendly tone.',
53
+ description: 'Optional styling instructions.',
54
+ },
55
+ voiceName: {
56
+ type: 'string',
57
+ example: 'Charon',
58
+ description: 'Optional specific voice name (default: Charon)',
59
+ },
60
+ languageCode: {
61
+ type: 'string',
62
+ example: 'en-US',
63
+ description: 'Optional language code (default: en-US)',
64
+ },
65
+ },
66
+ required: ['text'],
67
+ },
68
+ }),
69
+ (0, common_1.Header)('Content-Type', 'audio/mpeg'),
70
+ __param(0, (0, common_1.Body)()),
71
+ __param(1, (0, common_1.Res)({ passthrough: true })),
72
+ __metadata("design:type", Function),
73
+ __metadata("design:paramtypes", [Object, Object]),
74
+ __metadata("design:returntype", Promise)
75
+ ], VertexGeminiTtsController.prototype, "synthesizeSpeech", null);
76
+ exports.VertexGeminiTtsController = VertexGeminiTtsController = __decorate([
77
+ (0, swagger_1.ApiTags)('Vertex Gemini TTS'),
78
+ (0, common_1.Controller)('api/vertex-gemini/tts'),
79
+ (0, common_1.UseFilters)(nest_core_1.AllExceptionsHandler),
80
+ __metadata("design:paramtypes", [vertex_gemini_tts_service_1.VertexGeminiTtsService])
81
+ ], VertexGeminiTtsController);
82
+ //# sourceMappingURL=vertex-gemini-tts.controller.js.map
@@ -1,10 +1,11 @@
1
1
  import { google } from '@google-cloud/text-to-speech/build/protos/protos';
2
2
  import { type FastifyReply } from 'fastify';
3
- import { NestTtsService, type SynthesizeSpeechInput } from '../services/vertex-tts.service';
3
+ import { VertextTtsService, type SynthesizeSpeechInput } from '../services/vertex-tts.service';
4
+ import { type AppToken } from '@dataclouder/nest-auth';
4
5
  export declare class VertexTtsAdapterController {
5
6
  private readonly nestTtsService;
6
7
  private readonly logger;
7
- constructor(nestTtsService: NestTtsService);
8
- synthesizeSpeech(body: SynthesizeSpeechInput, res: FastifyReply): Promise<Buffer<ArrayBufferLike>>;
8
+ constructor(nestTtsService: VertextTtsService);
9
+ synthesizeSpeech(body: SynthesizeSpeechInput, res: FastifyReply, token: AppToken): Promise<Buffer<ArrayBufferLike>>;
9
10
  listVoices(languageCode?: string): Promise<google.cloud.texttospeech.v1.IVoice[]>;
10
11
  }
@@ -18,16 +18,16 @@ const swagger_1 = require("@nestjs/swagger");
18
18
  const vertex_tts_service_1 = require("../services/vertex-tts.service");
19
19
  const nest_core_1 = require("@dataclouder/nest-core");
20
20
  const common_2 = require("@nestjs/common");
21
+ const nest_auth_1 = require("@dataclouder/nest-auth");
21
22
  let VertexTtsAdapterController = class VertexTtsAdapterController {
22
23
  nestTtsService;
23
24
  logger = new common_1.Logger('VertexTtsAdapterController');
24
25
  constructor(nestTtsService) {
25
26
  this.nestTtsService = nestTtsService;
26
27
  }
27
- async synthesizeSpeech(body, res) {
28
- console.log('Received synthesize request', body);
28
+ async synthesizeSpeech(body, res, token) {
29
29
  this.logger.log(`Received synthesize request for text: "${body.text.substring(0, 50)}..."`);
30
- const audioBuffer = await this.nestTtsService.synthesizeSpeech(body);
30
+ const audioBuffer = await this.nestTtsService.synthesizeSpeech(body, token);
31
31
  if (!audioBuffer) {
32
32
  this.logger.error('Synthesis resulted in null buffer');
33
33
  throw new nest_core_1.AppException({
@@ -82,8 +82,9 @@ __decorate([
82
82
  (0, common_1.Header)('Content-Type', 'audio/mpeg'),
83
83
  __param(0, (0, common_1.Body)()),
84
84
  __param(1, (0, common_1.Res)({ passthrough: true })),
85
+ __param(2, (0, nest_auth_1.DecodedToken)()),
85
86
  __metadata("design:type", Function),
86
- __metadata("design:paramtypes", [Object, Object]),
87
+ __metadata("design:paramtypes", [Object, Object, Object]),
87
88
  __metadata("design:returntype", Promise)
88
89
  ], VertexTtsAdapterController.prototype, "synthesizeSpeech", null);
89
90
  __decorate([
@@ -103,9 +104,10 @@ __decorate([
103
104
  __metadata("design:returntype", Promise)
104
105
  ], VertexTtsAdapterController.prototype, "listVoices", null);
105
106
  exports.VertexTtsAdapterController = VertexTtsAdapterController = __decorate([
107
+ (0, common_1.UseGuards)(nest_auth_1.AuthGuard),
106
108
  (0, swagger_1.ApiTags)('Vertex TTS Adapter'),
107
109
  (0, common_1.Controller)('api/vertex-adapter/tts'),
108
110
  (0, common_2.UseFilters)(nest_core_1.AllExceptionsHandler),
109
- __metadata("design:paramtypes", [vertex_tts_service_1.NestTtsService])
111
+ __metadata("design:paramtypes", [vertex_tts_service_1.VertextTtsService])
110
112
  ], VertexTtsAdapterController);
111
113
  //# sourceMappingURL=vertex-tts-adapter.controller.js.map
@@ -0,0 +1,2 @@
1
+ export declare class DrizzleModule {
2
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DrizzleModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const drizzle_service_1 = require("./drizzle.service");
12
+ const key_balancer_service_1 = require("./key-balancer.service");
13
+ const key_balancer_controller_1 = require("./key-balancer.controller");
14
+ const user_requests_service_1 = require("./user-requests.service");
15
+ const user_requests_controller_1 = require("./user-requests.controller");
16
+ const key_usage_service_1 = require("./key-usage.service");
17
+ let DrizzleModule = class DrizzleModule {
18
+ };
19
+ exports.DrizzleModule = DrizzleModule;
20
+ exports.DrizzleModule = DrizzleModule = __decorate([
21
+ (0, common_1.Module)({
22
+ controllers: [key_balancer_controller_1.KeyBalancerController, user_requests_controller_1.UserRequestsController],
23
+ providers: [
24
+ {
25
+ provide: drizzle_service_1.DRIZZLE_SERVICE,
26
+ useClass: drizzle_service_1.DrizzleService,
27
+ },
28
+ key_balancer_service_1.KeyBalancerService,
29
+ user_requests_service_1.UserRequestsService,
30
+ key_usage_service_1.KeyUsageService,
31
+ ],
32
+ exports: [key_balancer_service_1.KeyBalancerService, user_requests_service_1.UserRequestsService, key_usage_service_1.KeyUsageService],
33
+ })
34
+ ], DrizzleModule);
35
+ //# sourceMappingURL=drizzle.module.js.map
@@ -0,0 +1,10 @@
1
+ import { Pool } from 'pg';
2
+ import * as schema from './schema';
3
+ export declare const DRIZZLE_SERVICE = "DRIZZLE_SERVICE";
4
+ export declare class DrizzleService {
5
+ private _drizzle;
6
+ constructor();
7
+ get db(): import("drizzle-orm/node-postgres").NodePgDatabase<typeof schema> & {
8
+ $client: Pool;
9
+ };
10
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __metadata = (this && this.__metadata) || function (k, v) {
42
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.DrizzleService = exports.DRIZZLE_SERVICE = void 0;
46
+ const common_1 = require("@nestjs/common");
47
+ const node_postgres_1 = require("drizzle-orm/node-postgres");
48
+ const pg_1 = require("pg");
49
+ const schema = __importStar(require("./schema"));
50
+ exports.DRIZZLE_SERVICE = 'DRIZZLE_SERVICE';
51
+ let DrizzleService = class DrizzleService {
52
+ _drizzle;
53
+ constructor() {
54
+ const pool = new pg_1.Pool({
55
+ connectionString: process.env.DATABASE_URL,
56
+ });
57
+ this._drizzle = (0, node_postgres_1.drizzle)(pool, { schema });
58
+ }
59
+ get db() {
60
+ return this._drizzle;
61
+ }
62
+ };
63
+ exports.DrizzleService = DrizzleService;
64
+ exports.DrizzleService = DrizzleService = __decorate([
65
+ (0, common_1.Injectable)(),
66
+ __metadata("design:paramtypes", [])
67
+ ], DrizzleService);
68
+ //# sourceMappingURL=drizzle.service.js.map
@@ -0,0 +1,9 @@
1
+ export declare class CreateKeyBalancerDto {
2
+ name: string;
3
+ email: string;
4
+ disabled?: boolean;
5
+ description?: string;
6
+ key: string;
7
+ type: string;
8
+ provider: string;
9
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CreateKeyBalancerDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ class CreateKeyBalancerDto {
15
+ name;
16
+ email;
17
+ disabled;
18
+ description;
19
+ key;
20
+ type;
21
+ provider;
22
+ }
23
+ exports.CreateKeyBalancerDto = CreateKeyBalancerDto;
24
+ __decorate([
25
+ (0, class_validator_1.IsString)(),
26
+ __metadata("design:type", String)
27
+ ], CreateKeyBalancerDto.prototype, "name", void 0);
28
+ __decorate([
29
+ (0, class_validator_1.IsEmail)(),
30
+ __metadata("design:type", String)
31
+ ], CreateKeyBalancerDto.prototype, "email", void 0);
32
+ __decorate([
33
+ (0, class_validator_1.IsBoolean)(),
34
+ (0, class_validator_1.IsOptional)(),
35
+ __metadata("design:type", Boolean)
36
+ ], CreateKeyBalancerDto.prototype, "disabled", void 0);
37
+ __decorate([
38
+ (0, class_validator_1.IsString)(),
39
+ (0, class_validator_1.IsOptional)(),
40
+ __metadata("design:type", String)
41
+ ], CreateKeyBalancerDto.prototype, "description", void 0);
42
+ __decorate([
43
+ (0, class_validator_1.IsString)(),
44
+ __metadata("design:type", String)
45
+ ], CreateKeyBalancerDto.prototype, "key", void 0);
46
+ __decorate([
47
+ (0, class_validator_1.IsString)(),
48
+ __metadata("design:type", String)
49
+ ], CreateKeyBalancerDto.prototype, "type", void 0);
50
+ __decorate([
51
+ (0, class_validator_1.IsString)(),
52
+ __metadata("design:type", String)
53
+ ], CreateKeyBalancerDto.prototype, "provider", void 0);
54
+ //# sourceMappingURL=create-key-balancer.dto.js.map
@@ -0,0 +1,6 @@
1
+ export declare class CreateKeyUsageDto {
2
+ id?: string;
3
+ key: string;
4
+ charCount?: number;
5
+ totalRequest?: number;
6
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CreateKeyUsageDto = void 0;
4
+ class CreateKeyUsageDto {
5
+ id;
6
+ key;
7
+ charCount;
8
+ totalRequest;
9
+ }
10
+ exports.CreateKeyUsageDto = CreateKeyUsageDto;
11
+ //# sourceMappingURL=create-key-usage.dto.js.map
@@ -0,0 +1,7 @@
1
+ export declare class CreateUserRequestDto {
2
+ userId: string;
3
+ email: string;
4
+ idKey?: string;
5
+ amountUsed: number;
6
+ serviceType: string;
7
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CreateUserRequestDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ class CreateUserRequestDto {
15
+ userId;
16
+ email;
17
+ idKey;
18
+ amountUsed;
19
+ serviceType;
20
+ }
21
+ exports.CreateUserRequestDto = CreateUserRequestDto;
22
+ __decorate([
23
+ (0, class_validator_1.IsString)(),
24
+ (0, class_validator_1.IsNotEmpty)(),
25
+ __metadata("design:type", String)
26
+ ], CreateUserRequestDto.prototype, "userId", void 0);
27
+ __decorate([
28
+ (0, class_validator_1.IsString)(),
29
+ (0, class_validator_1.IsNotEmpty)(),
30
+ __metadata("design:type", String)
31
+ ], CreateUserRequestDto.prototype, "email", void 0);
32
+ __decorate([
33
+ (0, class_validator_1.IsString)(),
34
+ (0, class_validator_1.IsOptional)(),
35
+ __metadata("design:type", String)
36
+ ], CreateUserRequestDto.prototype, "idKey", void 0);
37
+ __decorate([
38
+ (0, class_validator_1.IsInt)(),
39
+ (0, class_validator_1.IsNotEmpty)(),
40
+ __metadata("design:type", Number)
41
+ ], CreateUserRequestDto.prototype, "amountUsed", void 0);
42
+ __decorate([
43
+ (0, class_validator_1.IsString)(),
44
+ (0, class_validator_1.IsNotEmpty)(),
45
+ __metadata("design:type", String)
46
+ ], CreateUserRequestDto.prototype, "serviceType", void 0);
47
+ //# sourceMappingURL=create-user-request.dto.js.map