conductor-oss/conductor · error · NonRetryableException
docId is empty
Error message
docId is empty
What it means
Thrown as NonRetryableException by the LLM_INDEX_TEXT worker when input.getDocId() is blank. A stable document id is required to upsert and later retrieve/update the indexed document in the vector store, so a blank id fails the task terminally.
Source
Thrown at ai/src/main/java/org/conductoross/conductor/ai/tasks/worker/VectorDBWorkers.java:63
@Conditional(AIIntegrationEnabledCondition.class)
public class VectorDBWorkers implements AnnotatedSystemTaskWorker {
private static final TypeReference<Map<String, Object>> MAP_OF_STRING_TO_OBJ =
new TypeReference<Map<String, Object>>() {};
private final VectorDBs vectorDBs;
private final LLMs llm;
public VectorDBWorkers(VectorDBs vectorDBs, LLMs llm) {
this.vectorDBs = vectorDBs;
this.llm = llm;
log.info("VectorDBWorkers initialized with LLMs: {} and vectorDBs: {}", llm, vectorDBs);
}
@WorkerTask("LLM_INDEX_TEXT")
public void indexText(IndexDocInput input) {
if (isBlank(input.getDocId())) {
throw new NonRetryableException("docId is empty");
}
try {
String chunk = input.getText();
EmbeddingGenRequest request =
EmbeddingGenRequest.builder()
.model(input.getEmbeddingModel())
.dimensions(input.getDimensions())
.text(chunk)
.build();
request.setLlmProvider(input.getEmbeddingModelProvider());
List<Float> embeddings = llm.generateEmbeddings(TaskContext.get().getTask(), request);
vectorDBs.storeEmbeddings(
input.getVectorDB(),
TaskContext.get(),
input.getIndex(),
input.getNamespace(),View on GitHub (pinned to cf7c3e4a8a)
Solutions
- Provide a non-blank docId in the LLM_INDEX_TEXT input.
- Generate a stable id upstream (e.g. UUID or hash of content) and map it into docId.
- Verify the template variable feeding docId resolves to a non-empty value.
- Confirm the input key is 'docId' (worker reads input.getDocId()).
Example fix
// before
{ "text": "...", "embeddingModel": "..." } // no docId
// after
{ "docId": "${workflow.documentId}", "text": "...", "embeddingModel": "..." } Defensive patterns
Strategy: validation
Validate before calling
// Generate/validate a docId before indexing
if (StringUtils.isBlank(input.getDocId())) {
input.setDocId(UUID.randomUUID().toString()); // or a content hash
} Prevention
- Always derive a stable docId (UUID or content hash) upstream.
- Make docId a required workflow input.
- Confirm the template feeding docId is non-empty.
When it happens
Trigger: Running LLM_INDEX_TEXT with a blank IndexDocInput.docId; an upstream task that was supposed to generate an id producing null/empty.
Common situations: Workflow author forgot to set docId; docId sourced from a template variable that resolved to blank (e.g. missing source field); caller built IndexDocInput without an id; docId derived from a filename that was empty.
Related errors
- agentUrl must not be blank
- GET_AGENT_CARD requires 'agentUrl'
- AGENT requires one of: message, parts, text, or prompt
- Unsupported agentType '<agentType>' (only 'a2a' is supported
- markdown input is required for GENERATE_PDF task
AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14).
Data as JSON: /api/errors/8e985e2bde516786.
Report an issue: GitHub.