conductor-oss/conductor · error · NonRetryableException

markdown input is required for GENERATE_PDF task

Error message

markdown input is required for GENERATE_PDF task

What it means

Thrown as NonRetryableException by the GENERATE_PDF worker when input.getMarkdown() is blank. The PDF converter needs markdown source content to render; an empty input cannot produce a document, so it fails terminally.

Source

Thrown at ai/src/main/java/org/conductoross/conductor/ai/tasks/worker/DocumentGenWorkers.java:65

    private final String payloadStoreLocation;

    public DocumentGenWorkers(
            MarkdownToPdfConverter pdfConverter,
            List<DocumentLoader> documentLoaders,
            Environment env) {
        this.pdfConverter = pdfConverter;
        this.documentLoaders = documentLoaders;
        this.payloadStoreLocation =
                env.getProperty(
                        "conductor.file-storage.parentDir",
                        System.getProperty("user.home") + "/worker-payload/");
        log.info("Document Workers initialized");
    }

    @WorkerTask("GENERATE_PDF")
    public LLMResponse generatePdf(MarkdownToPdfRequest input) {
        if (isBlank(input.getMarkdown())) {
            throw new NonRetryableException("markdown input is required for GENERATE_PDF task");
        }

        Task task = TaskContext.get().getTask();

        // Convert markdown to PDF bytes
        byte[] pdfBytes = pdfConverter.convert(input);

        // Determine output location
        String outputLocation = input.getOutputLocation();
        if (isBlank(outputLocation)) {
            outputLocation =
                    payloadStoreLocation
                            + task.getWorkflowInstanceId()
                            + "/"
                            + task.getTaskId()
                            + "/"
                            + UUID.randomUUID()
                            + ".pdf";

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Provide non-blank markdown content in the GENERATE_PDF input 'markdown' field.
  2. Verify the upstream task variable referenced by the markdown template actually produced content.
  3. Add a guard/branch before GENERATE_PDF to skip or fail gracefully when source text is empty.
  4. Check for mapping typos (the worker reads input.getMarkdown() exactly).

Example fix

// before
{ "markdown": "${task.generate.output}" }  // upstream returned null
// after
{ "markdown": "${task.generate.output.result}" }
Defensive patterns

Strategy: validation

Validate before calling

// Validate markdown before invoking GENERATE_PDF
if (StringUtils.isBlank(input.getMarkdown())) {
    throw new IllegalArgumentException("markdown must be non-blank");
}

Prevention

When it happens

Trigger: Running a GENERATE_PDF task whose MarkdownToPdfRequest.markdown is null, empty, or whitespace; an upstream LLM_GENERATE or text task that produced no output being mapped into markdown.

Common situations: Upstream task returned empty result so the template variable resolved to blank; workflow author mapped the wrong output field into markdown; programmatic caller constructed MarkdownToPdfRequest without setting markdown; markdown sourced from a file that was empty/missing.

Related errors


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