summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-06 15:48:51 +0300
committerPaul Buetow <paul@buetow.org>2026-04-06 15:48:51 +0300
commit7cd85138c30654d93d679306ed5a9fe4b455d672 (patch)
treeeba0505f6651fb28d012b4be0d68009c1e8cf4a4 /internal
parentcdb5951fa25cc9352128ee8c0d76027cf2f6aa92 (diff)
fix: surface Veo API error field (content policy / geographic restriction) with clear message
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal')
-rw-r--r--internal/video/veo.go9
1 files changed, 9 insertions, 0 deletions
diff --git a/internal/video/veo.go b/internal/video/veo.go
index c3be521..018c06a 100644
--- a/internal/video/veo.go
+++ b/internal/video/veo.go
@@ -258,6 +258,15 @@ func (g *VeoGenerator) pollUntilDone(ctx context.Context, op *genai.GenerateVide
// downloadVideo extracts the video from a completed operation, downloading bytes
// via the Files API when the response contains only a URI reference.
func (g *VeoGenerator) downloadVideo(ctx context.Context, op *genai.GenerateVideosOperation) ([]byte, error) {
+ // Surface any API-level error (e.g. content policy or geographic restriction)
+ // before checking for videos, so the caller gets a meaningful message.
+ if len(op.Error) > 0 {
+ msg, _ := op.Error["message"].(string)
+ if msg == "" {
+ msg = fmt.Sprintf("%v", op.Error)
+ }
+ return nil, fmt.Errorf("veo: %s", msg)
+ }
if op.Response == nil || len(op.Response.GeneratedVideos) == 0 {
return nil, fmt.Errorf("veo: operation completed but no videos in response")
}