conductor-oss/conductor · error · UnsupportedOperationException

Video generation not supported by this provider

Error message

Video generation not supported by this provider

What it means

The default AIModel.generateVideo throws UnsupportedOperationException. AIModel is an interface with default methods so providers opt into video generation by overriding generateVideo; the default implementation exists so providers that do not support video fail loudly rather than silently returning null. Calling it on a provider that has not overridden the method is the trigger.

Source

Thrown at ai/src/main/java/org/conductoross/conductor/ai/AIModel.java:186

                .size(input.getSize())
                .build();
    }

    /**
     * @return Model to generate videos
     */
    default VideoModel getVideoModel() {
        return null; // Default: video generation not supported
    }

    /**
     * Generate video (async job submission)
     *
     * @param request Video generation request
     * @return Response with job ID
     */
    default LLMResponse generateVideo(VideoGenRequest request) {
        throw new UnsupportedOperationException("Video generation not supported by this provider");
    }

    /**
     * Check video generation job status (polling)
     *
     * @param request Video generation request with jobId
     * @return Response with current status or completed video
     */
    default LLMResponse checkVideoStatus(VideoGenRequest request) {
        throw new UnsupportedOperationException("Video generation not supported by this provider");
    }

    default LLMResponse generateAudio(AudioGenRequest request) {
        throw new UnsupportedOperationException();
    }

    default List<ToolCallback> getToolCallback(ChatCompletion input) {
        if (input.getTools() == null || input.getTools().isEmpty()) {

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Select an AIModel whose getVideoModel() returns non-null (i.e. a provider that overrides generateVideo).
  2. Guard with a capability check before calling: `if (model.getVideoModel() == null) throw/branch;`.
  3. If your provider supports video, override generateVideo in its AIModel implementation.

Example fix

// before
LLMResponse r = aiModel.generateVideo(req);  // on a text-only provider
// after
if (aiModel.getVideoModel() == null) {
    throw new IllegalStateException("provider does not support video");
}
LLMResponse r = aiModel.generateVideo(req);
Defensive patterns

Strategy: type-guard

Validate before calling

if (aiModel.getVideoModel() == null) {
    throw new IllegalStateException(
        "provider " + aiModel.getClass().getSimpleName() + " does not support video");
}
LLMResponse r = aiModel.generateVideo(request);

Type guard

boolean supportsVideo(AIModel m) {
    return m.getVideoModel() != null;
}

Try / catch

try {
    return aiModel.generateVideo(request);
} catch (UnsupportedOperationException e) {
    return notImplemented(e.getMessage()); // or branch to a video-capable model
}

Prevention

When it happens

Trigger: Invoking aiModel.generateVideo(request) on a provider's AIModel instance that has not overridden the method (e.g. a text-only LLM provider). The request is a VideoGenRequest describing the desired clip.

Common situations: Workflow/config selected a text or image model for a video-generation task; a generic code path calls generateVideo without first checking getVideoModel() for capability; a new provider was added without video support but routing allows it.

Related errors


AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14). Data as JSON: /api/errors/82314031290545f4. Report an issue: GitHub.