conductor-oss/conductor · error · NonRetryableException

No input text provided to generate embeddings

Error message

No input text provided to generate embeddings

What it means

Thrown as NonRetryableException by the LLM_GENERATE_EMBEDDINGS worker when input.getText() is blank. Embedding generation requires source text; with no input there is nothing to vectorize, so the task fails terminally rather than retrying an empty request.

Source

Thrown at ai/src/main/java/org/conductoross/conductor/ai/tasks/worker/LLMWorkers.java:134

        List<ChatMessage> messages = new ArrayList<>();
        messages.add(
                new ChatMessage(
                        ChatMessage.Role.user,
                        "use the instructions given to generate the response."));
        chatCompletion.setMessages(messages);
        return llm.chatComplete(TaskContext.get().getTask(), chatCompletion);
    }

    @SneakyThrows
    @WorkerTask("LLM_CHAT_COMPLETE")
    public LLMResponse chatCompletion(ChatCompletion chatCompletion) {
        return llm.chatComplete(TaskContext.get().getTask(), chatCompletion);
    }

    @WorkerTask("LLM_GENERATE_EMBEDDINGS")
    public @OutputParam("result") List<Float> generateEmbeddings(EmbeddingGenRequest input) {
        if (isBlank(input.getText())) {
            throw new NonRetryableException("No input text provided to generate embeddings");
        }
        String llmProvider = input.getLlmProvider();
        return generateEmbeddings(
                TaskContext.get().getTask(),
                llmProvider,
                input.getModel(),
                input.getText(),
                input.getDimensions());
    }

    private List<Float> generateEmbeddings(
            Task task,
            String embeddingModelProvider,
            String embeddingModel,
            String text,
            Integer dimensions) {
        EmbeddingGenRequest request =
                EmbeddingGenRequest.builder()

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Supply non-blank text in the LLM_GENERATE_EMBEDDINGS input 'text' field.
  2. Verify the upstream variable feeding text actually produced content.
  3. Filter out empty chunks before invoking the embeddings worker.
  4. Confirm the input key is 'text' (the worker reads input.getText()).

Example fix

// before
EmbeddingGenRequest.builder().model("text-embedding-3-small").build();  // no text
// after
EmbeddingGenRequest.builder().model("text-embedding-3-small").text(chunk).build();
Defensive patterns

Strategy: validation

Validate before calling

// Validate text before invoking embeddings
if (StringUtils.isBlank(input.getText())) {
    throw new IllegalArgumentException("text must be non-blank");
}

Prevention

When it happens

Trigger: Running LLM_GENERATE_EMBEDDINGS with a blank/null EmbeddingGenRequest.text; an upstream text-producing task that emitted empty content being wired into text.

Common situations: Upstream chunking/text task returned empty so the template resolved to blank; wrong output field mapped into text; document loader read an empty file; caller built EmbeddingGenRequest without setting text.

Related errors


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