vidspotai-shared 1.0.68 → 1.0.69-dev.0
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 +63 -6
- package/lib/globals/aiModels/enums.d.ts.map +1 -1
- package/lib/globals/aiModels/enums.js +78 -9
- package/lib/globals/aiModels/index.d.ts +2 -30
- package/lib/globals/aiModels/index.d.ts.map +1 -1
- package/lib/globals/aiModels/index.js +7 -35
- package/lib/globals/aiModels/providers/alibaba.d.ts +4 -0
- package/lib/globals/aiModels/providers/alibaba.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/alibaba.js +194 -0
- package/lib/globals/aiModels/providers/bytedance.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/bytedance.js +19 -0
- package/lib/globals/aiModels/providers/elevenlabs.d.ts +14 -0
- package/lib/globals/aiModels/providers/elevenlabs.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/elevenlabs.js +29 -0
- package/lib/globals/aiModels/providers/google.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/google.js +150 -2
- package/lib/globals/aiModels/providers/kling.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/kling.js +280 -37
- package/lib/globals/aiModels/providers/minimax.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/minimax.js +76 -11
- package/lib/globals/aiModels/providers/openai.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/openai.js +90 -6
- package/lib/globals/aiModels/providers/pixverse.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/pixverse.js +111 -29
- package/lib/globals/aiModels/providers/pixverseTemplates.d.ts +36 -0
- package/lib/globals/aiModels/providers/pixverseTemplates.d.ts.map +1 -0
- package/lib/globals/aiModels/providers/pixverseTemplates.js +42 -0
- package/lib/globals/aiModels/providers/runway.d.ts.map +1 -1
- package/lib/globals/aiModels/providers/runway.js +64 -2
- package/lib/globals/aiModels/tierHelpers.d.ts +33 -0
- package/lib/globals/aiModels/tierHelpers.d.ts.map +1 -0
- package/lib/globals/aiModels/tierHelpers.js +109 -0
- package/lib/globals/aiModels/types.d.ts +20 -1
- package/lib/globals/aiModels/types.d.ts.map +1 -1
- package/lib/globals/ttsModels/index.d.ts +2 -0
- package/lib/globals/ttsModels/index.d.ts.map +1 -1
- package/lib/globals/ttsModels/index.js +9 -1
- package/lib/globals/ttsModels/providers/minimax.d.ts +8 -0
- package/lib/globals/ttsModels/providers/minimax.d.ts.map +1 -0
- package/lib/globals/ttsModels/providers/minimax.js +18 -0
- package/lib/globals/ttsModels/providers/openai.d.ts +12 -0
- package/lib/globals/ttsModels/providers/openai.d.ts.map +1 -0
- package/lib/globals/ttsModels/providers/openai.js +22 -0
- 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 +39 -4
- package/lib/globals/ttsModels/voices.d.ts.map +1 -1
- package/lib/globals/ttsModels/voices.js +273 -26
- package/lib/globals/types.d.ts +59 -1
- package/lib/globals/types.d.ts.map +1 -1
- package/lib/globals/types.js +81 -2
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/models/agent.model.d.ts +357 -0
- package/lib/models/agent.model.d.ts.map +1 -0
- package/lib/models/agent.model.js +21 -0
- package/lib/models/cachedAsset.model.d.ts +18 -0
- package/lib/models/cachedAsset.model.d.ts.map +1 -0
- package/lib/models/cachedAsset.model.js +2 -0
- package/lib/models/cachedRawAsset.model.d.ts +20 -0
- package/lib/models/cachedRawAsset.model.d.ts.map +1 -0
- package/lib/models/cachedRawAsset.model.js +2 -0
- package/lib/models/image.model.d.ts +47 -0
- package/lib/models/image.model.d.ts.map +1 -0
- package/lib/models/image.model.js +2 -0
- package/lib/models/index.d.ts +6 -0
- package/lib/models/index.d.ts.map +1 -1
- package/lib/models/index.js +6 -0
- package/lib/models/notification.model.d.ts +25 -0
- package/lib/models/notification.model.d.ts.map +1 -0
- package/lib/models/notification.model.js +2 -0
- package/lib/models/ref.model.d.ts +80 -0
- package/lib/models/ref.model.d.ts.map +1 -0
- package/lib/models/ref.model.js +13 -0
- package/lib/models/share.model.d.ts +29 -0
- package/lib/models/share.model.d.ts.map +1 -0
- package/lib/models/share.model.js +2 -0
- package/lib/models/user.model.d.ts +12 -1
- package/lib/models/user.model.d.ts.map +1 -1
- package/lib/models/video.model.d.ts +120 -8
- package/lib/models/video.model.d.ts.map +1 -1
- package/lib/models/video.model.js +10 -0
- package/lib/schemas/agentPersona.schema.d.ts +10 -0
- package/lib/schemas/agentPersona.schema.d.ts.map +1 -0
- package/lib/schemas/agentPersona.schema.js +11 -0
- package/lib/schemas/agentRunJob.schema.d.ts +105 -0
- package/lib/schemas/agentRunJob.schema.d.ts.map +1 -0
- package/lib/schemas/agentRunJob.schema.js +88 -0
- package/lib/schemas/brandKit.schema.d.ts +113 -0
- package/lib/schemas/brandKit.schema.d.ts.map +1 -0
- package/lib/schemas/brandKit.schema.js +46 -0
- package/lib/schemas/brief.schema.d.ts +263 -0
- package/lib/schemas/brief.schema.d.ts.map +1 -0
- package/lib/schemas/brief.schema.js +157 -0
- package/lib/schemas/index.d.ts +7 -0
- package/lib/schemas/index.d.ts.map +1 -0
- package/lib/schemas/index.js +22 -0
- package/lib/schemas/project.schema.d.ts +1025 -0
- package/lib/schemas/project.schema.d.ts.map +1 -0
- package/lib/schemas/project.schema.js +256 -0
- package/lib/schemas/videoPlan.schema.d.ts +590 -0
- package/lib/schemas/videoPlan.schema.d.ts.map +1 -0
- package/lib/schemas/videoPlan.schema.js +412 -0
- package/lib/services/agent/beatSnap.d.ts +10 -0
- package/lib/services/agent/beatSnap.d.ts.map +1 -0
- package/lib/services/agent/beatSnap.js +128 -0
- package/lib/services/agent/bibleBuilder.d.ts +43 -0
- package/lib/services/agent/bibleBuilder.d.ts.map +1 -0
- package/lib/services/agent/bibleBuilder.js +102 -0
- package/lib/services/agent/bibleImageVision.d.ts +45 -0
- package/lib/services/agent/bibleImageVision.d.ts.map +1 -0
- package/lib/services/agent/bibleImageVision.js +169 -0
- package/lib/services/agent/chatAgent.d.ts +79 -0
- package/lib/services/agent/chatAgent.d.ts.map +1 -0
- package/lib/services/agent/chatAgent.js +136 -0
- package/lib/services/agent/costPreflight.d.ts +61 -0
- package/lib/services/agent/costPreflight.d.ts.map +1 -0
- package/lib/services/agent/costPreflight.js +143 -0
- package/lib/services/agent/critic.d.ts +103 -0
- package/lib/services/agent/critic.d.ts.map +1 -0
- package/lib/services/agent/critic.js +139 -0
- package/lib/services/agent/editClassifier.d.ts +262 -0
- package/lib/services/agent/editClassifier.d.ts.map +1 -0
- package/lib/services/agent/editClassifier.js +186 -0
- package/lib/services/agent/eval/index.d.ts +5 -0
- package/lib/services/agent/eval/index.d.ts.map +1 -0
- package/lib/services/agent/eval/index.js +20 -0
- package/lib/services/agent/eval/judge.d.ts +14 -0
- package/lib/services/agent/eval/judge.d.ts.map +1 -0
- package/lib/services/agent/eval/judge.js +96 -0
- package/lib/services/agent/eval/recorder.d.ts +28 -0
- package/lib/services/agent/eval/recorder.d.ts.map +1 -0
- package/lib/services/agent/eval/recorder.js +100 -0
- package/lib/services/agent/eval/seedBriefs.d.ts +16 -0
- package/lib/services/agent/eval/seedBriefs.d.ts.map +1 -0
- package/lib/services/agent/eval/seedBriefs.js +1188 -0
- package/lib/services/agent/eval/types.d.ts +230 -0
- package/lib/services/agent/eval/types.d.ts.map +1 -0
- package/lib/services/agent/eval/types.js +73 -0
- package/lib/services/agent/executor.d.ts +141 -0
- package/lib/services/agent/executor.d.ts.map +1 -0
- package/lib/services/agent/executor.js +561 -0
- package/lib/services/agent/globalActions.d.ts +49 -0
- package/lib/services/agent/globalActions.d.ts.map +1 -0
- package/lib/services/agent/globalActions.js +328 -0
- package/lib/services/agent/index.d.ts +38 -0
- package/lib/services/agent/index.d.ts.map +1 -0
- package/lib/services/agent/index.js +53 -0
- package/lib/services/agent/llmCaller.d.ts +144 -0
- package/lib/services/agent/llmCaller.d.ts.map +1 -0
- package/lib/services/agent/llmCaller.js +16 -0
- package/lib/services/agent/llmCallerAnthropic.d.ts +90 -0
- package/lib/services/agent/llmCallerAnthropic.d.ts.map +1 -0
- package/lib/services/agent/llmCallerAnthropic.js +255 -0
- package/lib/services/agent/llmCallerGateway.d.ts +61 -0
- package/lib/services/agent/llmCallerGateway.d.ts.map +1 -0
- package/lib/services/agent/llmCallerGateway.js +360 -0
- package/lib/services/agent/llmCallerRegistry.d.ts +6 -0
- package/lib/services/agent/llmCallerRegistry.d.ts.map +1 -0
- package/lib/services/agent/llmCallerRegistry.js +39 -0
- package/lib/services/agent/modelQualityNotes.d.ts +100 -0
- package/lib/services/agent/modelQualityNotes.d.ts.map +1 -0
- package/lib/services/agent/modelQualityNotes.js +248 -0
- package/lib/services/agent/modelRouter.d.ts +41 -0
- package/lib/services/agent/modelRouter.d.ts.map +1 -0
- package/lib/services/agent/modelRouter.js +65 -0
- package/lib/services/agent/musicSelect.d.ts +23 -0
- package/lib/services/agent/musicSelect.d.ts.map +1 -0
- package/lib/services/agent/musicSelect.js +109 -0
- package/lib/services/agent/overlayRenderer.d.ts +67 -0
- package/lib/services/agent/overlayRenderer.d.ts.map +1 -0
- package/lib/services/agent/overlayRenderer.js +253 -0
- package/lib/services/agent/perSceneCritic.d.ts +90 -0
- package/lib/services/agent/perSceneCritic.d.ts.map +1 -0
- package/lib/services/agent/perSceneCritic.js +125 -0
- package/lib/services/agent/personas.d.ts +78 -0
- package/lib/services/agent/personas.d.ts.map +1 -0
- package/lib/services/agent/personas.js +177 -0
- package/lib/services/agent/planDiff.d.ts +76 -0
- package/lib/services/agent/planDiff.d.ts.map +1 -0
- package/lib/services/agent/planDiff.js +182 -0
- package/lib/services/agent/planMutations.d.ts +46 -0
- package/lib/services/agent/planMutations.d.ts.map +1 -0
- package/lib/services/agent/planMutations.js +120 -0
- package/lib/services/agent/planner/Planner.d.ts +107 -0
- package/lib/services/agent/planner/Planner.d.ts.map +1 -0
- package/lib/services/agent/planner/Planner.js +591 -0
- package/lib/services/agent/planner/overlaySanity.d.ts +7 -0
- package/lib/services/agent/planner/overlaySanity.d.ts.map +1 -0
- package/lib/services/agent/planner/overlaySanity.js +86 -0
- package/lib/services/agent/planner/promptSections.d.ts +25 -0
- package/lib/services/agent/planner/promptSections.d.ts.map +1 -0
- package/lib/services/agent/planner/promptSections.js +174 -0
- package/lib/services/agent/planner/repair.d.ts +16 -0
- package/lib/services/agent/planner/repair.d.ts.map +1 -0
- package/lib/services/agent/planner/repair.js +51 -0
- package/lib/services/agent/planner/structuralRules.d.ts +10 -0
- package/lib/services/agent/planner/structuralRules.d.ts.map +1 -0
- package/lib/services/agent/planner/structuralRules.js +111 -0
- package/lib/services/agent/planner/validators.d.ts +65 -0
- package/lib/services/agent/planner/validators.d.ts.map +1 -0
- package/lib/services/agent/planner/validators.js +284 -0
- package/lib/services/agent/planner.d.ts +3 -0
- package/lib/services/agent/planner.d.ts.map +1 -0
- package/lib/services/agent/planner.js +14 -0
- package/lib/services/agent/providerFallback/chains.d.ts +100 -0
- package/lib/services/agent/providerFallback/chains.d.ts.map +1 -0
- package/lib/services/agent/providerFallback/chains.js +198 -0
- package/lib/services/agent/providerFallback/classifier.d.ts +36 -0
- package/lib/services/agent/providerFallback/classifier.d.ts.map +1 -0
- package/lib/services/agent/providerFallback/classifier.js +103 -0
- package/lib/services/agent/providerFallback/index.d.ts +4 -0
- package/lib/services/agent/providerFallback/index.d.ts.map +1 -0
- package/lib/services/agent/providerFallback/index.js +19 -0
- package/lib/services/agent/providerFallback/withFallback.d.ts +60 -0
- package/lib/services/agent/providerFallback/withFallback.d.ts.map +1 -0
- package/lib/services/agent/providerFallback/withFallback.js +93 -0
- package/lib/services/agent/providerTaskCache.d.ts +50 -0
- package/lib/services/agent/providerTaskCache.d.ts.map +1 -0
- package/lib/services/agent/providerTaskCache.js +98 -0
- package/lib/services/agent/qualityGate.d.ts +82 -0
- package/lib/services/agent/qualityGate.d.ts.map +1 -0
- package/lib/services/agent/qualityGate.js +232 -0
- package/lib/services/agent/referenceImageRenderer.d.ts +37 -0
- package/lib/services/agent/referenceImageRenderer.d.ts.map +1 -0
- package/lib/services/agent/referenceImageRenderer.js +92 -0
- package/lib/services/agent/regenCore.d.ts +60 -0
- package/lib/services/agent/regenCore.d.ts.map +1 -0
- package/lib/services/agent/regenCore.js +487 -0
- package/lib/services/agent/runHelpers.d.ts +44 -0
- package/lib/services/agent/runHelpers.d.ts.map +1 -0
- package/lib/services/agent/runHelpers.js +196 -0
- package/lib/services/agent/sceneLayoutVision.d.ts +90 -0
- package/lib/services/agent/sceneLayoutVision.d.ts.map +1 -0
- package/lib/services/agent/sceneLayoutVision.js +212 -0
- package/lib/services/agent/stitchedVideoCritic.d.ts +136 -0
- package/lib/services/agent/stitchedVideoCritic.d.ts.map +1 -0
- package/lib/services/agent/stitchedVideoCritic.gemini.d.ts +26 -0
- package/lib/services/agent/stitchedVideoCritic.gemini.d.ts.map +1 -0
- package/lib/services/agent/stitchedVideoCritic.gemini.js +198 -0
- package/lib/services/agent/stitchedVideoCritic.js +162 -0
- package/lib/services/agent/taskPoller.d.ts +65 -0
- package/lib/services/agent/taskPoller.d.ts.map +1 -0
- package/lib/services/agent/taskPoller.js +176 -0
- package/lib/services/agent/textOverlayStyles.d.ts +60 -0
- package/lib/services/agent/textOverlayStyles.d.ts.map +1 -0
- package/lib/services/agent/textOverlayStyles.js +174 -0
- package/lib/services/agent/toolRegistry.d.ts +73 -0
- package/lib/services/agent/toolRegistry.d.ts.map +1 -0
- package/lib/services/agent/toolRegistry.js +95 -0
- package/lib/services/agent/tools/analyzeReference.tool.d.ts +36 -0
- package/lib/services/agent/tools/analyzeReference.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/analyzeReference.tool.js +44 -0
- package/lib/services/agent/tools/animateImage.tool.d.ts +24 -0
- package/lib/services/agent/tools/animateImage.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/animateImage.tool.js +115 -0
- package/lib/services/agent/tools/animateImageWithMotionBrush.tool.d.ts +32 -0
- package/lib/services/agent/tools/animateImageWithMotionBrush.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/animateImageWithMotionBrush.tool.js +135 -0
- package/lib/services/agent/tools/composeScene.tool.d.ts +978 -0
- package/lib/services/agent/tools/composeScene.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/composeScene.tool.js +90 -0
- package/lib/services/agent/tools/estimateCost.tool.d.ts +352 -0
- package/lib/services/agent/tools/estimateCost.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/estimateCost.tool.js +62 -0
- package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts +32 -0
- package/lib/services/agent/tools/generateAvatarVideo.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/generateAvatarVideo.tool.js +143 -0
- package/lib/services/agent/tools/generateCaptions.tool.d.ts +42 -0
- package/lib/services/agent/tools/generateCaptions.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/generateCaptions.tool.js +196 -0
- package/lib/services/agent/tools/generateImage.tool.d.ts +74 -0
- package/lib/services/agent/tools/generateImage.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/generateImage.tool.js +206 -0
- package/lib/services/agent/tools/generateVideo.tool.d.ts +31 -0
- package/lib/services/agent/tools/generateVideo.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/generateVideo.tool.js +153 -0
- package/lib/services/agent/tools/generateVoiceover.tool.d.ts +44 -0
- package/lib/services/agent/tools/generateVoiceover.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/generateVoiceover.tool.js +206 -0
- package/lib/services/agent/tools/index.d.ts +20 -0
- package/lib/services/agent/tools/index.d.ts.map +1 -0
- package/lib/services/agent/tools/index.js +35 -0
- package/lib/services/agent/tools/planVideo.tool.d.ts +343 -0
- package/lib/services/agent/tools/planVideo.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/planVideo.tool.js +46 -0
- package/lib/services/agent/tools/render.tool.d.ts +367 -0
- package/lib/services/agent/tools/render.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/render.tool.js +48 -0
- package/lib/services/agent/tools/searchMusic.tool.d.ts +49 -0
- package/lib/services/agent/tools/searchMusic.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/searchMusic.tool.js +74 -0
- package/lib/services/agent/tools/searchStock.tool.d.ts +41 -0
- package/lib/services/agent/tools/searchStock.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/searchStock.tool.js +314 -0
- package/lib/services/agent/tools/searchUserLibrary.tool.d.ts +59 -0
- package/lib/services/agent/tools/searchUserLibrary.tool.d.ts.map +1 -0
- package/lib/services/agent/tools/searchUserLibrary.tool.js +58 -0
- package/lib/services/agent/ttsDuration.d.ts +29 -0
- package/lib/services/agent/ttsDuration.d.ts.map +1 -0
- package/lib/services/agent/ttsDuration.js +60 -0
- package/lib/services/aiGen/aiGenFactory.service.d.ts +21 -1
- package/lib/services/aiGen/aiGenFactory.service.d.ts.map +1 -1
- package/lib/services/aiGen/aiGenFactory.service.js +84 -21
- package/lib/services/aiGen/canonicalAdapters/cameraControl.types.d.ts +31 -0
- package/lib/services/aiGen/canonicalAdapters/cameraControl.types.d.ts.map +1 -0
- package/lib/services/aiGen/canonicalAdapters/cameraControl.types.js +2 -0
- package/lib/services/aiGen/canonicalAdapters/index.d.ts +3 -0
- package/lib/services/aiGen/canonicalAdapters/index.d.ts.map +1 -0
- package/lib/services/aiGen/canonicalAdapters/index.js +18 -0
- package/lib/services/aiGen/canonicalAdapters/multiShot.types.d.ts +23 -0
- package/lib/services/aiGen/canonicalAdapters/multiShot.types.d.ts.map +1 -0
- package/lib/services/aiGen/canonicalAdapters/multiShot.types.js +12 -0
- package/lib/services/aiGen/helpers.d.ts.map +1 -1
- package/lib/services/aiGen/helpers.js +10 -0
- package/lib/services/aiGen/providers/alibaba/alibaba.d.ts +14 -3
- package/lib/services/aiGen/providers/alibaba/alibaba.d.ts.map +1 -1
- package/lib/services/aiGen/providers/alibaba/alibaba.js +155 -22
- package/lib/services/aiGen/providers/baseAiGenProvider.service.d.ts +22 -4
- package/lib/services/aiGen/providers/baseAiGenProvider.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/baseAiGenProvider.service.js +32 -0
- package/lib/services/aiGen/providers/bytedance/bytedance.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/bytedance/bytedance.service.js +13 -19
- package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.d.ts +18 -0
- package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/elevenlabs/elevenlabs.service.js +102 -0
- package/lib/services/aiGen/providers/fal/falImage.service.d.ts +15 -0
- package/lib/services/aiGen/providers/fal/falImage.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/fal/falImage.service.js +141 -0
- package/lib/services/aiGen/providers/fal/index.d.ts +2 -0
- package/lib/services/aiGen/providers/fal/index.d.ts.map +1 -0
- package/lib/services/aiGen/providers/fal/index.js +17 -0
- package/lib/services/aiGen/providers/google/google.service.d.ts +11 -2
- package/lib/services/aiGen/providers/google/google.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/google/google.service.js +245 -28
- package/lib/services/aiGen/providers/index.d.ts +3 -0
- package/lib/services/aiGen/providers/index.d.ts.map +1 -1
- package/lib/services/aiGen/providers/index.js +3 -0
- package/lib/services/aiGen/providers/kling/cameraAdapter.d.ts +4 -0
- package/lib/services/aiGen/providers/kling/cameraAdapter.d.ts.map +1 -0
- package/lib/services/aiGen/providers/kling/cameraAdapter.js +53 -0
- package/lib/services/aiGen/providers/kling/index.d.ts +1 -0
- package/lib/services/aiGen/providers/kling/index.d.ts.map +1 -1
- package/lib/services/aiGen/providers/kling/index.js +1 -0
- package/lib/services/aiGen/providers/kling/kling.service.d.ts +12 -1
- package/lib/services/aiGen/providers/kling/kling.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/kling/kling.service.js +357 -26
- package/lib/services/aiGen/providers/kling/klingImage.service.d.ts +21 -0
- package/lib/services/aiGen/providers/kling/klingImage.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/kling/klingImage.service.js +208 -0
- package/lib/services/aiGen/providers/kling/types.d.ts +105 -0
- package/lib/services/aiGen/providers/kling/types.d.ts.map +1 -1
- package/lib/services/aiGen/providers/minimax/minimax.service.d.ts +15 -2
- package/lib/services/aiGen/providers/minimax/minimax.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/minimax/minimax.service.js +128 -5
- package/lib/services/aiGen/providers/minimax/types.d.ts +10 -1
- package/lib/services/aiGen/providers/minimax/types.d.ts.map +1 -1
- package/lib/services/aiGen/providers/openai/openai.service.d.ts +8 -2
- package/lib/services/aiGen/providers/openai/openai.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/openai/openai.service.js +184 -7
- package/lib/services/aiGen/providers/pexels/index.d.ts +2 -0
- package/lib/services/aiGen/providers/pexels/index.d.ts.map +1 -0
- package/lib/services/aiGen/providers/{azure → pexels}/index.js +1 -1
- package/lib/services/aiGen/providers/pexels/pexels.service.d.ts +11 -0
- package/lib/services/aiGen/providers/pexels/pexels.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/pexels/pexels.service.js +150 -0
- package/lib/services/aiGen/providers/pixabay/index.d.ts +2 -0
- package/lib/services/aiGen/providers/pixabay/index.d.ts.map +1 -0
- package/lib/services/aiGen/providers/pixabay/index.js +17 -0
- package/lib/services/aiGen/providers/pixabay/pixabay.service.d.ts +12 -0
- package/lib/services/aiGen/providers/pixabay/pixabay.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/pixabay/pixabay.service.js +156 -0
- package/lib/services/aiGen/providers/pixverse/pixverse.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/pixverse/pixverse.service.js +125 -2
- package/lib/services/aiGen/providers/runway/cameraAdapter.d.ts +3 -0
- package/lib/services/aiGen/providers/runway/cameraAdapter.d.ts.map +1 -0
- package/lib/services/aiGen/providers/runway/cameraAdapter.js +46 -0
- package/lib/services/aiGen/providers/runway/runway.service.d.ts +12 -2
- package/lib/services/aiGen/providers/runway/runway.service.d.ts.map +1 -1
- package/lib/services/aiGen/providers/runway/runway.service.js +224 -21
- package/lib/services/aiGen/providers/types.d.ts +263 -6
- package/lib/services/aiGen/providers/types.d.ts.map +1 -1
- package/lib/services/aiGen/providers/unsplash/index.d.ts +2 -0
- package/lib/services/aiGen/providers/unsplash/index.d.ts.map +1 -0
- package/lib/services/aiGen/providers/unsplash/index.js +17 -0
- package/lib/services/aiGen/providers/unsplash/unsplash.service.d.ts +16 -0
- package/lib/services/aiGen/providers/unsplash/unsplash.service.d.ts.map +1 -0
- package/lib/services/aiGen/providers/unsplash/unsplash.service.js +131 -0
- package/lib/services/analytics.service.js +2 -4
- package/lib/services/apiUsageCounter.service.d.ts +20 -0
- package/lib/services/apiUsageCounter.service.d.ts.map +1 -0
- package/lib/services/apiUsageCounter.service.js +84 -0
- package/lib/services/asr/assemblyai.service.d.ts +72 -0
- package/lib/services/asr/assemblyai.service.d.ts.map +1 -0
- package/lib/services/asr/assemblyai.service.js +89 -0
- package/lib/services/asr/index.d.ts +3 -0
- package/lib/services/asr/index.d.ts.map +1 -0
- package/lib/services/asr/index.js +18 -0
- package/lib/services/asr/whisper.service.d.ts +18 -0
- package/lib/services/asr/whisper.service.d.ts.map +1 -0
- package/lib/services/asr/whisper.service.js +151 -0
- package/lib/services/assetCache.service.d.ts +54 -0
- package/lib/services/assetCache.service.d.ts.map +1 -0
- package/lib/services/assetCache.service.js +109 -0
- package/lib/services/audioAnalysis/index.d.ts +2 -0
- package/lib/services/audioAnalysis/index.d.ts.map +1 -0
- package/lib/services/audioAnalysis/index.js +17 -0
- package/lib/services/audioAnalysis/onsetDetection.service.d.ts +50 -0
- package/lib/services/audioAnalysis/onsetDetection.service.d.ts.map +1 -0
- package/lib/services/audioAnalysis/onsetDetection.service.js +140 -0
- package/lib/services/bullmq.service.d.ts +6 -1
- package/lib/services/bullmq.service.d.ts.map +1 -1
- package/lib/services/bullmq.service.js +62 -14
- package/lib/services/credit.service.d.ts.map +1 -1
- package/lib/services/credit.service.js +45 -7
- package/lib/services/credits/pricing.d.ts +58 -0
- package/lib/services/credits/pricing.d.ts.map +1 -0
- package/lib/services/credits/pricing.js +111 -0
- package/lib/services/editor/designToProject.d.ts +75 -0
- package/lib/services/editor/designToProject.d.ts.map +1 -0
- package/lib/services/editor/designToProject.js +295 -0
- package/lib/services/editor/planToProject.d.ts +84 -0
- package/lib/services/editor/planToProject.d.ts.map +1 -0
- package/lib/services/editor/planToProject.js +395 -0
- package/lib/services/editor/projectToDesign.d.ts +4 -0
- package/lib/services/editor/projectToDesign.d.ts.map +1 -0
- package/lib/services/editor/projectToDesign.js +186 -0
- package/lib/services/firestore.service.d.ts +17 -0
- package/lib/services/firestore.service.d.ts.map +1 -1
- package/lib/services/firestore.service.js +30 -0
- package/lib/services/gcp/index.d.ts +1 -0
- package/lib/services/gcp/index.d.ts.map +1 -1
- package/lib/services/gcp/index.js +1 -0
- package/lib/services/gcp/uploadAudioBuffer.d.ts +13 -0
- package/lib/services/gcp/uploadAudioBuffer.d.ts.map +1 -0
- package/lib/services/gcp/uploadAudioBuffer.js +28 -0
- package/lib/services/index.d.ts +13 -0
- package/lib/services/index.d.ts.map +1 -1
- package/lib/services/index.js +13 -0
- package/lib/services/musicGen/index.d.ts +6 -0
- package/lib/services/musicGen/index.d.ts.map +1 -0
- package/lib/services/musicGen/index.js +26 -0
- package/lib/services/musicGen/musicSearchFactory.service.d.ts +14 -0
- package/lib/services/musicGen/musicSearchFactory.service.d.ts.map +1 -0
- package/lib/services/musicGen/musicSearchFactory.service.js +59 -0
- package/lib/services/musicGen/providers/curated.service.d.ts +24 -0
- package/lib/services/musicGen/providers/curated.service.d.ts.map +1 -0
- package/lib/services/musicGen/providers/curated.service.js +173 -0
- package/lib/services/musicGen/providers/jamendo.service.d.ts +8 -0
- package/lib/services/musicGen/providers/jamendo.service.d.ts.map +1 -0
- package/lib/services/musicGen/providers/jamendo.service.js +113 -0
- package/lib/services/musicGen/providers/mubert.service.d.ts +10 -0
- package/lib/services/musicGen/providers/mubert.service.d.ts.map +1 -0
- package/lib/services/musicGen/providers/mubert.service.js +128 -0
- package/lib/services/musicGen/types.d.ts +46 -0
- package/lib/services/musicGen/types.d.ts.map +1 -0
- package/lib/services/musicGen/types.js +10 -0
- package/lib/services/notification.service.d.ts +22 -0
- package/lib/services/notification.service.d.ts.map +1 -0
- package/lib/services/notification.service.js +76 -0
- package/lib/services/rateLimiter/distributedRateLimiter.service.d.ts +78 -0
- package/lib/services/rateLimiter/distributedRateLimiter.service.d.ts.map +1 -0
- package/lib/services/rateLimiter/distributedRateLimiter.service.js +269 -0
- package/lib/services/rateLimiter/index.d.ts +2 -0
- package/lib/services/rateLimiter/index.d.ts.map +1 -0
- package/lib/services/rateLimiter/index.js +17 -0
- package/lib/services/redis.service.d.ts +9 -0
- package/lib/services/redis.service.d.ts.map +1 -1
- package/lib/services/redis.service.js +20 -11
- package/lib/services/redisOptions.d.ts +22 -0
- package/lib/services/redisOptions.d.ts.map +1 -0
- package/lib/services/redisOptions.js +51 -0
- package/lib/services/tts/index.d.ts +2 -0
- package/lib/services/tts/index.d.ts.map +1 -1
- package/lib/services/tts/index.js +2 -0
- package/lib/services/tts/providers/elevenlabs.service.d.ts.map +1 -1
- package/lib/services/tts/providers/elevenlabs.service.js +91 -24
- package/lib/services/tts/providers/minimax.service.d.ts +14 -0
- package/lib/services/tts/providers/minimax.service.d.ts.map +1 -0
- package/lib/services/tts/providers/minimax.service.js +78 -0
- package/lib/services/tts/providers/openai.service.d.ts +14 -0
- package/lib/services/tts/providers/openai.service.d.ts.map +1 -0
- package/lib/services/tts/providers/openai.service.js +73 -0
- package/lib/services/tts/ttsFactory.service.d.ts.map +1 -1
- package/lib/services/tts/ttsFactory.service.js +6 -0
- package/lib/services/tts/types.d.ts +33 -0
- package/lib/services/tts/types.d.ts.map +1 -1
- package/lib/utils/errors.d.ts +8 -0
- package/lib/utils/errors.d.ts.map +1 -1
- package/lib/utils/errors.js +8 -0
- package/lib/utils/helpers.d.ts +13 -0
- package/lib/utils/helpers.d.ts.map +1 -1
- package/lib/utils/helpers.js +48 -11
- package/lib/utils/logger.d.ts.map +1 -1
- package/lib/utils/logger.js +37 -1
- package/package.json +5 -1
- package/lib/services/aiGen/providers/azure/azure.service.d.ts +0 -14
- package/lib/services/aiGen/providers/azure/azure.service.d.ts.map +0 -1
- package/lib/services/aiGen/providers/azure/azure.service.js +0 -108
- package/lib/services/aiGen/providers/azure/index.d.ts +0 -2
- package/lib/services/aiGen/providers/azure/index.d.ts.map +0 -1
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GatewayLlmCaller = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
/**
|
|
6
|
+
* Marks a transient error that should trigger HTTP retry (and, when exhausted,
|
|
7
|
+
* model fallback). Non-transient errors (4xx other than 408/429, schema
|
|
8
|
+
* validation, malformed JSON) are NOT wrapped and propagate immediately.
|
|
9
|
+
*/
|
|
10
|
+
class TransientLlmError extends Error {
|
|
11
|
+
constructor(message, cause) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.cause = cause;
|
|
14
|
+
this.name = "TransientLlmError";
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const TRANSIENT_HTTP_STATUSES = new Set([408, 425, 429, 500, 502, 503, 504]);
|
|
18
|
+
function isTransientNetworkError(err) {
|
|
19
|
+
if (!err || typeof err !== "object")
|
|
20
|
+
return false;
|
|
21
|
+
const e = err;
|
|
22
|
+
const code = e.code ?? e.cause?.code;
|
|
23
|
+
if (code && /^(ECONNRESET|ECONNREFUSED|ETIMEDOUT|EAI_AGAIN|EPIPE|UND_ERR_.*)$/.test(code)) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
// Our own per-request timeout (ctrl.abort() in postOnce / structuredStream)
|
|
27
|
+
// surfaces as AbortError "This operation was aborted". Treat as transient so
|
|
28
|
+
// the retry loop (and then the fallback model) gets a chance — otherwise a
|
|
29
|
+
// single slow Gemini Flash vision call sinks the entire critic stage with
|
|
30
|
+
// no recovery.
|
|
31
|
+
if (e.name === "AbortError")
|
|
32
|
+
return true;
|
|
33
|
+
const msg = String(e.message ?? "");
|
|
34
|
+
return /fetch failed|socket hang up|other side closed|network|timeout|operation was aborted/i.test(msg);
|
|
35
|
+
}
|
|
36
|
+
class GatewayLlmCaller {
|
|
37
|
+
constructor(cfg) {
|
|
38
|
+
this.cfg = cfg;
|
|
39
|
+
this.fetchImpl = cfg.fetchImpl ?? fetch;
|
|
40
|
+
this.timeoutMs = cfg.timeoutMs ?? 60000;
|
|
41
|
+
this.maxRetries = cfg.maxRetries ?? 3;
|
|
42
|
+
this.retryBaseMs = cfg.retryBaseMs ?? 250;
|
|
43
|
+
}
|
|
44
|
+
async chat(req) {
|
|
45
|
+
const attempted = [];
|
|
46
|
+
const run = async (model) => {
|
|
47
|
+
attempted.push(model);
|
|
48
|
+
const messages = await Promise.all(req.messages.map((m) => this.encodeMessage(m)));
|
|
49
|
+
const raw = await this.postWithRetry({
|
|
50
|
+
model: this.modelId(model),
|
|
51
|
+
messages,
|
|
52
|
+
temperature: req.temperature,
|
|
53
|
+
max_tokens: req.maxTokens,
|
|
54
|
+
stop: req.stop,
|
|
55
|
+
});
|
|
56
|
+
const text = raw.choices?.[0]?.message?.content ?? "";
|
|
57
|
+
return {
|
|
58
|
+
text: typeof text === "string" ? text : JSON.stringify(text),
|
|
59
|
+
usage: this.usage(raw),
|
|
60
|
+
requestId: raw.id,
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
try {
|
|
64
|
+
const out = await run(req.model);
|
|
65
|
+
return { ...out, attemptedModels: attempted, usedFallback: false };
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
if (req.fallbackModel && err instanceof TransientLlmError) {
|
|
69
|
+
const out = await run(req.fallbackModel);
|
|
70
|
+
return { ...out, attemptedModels: attempted, usedFallback: true };
|
|
71
|
+
}
|
|
72
|
+
throw err;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async structured(req) {
|
|
76
|
+
const attempted = [];
|
|
77
|
+
const jsonSchema = zod_1.z.toJSONSchema(req.schema, { target: "draft-7" });
|
|
78
|
+
const run = async (model) => {
|
|
79
|
+
attempted.push(model);
|
|
80
|
+
const messages = await Promise.all(req.messages.map((m) => this.encodeMessage(m)));
|
|
81
|
+
const raw = await this.postWithRetry({
|
|
82
|
+
model: this.modelId(model),
|
|
83
|
+
messages,
|
|
84
|
+
temperature: req.temperature,
|
|
85
|
+
max_tokens: req.maxTokens,
|
|
86
|
+
response_format: {
|
|
87
|
+
type: "json_schema",
|
|
88
|
+
json_schema: {
|
|
89
|
+
name: req.schemaName,
|
|
90
|
+
schema: jsonSchema,
|
|
91
|
+
strict: true,
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
const txt = raw.choices?.[0]?.message?.content ?? "";
|
|
96
|
+
if (!txt || typeof txt !== "string") {
|
|
97
|
+
// Empty body from the model is not retryable across providers —
|
|
98
|
+
// surface immediately; planner-level retry can re-prompt.
|
|
99
|
+
throw new Error(`GatewayLlmCaller.structured: empty response for schema ${req.schemaName}`);
|
|
100
|
+
}
|
|
101
|
+
let parsed;
|
|
102
|
+
try {
|
|
103
|
+
parsed = JSON.parse(txt);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
throw new Error(`GatewayLlmCaller.structured: model returned non-JSON for schema ${req.schemaName}: ${txt.slice(0, 200)}`);
|
|
107
|
+
}
|
|
108
|
+
const result = req.schema.safeParse(parsed);
|
|
109
|
+
if (!result.success) {
|
|
110
|
+
throw new Error(`GatewayLlmCaller.structured: schema validation failed for ${req.schemaName}: ${result.error.message}`);
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
data: result.data,
|
|
114
|
+
usage: this.usage(raw),
|
|
115
|
+
requestId: raw.id,
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
try {
|
|
119
|
+
const out = await run(req.model);
|
|
120
|
+
return { ...out, attemptedModels: attempted, usedFallback: false };
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
if (req.fallbackModel && err instanceof TransientLlmError) {
|
|
124
|
+
const out = await run(req.fallbackModel);
|
|
125
|
+
return { ...out, attemptedModels: attempted, usedFallback: true };
|
|
126
|
+
}
|
|
127
|
+
throw err;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
structuredStream(req) {
|
|
131
|
+
// Streaming: fall back is NOT applied mid-stream (would confuse UI
|
|
132
|
+
// chunks). Transport retry IS applied on the initial connect; once
|
|
133
|
+
// bytes start flowing, a mid-stream drop propagates as an error and
|
|
134
|
+
// the caller (planner) handles it via its own retry loop.
|
|
135
|
+
let resolveResult;
|
|
136
|
+
let rejectResult;
|
|
137
|
+
const result = new Promise((resolve, reject) => {
|
|
138
|
+
resolveResult = resolve;
|
|
139
|
+
rejectResult = reject;
|
|
140
|
+
});
|
|
141
|
+
const self = this;
|
|
142
|
+
const tokens = {
|
|
143
|
+
[Symbol.asyncIterator]() {
|
|
144
|
+
return self.createStreamingIterator(req, resolveResult, rejectResult);
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
return { tokens, result };
|
|
148
|
+
}
|
|
149
|
+
async *createStreamingIterator(req, resolveResult, rejectResult) {
|
|
150
|
+
const jsonSchema = zod_1.z.toJSONSchema(req.schema, { target: "draft-7" });
|
|
151
|
+
const messages = await Promise.all(req.messages.map((m) => this.encodeMessage(m)));
|
|
152
|
+
const ctrl = new AbortController();
|
|
153
|
+
const t = setTimeout(() => ctrl.abort(), this.timeoutMs);
|
|
154
|
+
let accumulated = "";
|
|
155
|
+
let requestId;
|
|
156
|
+
let usage;
|
|
157
|
+
try {
|
|
158
|
+
// Connect attempt with retry on transient connect failures (pre-stream).
|
|
159
|
+
const res = await this.withRetry(() => this.fetchImpl(`${this.cfg.baseUrl.replace(/\/$/, "")}/chat/completions`, {
|
|
160
|
+
method: "POST",
|
|
161
|
+
headers: {
|
|
162
|
+
"content-type": "application/json",
|
|
163
|
+
authorization: `Bearer ${this.cfg.apiKey}`,
|
|
164
|
+
},
|
|
165
|
+
body: JSON.stringify({
|
|
166
|
+
model: this.modelId(req.model),
|
|
167
|
+
messages,
|
|
168
|
+
temperature: req.temperature,
|
|
169
|
+
max_tokens: req.maxTokens,
|
|
170
|
+
stream: true,
|
|
171
|
+
response_format: {
|
|
172
|
+
type: "json_schema",
|
|
173
|
+
json_schema: {
|
|
174
|
+
name: req.schemaName,
|
|
175
|
+
schema: jsonSchema,
|
|
176
|
+
strict: true,
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
}),
|
|
180
|
+
signal: ctrl.signal,
|
|
181
|
+
}).then((r) => {
|
|
182
|
+
if (!r.ok && TRANSIENT_HTTP_STATUSES.has(r.status)) {
|
|
183
|
+
throw new TransientLlmError(`GatewayLlmCaller.structuredStream: ${r.status} ${r.statusText}`);
|
|
184
|
+
}
|
|
185
|
+
return r;
|
|
186
|
+
}));
|
|
187
|
+
if (!res.ok || !res.body) {
|
|
188
|
+
const text = await res.text().catch(() => "");
|
|
189
|
+
const err = new Error(`GatewayLlmCaller.structuredStream: ${res.status} ${res.statusText} — ${text.slice(0, 500)}`);
|
|
190
|
+
rejectResult(err);
|
|
191
|
+
throw err;
|
|
192
|
+
}
|
|
193
|
+
const reader = res.body.getReader();
|
|
194
|
+
const decoder = new TextDecoder();
|
|
195
|
+
let buf = "";
|
|
196
|
+
while (true) {
|
|
197
|
+
const { value, done } = await reader.read();
|
|
198
|
+
if (done)
|
|
199
|
+
break;
|
|
200
|
+
buf += decoder.decode(value, { stream: true });
|
|
201
|
+
let nl;
|
|
202
|
+
while ((nl = buf.indexOf("\n")) !== -1) {
|
|
203
|
+
const line = buf.slice(0, nl).trim();
|
|
204
|
+
buf = buf.slice(nl + 1);
|
|
205
|
+
if (!line || !line.startsWith("data:"))
|
|
206
|
+
continue;
|
|
207
|
+
const payload = line.slice(5).trim();
|
|
208
|
+
if (payload === "[DONE]")
|
|
209
|
+
break;
|
|
210
|
+
try {
|
|
211
|
+
const obj = JSON.parse(payload);
|
|
212
|
+
if (obj.id)
|
|
213
|
+
requestId = obj.id;
|
|
214
|
+
if (obj.usage) {
|
|
215
|
+
usage = {
|
|
216
|
+
promptTokens: obj.usage.prompt_tokens,
|
|
217
|
+
completionTokens: obj.usage.completion_tokens,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
const delta = obj.choices?.[0]?.delta?.content ?? "";
|
|
221
|
+
if (delta) {
|
|
222
|
+
accumulated += delta;
|
|
223
|
+
yield delta;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
// skip malformed line
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
let parsed;
|
|
232
|
+
try {
|
|
233
|
+
parsed = JSON.parse(accumulated);
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
const err = new Error(`GatewayLlmCaller.structuredStream: model returned non-JSON for ${req.schemaName}: ${accumulated.slice(0, 200)}`);
|
|
237
|
+
rejectResult(err);
|
|
238
|
+
throw err;
|
|
239
|
+
}
|
|
240
|
+
const validated = req.schema.safeParse(parsed);
|
|
241
|
+
if (!validated.success) {
|
|
242
|
+
const err = new Error(`GatewayLlmCaller.structuredStream: schema validation failed for ${req.schemaName}: ${validated.error.message}`);
|
|
243
|
+
rejectResult(err);
|
|
244
|
+
throw err;
|
|
245
|
+
}
|
|
246
|
+
resolveResult({
|
|
247
|
+
data: validated.data,
|
|
248
|
+
usage,
|
|
249
|
+
requestId,
|
|
250
|
+
attemptedModels: [req.model],
|
|
251
|
+
usedFallback: false,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
catch (e) {
|
|
255
|
+
rejectResult(e);
|
|
256
|
+
throw e;
|
|
257
|
+
}
|
|
258
|
+
finally {
|
|
259
|
+
clearTimeout(t);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
modelId(m) {
|
|
263
|
+
return `${m.provider}/${m.modelId}`;
|
|
264
|
+
}
|
|
265
|
+
async encodeMessage(m) {
|
|
266
|
+
if (!m.imageUrls?.length) {
|
|
267
|
+
return { role: m.role, content: m.content };
|
|
268
|
+
}
|
|
269
|
+
// Fetch + base64-encode each URL into a data URI. The gateway's Anthropic
|
|
270
|
+
// translator rejects raw https URLs ("URL sources are not supported"); data
|
|
271
|
+
// URIs round-trip through every provider's OpenAI-compat shim correctly.
|
|
272
|
+
const dataUris = await Promise.all(m.imageUrls.map((u) => this.toDataUri(u)));
|
|
273
|
+
return {
|
|
274
|
+
role: m.role,
|
|
275
|
+
content: [
|
|
276
|
+
{ type: "text", text: m.content },
|
|
277
|
+
...dataUris.map((url) => ({ type: "image_url", image_url: { url } })),
|
|
278
|
+
],
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
async toDataUri(url) {
|
|
282
|
+
if (url.startsWith("data:"))
|
|
283
|
+
return url;
|
|
284
|
+
const res = await this.fetchImpl(url);
|
|
285
|
+
if (!res.ok) {
|
|
286
|
+
throw new Error(`GatewayLlmCaller.toDataUri: ${res.status} ${res.statusText} fetching ${url}`);
|
|
287
|
+
}
|
|
288
|
+
const contentType = res.headers.get("content-type")?.split(";")[0]?.trim() || "image/jpeg";
|
|
289
|
+
const buf = Buffer.from(await res.arrayBuffer());
|
|
290
|
+
return `data:${contentType};base64,${buf.toString("base64")}`;
|
|
291
|
+
}
|
|
292
|
+
usage(raw) {
|
|
293
|
+
if (!raw.usage)
|
|
294
|
+
return undefined;
|
|
295
|
+
return {
|
|
296
|
+
promptTokens: raw.usage.prompt_tokens,
|
|
297
|
+
completionTokens: raw.usage.completion_tokens,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* POST /chat/completions with transient-error retry (F1).
|
|
302
|
+
* Throws TransientLlmError after exhausting retries on transient failures —
|
|
303
|
+
* caller catches it to trigger model fallback (F2). Non-transient errors
|
|
304
|
+
* (4xx other than 408/425/429, malformed responses) propagate as plain Error.
|
|
305
|
+
*/
|
|
306
|
+
async postWithRetry(body) {
|
|
307
|
+
return this.withRetry(() => this.postOnce(body));
|
|
308
|
+
}
|
|
309
|
+
async withRetry(fn) {
|
|
310
|
+
let lastErr;
|
|
311
|
+
for (let attempt = 0; attempt < this.maxRetries; attempt++) {
|
|
312
|
+
try {
|
|
313
|
+
return await fn();
|
|
314
|
+
}
|
|
315
|
+
catch (err) {
|
|
316
|
+
lastErr = err;
|
|
317
|
+
const transient = err instanceof TransientLlmError || isTransientNetworkError(err);
|
|
318
|
+
if (!transient || attempt === this.maxRetries - 1) {
|
|
319
|
+
if (transient) {
|
|
320
|
+
// Wrap so the fallback-model path can catch it explicitly.
|
|
321
|
+
throw err instanceof TransientLlmError
|
|
322
|
+
? err
|
|
323
|
+
: new TransientLlmError(`transient LLM error after ${attempt + 1} attempts: ${String(err?.message ?? err)}`, err);
|
|
324
|
+
}
|
|
325
|
+
throw err;
|
|
326
|
+
}
|
|
327
|
+
await new Promise((r) => setTimeout(r, this.retryBaseMs * Math.pow(4, attempt)));
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
throw lastErr;
|
|
331
|
+
}
|
|
332
|
+
async postOnce(body) {
|
|
333
|
+
const ctrl = new AbortController();
|
|
334
|
+
const t = setTimeout(() => ctrl.abort(), this.timeoutMs);
|
|
335
|
+
try {
|
|
336
|
+
const res = await this.fetchImpl(`${this.cfg.baseUrl.replace(/\/$/, "")}/chat/completions`, {
|
|
337
|
+
method: "POST",
|
|
338
|
+
headers: {
|
|
339
|
+
"content-type": "application/json",
|
|
340
|
+
authorization: `Bearer ${this.cfg.apiKey}`,
|
|
341
|
+
},
|
|
342
|
+
body: JSON.stringify(body),
|
|
343
|
+
signal: ctrl.signal,
|
|
344
|
+
});
|
|
345
|
+
if (!res.ok) {
|
|
346
|
+
const text = await res.text().catch(() => "");
|
|
347
|
+
const msg = `GatewayLlmCaller: ${res.status} ${res.statusText} — ${text.slice(0, 500)}`;
|
|
348
|
+
if (TRANSIENT_HTTP_STATUSES.has(res.status)) {
|
|
349
|
+
throw new TransientLlmError(msg);
|
|
350
|
+
}
|
|
351
|
+
throw new Error(msg);
|
|
352
|
+
}
|
|
353
|
+
return (await res.json());
|
|
354
|
+
}
|
|
355
|
+
finally {
|
|
356
|
+
clearTimeout(t);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
exports.GatewayLlmCaller = GatewayLlmCaller;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { LlmCaller } from "./llmCaller";
|
|
2
|
+
export declare function setLlmCaller(caller: LlmCaller): void;
|
|
3
|
+
export declare function getLlmCaller(): LlmCaller;
|
|
4
|
+
export declare function setAnthropicCaller(caller: LlmCaller | null): void;
|
|
5
|
+
export declare function getAnthropicCaller(): LlmCaller | null;
|
|
6
|
+
//# sourceMappingURL=llmCallerRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llmCallerRegistry.d.ts","sourceRoot":"","sources":["../../../src/services/agent/llmCallerRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAyB,MAAM,aAAa,CAAC;AAY/D,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAEpD;AAED,wBAAgB,YAAY,IAAI,SAAS,CAExC;AAeD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAEjE;AAED,wBAAgB,kBAAkB,IAAI,SAAS,GAAG,IAAI,CAErD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setLlmCaller = setLlmCaller;
|
|
4
|
+
exports.getLlmCaller = getLlmCaller;
|
|
5
|
+
exports.setAnthropicCaller = setAnthropicCaller;
|
|
6
|
+
exports.getAnthropicCaller = getAnthropicCaller;
|
|
7
|
+
const llmCaller_1 = require("./llmCaller");
|
|
8
|
+
/**
|
|
9
|
+
* Singleton LlmCaller accessor. Host wires a concrete impl at boot
|
|
10
|
+
* (e.g. GatewayLlmCaller); agent code reads via getLlmCaller().
|
|
11
|
+
*
|
|
12
|
+
* Throwing UnconfiguredLlmCaller is the default so tests fail loud
|
|
13
|
+
* if the host forgets to wire.
|
|
14
|
+
*/
|
|
15
|
+
let instance = new llmCaller_1.UnconfiguredLlmCaller();
|
|
16
|
+
function setLlmCaller(caller) {
|
|
17
|
+
instance = caller;
|
|
18
|
+
}
|
|
19
|
+
function getLlmCaller() {
|
|
20
|
+
return instance;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Optional Anthropic-direct caller. Wired only on hosts that have
|
|
24
|
+
* ANTHROPIC_API_KEY set and need Anthropic-specific features (server-side
|
|
25
|
+
* web_search, prompt caching, extended thinking). The Planner reads this
|
|
26
|
+
* only when `useWebResearch` is requested — otherwise the default gateway
|
|
27
|
+
* caller is used so provider portability is preserved.
|
|
28
|
+
*
|
|
29
|
+
* Null when unconfigured rather than throwing — caller code checks and
|
|
30
|
+
* gracefully falls back to the gateway path. See AnthropicLlmCaller docstring
|
|
31
|
+
* for deferred features (Tavily custom tools, fallback chain, streaming).
|
|
32
|
+
*/
|
|
33
|
+
let anthropicInstance = null;
|
|
34
|
+
function setAnthropicCaller(caller) {
|
|
35
|
+
anthropicInstance = caller;
|
|
36
|
+
}
|
|
37
|
+
function getAnthropicCaller() {
|
|
38
|
+
return anthropicInstance;
|
|
39
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AG-39: per-model capability scorecard fed by AG-26 critic findings.
|
|
3
|
+
*
|
|
4
|
+
* Why: planner picks `preferredModel` heuristically (tier + cost). It has
|
|
5
|
+
* no evidence about which models actually deliver on capabilities that
|
|
6
|
+
* matter for a given scene — brand-text legibility, character
|
|
7
|
+
* continuity, fast-motion fidelity, etc. After the first time
|
|
8
|
+
* seedance-1.0-pro-fast mangled the "HydraPure" label in test 1 we needed
|
|
9
|
+
* a way to (a) tell the planner "avoid X for scenes needing Y" and (b)
|
|
10
|
+
* automatically degrade trust in a model as critic evidence accumulates,
|
|
11
|
+
* without manually maintaining a blacklist.
|
|
12
|
+
*
|
|
13
|
+
* Threshold (so a single bad scene doesn't kill a model):
|
|
14
|
+
* - score decays by 1 ONLY when both:
|
|
15
|
+
* * >=3 distinct FAIL findings for that capability in the last 10
|
|
16
|
+
* attempts (recent window), AND
|
|
17
|
+
* * failure rate within that window >= 0.30
|
|
18
|
+
* - scores are clamped to [1, 5]
|
|
19
|
+
* - a PASS finding in the window adds back attemptCount only; no
|
|
20
|
+
* auto-recovery of score (we'd rather a human re-rate a model than
|
|
21
|
+
* trust ourselves to undo a downgrade).
|
|
22
|
+
*
|
|
23
|
+
* Storage: a small JSON file under
|
|
24
|
+
* wt-dev-backend/packages/shared/data/model-quality-notes.json
|
|
25
|
+
* checked in to the repo. Reads are memoised per-process; writes are
|
|
26
|
+
* append-only with an exclusive lock so the critic feedback hook can run
|
|
27
|
+
* inline with the agent run without racing.
|
|
28
|
+
*
|
|
29
|
+
* Surface for the planner: `renderModelQualityHintsForSystemPrompt()`
|
|
30
|
+
* returns a short paragraph listing models to AVOID per capability,
|
|
31
|
+
* filtered to only what the planner needs to know (no full dump — keeps
|
|
32
|
+
* the system prompt small).
|
|
33
|
+
*/
|
|
34
|
+
export type Capability = "textRendering" | "characterContinuity" | "fastMotion" | "photoreal" | "productFidelity" | "cinematic" | "audioSync";
|
|
35
|
+
export interface QualityEvidence {
|
|
36
|
+
/** ISO timestamp the evidence was recorded. */
|
|
37
|
+
at: string;
|
|
38
|
+
/** Critic's grade for this capability on this scene. */
|
|
39
|
+
verdict: "pass" | "warn" | "fail";
|
|
40
|
+
/** Short why (from the critic's `message`). */
|
|
41
|
+
message: string;
|
|
42
|
+
/** Agent run + scene the evidence came from (for audit). */
|
|
43
|
+
runId: string;
|
|
44
|
+
sceneIndex?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface ModelCapabilityEntry {
|
|
47
|
+
/** 1-5; 5 = best in the catalog at this capability. Hand-seeded, decayed by critic. */
|
|
48
|
+
score: number;
|
|
49
|
+
/** Why the seed score was picked, plus any human notes. */
|
|
50
|
+
seedNote?: string;
|
|
51
|
+
/** Recent evidence — rolling window of the last 10 entries. */
|
|
52
|
+
evidence: QualityEvidence[];
|
|
53
|
+
}
|
|
54
|
+
export interface ModelQualityEntry {
|
|
55
|
+
modelKey: string;
|
|
56
|
+
capabilities: Partial<Record<Capability, ModelCapabilityEntry>>;
|
|
57
|
+
lastUpdated: string;
|
|
58
|
+
}
|
|
59
|
+
export declare function getModelCapabilityScore(modelKey: string, capability: Capability): number | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Return a short paragraph the planner system prompt can paste in,
|
|
62
|
+
* listing models to AVOID per capability. Only emits hints for
|
|
63
|
+
* capabilities we have rated AND that the brief signals are relevant
|
|
64
|
+
* (so the planner isn't drowned in noise).
|
|
65
|
+
*/
|
|
66
|
+
export declare function renderModelQualityHintsForSystemPrompt(opts: {
|
|
67
|
+
needsBrandText?: boolean;
|
|
68
|
+
needsCharacterContinuity?: boolean;
|
|
69
|
+
needsFastMotion?: boolean;
|
|
70
|
+
needsCinematic?: boolean;
|
|
71
|
+
}): string;
|
|
72
|
+
/**
|
|
73
|
+
* Critic feedback hook: called after every stitched-video critic run
|
|
74
|
+
* with the structured findings. We map each finding's `dimension` to a
|
|
75
|
+
* `Capability`, record evidence under the model that rendered the scene,
|
|
76
|
+
* and decay the score iff the recent-window thresholds are met.
|
|
77
|
+
*/
|
|
78
|
+
export declare function recordCriticEvidence(input: {
|
|
79
|
+
runId: string;
|
|
80
|
+
/** sceneIndex → modelKey that was actually used (from trace.outcomes). */
|
|
81
|
+
sceneModels: Map<number, string>;
|
|
82
|
+
findings: Array<{
|
|
83
|
+
severity: "pass" | "warn" | "fail";
|
|
84
|
+
dimension: string;
|
|
85
|
+
message: string;
|
|
86
|
+
sceneIndexHint?: number;
|
|
87
|
+
}>;
|
|
88
|
+
}): {
|
|
89
|
+
decays: Array<{
|
|
90
|
+
modelKey: string;
|
|
91
|
+
capability: Capability;
|
|
92
|
+
from: number;
|
|
93
|
+
to: number;
|
|
94
|
+
}>;
|
|
95
|
+
};
|
|
96
|
+
/** For tests + manual inspection. */
|
|
97
|
+
export declare function _dumpStore(): ModelQualityEntry[];
|
|
98
|
+
/** For tests — reset to seed (does NOT touch disk). */
|
|
99
|
+
export declare function _resetCacheForTests(): void;
|
|
100
|
+
//# sourceMappingURL=modelQualityNotes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modelQualityNotes.d.ts","sourceRoot":"","sources":["../../../src/services/agent/modelQualityNotes.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,MAAM,MAAM,UAAU,GAClB,eAAe,GACf,qBAAqB,GACrB,YAAY,GACZ,WAAW,GACX,iBAAiB,GACjB,WAAW,GACX,WAAW,CAAC;AAEhB,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,wDAAwD;IACxD,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAClC,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,uFAAuF;IACvF,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,QAAQ,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAChE,WAAW,EAAE,MAAM,CAAC;CACrB;AAmGD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,GACrB,MAAM,GAAG,SAAS,CAGpB;AAED;;;;;GAKG;AACH,wBAAgB,sCAAsC,CAAC,IAAI,EAAE;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,MAAM,CA2BT;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,QAAQ,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QACnC,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;CACJ,GAAG;IAAE,MAAM,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAiE5F;AAED,qCAAqC;AACrC,wBAAgB,UAAU,IAAI,iBAAiB,EAAE,CAEhD;AAED,uDAAuD;AACvD,wBAAgB,mBAAmB,SAElC"}
|