vidspotai-shared 1.0.69-dev.0 → 1.0.69
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/lib/globals/aiModels/enums.d.ts +6 -63
- package/lib/globals/aiModels/enums.d.ts.map +1 -1
- package/lib/globals/aiModels/enums.js +9 -78
- package/lib/globals/aiModels/index.d.ts +30 -2
- package/lib/globals/aiModels/index.d.ts.map +1 -1
- package/lib/globals/aiModels/index.js +35 -7
- package/lib/globals/aiModels/providers/bytedance.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/bytedance.js +0 -19
- package/lib/globals/aiModels/providers/google.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/google.js +2 -150
- package/lib/globals/aiModels/providers/kling.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/kling.js +37 -280
- package/lib/globals/aiModels/providers/minimax.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/minimax.js +11 -76
- package/lib/globals/aiModels/providers/openai.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/openai.js +6 -90
- package/lib/globals/aiModels/providers/pixverse.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/pixverse.js +29 -111
- package/lib/globals/aiModels/providers/runway.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/runway.js +2 -64
- package/lib/globals/aiModels/types.d.ts +1 -20
- package/lib/globals/aiModels/types.d.ts.map +1 -1
- package/lib/globals/ttsModels/index.d.ts +0 -2
- package/lib/globals/ttsModels/index.d.ts.map +1 -1
- package/lib/globals/ttsModels/index.js +1 -9
- package/lib/globals/ttsModels/types.d.ts +1 -1
- package/lib/globals/ttsModels/types.d.ts.map +1 -1
- package/lib/globals/ttsModels/voices.d.ts +4 -39
- package/lib/globals/ttsModels/voices.d.ts.map +1 -1
- package/lib/globals/ttsModels/voices.js +26 -273
- package/lib/globals/types.d.ts +1 -59
- package/lib/globals/types.d.ts.map +1 -1
- package/lib/globals/types.js +2 -81
- package/lib/index.d.ts +0 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +0 -1
- package/lib/models/index.d.ts +0 -6
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/index.js +0 -6
- package/lib/models/user.model.d.ts +1 -12
- package/lib/models/user.model.d.ts.map +1 -1
- package/lib/models/video.model.d.ts +8 -120
- package/lib/models/video.model.d.ts.map +1 -1
- package/lib/models/video.model.js +0 -10
- package/lib/services/aiGen/aiGenFactory.service.d.ts +1 -21
- package/lib/services/aiGen/aiGenFactory.service.d.ts.map +1 -1
- package/lib/services/aiGen/aiGenFactory.service.js +21 -84
- package/lib/services/aiGen/helpers.d.ts.map +1 -1
- package/lib/services/aiGen/helpers.js +0 -10
- package/lib/services/aiGen/providers/alibaba/alibaba.d.ts +3 -14
- package/lib/services/aiGen/providers/alibaba/alibaba.d.ts.map +1 -1
- package/lib/services/aiGen/providers/alibaba/alibaba.js +22 -155
- package/lib/services/aiGen/providers/azure/azure.service.d.ts +14 -0
- package/lib/services/aiGen/providers/azure/azure.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/azure/azure.service.js +108 -0
- package/lib/services/aiGen/providers/azure/index.d.ts +2 -0
- package/lib/services/aiGen/providers/azure/index.d.ts.map +1 -0
- package/lib/services/aiGen/providers/{pexels → azure}/index.js +1 -1
- package/lib/services/aiGen/providers/baseAiGenProvider.service.d.ts +4 -22
- package/lib/services/aiGen/providers/baseAiGenProvider.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/baseAiGenProvider.service.js +0 -32
- package/lib/services/aiGen/providers/bytedance/bytedance.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/bytedance/bytedance.service.js +25 -13
- package/lib/services/aiGen/providers/google/google.service.d.ts +2 -11
- package/lib/services/aiGen/providers/google/google.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/google/google.service.js +28 -245
- package/lib/services/aiGen/providers/index.d.ts +0 -3
- package/lib/services/aiGen/providers/index.d.ts.map +1 -1
- package/lib/services/aiGen/providers/index.js +0 -3
- package/lib/services/aiGen/providers/kling/index.d.ts +0 -1
- package/lib/services/aiGen/providers/kling/index.d.ts.map +1 -1
- package/lib/services/aiGen/providers/kling/index.js +0 -1
- package/lib/services/aiGen/providers/kling/kling.service.d.ts +1 -12
- package/lib/services/aiGen/providers/kling/kling.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/kling/kling.service.js +26 -357
- package/lib/services/aiGen/providers/kling/types.d.ts +0 -105
- package/lib/services/aiGen/providers/kling/types.d.ts.map +1 -1
- package/lib/services/aiGen/providers/minimax/minimax.service.d.ts +2 -15
- package/lib/services/aiGen/providers/minimax/minimax.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/minimax/minimax.service.js +5 -128
- package/lib/services/aiGen/providers/minimax/types.d.ts +1 -10
- package/lib/services/aiGen/providers/minimax/types.d.ts.map +1 -1
- package/lib/services/aiGen/providers/openai/openai.service.d.ts +2 -8
- package/lib/services/aiGen/providers/openai/openai.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/openai/openai.service.js +7 -184
- package/lib/services/aiGen/providers/pixverse/pixverse.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/pixverse/pixverse.service.js +2 -125
- package/lib/services/aiGen/providers/runway/runway.service.d.ts +2 -12
- package/lib/services/aiGen/providers/runway/runway.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/runway/runway.service.js +21 -224
- package/lib/services/aiGen/providers/types.d.ts +6 -263
- package/lib/services/aiGen/providers/types.d.ts.map +1 -1
- package/lib/services/analytics.service.js +4 -2
- package/lib/services/bullmq.service.d.ts +1 -6
- package/lib/services/bullmq.service.d.ts.map +1 -1
- package/lib/services/bullmq.service.js +14 -62
- package/lib/services/credit.service.d.ts.map +1 -1
- package/lib/services/credit.service.js +7 -45
- package/lib/services/firestore.service.d.ts +0 -17
- package/lib/services/firestore.service.d.ts.map +1 -1
- package/lib/services/firestore.service.js +0 -30
- package/lib/services/gcp/index.d.ts +0 -1
- package/lib/services/gcp/index.d.ts.map +1 -1
- package/lib/services/gcp/index.js +0 -1
- package/lib/services/index.d.ts +0 -13
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/index.js +0 -13
- package/lib/services/redis.service.d.ts +0 -9
- package/lib/services/redis.service.d.ts.map +1 -1
- package/lib/services/redis.service.js +11 -20
- package/lib/services/tts/index.d.ts +0 -2
- package/lib/services/tts/index.d.ts.map +1 -1
- package/lib/services/tts/index.js +0 -2
- package/lib/services/tts/providers/elevenlabs.service.d.ts.map +1 -1
- package/lib/services/tts/providers/elevenlabs.service.js +24 -91
- package/lib/services/tts/ttsFactory.service.d.ts.map +1 -1
- package/lib/services/tts/ttsFactory.service.js +0 -6
- package/lib/services/tts/types.d.ts +0 -33
- package/lib/services/tts/types.d.ts.map +1 -1
- package/lib/utils/errors.d.ts +0 -8
- package/lib/utils/errors.d.ts.map +1 -1
- package/lib/utils/errors.js +0 -8
- package/lib/utils/helpers.d.ts +0 -13
- package/lib/utils/helpers.d.ts.map +1 -1
- package/lib/utils/helpers.js +11 -48
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/logger.js +1 -37
- package/package.json +1 -5
- package/lib/globals/aiModels/providers/alibaba.d.ts +0 -4
- package/lib/globals/aiModels/providers/alibaba.d.ts.map +0 -1
- package/lib/globals/aiModels/providers/alibaba.js +0 -194
- package/lib/globals/aiModels/providers/elevenlabs.d.ts +0 -14
- package/lib/globals/aiModels/providers/elevenlabs.d.ts.map +0 -1
- package/lib/globals/aiModels/providers/elevenlabs.js +0 -29
- package/lib/globals/aiModels/providers/pixverseTemplates.d.ts +0 -36
- package/lib/globals/aiModels/providers/pixverseTemplates.d.ts.map +0 -1
- package/lib/globals/aiModels/providers/pixverseTemplates.js +0 -42
- package/lib/globals/aiModels/tierHelpers.d.ts +0 -33
- package/lib/globals/aiModels/tierHelpers.d.ts.map +0 -1
- package/lib/globals/aiModels/tierHelpers.js +0 -109
- package/lib/globals/ttsModels/providers/minimax.d.ts +0 -8
- package/lib/globals/ttsModels/providers/minimax.d.ts.map +0 -1
- package/lib/globals/ttsModels/providers/minimax.js +0 -18
- package/lib/globals/ttsModels/providers/openai.d.ts +0 -12
- package/lib/globals/ttsModels/providers/openai.d.ts.map +0 -1
- package/lib/globals/ttsModels/providers/openai.js +0 -22
- package/lib/models/agent.model.d.ts +0 -357
- package/lib/models/agent.model.d.ts.map +0 -1
- package/lib/models/agent.model.js +0 -21
- package/lib/models/cachedAsset.model.d.ts +0 -18
- package/lib/models/cachedAsset.model.d.ts.map +0 -1
- package/lib/models/cachedAsset.model.js +0 -2
- package/lib/models/cachedRawAsset.model.d.ts +0 -20
- package/lib/models/cachedRawAsset.model.d.ts.map +0 -1
- package/lib/models/cachedRawAsset.model.js +0 -2
- package/lib/models/image.model.d.ts +0 -47
- package/lib/models/image.model.d.ts.map +0 -1
- package/lib/models/image.model.js +0 -2
- package/lib/models/notification.model.d.ts +0 -25
- package/lib/models/notification.model.d.ts.map +0 -1
- package/lib/models/notification.model.js +0 -2
- package/lib/models/ref.model.d.ts +0 -80
- package/lib/models/ref.model.d.ts.map +0 -1
- package/lib/models/ref.model.js +0 -13
- package/lib/models/share.model.d.ts +0 -29
- package/lib/models/share.model.d.ts.map +0 -1
- package/lib/models/share.model.js +0 -2
- package/lib/schemas/agentPersona.schema.d.ts +0 -10
- package/lib/schemas/agentPersona.schema.d.ts.map +0 -1
- package/lib/schemas/agentPersona.schema.js +0 -11
- package/lib/schemas/agentRunJob.schema.d.ts +0 -105
- package/lib/schemas/agentRunJob.schema.d.ts.map +0 -1
- package/lib/schemas/agentRunJob.schema.js +0 -88
- package/lib/schemas/brandKit.schema.d.ts +0 -113
- package/lib/schemas/brandKit.schema.d.ts.map +0 -1
- package/lib/schemas/brandKit.schema.js +0 -46
- package/lib/schemas/brief.schema.d.ts +0 -263
- package/lib/schemas/brief.schema.d.ts.map +0 -1
- package/lib/schemas/brief.schema.js +0 -157
- package/lib/schemas/index.d.ts +0 -7
- package/lib/schemas/index.d.ts.map +0 -1
- package/lib/schemas/index.js +0 -22
- package/lib/schemas/project.schema.d.ts +0 -1025
- package/lib/schemas/project.schema.d.ts.map +0 -1
- package/lib/schemas/project.schema.js +0 -256
- package/lib/schemas/videoPlan.schema.d.ts +0 -590
- package/lib/schemas/videoPlan.schema.d.ts.map +0 -1
- package/lib/schemas/videoPlan.schema.js +0 -412
- package/lib/services/agent/beatSnap.d.ts +0 -10
- package/lib/services/agent/beatSnap.d.ts.map +0 -1
- package/lib/services/agent/beatSnap.js +0 -128
- package/lib/services/agent/bibleBuilder.d.ts +0 -43
- package/lib/services/agent/bibleBuilder.d.ts.map +0 -1
- package/lib/services/agent/bibleBuilder.js +0 -102
- package/lib/services/agent/bibleImageVision.d.ts +0 -45
- package/lib/services/agent/bibleImageVision.d.ts.map +0 -1
- package/lib/services/agent/bibleImageVision.js +0 -169
- package/lib/services/agent/chatAgent.d.ts +0 -79
- package/lib/services/agent/chatAgent.d.ts.map +0 -1
- package/lib/services/agent/chatAgent.js +0 -136
- package/lib/services/agent/costPreflight.d.ts +0 -61
- package/lib/services/agent/costPreflight.d.ts.map +0 -1
- package/lib/services/agent/costPreflight.js +0 -143
- package/lib/services/agent/critic.d.ts +0 -103
- package/lib/services/agent/critic.d.ts.map +0 -1
- package/lib/services/agent/critic.js +0 -139
- package/lib/services/agent/editClassifier.d.ts +0 -262
- package/lib/services/agent/editClassifier.d.ts.map +0 -1
- package/lib/services/agent/editClassifier.js +0 -186
- package/lib/services/agent/eval/index.d.ts +0 -5
- package/lib/services/agent/eval/index.d.ts.map +0 -1
- package/lib/services/agent/eval/index.js +0 -20
- package/lib/services/agent/eval/judge.d.ts +0 -14
- package/lib/services/agent/eval/judge.d.ts.map +0 -1
- package/lib/services/agent/eval/judge.js +0 -96
- package/lib/services/agent/eval/recorder.d.ts +0 -28
- package/lib/services/agent/eval/recorder.d.ts.map +0 -1
- package/lib/services/agent/eval/recorder.js +0 -100
- package/lib/services/agent/eval/seedBriefs.d.ts +0 -16
- package/lib/services/agent/eval/seedBriefs.d.ts.map +0 -1
- package/lib/services/agent/eval/seedBriefs.js +0 -1188
- package/lib/services/agent/eval/types.d.ts +0 -230
- package/lib/services/agent/eval/types.d.ts.map +0 -1
- package/lib/services/agent/eval/types.js +0 -73
- package/lib/services/agent/executor.d.ts +0 -141
- package/lib/services/agent/executor.d.ts.map +0 -1
- package/lib/services/agent/executor.js +0 -561
- package/lib/services/agent/globalActions.d.ts +0 -49
- package/lib/services/agent/globalActions.d.ts.map +0 -1
- package/lib/services/agent/globalActions.js +0 -328
- package/lib/services/agent/index.d.ts +0 -38
- package/lib/services/agent/index.d.ts.map +0 -1
- package/lib/services/agent/index.js +0 -53
- package/lib/services/agent/llmCaller.d.ts +0 -144
- package/lib/services/agent/llmCaller.d.ts.map +0 -1
- package/lib/services/agent/llmCaller.js +0 -16
- package/lib/services/agent/llmCallerAnthropic.d.ts +0 -90
- package/lib/services/agent/llmCallerAnthropic.d.ts.map +0 -1
- package/lib/services/agent/llmCallerAnthropic.js +0 -255
- package/lib/services/agent/llmCallerGateway.d.ts +0 -61
- package/lib/services/agent/llmCallerGateway.d.ts.map +0 -1
- package/lib/services/agent/llmCallerGateway.js +0 -360
- package/lib/services/agent/llmCallerRegistry.d.ts +0 -6
- package/lib/services/agent/llmCallerRegistry.d.ts.map +0 -1
- package/lib/services/agent/llmCallerRegistry.js +0 -39
- package/lib/services/agent/modelQualityNotes.d.ts +0 -100
- package/lib/services/agent/modelQualityNotes.d.ts.map +0 -1
- package/lib/services/agent/modelQualityNotes.js +0 -248
- package/lib/services/agent/modelRouter.d.ts +0 -41
- package/lib/services/agent/modelRouter.d.ts.map +0 -1
- package/lib/services/agent/modelRouter.js +0 -65
- package/lib/services/agent/musicSelect.d.ts +0 -23
- package/lib/services/agent/musicSelect.d.ts.map +0 -1
- package/lib/services/agent/musicSelect.js +0 -109
- package/lib/services/agent/overlayRenderer.d.ts +0 -67
- package/lib/services/agent/overlayRenderer.d.ts.map +0 -1
- package/lib/services/agent/overlayRenderer.js +0 -253
- package/lib/services/agent/perSceneCritic.d.ts +0 -90
- package/lib/services/agent/perSceneCritic.d.ts.map +0 -1
- package/lib/services/agent/perSceneCritic.js +0 -125
- package/lib/services/agent/personas.d.ts +0 -78
- package/lib/services/agent/personas.d.ts.map +0 -1
- package/lib/services/agent/personas.js +0 -177
- package/lib/services/agent/planDiff.d.ts +0 -76
- package/lib/services/agent/planDiff.d.ts.map +0 -1
- package/lib/services/agent/planDiff.js +0 -182
- package/lib/services/agent/planMutations.d.ts +0 -46
- package/lib/services/agent/planMutations.d.ts.map +0 -1
- package/lib/services/agent/planMutations.js +0 -120
- package/lib/services/agent/planner/Planner.d.ts +0 -107
- package/lib/services/agent/planner/Planner.d.ts.map +0 -1
- package/lib/services/agent/planner/Planner.js +0 -591
- package/lib/services/agent/planner/overlaySanity.d.ts +0 -7
- package/lib/services/agent/planner/overlaySanity.d.ts.map +0 -1
- package/lib/services/agent/planner/overlaySanity.js +0 -86
- package/lib/services/agent/planner/promptSections.d.ts +0 -25
- package/lib/services/agent/planner/promptSections.d.ts.map +0 -1
- package/lib/services/agent/planner/promptSections.js +0 -174
- package/lib/services/agent/planner/repair.d.ts +0 -16
- package/lib/services/agent/planner/repair.d.ts.map +0 -1
- package/lib/services/agent/planner/repair.js +0 -51
- package/lib/services/agent/planner/structuralRules.d.ts +0 -10
- package/lib/services/agent/planner/structuralRules.d.ts.map +0 -1
- package/lib/services/agent/planner/structuralRules.js +0 -111
- package/lib/services/agent/planner/validators.d.ts +0 -65
- package/lib/services/agent/planner/validators.d.ts.map +0 -1
- package/lib/services/agent/planner/validators.js +0 -284
- package/lib/services/agent/planner.d.ts +0 -3
- package/lib/services/agent/planner.d.ts.map +0 -1
- package/lib/services/agent/planner.js +0 -14
- package/lib/services/agent/providerFallback/chains.d.ts +0 -100
- package/lib/services/agent/providerFallback/chains.d.ts.map +0 -1
- package/lib/services/agent/providerFallback/chains.js +0 -198
- package/lib/services/agent/providerFallback/classifier.d.ts +0 -36
- package/lib/services/agent/providerFallback/classifier.d.ts.map +0 -1
- package/lib/services/agent/providerFallback/classifier.js +0 -103
- package/lib/services/agent/providerFallback/index.d.ts +0 -4
- package/lib/services/agent/providerFallback/index.d.ts.map +0 -1
- package/lib/services/agent/providerFallback/index.js +0 -19
- package/lib/services/agent/providerFallback/withFallback.d.ts +0 -60
- package/lib/services/agent/providerFallback/withFallback.d.ts.map +0 -1
- package/lib/services/agent/providerFallback/withFallback.js +0 -93
- package/lib/services/agent/providerTaskCache.d.ts +0 -50
- package/lib/services/agent/providerTaskCache.d.ts.map +0 -1
- package/lib/services/agent/providerTaskCache.js +0 -98
- package/lib/services/agent/qualityGate.d.ts +0 -82
- package/lib/services/agent/qualityGate.d.ts.map +0 -1
- package/lib/services/agent/qualityGate.js +0 -232
- package/lib/services/agent/referenceImageRenderer.d.ts +0 -37
- package/lib/services/agent/referenceImageRenderer.d.ts.map +0 -1
- package/lib/services/agent/referenceImageRenderer.js +0 -92
- package/lib/services/agent/regenCore.d.ts +0 -60
- package/lib/services/agent/regenCore.d.ts.map +0 -1
- package/lib/services/agent/regenCore.js +0 -487
- package/lib/services/agent/runHelpers.d.ts +0 -44
- package/lib/services/agent/runHelpers.d.ts.map +0 -1
- package/lib/services/agent/runHelpers.js +0 -196
- package/lib/services/agent/sceneLayoutVision.d.ts +0 -90
- package/lib/services/agent/sceneLayoutVision.d.ts.map +0 -1
- package/lib/services/agent/sceneLayoutVision.js +0 -212
- package/lib/services/agent/stitchedVideoCritic.d.ts +0 -136
- package/lib/services/agent/stitchedVideoCritic.d.ts.map +0 -1
- package/lib/services/agent/stitchedVideoCritic.gemini.d.ts +0 -26
- package/lib/services/agent/stitchedVideoCritic.gemini.d.ts.map +0 -1
- package/lib/services/agent/stitchedVideoCritic.gemini.js +0 -198
- package/lib/services/agent/stitchedVideoCritic.js +0 -162
- package/lib/services/agent/taskPoller.d.ts +0 -65
- package/lib/services/agent/taskPoller.d.ts.map +0 -1
- package/lib/services/agent/taskPoller.js +0 -176
- package/lib/services/agent/textOverlayStyles.d.ts +0 -60
- package/lib/services/agent/textOverlayStyles.d.ts.map +0 -1
- package/lib/services/agent/textOverlayStyles.js +0 -174
- package/lib/services/agent/toolRegistry.d.ts +0 -73
- package/lib/services/agent/toolRegistry.d.ts.map +0 -1
- package/lib/services/agent/toolRegistry.js +0 -95
- package/lib/services/agent/tools/analyzeReference.tool.d.ts +0 -36
- package/lib/services/agent/tools/analyzeReference.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/analyzeReference.tool.js +0 -44
- package/lib/services/agent/tools/animateImage.tool.d.ts +0 -24
- package/lib/services/agent/tools/animateImage.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/animateImage.tool.js +0 -115
- package/lib/services/agent/tools/animateImageWithMotionBrush.tool.d.ts +0 -32
- package/lib/services/agent/tools/animateImageWithMotionBrush.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/animateImageWithMotionBrush.tool.js +0 -135
- package/lib/services/agent/tools/composeScene.tool.d.ts +0 -978
- package/lib/services/agent/tools/composeScene.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/composeScene.tool.js +0 -90
- package/lib/services/agent/tools/estimateCost.tool.d.ts +0 -352
- package/lib/services/agent/tools/estimateCost.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/estimateCost.tool.js +0 -62
- package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts +0 -32
- package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/generateAvatarVideo.tool.js +0 -143
- package/lib/services/agent/tools/generateCaptions.tool.d.ts +0 -42
- package/lib/services/agent/tools/generateCaptions.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/generateCaptions.tool.js +0 -196
- package/lib/services/agent/tools/generateImage.tool.d.ts +0 -74
- package/lib/services/agent/tools/generateImage.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/generateImage.tool.js +0 -206
- package/lib/services/agent/tools/generateVideo.tool.d.ts +0 -31
- package/lib/services/agent/tools/generateVideo.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/generateVideo.tool.js +0 -153
- package/lib/services/agent/tools/generateVoiceover.tool.d.ts +0 -44
- package/lib/services/agent/tools/generateVoiceover.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/generateVoiceover.tool.js +0 -206
- package/lib/services/agent/tools/index.d.ts +0 -20
- package/lib/services/agent/tools/index.d.ts.map +0 -1
- package/lib/services/agent/tools/index.js +0 -35
- package/lib/services/agent/tools/planVideo.tool.d.ts +0 -343
- package/lib/services/agent/tools/planVideo.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/planVideo.tool.js +0 -46
- package/lib/services/agent/tools/render.tool.d.ts +0 -367
- package/lib/services/agent/tools/render.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/render.tool.js +0 -48
- package/lib/services/agent/tools/searchMusic.tool.d.ts +0 -49
- package/lib/services/agent/tools/searchMusic.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/searchMusic.tool.js +0 -74
- package/lib/services/agent/tools/searchStock.tool.d.ts +0 -41
- package/lib/services/agent/tools/searchStock.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/searchStock.tool.js +0 -314
- package/lib/services/agent/tools/searchUserLibrary.tool.d.ts +0 -59
- package/lib/services/agent/tools/searchUserLibrary.tool.d.ts.map +0 -1
- package/lib/services/agent/tools/searchUserLibrary.tool.js +0 -58
- package/lib/services/agent/ttsDuration.d.ts +0 -29
- package/lib/services/agent/ttsDuration.d.ts.map +0 -1
- package/lib/services/agent/ttsDuration.js +0 -60
- package/lib/services/aiGen/canonicalAdapters/cameraControl.types.d.ts +0 -31
- package/lib/services/aiGen/canonicalAdapters/cameraControl.types.d.ts.map +0 -1
- package/lib/services/aiGen/canonicalAdapters/cameraControl.types.js +0 -2
- package/lib/services/aiGen/canonicalAdapters/index.d.ts +0 -3
- package/lib/services/aiGen/canonicalAdapters/index.d.ts.map +0 -1
- package/lib/services/aiGen/canonicalAdapters/index.js +0 -18
- package/lib/services/aiGen/canonicalAdapters/multiShot.types.d.ts +0 -23
- package/lib/services/aiGen/canonicalAdapters/multiShot.types.d.ts.map +0 -1
- package/lib/services/aiGen/canonicalAdapters/multiShot.types.js +0 -12
- package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.d.ts +0 -18
- package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.d.ts.map +0 -1
- package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.js +0 -102
- package/lib/services/aiGen/providers/fal/falImage.service.d.ts +0 -15
- package/lib/services/aiGen/providers/fal/falImage.service.d.ts.map +0 -1
- package/lib/services/aiGen/providers/fal/falImage.service.js +0 -141
- package/lib/services/aiGen/providers/fal/index.d.ts +0 -2
- package/lib/services/aiGen/providers/fal/index.d.ts.map +0 -1
- package/lib/services/aiGen/providers/fal/index.js +0 -17
- package/lib/services/aiGen/providers/kling/cameraAdapter.d.ts +0 -4
- package/lib/services/aiGen/providers/kling/cameraAdapter.d.ts.map +0 -1
- package/lib/services/aiGen/providers/kling/cameraAdapter.js +0 -53
- package/lib/services/aiGen/providers/kling/klingImage.service.d.ts +0 -21
- package/lib/services/aiGen/providers/kling/klingImage.service.d.ts.map +0 -1
- package/lib/services/aiGen/providers/kling/klingImage.service.js +0 -208
- package/lib/services/aiGen/providers/pexels/index.d.ts +0 -2
- package/lib/services/aiGen/providers/pexels/index.d.ts.map +0 -1
- package/lib/services/aiGen/providers/pexels/pexels.service.d.ts +0 -11
- package/lib/services/aiGen/providers/pexels/pexels.service.d.ts.map +0 -1
- package/lib/services/aiGen/providers/pexels/pexels.service.js +0 -150
- package/lib/services/aiGen/providers/pixabay/index.d.ts +0 -2
- package/lib/services/aiGen/providers/pixabay/index.d.ts.map +0 -1
- package/lib/services/aiGen/providers/pixabay/index.js +0 -17
- package/lib/services/aiGen/providers/pixabay/pixabay.service.d.ts +0 -12
- package/lib/services/aiGen/providers/pixabay/pixabay.service.d.ts.map +0 -1
- package/lib/services/aiGen/providers/pixabay/pixabay.service.js +0 -156
- package/lib/services/aiGen/providers/runway/cameraAdapter.d.ts +0 -3
- package/lib/services/aiGen/providers/runway/cameraAdapter.d.ts.map +0 -1
- package/lib/services/aiGen/providers/runway/cameraAdapter.js +0 -46
- package/lib/services/aiGen/providers/unsplash/index.d.ts +0 -2
- package/lib/services/aiGen/providers/unsplash/index.d.ts.map +0 -1
- package/lib/services/aiGen/providers/unsplash/index.js +0 -17
- package/lib/services/aiGen/providers/unsplash/unsplash.service.d.ts +0 -16
- package/lib/services/aiGen/providers/unsplash/unsplash.service.d.ts.map +0 -1
- package/lib/services/aiGen/providers/unsplash/unsplash.service.js +0 -131
- package/lib/services/apiUsageCounter.service.d.ts +0 -20
- package/lib/services/apiUsageCounter.service.d.ts.map +0 -1
- package/lib/services/apiUsageCounter.service.js +0 -84
- package/lib/services/asr/assemblyai.service.d.ts +0 -72
- package/lib/services/asr/assemblyai.service.d.ts.map +0 -1
- package/lib/services/asr/assemblyai.service.js +0 -89
- package/lib/services/asr/index.d.ts +0 -3
- package/lib/services/asr/index.d.ts.map +0 -1
- package/lib/services/asr/index.js +0 -18
- package/lib/services/asr/whisper.service.d.ts +0 -18
- package/lib/services/asr/whisper.service.d.ts.map +0 -1
- package/lib/services/asr/whisper.service.js +0 -151
- package/lib/services/assetCache.service.d.ts +0 -54
- package/lib/services/assetCache.service.d.ts.map +0 -1
- package/lib/services/assetCache.service.js +0 -109
- package/lib/services/audioAnalysis/index.d.ts +0 -2
- package/lib/services/audioAnalysis/index.d.ts.map +0 -1
- package/lib/services/audioAnalysis/index.js +0 -17
- package/lib/services/audioAnalysis/onsetDetection.service.d.ts +0 -50
- package/lib/services/audioAnalysis/onsetDetection.service.d.ts.map +0 -1
- package/lib/services/audioAnalysis/onsetDetection.service.js +0 -140
- package/lib/services/credits/pricing.d.ts +0 -58
- package/lib/services/credits/pricing.d.ts.map +0 -1
- package/lib/services/credits/pricing.js +0 -111
- package/lib/services/editor/designToProject.d.ts +0 -75
- package/lib/services/editor/designToProject.d.ts.map +0 -1
- package/lib/services/editor/designToProject.js +0 -295
- package/lib/services/editor/planToProject.d.ts +0 -84
- package/lib/services/editor/planToProject.d.ts.map +0 -1
- package/lib/services/editor/planToProject.js +0 -395
- package/lib/services/editor/projectToDesign.d.ts +0 -4
- package/lib/services/editor/projectToDesign.d.ts.map +0 -1
- package/lib/services/editor/projectToDesign.js +0 -186
- package/lib/services/gcp/uploadAudioBuffer.d.ts +0 -13
- package/lib/services/gcp/uploadAudioBuffer.d.ts.map +0 -1
- package/lib/services/gcp/uploadAudioBuffer.js +0 -28
- package/lib/services/musicGen/index.d.ts +0 -6
- package/lib/services/musicGen/index.d.ts.map +0 -1
- package/lib/services/musicGen/index.js +0 -26
- package/lib/services/musicGen/musicSearchFactory.service.d.ts +0 -14
- package/lib/services/musicGen/musicSearchFactory.service.d.ts.map +0 -1
- package/lib/services/musicGen/musicSearchFactory.service.js +0 -59
- package/lib/services/musicGen/providers/curated.service.d.ts +0 -24
- package/lib/services/musicGen/providers/curated.service.d.ts.map +0 -1
- package/lib/services/musicGen/providers/curated.service.js +0 -173
- package/lib/services/musicGen/providers/jamendo.service.d.ts +0 -8
- package/lib/services/musicGen/providers/jamendo.service.d.ts.map +0 -1
- package/lib/services/musicGen/providers/jamendo.service.js +0 -113
- package/lib/services/musicGen/providers/mubert.service.d.ts +0 -10
- package/lib/services/musicGen/providers/mubert.service.d.ts.map +0 -1
- package/lib/services/musicGen/providers/mubert.service.js +0 -128
- package/lib/services/musicGen/types.d.ts +0 -46
- package/lib/services/musicGen/types.d.ts.map +0 -1
- package/lib/services/musicGen/types.js +0 -10
- package/lib/services/notification.service.d.ts +0 -22
- package/lib/services/notification.service.d.ts.map +0 -1
- package/lib/services/notification.service.js +0 -76
- package/lib/services/rateLimiter/distributedRateLimiter.service.d.ts +0 -78
- package/lib/services/rateLimiter/distributedRateLimiter.service.d.ts.map +0 -1
- package/lib/services/rateLimiter/distributedRateLimiter.service.js +0 -269
- package/lib/services/rateLimiter/index.d.ts +0 -2
- package/lib/services/rateLimiter/index.d.ts.map +0 -1
- package/lib/services/rateLimiter/index.js +0 -17
- package/lib/services/redisOptions.d.ts +0 -22
- package/lib/services/redisOptions.d.ts.map +0 -1
- package/lib/services/redisOptions.js +0 -51
- package/lib/services/tts/providers/minimax.service.d.ts +0 -14
- package/lib/services/tts/providers/minimax.service.d.ts.map +0 -1
- package/lib/services/tts/providers/minimax.service.js +0 -78
- package/lib/services/tts/providers/openai.service.d.ts +0 -14
- package/lib/services/tts/providers/openai.service.d.ts.map +0 -1
- package/lib/services/tts/providers/openai.service.js +0 -73
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NotificationService = void 0;
|
|
4
|
-
const firestore_1 = require("firebase-admin/firestore");
|
|
5
|
-
const types_1 = require("../globals/types");
|
|
6
|
-
const logger_1 = require("../utils/logger");
|
|
7
|
-
const firestore_service_1 = require("./firestore.service");
|
|
8
|
-
/**
|
|
9
|
-
* Writes an in-app notification doc IF the user hasn't muted this type.
|
|
10
|
-
*
|
|
11
|
-
* Best-effort: failures are logged but never re-thrown — callers (worker
|
|
12
|
-
* processors, webhook handlers, credit service) should not be blocked by a
|
|
13
|
-
* notification write. The user reads via Firestore onSnapshot, so a missed
|
|
14
|
-
* write just means a missing bell entry, not a broken job.
|
|
15
|
-
*/
|
|
16
|
-
class NotificationService {
|
|
17
|
-
static async create(input) {
|
|
18
|
-
try {
|
|
19
|
-
const user = await firestore_service_1.FirestoreService.getUserById(input.userId);
|
|
20
|
-
if (!user)
|
|
21
|
-
return null;
|
|
22
|
-
if (!isEnabled(user, input.type))
|
|
23
|
-
return null;
|
|
24
|
-
const doc = {
|
|
25
|
-
userId: input.userId,
|
|
26
|
-
type: input.type,
|
|
27
|
-
severity: input.severity ?? defaultSeverity(input.type),
|
|
28
|
-
title: input.title,
|
|
29
|
-
...(input.body && { body: input.body }),
|
|
30
|
-
...(input.link && { link: input.link }),
|
|
31
|
-
...(input.data && { data: input.data }),
|
|
32
|
-
read: false,
|
|
33
|
-
createdAt: firestore_1.FieldValue.serverTimestamp(),
|
|
34
|
-
};
|
|
35
|
-
const ref = await firestore_service_1.FirestoreService.appendNewRecord(firestore_service_1.FirestoreService.notificationsCol, doc);
|
|
36
|
-
return ref.id;
|
|
37
|
-
}
|
|
38
|
-
catch (err) {
|
|
39
|
-
// Intentionally swallowed for caller — notifications must never break the
|
|
40
|
-
// worker / webhook handler / credit service. But surface to ops so we
|
|
41
|
-
// notice persistent write failures.
|
|
42
|
-
logger_1.logger.error("notification create failed", {
|
|
43
|
-
userId: input.userId,
|
|
44
|
-
type: input.type,
|
|
45
|
-
err: err instanceof Error ? err.stack ?? err.message : String(err),
|
|
46
|
-
});
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
exports.NotificationService = NotificationService;
|
|
52
|
-
function isEnabled(user, type) {
|
|
53
|
-
const prefs = user.notificationPreferences ?? {};
|
|
54
|
-
if (type in prefs)
|
|
55
|
-
return prefs[type] !== false;
|
|
56
|
-
return types_1.DEFAULT_NOTIFICATION_PREFERENCES[type] !== false;
|
|
57
|
-
}
|
|
58
|
-
function defaultSeverity(type) {
|
|
59
|
-
switch (type) {
|
|
60
|
-
case types_1.ENotificationType.VIDEO_FAILED:
|
|
61
|
-
case types_1.ENotificationType.IMAGE_FAILED:
|
|
62
|
-
case types_1.ENotificationType.SUBSCRIPTION_PAYMENT_FAILED:
|
|
63
|
-
return types_1.ENotificationSeverity.ERROR;
|
|
64
|
-
case types_1.ENotificationType.VIDEO_PARTIAL:
|
|
65
|
-
case types_1.ENotificationType.CREDITS_LOW:
|
|
66
|
-
case types_1.ENotificationType.SUBSCRIPTION_TRIAL_ENDING:
|
|
67
|
-
case types_1.ENotificationType.SUBSCRIPTION_CANCELED:
|
|
68
|
-
return types_1.ENotificationSeverity.WARNING;
|
|
69
|
-
case types_1.ENotificationType.VIDEO_COMPLETED:
|
|
70
|
-
case types_1.ENotificationType.IMAGE_COMPLETED:
|
|
71
|
-
case types_1.ENotificationType.SUBSCRIPTION_RENEWED:
|
|
72
|
-
return types_1.ENotificationSeverity.SUCCESS;
|
|
73
|
-
default:
|
|
74
|
-
return types_1.ENotificationSeverity.INFO;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { TAiGenModel } from "../../globals/aiModels";
|
|
2
|
-
import { TtsProvider } from "../../globals/ttsModels/types";
|
|
3
|
-
/**
|
|
4
|
-
* DistributedRateLimiter — three-tier provider quota gate.
|
|
5
|
-
*
|
|
6
|
-
* concurrent (in-process, Promise wait queue, single-process-correct)
|
|
7
|
-
* per-minute (Redis sliding-window sorted set, atomic via Lua)
|
|
8
|
-
* per-day (Redis counter with midnight-UTC TTL, atomic via Lua)
|
|
9
|
-
*
|
|
10
|
-
* Replaces the original in-memory AiGenModelRateLimiter so the per-minute
|
|
11
|
-
* and per-day quotas survive process restarts — the old version's counters
|
|
12
|
-
* reset on every nodemon reload / deploy, which let us blow past a provider's
|
|
13
|
-
* daily cap with a few restarts.
|
|
14
|
-
*
|
|
15
|
-
* API mirrors the old class (`waitUntilAvailable()` + `releaseSlot()`) so the
|
|
16
|
-
* legacy /v1/video processors don't need any callsite changes. Two new entry
|
|
17
|
-
* points added for the agent path:
|
|
18
|
-
* - waitUntilAvailableForOneShot(): used by poll calls that consume rate
|
|
19
|
-
* budget but should NOT count toward the concurrent-in-flight cap.
|
|
20
|
-
* - snapshot(): used by /health/rate-limits for live utilization.
|
|
21
|
-
*
|
|
22
|
-
* Single-process design: concurrent counter is intentionally in-process — at
|
|
23
|
-
* one Express server it's a true global cap with zero Redis round-trip. If
|
|
24
|
-
* we ever scale horizontally that gate alone needs promoting to Redis; the
|
|
25
|
-
* caller API stays the same.
|
|
26
|
-
*/
|
|
27
|
-
interface DistributedRateLimiterConfig {
|
|
28
|
-
concurrentRequests?: number;
|
|
29
|
-
requestPerMin?: number;
|
|
30
|
-
requestPerDay?: number;
|
|
31
|
-
}
|
|
32
|
-
export interface LimiterSnapshot {
|
|
33
|
-
modelKey: string;
|
|
34
|
-
active: number;
|
|
35
|
-
waitQueueDepth: number;
|
|
36
|
-
perMinUsed: number;
|
|
37
|
-
perDayUsed: number;
|
|
38
|
-
concurrentLimit?: number;
|
|
39
|
-
perMinLimit?: number;
|
|
40
|
-
perDayLimit?: number;
|
|
41
|
-
}
|
|
42
|
-
export declare class DistributedRateLimiter {
|
|
43
|
-
private readonly modelKey;
|
|
44
|
-
private readonly concurrentLimit;
|
|
45
|
-
private readonly perMinLimit;
|
|
46
|
-
private readonly perDayLimit;
|
|
47
|
-
private activeRequests;
|
|
48
|
-
private waitQueue;
|
|
49
|
-
constructor(modelKey: string, config: DistributedRateLimiterConfig);
|
|
50
|
-
/**
|
|
51
|
-
* Block until concurrent + per-min + per-day all have headroom, then claim
|
|
52
|
-
* a slot in each. Caller MUST call releaseSlot() when the in-flight task
|
|
53
|
-
* settles — per-min / per-day auto-expire but the concurrent counter does
|
|
54
|
-
* not. Mirrors the old AiGenModelRateLimiter API.
|
|
55
|
-
*/
|
|
56
|
-
waitUntilAvailable(): Promise<void>;
|
|
57
|
-
/**
|
|
58
|
-
* Bumps per-min + per-day only — does NOT count toward the concurrent cap.
|
|
59
|
-
* Use for short-lived calls that share a provider's rate budget but aren't
|
|
60
|
-
* "in-flight tasks" (status polls, sync image/TTS gens that complete in the
|
|
61
|
-
* same call). No release is needed — Redis auto-expires the counters.
|
|
62
|
-
*/
|
|
63
|
-
waitUntilAvailableForOneShot(): Promise<void>;
|
|
64
|
-
/** Free a concurrent slot acquired via waitUntilAvailable(). */
|
|
65
|
-
releaseSlot(): void;
|
|
66
|
-
get activeConcurrentCount(): number;
|
|
67
|
-
snapshot(): Promise<LimiterSnapshot>;
|
|
68
|
-
private acquireConcurrent;
|
|
69
|
-
private releaseConcurrent;
|
|
70
|
-
private consumeRedisGates;
|
|
71
|
-
}
|
|
72
|
-
export declare function getAiGenModelRateLimiter(modelKey: TAiGenModel): DistributedRateLimiter;
|
|
73
|
-
export declare function getTtsProviderRateLimiter(provider: TtsProvider): DistributedRateLimiter;
|
|
74
|
-
/** Snapshot every limiter that has ever been instantiated. Used by the
|
|
75
|
-
* /health/rate-limits endpoint for live ops visibility. */
|
|
76
|
-
export declare function snapshotAllRateLimiters(): Promise<LimiterSnapshot[]>;
|
|
77
|
-
export {};
|
|
78
|
-
//# sourceMappingURL=distributedRateLimiter.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"distributedRateLimiter.service.d.ts","sourceRoot":"","sources":["../../../src/services/rateLimiter/distributedRateLimiter.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAU5D;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,UAAU,4BAA4B;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAuDD,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,SAAS,CAAyB;gBAE9B,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,4BAA4B;IAOlE;;;;;OAKG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUzC;;;;;OAKG;IACG,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAInD,gEAAgE;IAChE,WAAW,IAAI,IAAI;IAInB,IAAI,qBAAqB,IAAI,MAAM,CAElC;IAEK,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC;YAoC5B,iBAAiB;IAc/B,OAAO,CAAC,iBAAiB;YAQX,iBAAiB;CA6DhC;AAwBD,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,WAAW,GACpB,sBAAsB,CAaxB;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,WAAW,GACpB,sBAAsB,CAexB;AAED;4DAC4D;AAC5D,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAM1E"}
|
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.DistributedRateLimiter = void 0;
|
|
7
|
-
exports.getAiGenModelRateLimiter = getAiGenModelRateLimiter;
|
|
8
|
-
exports.getTtsProviderRateLimiter = getTtsProviderRateLimiter;
|
|
9
|
-
exports.snapshotAllRateLimiters = snapshotAllRateLimiters;
|
|
10
|
-
const crypto_1 = __importDefault(require("crypto"));
|
|
11
|
-
const aiModels_1 = require("../../globals/aiModels");
|
|
12
|
-
const ttsModels_1 = require("../../globals/ttsModels");
|
|
13
|
-
const logger_1 = require("../../utils/logger");
|
|
14
|
-
const redis_service_1 = require("../redis.service");
|
|
15
|
-
// Module-level throttle so Redis outages don't fire a Slack error every
|
|
16
|
-
// request. First failure goes through; subsequent failures within the
|
|
17
|
-
// window log at warn level (Console + Loki only) until the window resets.
|
|
18
|
-
const RATE_LIMITER_ERROR_THROTTLE_MS = 60000;
|
|
19
|
-
let lastRateLimiterErrorLoggedAt = 0;
|
|
20
|
-
/**
|
|
21
|
-
* Atomic Redis check-and-consume for per-min + per-day gates. Returns
|
|
22
|
-
* { 1, 0, "ok" } — both gates passed, slot consumed
|
|
23
|
-
* { 0, retryMs, "min"|"day" } — gate hit, caller should sleep retryMs and retry
|
|
24
|
-
*
|
|
25
|
-
* Per-minute is a sorted-set sliding window (score = ms timestamp). Per-day
|
|
26
|
-
* is a plain counter keyed by UTC date with TTL set on first INCR to
|
|
27
|
-
* seconds-until-midnight, so the key self-expires.
|
|
28
|
-
*/
|
|
29
|
-
const CONSUME_SCRIPT = `
|
|
30
|
-
local minKey = KEYS[1]
|
|
31
|
-
local dayKey = KEYS[2]
|
|
32
|
-
local nowMs = tonumber(ARGV[1])
|
|
33
|
-
local minLimit = tonumber(ARGV[2])
|
|
34
|
-
local dayLimit = tonumber(ARGV[3])
|
|
35
|
-
local secsTilMidnight = tonumber(ARGV[4])
|
|
36
|
-
local uniqueId = ARGV[5]
|
|
37
|
-
|
|
38
|
-
redis.call('ZREMRANGEBYSCORE', minKey, 0, nowMs - 60000)
|
|
39
|
-
|
|
40
|
-
if minLimit > 0 then
|
|
41
|
-
local minCount = redis.call('ZCARD', minKey)
|
|
42
|
-
if minCount >= minLimit then
|
|
43
|
-
local oldest = redis.call('ZRANGE', minKey, 0, 0, 'WITHSCORES')
|
|
44
|
-
local retryMs = 1000
|
|
45
|
-
if oldest[2] then
|
|
46
|
-
retryMs = 60000 - (nowMs - tonumber(oldest[2]))
|
|
47
|
-
if retryMs < 50 then retryMs = 50 end
|
|
48
|
-
if retryMs > 60000 then retryMs = 60000 end
|
|
49
|
-
end
|
|
50
|
-
return { 0, retryMs, 'min' }
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
if dayLimit > 0 then
|
|
55
|
-
local dayCount = tonumber(redis.call('GET', dayKey) or '0')
|
|
56
|
-
if dayCount >= dayLimit then
|
|
57
|
-
local retryMs = secsTilMidnight * 1000
|
|
58
|
-
if retryMs > 60000 then retryMs = 60000 end
|
|
59
|
-
return { 0, retryMs, 'day' }
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
redis.call('ZADD', minKey, nowMs, uniqueId)
|
|
64
|
-
redis.call('PEXPIRE', minKey, 90000)
|
|
65
|
-
local newDay = redis.call('INCR', dayKey)
|
|
66
|
-
if newDay == 1 then
|
|
67
|
-
redis.call('EXPIRE', dayKey, secsTilMidnight)
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
return { 1, 0, 'ok' }
|
|
71
|
-
`;
|
|
72
|
-
class DistributedRateLimiter {
|
|
73
|
-
constructor(modelKey, config) {
|
|
74
|
-
this.activeRequests = 0;
|
|
75
|
-
this.waitQueue = [];
|
|
76
|
-
this.modelKey = modelKey;
|
|
77
|
-
this.concurrentLimit = config.concurrentRequests ?? 0;
|
|
78
|
-
this.perMinLimit = config.requestPerMin ?? 0;
|
|
79
|
-
this.perDayLimit = config.requestPerDay ?? 0;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Block until concurrent + per-min + per-day all have headroom, then claim
|
|
83
|
-
* a slot in each. Caller MUST call releaseSlot() when the in-flight task
|
|
84
|
-
* settles — per-min / per-day auto-expire but the concurrent counter does
|
|
85
|
-
* not. Mirrors the old AiGenModelRateLimiter API.
|
|
86
|
-
*/
|
|
87
|
-
async waitUntilAvailable() {
|
|
88
|
-
await this.acquireConcurrent();
|
|
89
|
-
try {
|
|
90
|
-
await this.consumeRedisGates();
|
|
91
|
-
}
|
|
92
|
-
catch (err) {
|
|
93
|
-
this.releaseConcurrent();
|
|
94
|
-
throw err;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Bumps per-min + per-day only — does NOT count toward the concurrent cap.
|
|
99
|
-
* Use for short-lived calls that share a provider's rate budget but aren't
|
|
100
|
-
* "in-flight tasks" (status polls, sync image/TTS gens that complete in the
|
|
101
|
-
* same call). No release is needed — Redis auto-expires the counters.
|
|
102
|
-
*/
|
|
103
|
-
async waitUntilAvailableForOneShot() {
|
|
104
|
-
await this.consumeRedisGates();
|
|
105
|
-
}
|
|
106
|
-
/** Free a concurrent slot acquired via waitUntilAvailable(). */
|
|
107
|
-
releaseSlot() {
|
|
108
|
-
this.releaseConcurrent();
|
|
109
|
-
}
|
|
110
|
-
get activeConcurrentCount() {
|
|
111
|
-
return this.activeRequests;
|
|
112
|
-
}
|
|
113
|
-
async snapshot() {
|
|
114
|
-
const snap = {
|
|
115
|
-
modelKey: this.modelKey,
|
|
116
|
-
active: this.activeRequests,
|
|
117
|
-
waitQueueDepth: this.waitQueue.length,
|
|
118
|
-
perMinUsed: 0,
|
|
119
|
-
perDayUsed: 0,
|
|
120
|
-
concurrentLimit: this.concurrentLimit || undefined,
|
|
121
|
-
perMinLimit: this.perMinLimit || undefined,
|
|
122
|
-
perDayLimit: this.perDayLimit || undefined,
|
|
123
|
-
};
|
|
124
|
-
const client = redis_service_1.redis.getClient();
|
|
125
|
-
if (!client)
|
|
126
|
-
return snap;
|
|
127
|
-
const minKey = `ratelimit:${this.modelKey}:min`;
|
|
128
|
-
const dayKey = `ratelimit:${this.modelKey}:day:${utcDateKey()}`;
|
|
129
|
-
try {
|
|
130
|
-
const [minCount, dayCountRaw] = await Promise.all([
|
|
131
|
-
client.zcount(minKey, Date.now() - 60000, "+inf"),
|
|
132
|
-
client.get(dayKey),
|
|
133
|
-
]);
|
|
134
|
-
snap.perMinUsed = minCount;
|
|
135
|
-
snap.perDayUsed = dayCountRaw ? Number(dayCountRaw) : 0;
|
|
136
|
-
}
|
|
137
|
-
catch (err) {
|
|
138
|
-
// best-effort; leave snapshot zeros if Redis blips
|
|
139
|
-
logger_1.logger.warn("distributedRateLimiter: snapshot read failed", {
|
|
140
|
-
modelKey: this.modelKey,
|
|
141
|
-
err: err instanceof Error ? err.stack ?? err.message : String(err),
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
return snap;
|
|
145
|
-
}
|
|
146
|
-
// ── Internals ──────────────────────────────────────────────────────────
|
|
147
|
-
async acquireConcurrent() {
|
|
148
|
-
if (!this.concurrentLimit) {
|
|
149
|
-
this.activeRequests++;
|
|
150
|
-
return;
|
|
151
|
-
}
|
|
152
|
-
while (this.activeRequests >= this.concurrentLimit) {
|
|
153
|
-
// Promise wait queue — woken by releaseConcurrent. Replaces the old
|
|
154
|
-
// 1s setTimeout busy-poll; latency drops from up-to-1s to ~0ms when
|
|
155
|
-
// a slot frees.
|
|
156
|
-
await new Promise((resolve) => this.waitQueue.push(resolve));
|
|
157
|
-
}
|
|
158
|
-
this.activeRequests++;
|
|
159
|
-
}
|
|
160
|
-
releaseConcurrent() {
|
|
161
|
-
if (this.activeRequests > 0) {
|
|
162
|
-
this.activeRequests--;
|
|
163
|
-
}
|
|
164
|
-
const next = this.waitQueue.shift();
|
|
165
|
-
if (next)
|
|
166
|
-
next();
|
|
167
|
-
}
|
|
168
|
-
async consumeRedisGates() {
|
|
169
|
-
if (!this.perMinLimit && !this.perDayLimit)
|
|
170
|
-
return;
|
|
171
|
-
const client = redis_service_1.redis.getClient();
|
|
172
|
-
if (!client) {
|
|
173
|
-
// REDIS_URL unset (local dev with caching off, or a degraded boot).
|
|
174
|
-
// Fail open — a missed gate is better than blocking the entire
|
|
175
|
-
// generation pipeline. The legacy in-memory limiter behaved the
|
|
176
|
-
// same way (no Redis dependency at all).
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
const minKey = `ratelimit:${this.modelKey}:min`;
|
|
180
|
-
const secsTilMidnight = secsUntilMidnight();
|
|
181
|
-
const uniqueId = `${Date.now()}-${crypto_1.default.randomBytes(4).toString("hex")}`;
|
|
182
|
-
while (true) {
|
|
183
|
-
const nowMs = Date.now();
|
|
184
|
-
// Day key resolved per-iteration so a retry across midnight UTC
|
|
185
|
-
// rolls into the new day's counter naturally.
|
|
186
|
-
const dayKey = `ratelimit:${this.modelKey}:day:${utcDateKey()}`;
|
|
187
|
-
let result;
|
|
188
|
-
try {
|
|
189
|
-
result = (await client.eval(CONSUME_SCRIPT, 2, minKey, dayKey, String(nowMs), String(this.perMinLimit), String(this.perDayLimit), String(secsTilMidnight), uniqueId));
|
|
190
|
-
}
|
|
191
|
-
catch (err) {
|
|
192
|
-
// Redis blip — fail open rather than blocking the pipeline. Throttle
|
|
193
|
-
// the Slack-routed error so a sustained Redis outage doesn't fire a
|
|
194
|
-
// ping per request; subsequent failures inside the window log at
|
|
195
|
-
// warn (Console + Loki only).
|
|
196
|
-
const now = Date.now();
|
|
197
|
-
const errMeta = {
|
|
198
|
-
key: `${this.modelKey}`,
|
|
199
|
-
modelKey: this.modelKey,
|
|
200
|
-
err: err instanceof Error ? err.stack ?? err.message : String(err),
|
|
201
|
-
};
|
|
202
|
-
if (now - lastRateLimiterErrorLoggedAt > RATE_LIMITER_ERROR_THROTTLE_MS) {
|
|
203
|
-
lastRateLimiterErrorLoggedAt = now;
|
|
204
|
-
logger_1.logger.error("distributedRateLimiter: Redis EVAL failed, fail-open active", errMeta);
|
|
205
|
-
}
|
|
206
|
-
else {
|
|
207
|
-
logger_1.logger.warn("distributedRateLimiter: Redis EVAL failed, fail-open active (throttled)", errMeta);
|
|
208
|
-
}
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
if (result[0] === 1)
|
|
212
|
-
return;
|
|
213
|
-
const waitMs = Math.max(50, Math.min(1000, result[1]));
|
|
214
|
-
await sleep(waitMs);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
exports.DistributedRateLimiter = DistributedRateLimiter;
|
|
219
|
-
function utcDateKey() {
|
|
220
|
-
// YYYY-MM-DD in UTC — matches the TTL set on first INCR
|
|
221
|
-
return new Date().toISOString().slice(0, 10);
|
|
222
|
-
}
|
|
223
|
-
function secsUntilMidnight() {
|
|
224
|
-
const now = new Date();
|
|
225
|
-
const midnight = new Date(Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate() + 1));
|
|
226
|
-
return Math.ceil((midnight.getTime() - now.getTime()) / 1000);
|
|
227
|
-
}
|
|
228
|
-
function sleep(ms) {
|
|
229
|
-
return new Promise((r) => setTimeout(r, ms));
|
|
230
|
-
}
|
|
231
|
-
// ── Singleton registries ─────────────────────────────────────────────────
|
|
232
|
-
const aiModelLimiters = {};
|
|
233
|
-
const ttsProviderLimiters = {};
|
|
234
|
-
function getAiGenModelRateLimiter(modelKey) {
|
|
235
|
-
if (!aiModelLimiters[modelKey]) {
|
|
236
|
-
const config = aiModels_1.aiModelConfigs[modelKey];
|
|
237
|
-
if (!config) {
|
|
238
|
-
throw new Error(`No model config for model key: ${modelKey}`);
|
|
239
|
-
}
|
|
240
|
-
aiModelLimiters[modelKey] = new DistributedRateLimiter(modelKey, {
|
|
241
|
-
concurrentRequests: config.concurrentRequests,
|
|
242
|
-
requestPerMin: config.requestPerMin,
|
|
243
|
-
requestPerDay: config.requestPerDay,
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
return aiModelLimiters[modelKey];
|
|
247
|
-
}
|
|
248
|
-
function getTtsProviderRateLimiter(provider) {
|
|
249
|
-
if (!ttsProviderLimiters[provider]) {
|
|
250
|
-
const config = ttsModels_1.ttsProviderConfigs[provider];
|
|
251
|
-
if (!config) {
|
|
252
|
-
throw new Error(`No TTS provider config for: ${provider}`);
|
|
253
|
-
}
|
|
254
|
-
ttsProviderLimiters[provider] = new DistributedRateLimiter(`tts:${provider}`, {
|
|
255
|
-
concurrentRequests: config.concurrentRequests,
|
|
256
|
-
requestPerMin: config.requestPerMin,
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
return ttsProviderLimiters[provider];
|
|
260
|
-
}
|
|
261
|
-
/** Snapshot every limiter that has ever been instantiated. Used by the
|
|
262
|
-
* /health/rate-limits endpoint for live ops visibility. */
|
|
263
|
-
async function snapshotAllRateLimiters() {
|
|
264
|
-
const all = [
|
|
265
|
-
...Object.values(aiModelLimiters),
|
|
266
|
-
...Object.values(ttsProviderLimiters),
|
|
267
|
-
];
|
|
268
|
-
return Promise.all(all.map((l) => l.snapshot()));
|
|
269
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/rateLimiter/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./distributedRateLimiter.service"), exports);
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { RedisOptions } from "ioredis";
|
|
2
|
-
/**
|
|
3
|
-
* Hardened shared ioredis options for both RedisService (cache) and
|
|
4
|
-
* BullMQ (queue connections). Both ioredis clients reconnect by default;
|
|
5
|
-
* this just makes it less chatty during prolonged outages, bounds the
|
|
6
|
-
* backoff, and handles READONLY errors during Redis Cloud failovers.
|
|
7
|
-
*
|
|
8
|
-
* - `maxRetriesPerRequest: null` — REQUIRED for BullMQ stability.
|
|
9
|
-
* - `retryStrategy` — exponential 200ms → 10s cap; infinite retries.
|
|
10
|
-
* - `reconnectOnError` — reconnect on READONLY (failover to a replica
|
|
11
|
-
* that has since become primary).
|
|
12
|
-
*/
|
|
13
|
-
export declare const sharedRedisOptions: RedisOptions;
|
|
14
|
-
/**
|
|
15
|
-
* Attach observability + error-dedupe listeners to an ioredis client.
|
|
16
|
-
* Reduces log spam during prolonged outages (e.g. DNS NXDOMAIN, network
|
|
17
|
-
* partition) where ioredis would otherwise emit an `error` every retry.
|
|
18
|
-
*/
|
|
19
|
-
export declare function attachRedisListeners(client: {
|
|
20
|
-
on: (ev: string, fn: (...a: any[]) => void) => void;
|
|
21
|
-
}, label: string): void;
|
|
22
|
-
//# sourceMappingURL=redisOptions.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"redisOptions.d.ts","sourceRoot":"","sources":["../../src/services/redisOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,YAMhC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE;IAAE,EAAE,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;CAAE,EAC/D,KAAK,EAAE,MAAM,GACZ,IAAI,CAwBN"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sharedRedisOptions = void 0;
|
|
4
|
-
exports.attachRedisListeners = attachRedisListeners;
|
|
5
|
-
const logger_1 = require("../utils/logger");
|
|
6
|
-
/**
|
|
7
|
-
* Hardened shared ioredis options for both RedisService (cache) and
|
|
8
|
-
* BullMQ (queue connections). Both ioredis clients reconnect by default;
|
|
9
|
-
* this just makes it less chatty during prolonged outages, bounds the
|
|
10
|
-
* backoff, and handles READONLY errors during Redis Cloud failovers.
|
|
11
|
-
*
|
|
12
|
-
* - `maxRetriesPerRequest: null` — REQUIRED for BullMQ stability.
|
|
13
|
-
* - `retryStrategy` — exponential 200ms → 10s cap; infinite retries.
|
|
14
|
-
* - `reconnectOnError` — reconnect on READONLY (failover to a replica
|
|
15
|
-
* that has since become primary).
|
|
16
|
-
*/
|
|
17
|
-
exports.sharedRedisOptions = {
|
|
18
|
-
maxRetriesPerRequest: null,
|
|
19
|
-
enableReadyCheck: true,
|
|
20
|
-
enableOfflineQueue: true,
|
|
21
|
-
retryStrategy: (times) => Math.min(200 * Math.pow(1.5, times), 10000),
|
|
22
|
-
reconnectOnError: (err) => err.message.includes("READONLY"),
|
|
23
|
-
};
|
|
24
|
-
/**
|
|
25
|
-
* Attach observability + error-dedupe listeners to an ioredis client.
|
|
26
|
-
* Reduces log spam during prolonged outages (e.g. DNS NXDOMAIN, network
|
|
27
|
-
* partition) where ioredis would otherwise emit an `error` every retry.
|
|
28
|
-
*/
|
|
29
|
-
function attachRedisListeners(client, label) {
|
|
30
|
-
let lastErrCode;
|
|
31
|
-
let lastErrAt = 0;
|
|
32
|
-
const ERR_LOG_WINDOW_MS = 60000;
|
|
33
|
-
client.on("connect", () => logger_1.logger.info(`redis connecting`, { label }));
|
|
34
|
-
client.on("ready", () => logger_1.logger.info(`redis ready`, { label }));
|
|
35
|
-
client.on("reconnecting", (delay) => logger_1.logger.info(`redis reconnecting`, { label, delayMs: delay }));
|
|
36
|
-
client.on("end", () => logger_1.logger.info(`redis connection ended`, { label }));
|
|
37
|
-
client.on("close", () => logger_1.logger.info(`redis connection closed`, { label }));
|
|
38
|
-
client.on("error", (err) => {
|
|
39
|
-
const code = err.code ?? err.message;
|
|
40
|
-
const now = Date.now();
|
|
41
|
-
if (code === lastErrCode && now - lastErrAt < ERR_LOG_WINDOW_MS)
|
|
42
|
-
return;
|
|
43
|
-
lastErrCode = code;
|
|
44
|
-
lastErrAt = now;
|
|
45
|
-
logger_1.logger.error("redis: connection error", {
|
|
46
|
-
label,
|
|
47
|
-
code,
|
|
48
|
-
err: err?.stack ?? err?.message ?? String(err),
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { BaseTtsProviderService, ITtsVoiceOption, TtsParams, TtsResult } from "../types";
|
|
2
|
-
/**
|
|
3
|
-
* MiniMax Speech-02-HD (T2A v2). Sync — POST /v1/t2a_v2 returns hex-encoded audio
|
|
4
|
-
* inline (decoded into Buffer; same response shape as music-1.5).
|
|
5
|
-
*/
|
|
6
|
-
export declare class MinimaxTtsService extends BaseTtsProviderService {
|
|
7
|
-
private readonly baseUrl;
|
|
8
|
-
private readonly apiKey;
|
|
9
|
-
constructor();
|
|
10
|
-
generate(params: TtsParams): Promise<TtsResult>;
|
|
11
|
-
getVoices(): ITtsVoiceOption[];
|
|
12
|
-
mapLanguageCode(locale: string): string | undefined;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=minimax.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"minimax.service.d.ts","sourceRoot":"","sources":["../../../../src/services/tts/providers/minimax.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEzF;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,sBAAsB;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IAEpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;;IAU1B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAuDrD,SAAS,IAAI,eAAe,EAAE;IAI9B,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAGpD"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.MinimaxTtsService = void 0;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const minimax_1 = require("../../../globals/ttsModels/providers/minimax");
|
|
9
|
-
const voices_1 = require("../../../globals/ttsModels/voices");
|
|
10
|
-
const types_1 = require("../types");
|
|
11
|
-
/**
|
|
12
|
-
* MiniMax Speech-02-HD (T2A v2). Sync — POST /v1/t2a_v2 returns hex-encoded audio
|
|
13
|
-
* inline (decoded into Buffer; same response shape as music-1.5).
|
|
14
|
-
*/
|
|
15
|
-
class MinimaxTtsService extends types_1.BaseTtsProviderService {
|
|
16
|
-
constructor() {
|
|
17
|
-
super();
|
|
18
|
-
this.baseUrl = "https://api.minimax.io";
|
|
19
|
-
if (!process.env.MINIMAX_ACCESS_KEY) {
|
|
20
|
-
throw new Error("Missing MINIMAX_ACCESS_KEY in environment variables");
|
|
21
|
-
}
|
|
22
|
-
this.apiKey = process.env.MINIMAX_ACCESS_KEY;
|
|
23
|
-
}
|
|
24
|
-
async generate(params) {
|
|
25
|
-
const voiceId = params.voiceId ?? minimax_1.minimaxTtsConfig.defaultVoiceId;
|
|
26
|
-
const body = {
|
|
27
|
-
model: minimax_1.minimaxTtsConfig.modelId,
|
|
28
|
-
text: params.text,
|
|
29
|
-
voice_setting: {
|
|
30
|
-
voice_id: voiceId,
|
|
31
|
-
speed: 1.0,
|
|
32
|
-
vol: 1.0,
|
|
33
|
-
pitch: 0,
|
|
34
|
-
},
|
|
35
|
-
audio_setting: {
|
|
36
|
-
sample_rate: 32000,
|
|
37
|
-
bitrate: 128000,
|
|
38
|
-
format: "mp3",
|
|
39
|
-
channel: 1,
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
const langPair = params.languageCode ? this.mapLanguageCode(params.languageCode) : undefined;
|
|
43
|
-
if (langPair) {
|
|
44
|
-
body.language_boost = langPair;
|
|
45
|
-
}
|
|
46
|
-
const resp = await axios_1.default.post(`${this.baseUrl}/v1/t2a_v2`, body, {
|
|
47
|
-
headers: {
|
|
48
|
-
Authorization: `Bearer ${this.apiKey}`,
|
|
49
|
-
"Content-Type": "application/json",
|
|
50
|
-
},
|
|
51
|
-
timeout: 120000,
|
|
52
|
-
validateStatus: () => true,
|
|
53
|
-
});
|
|
54
|
-
if (resp.status < 200 || resp.status >= 300) {
|
|
55
|
-
throw new Error(`MiniMax TTS ${resp.status}: ${JSON.stringify(resp.data)}`);
|
|
56
|
-
}
|
|
57
|
-
const baseResp = resp.data?.base_resp;
|
|
58
|
-
if (baseResp && baseResp.status_code !== 0) {
|
|
59
|
-
throw new Error(`MiniMax TTS error ${baseResp.status_code}: ${baseResp.status_msg}`);
|
|
60
|
-
}
|
|
61
|
-
const audioHex = resp.data?.data?.audio;
|
|
62
|
-
if (!audioHex) {
|
|
63
|
-
throw new Error("MiniMax TTS returned no audio data");
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
audioBuffer: Buffer.from(audioHex, "hex"),
|
|
67
|
-
mimeType: "audio/mpeg",
|
|
68
|
-
extension: "mp3",
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
getVoices() {
|
|
72
|
-
return voices_1.MINIMAX_VOICES;
|
|
73
|
-
}
|
|
74
|
-
mapLanguageCode(locale) {
|
|
75
|
-
return voices_1.LANG_TO_MINIMAX_CODE[locale.toLowerCase()];
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
exports.MinimaxTtsService = MinimaxTtsService;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { BaseTtsProviderService, ITtsVoiceOption, TtsParams, TtsResult } from "../types";
|
|
2
|
-
/**
|
|
3
|
-
* OpenAI gpt-4o-mini-tts. Sync — POST /v1/audio/speech returns mp3 binary.
|
|
4
|
-
* Note: OpenAI auto-detects language from input text; no language_code field.
|
|
5
|
-
*/
|
|
6
|
-
export declare class OpenaiTtsService extends BaseTtsProviderService {
|
|
7
|
-
private readonly baseUrl;
|
|
8
|
-
private readonly apiKey;
|
|
9
|
-
constructor();
|
|
10
|
-
generate(params: TtsParams): Promise<TtsResult>;
|
|
11
|
-
getVoices(): ITtsVoiceOption[];
|
|
12
|
-
mapLanguageCode(_locale: string): string | undefined;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=openai.service.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openai.service.d.ts","sourceRoot":"","sources":["../../../../src/services/tts/providers/openai.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEzF;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,sBAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IAEvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;;IAU1B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IA8CrD,SAAS,IAAI,eAAe,EAAE;IAI9B,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;CAGrD"}
|