eyaltoledano/claude-task-master · error · Error

Invalid or empty messages array provided

Error message

Invalid or empty messages array provided

What it means

validateMessages() ensures the messages argument is a non-empty array before calling the AI API. Beyond array-ness, each message must have role and content. Empty or malformed message arrays would otherwise cause confusing downstream provider errors or wasted API calls.

Solutions

  1. Ensure at least one message with both role and content, e.g., [{ role: 'user', content: 'Hello' }]
  2. Guard the conversation-building code so an empty history gets a seed message
  3. Validate each message has role and content before calling

Example fix

// before
await provider.generateText({ modelId, messages: [] });
// after
const messages = history.length ? history : [{ role: 'user', content: prompt }];
await provider.generateText({ modelId, messages });
Defensive patterns

Strategy: validation

Validate before calling

const valid = Array.isArray(messages) && messages.length > 0 && messages.every(m => m?.role && m?.content);
if (!valid) throw new Error('messages must be a non-empty array of {role, content}');

Type guard

function isValidMessages(msgs) { return Array.isArray(msgs) && msgs.length > 0 && msgs.every(m => typeof m?.role === 'string' && typeof m?.content === 'string' && m.content.length > 0); }

Try / catch

try {
  await provider.generateText({ modelId, messages });
} catch (err) {
  if (err.message === 'Invalid or empty messages array provided') {
    messages = [{ role: 'user', content: prompt }];
  } else throw err;
}

Prevention

When it happens

Trigger: Calling generateText/streamText/streamObject/generateObject with messages = undefined, null, [], a non-array, or an array whose entries lack role or content.

Common situations: Conversation history not initialized before the first call; a filtering step removed all messages; building messages from user input that arrived empty; pushing {content} without role.

Related errors


AI-assisted analysis of eyaltoledano/claude-task-master@c0c98d367c (2026-08-29). Data as JSON: /api/errors/9bb286706a5022c8. Report an issue: GitHub.

Appendix: source

Thrown at src/ai-providers/base-provider.js:237

			params.temperature !== undefined &&
			(params.temperature < 0 || params.temperature > 1)
		) {
			throw new Error('Temperature must be between 0 and 1');
		}
		if (params.maxTokens !== undefined) {
			const maxTokens = Number(params.maxTokens);
			if (!Number.isFinite(maxTokens) || maxTokens <= 0) {
				throw new Error('maxTokens must be a finite number greater than 0');
			}
		}
	}

	/**
	 * Validates message array structure
	 */
	validateMessages(messages) {
		if (!messages || !Array.isArray(messages) || messages.length === 0) {
			throw new Error('Invalid or empty messages array provided');
		}

		for (const msg of messages) {
			if (!msg.role || !msg.content) {
				throw new Error(
					'Invalid message format. Each message must have role and content'
				);
			}
		}
	}

	/**
	 * Common error handler
	 */
	handleError(operation, error) {
		const errorMessage = error.message || 'Unknown error occurred';
		log('error', `${this.name} ${operation} failed: ${errorMessage}`, {
			error

View on GitHub (pinned to c0c98d367c)