n8n-io/n8n · error · Error

No prompt found in inputs - expected "prompt" string or…

Error message

No prompt found in inputs - expected "prompt" string or "messages" array

What it means

`extractPrompt` reads a single prompt from a LangSmith dataset example's `inputs`. It accepts either a `prompt` string or a non-empty `messages` array (in which case it takes `messages[0]`). If neither shape is present, the example is unusable and the harness aborts. This protects downstream agents from being invoked with an undefined prompt.

Solutions

  1. Open the dataset in the LangSmith UI and confirm each example's `inputs` has either a `prompt` string or a non-empty `messages` array.
  2. If your schema uses a different field, either rename it to `prompt` in the dataset or extend `extractPrompt` to read your field.
  3. Filter out malformed examples before running, or fix them in place.

Example fix

// before
// example.inputs = { workflowJSON: {...} }  (no prompt/messages)
// after
// example.inputs = { prompt: "build a slack notifier", workflowJSON: {...} }
Defensive patterns

Strategy: type-guard

Validate before calling

function hasUsablePrompt(inputs: unknown): boolean {
  if (!inputs || typeof inputs !== 'object') return false;
  const r = inputs as Record<string, unknown>;
  if (typeof r.prompt === 'string' && r.prompt.length > 0) return true;
  return Array.isArray(r.messages) && r.messages.length > 0;
}
// filter the dataset up front
const usable = examples.filter((e) => hasUsablePrompt(e.inputs));
if (usable.length === 0) throw new Error('no dataset examples have a prompt or messages array');

Type guard

function isPromptableInput(inputs: unknown): inputs is { prompt: string } | { messages: unknown[] } {
  if (!inputs || typeof inputs !== 'object') return false;
  const r = inputs as Record<string, unknown>;
  if (typeof r.prompt === 'string' && r.prompt.length > 0) return true;
  return Array.isArray(r.messages) && r.messages.length > 0;
}

Prevention

When it happens

Trigger: A dataset example whose `inputs` has neither a `prompt` field nor a `messages` array — e.g. it only carries `workflowJSON`, custom metadata, or a `messages` array that is empty. Also triggered by malformed examples uploaded with the wrong field names.

Common situations: Dataset schema drift (field renamed from `prompt` to `user_prompt`); examples created by a different tool that uses `input`/`query`; an example whose `messages` array was stripped during export; copy-pasting an example and dropping the prompt field.

Related errors


AI-assisted analysis of n8n-io/n8n@5ac6606e81 (2026-08-12). Data as JSON: /api/errors/eadbfc98ec1cceb8. Report an issue: GitHub.

Appendix: source

Thrown at packages/@n8n/ai-workflow-builder.ee/evaluations/harness/runner.ts:1002

	[key: string]: unknown;
}

/**
 * Extract prompt from dataset input.
 * Supports both direct prompt and messages array format.
 */
function extractPrompt(inputs: LangsmithDatasetInput): string {
	// Direct prompt string
	if (inputs.prompt && typeof inputs.prompt === 'string') {
		return inputs.prompt;
	}

	// Messages array format
	if (inputs.messages && Array.isArray(inputs.messages) && inputs.messages.length > 0) {
		return extractMessageContent(inputs.messages[0]);
	}

	throw new Error('No prompt found in inputs - expected "prompt" string or "messages" array');
}

/**
 * Pre-process LangSmith examples to extract conversation history from outputs
 * and inject it into inputs for the target function.
 *
 * The dataset format has:
 * - inputs.messages[0]: The latest user turn
 * - outputs.messages: The FULL conversation (all prior turns + latest + AI response)
 *
 * We find the latest turn in outputs and extract everything before it as historical.
 */
function enrichExamplesWithHistory(examples: Example[]): Example[] {
	return examples.map((example) => {
		const outputMessages = (example.outputs as Record<string, unknown> | undefined)?.messages;
		if (!Array.isArray(outputMessages) || outputMessages.length <= 1) {
			return example; // No history to extract
		}

View on GitHub (pinned to 5ac6606e81)