conductor-oss/conductor · error · UnsupportedOperationException

Not supported

Error message

Not supported

What it means

Thrown by PerplexityAI.generateEmbeddings as UnsupportedOperationException. Perplexity (Sonar models) is a search-augmented chat provider and does not offer an embeddings endpoint, so the AIModel interface method is intentionally unimplemented.

Source

Thrown at ai/src/main/java/org/conductoross/conductor/ai/providers/perplexity/PerplexityAI.java:55

        this(config, AIHttpClients.defaultClient());
    }

    public PerplexityAI(PerplexityAIConfiguration config, OkHttpClient httpClient) {
        this.config = config;
        OpenAIChatCompletionsApi api =
                new OpenAIChatCompletionsApi(
                        httpClient, config.getApiKey(), config.getBaseURL(), "/chat/completions");
        this.chatModel = new OpenAICompatChatModel(api);
    }

    @Override
    public String getModelProvider() {
        return NAME;
    }

    @Override
    public List<Float> generateEmbeddings(EmbeddingGenRequest embeddingGenRequest) {
        throw new UnsupportedOperationException("Not supported");
    }

    @Override
    public ChatOptions getChatOptions(ChatCompletion input) {
        return ToolCallingChatOptions.builder()
                .model(input.getModel())
                .maxTokens(input.getMaxTokens())
                .topP(input.getTopP())
                .temperature(input.getTemperature())
                .toolCallbacks(getToolCallback(input))
                .internalToolExecutionEnabled(false)
                .frequencyPenalty(input.getFrequencyPenalty())
                .topK(input.getTopK())
                .presencePenalty(input.getPresencePenalty())
                .build();
    }

    @Override

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Use an embeddings-capable provider (OpenAI) for embedding tasks instead of perplexity.
  2. Check the AIModel capabilities or getModelProvider() before calling generateEmbeddings.
  3. Set the correct llmProvider on the embedding task input.

Example fix

// before
AIModel model = provider.getModel(req); // resolves to perplexity
List<Float> emb = model.generateEmbeddings(embReq); // UnsupportedOperationException

// after
if (!"perplexity".equals(model.getModelProvider())) {
    List<Float> emb = model.generateEmbeddings(embReq);
}
Defensive patterns

Strategy: validation

Validate before calling

if ("perplexity".equals(model.getModelProvider())) {
    throw new IllegalArgumentException(
        "Perplexity does not support embeddings; use an OpenAI provider");
}
List<Float> emb = model.generateEmbeddings(req);

Type guard

boolean supportsEmbeddings(AIModel m) {
    return !"perplexity".equals(m.getModelProvider())
        && !"stabilityai".equals(m.getModelProvider());
}

Try / catch

try {
    List<Float> emb = model.generateEmbeddings(req);
} catch (UnsupportedOperationException e) {
    // provider lacks embeddings; switch provider or skip
}

Prevention

When it happens

Trigger: A workflow or caller invokes generateEmbeddings on an AIModel resolved to the 'perplexity' provider, e.g. an embedding task whose llmProvider is misconfigured to perplexity.

Common situations: Copy-pasting a chat-oriented provider config into an embeddings task, or a generic AIModel consumer that does not check provider capabilities before calling generateEmbeddings.

Related errors


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