BerriAI/litellm · error · NotImplementedError

Video delete is not supported by Vertex AI Veo. Videos are a

Error message

Video delete is not supported by Vertex AI Veo. Videos are automatically cleaned up by Google.

What it means

Raised by VertexVeoConfig.transform_video_delete_request. Vertex AI Veo has no delete API — Google cleans up generated videos automatically (videos not stored in your GCS bucket expire) — so LiteLLM rejects video_delete with NotImplementedError for this provider.

Source

Thrown at litellm/llms/vertex_ai/videos/transformation.py:634

        self,
        raw_response: httpx.Response,
        logging_obj: LiteLLMLoggingObj,
        custom_llm_provider: str | None = None,
    ) -> dict[str, str]:
        """Video list is not supported."""
        raise NotImplementedError("Video list is not supported by Vertex AI Veo.")

    def transform_video_delete_request(
        self,
        video_id: str,
        api_base: str,
        litellm_params: GenericLiteLLMParams,
        headers: dict,
    ) -> tuple[str, dict]:
        """
        Video delete is not supported by Veo API.
        """
        raise NotImplementedError(
            "Video delete is not supported by Vertex AI Veo. Videos are automatically cleaned up by Google."
        )

    def transform_video_delete_response(
        self,
        raw_response: httpx.Response,
        logging_obj: LiteLLMLoggingObj,
    ) -> VideoObject:
        """Video delete is not supported."""
        raise NotImplementedError("Video delete is not supported by Vertex AI Veo.")

    def transform_video_create_character_request(self, name, video: object, api_base, litellm_params, headers):
        raise NotImplementedError("video create character is not supported for Vertex AI")

    def transform_video_create_character_response(self, raw_response, logging_obj):
        raise NotImplementedError("video create character is not supported for Vertex AI")

    def transform_video_get_character_request(self, character_id, api_base, litellm_params, headers):

View on GitHub (pinned to 77b7c6c40c)

Solutions

  1. Skip deletion for vertex_ai videos — Google reclaims them automatically
  2. If videos were written to your own GCS bucket, delete the GCS objects with the Storage API instead
  3. Use GCS bucket lifecycle rules for retention control over stored Veo outputs

Example fix

# before
litellm.video_delete(video_id=vid, custom_llm_provider="vertex_ai")

# after
if provider == "vertex_ai":
    pass  # Veo videos are auto-cleaned; delete GCS objects if you stored them
else:
    litellm.video_delete(video_id=vid, custom_llm_provider=provider)
Defensive patterns

Strategy: validation

Validate before calling

DELETE_CAPABLE_PROVIDERS = {"openai", "runwayml"}

def cleanup_video(provider: str, video_id: str) -> None:
    if provider not in DELETE_CAPABLE_PROVIDERS:
        return  # vertex_ai/veo: Google auto-cleans; nothing to do

Type guard

def provider_supports_video_delete(provider: str) -> bool:
    return provider != "vertex_ai"

Try / catch

try:
    litellm.video_delete(video_id=vid, custom_llm_provider=provider)
except NotImplementedError:
    if provider == "vertex_ai":
        log.info("veo videos are auto-cleaned by Google; skipping delete")
    else:
        raise

Prevention

When it happens

Trigger: Calling litellm.video_delete(video_id=..., custom_llm_provider="vertex_ai") or DELETE /v1/videos/{id} on a Veo operation id.

Common situations: Generic cleanup scripts that delete every video after processing; porting OpenAI-style video retention workflows; retention/compliance pipelines assuming delete exists on all providers.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18). Data as JSON: /api/errors/1b37416eaff37553. Report an issue: GitHub.