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,90 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ChatRequest, ChatResponse, LlmCaller, StructuredRequest, StructuredResponse, StructuredWithToolsRequest } from "./llmCaller";
|
|
3
|
+
/**
|
|
4
|
+
* Direct Anthropic SDK LlmCaller. Exists alongside GatewayLlmCaller because
|
|
5
|
+
* Anthropic's server-side tools (`web_search_20260209`, `web_fetch`, etc.)
|
|
6
|
+
* cannot be exposed through the OpenAI-compatible Vercel AI Gateway —
|
|
7
|
+
* they're Anthropic-only constructs that the API executes server-side.
|
|
8
|
+
*
|
|
9
|
+
* Use this caller when:
|
|
10
|
+
* - You need server-side `web_search` for planner grounding.
|
|
11
|
+
* - You want Anthropic-native features (prompt caching, extended thinking,
|
|
12
|
+
* citations) without a translation layer.
|
|
13
|
+
*
|
|
14
|
+
* Use the gateway caller when:
|
|
15
|
+
* - You want provider portability (GPT-5 / Gemini fallback chains).
|
|
16
|
+
* - You don't need built-in tools.
|
|
17
|
+
*
|
|
18
|
+
* The Planner reads from `getAnthropicCaller()` only when `useWebResearch`
|
|
19
|
+
* is set; otherwise it stays on the gateway path.
|
|
20
|
+
*
|
|
21
|
+
* Implemented features:
|
|
22
|
+
* - Prompt caching (`cachePrompt: true`): `cache_control: ephemeral` on
|
|
23
|
+
* the system prompt's last block + the tools array. Anthropic charges
|
|
24
|
+
* ~90% off on cached reads, so retries within a 5-min window are cheap.
|
|
25
|
+
* - Extended thinking (`thinking.budgetTokens`): enables Claude's
|
|
26
|
+
* interleaved reasoning blocks for T3 / complex briefs. Forces
|
|
27
|
+
* temperature=1 and threads `thinking` blocks through the tool-use loop.
|
|
28
|
+
* - Transient errors propagate as `TransientLlmError` so callers can
|
|
29
|
+
* fall back to the gateway path (no web search) on Anthropic outages.
|
|
30
|
+
*
|
|
31
|
+
* Deferred work (v2):
|
|
32
|
+
* - Custom client-side tools (Tavily / image search): extend the loop
|
|
33
|
+
* to handle `tool_use` blocks for tools we own (vs server-executed).
|
|
34
|
+
* Today's loop only handles `submit_<schemaName>` (final emit) and
|
|
35
|
+
* server-side web_search rounds.
|
|
36
|
+
* - Streaming: `messages.stream()` works the same; we'd reuse the
|
|
37
|
+
* `structuredStream` shape but accumulate tool_use input deltas.
|
|
38
|
+
* - Multi-breakpoint caching: today we cache system + tools as a single
|
|
39
|
+
* prefix. Splitting into model-catalog (rarely changes) vs brief
|
|
40
|
+
* (per-request) breakpoints could nudge cache hits higher.
|
|
41
|
+
*/
|
|
42
|
+
export interface AnthropicCallerConfig {
|
|
43
|
+
apiKey: string;
|
|
44
|
+
/** Default request timeout in ms. */
|
|
45
|
+
timeoutMs?: number;
|
|
46
|
+
/** Max retries on transient errors per call. Default 3. */
|
|
47
|
+
maxRetries?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Marks an error worth retrying on the gateway path. The Planner catches
|
|
51
|
+
* this specifically to degrade gracefully — drops research, keeps planning.
|
|
52
|
+
*/
|
|
53
|
+
export declare class TransientLlmError extends Error {
|
|
54
|
+
readonly cause?: unknown | undefined;
|
|
55
|
+
constructor(message: string, cause?: unknown | undefined);
|
|
56
|
+
}
|
|
57
|
+
export declare function isTransientLlmError(err: unknown): err is TransientLlmError;
|
|
58
|
+
export declare class AnthropicLlmCaller implements LlmCaller {
|
|
59
|
+
private readonly client;
|
|
60
|
+
private readonly timeoutMs;
|
|
61
|
+
private readonly maxRetries;
|
|
62
|
+
constructor(cfg: AnthropicCallerConfig);
|
|
63
|
+
chat(req: ChatRequest): Promise<ChatResponse>;
|
|
64
|
+
structured<T extends z.ZodTypeAny>(req: StructuredRequest<T>): Promise<StructuredResponse<T>>;
|
|
65
|
+
structuredWithTools<T extends z.ZodTypeAny>(req: StructuredWithToolsRequest<T>): Promise<StructuredResponse<T>>;
|
|
66
|
+
/**
|
|
67
|
+
* Anthropic's API takes a top-level `system` (string or TextBlockParam[])
|
|
68
|
+
* and messages of user/assistant only. Our LlmCaller carries system as
|
|
69
|
+
* the first message; split it out here.
|
|
70
|
+
*
|
|
71
|
+
* When `cache` is true, return system as a single TextBlockParam with
|
|
72
|
+
* `cache_control: ephemeral` so Anthropic caches the whole system prefix.
|
|
73
|
+
* Cache hits cost 10% of normal input; misses cost 125% (write surcharge).
|
|
74
|
+
* The 5-min default TTL is fine for planner: retries within the same
|
|
75
|
+
* request hit the cache; brand-new requests pay the write once and
|
|
76
|
+
* benefit on the retry path.
|
|
77
|
+
*/
|
|
78
|
+
private splitSystem;
|
|
79
|
+
private buildServerTools;
|
|
80
|
+
/**
|
|
81
|
+
* Map our ModelChoice → Anthropic API model id. Pass-through today since
|
|
82
|
+
* routing uses Anthropic-shaped ids (e.g. "claude-sonnet-4-6"). If a
|
|
83
|
+
* future routing entry uses a non-Anthropic id we'd want to throw rather
|
|
84
|
+
* than silently send GPT names to the Anthropic API.
|
|
85
|
+
*/
|
|
86
|
+
private resolveModelId;
|
|
87
|
+
private withRetry;
|
|
88
|
+
private isTransient;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=llmCallerAnthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llmCallerAnthropic.d.ts","sourceRoot":"","sources":["../../../src/services/agent/llmCallerAnthropic.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AAGrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IACb,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;gBAAzC,OAAO,EAAE,MAAM,EAAW,KAAK,CAAC,EAAE,OAAO,YAAA;CAItD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,iBAAiB,CAE1E;AAED,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,GAAG,EAAE,qBAAqB;IAShC,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IA4B7C,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EACrC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAI3B,mBAAmB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAC9C,GAAG,EAAE,0BAA0B,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAsHjC;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,WAAW;IAiCnB,OAAO,CAAC,gBAAgB;IAkBxB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;YASR,SAAS;IAyBvB,OAAO,CAAC,WAAW;CAYpB"}
|
|
@@ -0,0 +1,255 @@
|
|
|
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.AnthropicLlmCaller = exports.TransientLlmError = void 0;
|
|
7
|
+
exports.isTransientLlmError = isTransientLlmError;
|
|
8
|
+
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
9
|
+
const zod_1 = require("zod");
|
|
10
|
+
const TRANSIENT_STATUSES = new Set([408, 425, 429, 500, 502, 503, 504]);
|
|
11
|
+
/**
|
|
12
|
+
* Marks an error worth retrying on the gateway path. The Planner catches
|
|
13
|
+
* this specifically to degrade gracefully — drops research, keeps planning.
|
|
14
|
+
*/
|
|
15
|
+
class TransientLlmError extends Error {
|
|
16
|
+
constructor(message, cause) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.cause = cause;
|
|
19
|
+
this.name = "TransientLlmError";
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.TransientLlmError = TransientLlmError;
|
|
23
|
+
function isTransientLlmError(err) {
|
|
24
|
+
return err instanceof Error && err.name === "TransientLlmError";
|
|
25
|
+
}
|
|
26
|
+
class AnthropicLlmCaller {
|
|
27
|
+
constructor(cfg) {
|
|
28
|
+
this.client = new sdk_1.default({
|
|
29
|
+
apiKey: cfg.apiKey,
|
|
30
|
+
timeout: cfg.timeoutMs ?? 180000,
|
|
31
|
+
});
|
|
32
|
+
this.timeoutMs = cfg.timeoutMs ?? 180000;
|
|
33
|
+
this.maxRetries = cfg.maxRetries ?? 3;
|
|
34
|
+
}
|
|
35
|
+
async chat(req) {
|
|
36
|
+
const { system, messages } = this.splitSystem(req.messages, false);
|
|
37
|
+
const res = await this.withRetry(() => this.client.messages.create({
|
|
38
|
+
model: this.resolveModelId(req.model),
|
|
39
|
+
max_tokens: req.maxTokens ?? 4096,
|
|
40
|
+
temperature: req.temperature,
|
|
41
|
+
stop_sequences: req.stop,
|
|
42
|
+
system,
|
|
43
|
+
messages,
|
|
44
|
+
}));
|
|
45
|
+
const text = res.content
|
|
46
|
+
.filter((b) => b.type === "text")
|
|
47
|
+
.map((b) => b.text)
|
|
48
|
+
.join("\n");
|
|
49
|
+
return {
|
|
50
|
+
text,
|
|
51
|
+
usage: {
|
|
52
|
+
promptTokens: res.usage.input_tokens,
|
|
53
|
+
completionTokens: res.usage.output_tokens,
|
|
54
|
+
},
|
|
55
|
+
requestId: res.id,
|
|
56
|
+
attemptedModels: [req.model],
|
|
57
|
+
usedFallback: false,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async structured(req) {
|
|
61
|
+
return this.structuredWithTools({ ...req, serverTools: [] });
|
|
62
|
+
}
|
|
63
|
+
async structuredWithTools(req) {
|
|
64
|
+
const submitToolName = `submit_${req.schemaName}`;
|
|
65
|
+
const jsonSchema = zod_1.z.toJSONSchema(req.schema, { target: "draft-7" });
|
|
66
|
+
const tools = [
|
|
67
|
+
...this.buildServerTools(req.serverTools),
|
|
68
|
+
{
|
|
69
|
+
name: submitToolName,
|
|
70
|
+
description: `Submit the final ${req.schemaName} payload. Call this exactly once when ready.`,
|
|
71
|
+
input_schema: jsonSchema,
|
|
72
|
+
// Cache the submit tool's schema (the heaviest part of the tools
|
|
73
|
+
// array, ~5–15K tokens for VideoPlan). Anthropic caches the whole
|
|
74
|
+
// tools prefix up to the last cache_control breakpoint, so a single
|
|
75
|
+
// breakpoint on the last entry covers everything.
|
|
76
|
+
...(req.cachePrompt ? { cache_control: { type: "ephemeral" } } : {}),
|
|
77
|
+
},
|
|
78
|
+
];
|
|
79
|
+
// tool_choice: if no server tools, force submit immediately (pure
|
|
80
|
+
// structured output). With server tools (web_search), use "auto" so the
|
|
81
|
+
// model can search before submitting.
|
|
82
|
+
const toolChoice = req.serverTools?.length
|
|
83
|
+
? { type: "auto" }
|
|
84
|
+
: { type: "tool", name: submitToolName };
|
|
85
|
+
const { system, messages: initial } = this.splitSystem(req.messages, req.cachePrompt ?? false);
|
|
86
|
+
const convo = [...initial];
|
|
87
|
+
const maxRounds = req.maxToolRounds ?? 6;
|
|
88
|
+
// Extended thinking: Anthropic requires temperature=1 (or omitted) and
|
|
89
|
+
// a budget < max_tokens. Clamp here so callers don't have to think
|
|
90
|
+
// about it.
|
|
91
|
+
const thinking = req.thinking
|
|
92
|
+
? {
|
|
93
|
+
type: "enabled",
|
|
94
|
+
budget_tokens: Math.max(1024, req.thinking.budgetTokens),
|
|
95
|
+
}
|
|
96
|
+
: undefined;
|
|
97
|
+
const maxTokens = req.maxTokens ?? (thinking ? 16384 : 8192);
|
|
98
|
+
if (thinking && thinking.budget_tokens >= maxTokens) {
|
|
99
|
+
// Bump max_tokens above budget so the model has room to actually
|
|
100
|
+
// answer after thinking. +2048 leaves headroom for tool_use output.
|
|
101
|
+
// (Cheaper than asking callers to know the constraint.)
|
|
102
|
+
// No-op when budget fits.
|
|
103
|
+
}
|
|
104
|
+
const effectiveMaxTokens = thinking && thinking.budget_tokens >= maxTokens
|
|
105
|
+
? thinking.budget_tokens + 2048
|
|
106
|
+
: maxTokens;
|
|
107
|
+
const effectiveTemperature = thinking ? 1 : req.temperature;
|
|
108
|
+
for (let round = 0; round < maxRounds; round++) {
|
|
109
|
+
const res = await this.withRetry(() => this.client.messages.create({
|
|
110
|
+
model: this.resolveModelId(req.model),
|
|
111
|
+
max_tokens: effectiveMaxTokens,
|
|
112
|
+
temperature: effectiveTemperature,
|
|
113
|
+
system,
|
|
114
|
+
tools,
|
|
115
|
+
tool_choice: toolChoice,
|
|
116
|
+
messages: convo,
|
|
117
|
+
...(thinking ? { thinking } : {}),
|
|
118
|
+
}));
|
|
119
|
+
// Look for our submit tool — terminal state.
|
|
120
|
+
const submit = res.content.find((b) => b.type === "tool_use" && b.name === submitToolName);
|
|
121
|
+
if (submit) {
|
|
122
|
+
const parsed = req.schema.safeParse(submit.input);
|
|
123
|
+
if (!parsed.success) {
|
|
124
|
+
throw new Error(`AnthropicLlmCaller.structuredWithTools: schema validation failed for ${req.schemaName}: ${parsed.error.message}`);
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
data: parsed.data,
|
|
128
|
+
usage: {
|
|
129
|
+
promptTokens: res.usage.input_tokens,
|
|
130
|
+
completionTokens: res.usage.output_tokens,
|
|
131
|
+
},
|
|
132
|
+
requestId: res.id,
|
|
133
|
+
attemptedModels: [req.model],
|
|
134
|
+
usedFallback: false,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
// pause_turn: server-side tool (web_search) finished mid-turn and the
|
|
138
|
+
// model wants to continue. Echo assistant content back (including any
|
|
139
|
+
// `thinking` blocks — Anthropic rejects the turn otherwise when
|
|
140
|
+
// extended thinking is on); no new user message needed.
|
|
141
|
+
if (res.stop_reason === "pause_turn") {
|
|
142
|
+
convo.push({ role: "assistant", content: res.content });
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
// If we got `tool_use` for some unknown tool name (shouldn't happen
|
|
146
|
+
// today since we only register submit + server tools), bail out so we
|
|
147
|
+
// don't loop forever.
|
|
148
|
+
throw new Error(`AnthropicLlmCaller.structuredWithTools: unexpected stop_reason=${res.stop_reason} without ${submitToolName} after round ${round}`);
|
|
149
|
+
}
|
|
150
|
+
throw new Error(`AnthropicLlmCaller.structuredWithTools: exceeded ${maxRounds} tool rounds without ${submitToolName}`);
|
|
151
|
+
}
|
|
152
|
+
// ---------- helpers ----------
|
|
153
|
+
/**
|
|
154
|
+
* Anthropic's API takes a top-level `system` (string or TextBlockParam[])
|
|
155
|
+
* and messages of user/assistant only. Our LlmCaller carries system as
|
|
156
|
+
* the first message; split it out here.
|
|
157
|
+
*
|
|
158
|
+
* When `cache` is true, return system as a single TextBlockParam with
|
|
159
|
+
* `cache_control: ephemeral` so Anthropic caches the whole system prefix.
|
|
160
|
+
* Cache hits cost 10% of normal input; misses cost 125% (write surcharge).
|
|
161
|
+
* The 5-min default TTL is fine for planner: retries within the same
|
|
162
|
+
* request hit the cache; brand-new requests pay the write once and
|
|
163
|
+
* benefit on the retry path.
|
|
164
|
+
*/
|
|
165
|
+
splitSystem(messages, cache) {
|
|
166
|
+
let systemText;
|
|
167
|
+
const out = [];
|
|
168
|
+
for (const m of messages) {
|
|
169
|
+
if (m.role === "system") {
|
|
170
|
+
systemText = systemText ? `${systemText}\n\n${m.content}` : m.content;
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
// Image attachments are not yet plumbed for the Anthropic caller —
|
|
174
|
+
// planner doesn't need them today. When the critic moves over (it's
|
|
175
|
+
// vision-heavy), wire image blocks here.
|
|
176
|
+
out.push({ role: m.role, content: m.content });
|
|
177
|
+
}
|
|
178
|
+
if (!systemText)
|
|
179
|
+
return { system: undefined, messages: out };
|
|
180
|
+
if (!cache)
|
|
181
|
+
return { system: systemText, messages: out };
|
|
182
|
+
return {
|
|
183
|
+
system: [
|
|
184
|
+
{
|
|
185
|
+
type: "text",
|
|
186
|
+
text: systemText,
|
|
187
|
+
cache_control: { type: "ephemeral" },
|
|
188
|
+
},
|
|
189
|
+
],
|
|
190
|
+
messages: out,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
buildServerTools(serverTools) {
|
|
194
|
+
if (!serverTools?.length)
|
|
195
|
+
return [];
|
|
196
|
+
return serverTools.map((t) => {
|
|
197
|
+
if (t.type !== "web_search") {
|
|
198
|
+
throw new Error(`AnthropicLlmCaller: unsupported server tool type=${t.type}`);
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
type: "web_search_20260209",
|
|
202
|
+
name: "web_search",
|
|
203
|
+
...(typeof t.maxUses === "number" ? { max_uses: t.maxUses } : {}),
|
|
204
|
+
...(t.allowedDomains?.length ? { allowed_domains: t.allowedDomains } : {}),
|
|
205
|
+
...(t.blockedDomains?.length ? { blocked_domains: t.blockedDomains } : {}),
|
|
206
|
+
};
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Map our ModelChoice → Anthropic API model id. Pass-through today since
|
|
211
|
+
* routing uses Anthropic-shaped ids (e.g. "claude-sonnet-4-6"). If a
|
|
212
|
+
* future routing entry uses a non-Anthropic id we'd want to throw rather
|
|
213
|
+
* than silently send GPT names to the Anthropic API.
|
|
214
|
+
*/
|
|
215
|
+
resolveModelId(m) {
|
|
216
|
+
if (m.provider !== "anthropic") {
|
|
217
|
+
throw new Error(`AnthropicLlmCaller cannot serve provider=${m.provider}; route to GatewayLlmCaller instead.`);
|
|
218
|
+
}
|
|
219
|
+
return m.modelId;
|
|
220
|
+
}
|
|
221
|
+
async withRetry(fn) {
|
|
222
|
+
let lastErr;
|
|
223
|
+
for (let attempt = 0; attempt < this.maxRetries; attempt++) {
|
|
224
|
+
try {
|
|
225
|
+
return await fn();
|
|
226
|
+
}
|
|
227
|
+
catch (err) {
|
|
228
|
+
lastErr = err;
|
|
229
|
+
const transient = this.isTransient(err);
|
|
230
|
+
if (!transient || attempt === this.maxRetries - 1) {
|
|
231
|
+
if (transient) {
|
|
232
|
+
throw new TransientLlmError(`Anthropic transient error after ${attempt + 1} attempts: ${String(err?.message ?? err)}`, err);
|
|
233
|
+
}
|
|
234
|
+
throw err;
|
|
235
|
+
}
|
|
236
|
+
await new Promise((r) => setTimeout(r, 250 * Math.pow(4, attempt)));
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
throw lastErr;
|
|
240
|
+
}
|
|
241
|
+
isTransient(err) {
|
|
242
|
+
if (!err || typeof err !== "object")
|
|
243
|
+
return false;
|
|
244
|
+
const e = err;
|
|
245
|
+
if (typeof e.status === "number" && TRANSIENT_STATUSES.has(e.status)) {
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
248
|
+
if (e.name === "APIConnectionError" || e.name === "APIConnectionTimeoutError") {
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
const msg = String(e.message ?? "");
|
|
252
|
+
return /timeout|ECONNRESET|ETIMEDOUT|network|socket hang up/i.test(msg);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
exports.AnthropicLlmCaller = AnthropicLlmCaller;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ChatRequest, ChatResponse, LlmCaller, StructuredRequest, StructuredResponse } from "./llmCaller";
|
|
3
|
+
/**
|
|
4
|
+
* Vercel AI Gateway LlmCaller — OpenAI-compatible /v1/chat/completions surface.
|
|
5
|
+
* Single endpoint, multi-provider routing via "{provider}/{modelId}" model id.
|
|
6
|
+
*
|
|
7
|
+
* No SDK dependency: pure fetch keeps the shared package light. Structured
|
|
8
|
+
* output uses JSON-schema response_format (supported by gateway across
|
|
9
|
+
* Anthropic / OpenAI / Google providers — gateway normalises it).
|
|
10
|
+
*
|
|
11
|
+
* Reliability features (added Phase 1 of AGENT_TEST_PLAN):
|
|
12
|
+
* - F1 transport-level retry: each HTTP call retries 3× with exp backoff
|
|
13
|
+
* (250 / 1000 / 4000ms) on transient errors (network drops, 408/429/5xx).
|
|
14
|
+
* - F2 model fallback: when a request supplies `fallbackModel` and the
|
|
15
|
+
* primary exhausts retries on a transient error, we attempt the fallback
|
|
16
|
+
* once (also with its own retry budget). Schema-validation failures and
|
|
17
|
+
* other deterministic errors do NOT trigger fallback.
|
|
18
|
+
*/
|
|
19
|
+
export interface GatewayConfig {
|
|
20
|
+
/** Full base url, e.g. "https://ai-gateway.vercel.sh/v1". */
|
|
21
|
+
baseUrl: string;
|
|
22
|
+
/** Bearer token. */
|
|
23
|
+
apiKey: string;
|
|
24
|
+
/** Default request timeout in ms. */
|
|
25
|
+
timeoutMs?: number;
|
|
26
|
+
/** Optional fetch impl override (tests). */
|
|
27
|
+
fetchImpl?: typeof fetch;
|
|
28
|
+
/** Max retry attempts per model on transient errors. Default 3. */
|
|
29
|
+
maxRetries?: number;
|
|
30
|
+
/** Base backoff in ms (exponential: base, base*4, base*16). Default 250. */
|
|
31
|
+
retryBaseMs?: number;
|
|
32
|
+
}
|
|
33
|
+
export declare class GatewayLlmCaller implements LlmCaller {
|
|
34
|
+
private readonly cfg;
|
|
35
|
+
private readonly fetchImpl;
|
|
36
|
+
private readonly timeoutMs;
|
|
37
|
+
private readonly maxRetries;
|
|
38
|
+
private readonly retryBaseMs;
|
|
39
|
+
constructor(cfg: GatewayConfig);
|
|
40
|
+
chat(req: ChatRequest): Promise<ChatResponse>;
|
|
41
|
+
structured<T extends z.ZodTypeAny>(req: StructuredRequest<T>): Promise<StructuredResponse<T>>;
|
|
42
|
+
structuredStream<T extends z.ZodTypeAny>(req: StructuredRequest<T>): {
|
|
43
|
+
tokens: AsyncIterable<string>;
|
|
44
|
+
result: Promise<StructuredResponse<T>>;
|
|
45
|
+
};
|
|
46
|
+
private createStreamingIterator;
|
|
47
|
+
private modelId;
|
|
48
|
+
private encodeMessage;
|
|
49
|
+
private toDataUri;
|
|
50
|
+
private usage;
|
|
51
|
+
/**
|
|
52
|
+
* POST /chat/completions with transient-error retry (F1).
|
|
53
|
+
* Throws TransientLlmError after exhausting retries on transient failures —
|
|
54
|
+
* caller catches it to trigger model fallback (F2). Non-transient errors
|
|
55
|
+
* (4xx other than 408/425/429, malformed responses) propagate as plain Error.
|
|
56
|
+
*/
|
|
57
|
+
private postWithRetry;
|
|
58
|
+
private withRetry;
|
|
59
|
+
private postOnce;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=llmCallerGateway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llmCallerGateway.d.ts","sourceRoot":"","sources":["../../../src/services/agent/llmCallerGateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAGrB;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA2CD,qBAAa,gBAAiB,YAAW,SAAS;IAMpC,OAAO,CAAC,QAAQ,CAAC,GAAG;IALhC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAER,GAAG,EAAE,aAAa;IAOzC,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAkC7C,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EACrC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAgEjC,gBAAgB,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EACrC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,GACxB;QACD,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9B,MAAM,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;KACxC;YAqBc,uBAAuB;IAoItC,OAAO,CAAC,OAAO;YAID,aAAa;YAqBb,SAAS;IAcvB,OAAO,CAAC,KAAK;IAQb;;;;;OAKG;YACW,aAAa;YAIb,SAAS;YA+BT,QAAQ;CA6BvB"}
|