Skip to main content

AI Task entity

An AI Task entity provides a framework for AI-powered task execution in Home Assistant. It enables integrations to offer AI capabilities for generating data, content, or performing structured tasks based on natural language instructions.

A AI Task entity is derived from the homeassistant.components.ai_task.AITaskEntity. The entity state tracks the timestamp of the last activity for monitoring purposes.

Properties

This entity has no properties.

Supported features

Supported features are defined by using values in the AITaskEntityFeature enum and are combined using the bitwise or (|) operator.

ValueDescription
GENERATE_DATAThe entity can generate data based on natural language instructions.

Methods

Generate Data

This method handles data generation tasks based on natural language instructions.

from homeassistant.components.ai_task import AITaskEntity, GenDataTask, GenDataTaskResult

class MyAITaskEntity(AITaskEntity):
"""Represent an AI Task entity."""

async def _async_generate_data(
self, task: GenDataTask, chat_log: ChatLog
) -> GenDataTaskResult:
"""Handle a generate data task."""
# Process the task instructions and generate appropriate data
# Use the chat_log to maintain conversation context. A common
# pattern is to share an implementation between conversation and AI
# task entities to process the chat log.
# await self._async_handle_chat_log(
# chat_log,
# task.structure,
# task.attachments
# )

text = ...
if not task.structure:
return GenDataTaskResult(
conversation_id=chat_log.conversation_id,
data=text
)

data = ... # process the text to match the structure
return GenDataTaskResult(
conversation_id=chat_log.conversation_id,
data=data
)

A GenDataTask object contains the following data:

NameTypeDescription
task_namestrName/identifier for the task
instructionsstrNatural language instructions for the AI
structurevol.Schema | NoneOptional schema for structured output validation
attachmentslist[PlayMediaWithId]List of attachments to include in the task.

Structured Output Schema

The structure parameter allows you to define the expected format of the generated data using Home Assistant's selector system:

{
"yes_no_field": {
"description": "Description of the field",
"required": True/False, # Optional, defaults to False
"selector": {
"boolean": {} # Selector type
}
},
"text_field": {
"description": "Description of the text field",
"required": True/False, # Optional, defaults to False
"selector": {
"text": {} # Selector type
}
},
"number_field": {
"description": "Description of the number field",
"required": True/False, # Optional, defaults to False
"selector": {
"number": {
"min": 18, # Optional minimum value
"max": 100, # Optional maximum value
}
}
},
}