From 9afc4260c9657f4b2539cbc121a3b7b86703fff9 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 25 Jun 2025 01:27:09 -0400 Subject: [PATCH] Move AI task prefs to system -> general (#25904) Move AI task prefs --- src/data/ai_task.ts | 14 ++++---- .../dialog-automation-save.ts | 8 ++--- .../ai-task-pref.ts | 35 ++++++++++--------- .../config/core/ha-config-section-general.ts | 14 +++++++- .../ha-config-voice-assistants-assistants.ts | 7 ---- src/translations/en.json | 12 +++---- 6 files changed, 48 insertions(+), 42 deletions(-) rename src/panels/config/{voice-assistants => core}/ai-task-pref.ts (85%) diff --git a/src/data/ai_task.ts b/src/data/ai_task.ts index c4f42d0bc8..451fced583 100644 --- a/src/data/ai_task.ts +++ b/src/data/ai_task.ts @@ -1,12 +1,12 @@ import type { HomeAssistant } from "../types"; export interface AITaskPreferences { - gen_text_entity_id: string | null; + gen_data_entity_id: string | null; } -export interface GenTextTaskResult { +export interface GenDataTaskResult { conversation_id: string; - text: string; + data: string; } export const fetchAITaskPreferences = (hass: HomeAssistant) => @@ -23,17 +23,17 @@ export const saveAITaskPreferences = ( ...preferences, }); -export const generateTextAITask = async ( +export const generateDataAITask = async ( hass: HomeAssistant, task: { task_name: string; entity_id?: string; instructions: string; } -): Promise => { - const result = await hass.callService( +): Promise => { + const result = await hass.callService( "ai_task", - "generate_text", + "generate_data", task, undefined, true, diff --git a/src/panels/config/automation/automation-save-dialog/dialog-automation-save.ts b/src/panels/config/automation/automation-save-dialog/dialog-automation-save.ts index 99fd37e5ff..2ba4069d0d 100644 --- a/src/panels/config/automation/automation-save-dialog/dialog-automation-save.ts +++ b/src/panels/config/automation/automation-save-dialog/dialog-automation-save.ts @@ -27,7 +27,7 @@ import type { import { supportsMarkdownHelper } from "../../../../common/translations/markdown_support"; import { fetchAITaskPreferences, - generateTextAITask, + generateDataAITask, } from "../../../../data/ai_task"; import { isComponentLoaded } from "../../../../common/config/is_component_loaded"; @@ -93,7 +93,7 @@ class DialogAutomationSave extends LitElement implements HassDialog { super.firstUpdated(changedProperties); if (isComponentLoaded(this.hass, "ai_task")) { fetchAITaskPreferences(this.hass).then((prefs) => { - this._canSuggest = prefs.gen_text_entity_id !== null; + this._canSuggest = prefs.gen_data_entity_id !== null; }); } } @@ -346,7 +346,7 @@ class DialogAutomationSave extends LitElement implements HassDialog { } private async _suggest() { - const result = await generateTextAITask(this.hass, { + const result = await generateDataAITask(this.hass, { task_name: "frontend:automation:save", instructions: `Suggest one name for the following Home Assistant automation. Your answer should only contain the name, without any additional text or formatting. @@ -356,7 +356,7 @@ The name should be short, descriptive, sentence case, and written in the languag ${dump(this._params.config)} `, }); - this._newName = result.text.trim(); + this._newName = result.data.trim(); } private async _save(): Promise { diff --git a/src/panels/config/voice-assistants/ai-task-pref.ts b/src/panels/config/core/ai-task-pref.ts similarity index 85% rename from src/panels/config/voice-assistants/ai-task-pref.ts rename to src/panels/config/core/ai-task-pref.ts index 9eba296781..2547f8a4ad 100644 --- a/src/panels/config/voice-assistants/ai-task-pref.ts +++ b/src/panels/config/core/ai-task-pref.ts @@ -47,9 +47,7 @@ export class AITaskPref extends LitElement { })} crossorigin="anonymous" referrerpolicy="no-referrer" - />${this.hass.localize( - "ui.panel.config.voice_assistants.ai_task.header" - )} + />${this.hass.localize("ui.panel.config.ai_task.header")}

- ${this.hass!.localize( - "ui.panel.config.voice_assistants.ai_task.description", - { - button: html``, - } - )} + ${this.hass!.localize("ui.panel.config.ai_task.description", { + button: html``, + })}

- ${this.hass!.localize( - "ui.panel.config.voice_assistants.ai_task.gen_text_header" - )} + ${this.hass!.localize("ui.panel.config.ai_task.gen_data_header")} ${this.hass!.localize( - "ui.panel.config.voice_assistants.ai_task.gen_text_description" + "ui.panel.config.ai_task.gen_data_description" )} @@ -119,6 +112,14 @@ export class AITaskPref extends LitElement { } static styles = css` + .card-header { + display: flex; + align-items: center; + } + .card-header img { + max-width: 28px; + margin-right: 16px; + } a { color: var(--primary-color); } diff --git a/src/panels/config/core/ha-config-section-general.ts b/src/panels/config/core/ha-config-section-general.ts index a3647c8ec1..7fc6aa15e4 100644 --- a/src/panels/config/core/ha-config-section-general.ts +++ b/src/panels/config/core/ha-config-section-general.ts @@ -25,8 +25,10 @@ import type { ConfigUpdateValues } from "../../../data/core"; import { saveCoreConfig } from "../../../data/core"; import { showConfirmationDialog } from "../../../dialogs/generic/show-dialog-box"; import "../../../layouts/hass-subpage"; +import "./ai-task-pref"; import { haStyle } from "../../../resources/styles"; import type { HomeAssistant, ValueChangedEvent } from "../../../types"; +import { isComponentLoaded } from "../../../common/config/is_component_loaded"; @customElement("ha-config-section-general") class HaConfigSectionGeneral extends LitElement { @@ -265,6 +267,12 @@ class HaConfigSectionGeneral extends LitElement {
+ ${isComponentLoaded(this.hass, "ai_task") + ? html`` + : nothing}
`; @@ -377,7 +385,8 @@ class HaConfigSectionGeneral extends LitElement { max-width: 1040px; margin: 0 auto; } - ha-card { + ha-card, + ai-task-pref { max-width: 600px; margin: 0 auto; height: 100%; @@ -385,6 +394,9 @@ class HaConfigSectionGeneral extends LitElement { flex-direction: column; display: flex; } + ha-card { + margin-bottom: 24px; + } .card-content { display: flex; justify-content: space-between; diff --git a/src/panels/config/voice-assistants/ha-config-voice-assistants-assistants.ts b/src/panels/config/voice-assistants/ha-config-voice-assistants-assistants.ts index f9aa48319b..ff959d7830 100644 --- a/src/panels/config/voice-assistants/ha-config-voice-assistants-assistants.ts +++ b/src/panels/config/voice-assistants/ha-config-voice-assistants-assistants.ts @@ -8,7 +8,6 @@ import "../../../layouts/hass-loading-screen"; import "../../../layouts/hass-tabs-subpage"; import type { HomeAssistant, Route } from "../../../types"; import "./assist-pref"; -import "./ai-task-pref"; import "./cloud-alexa-pref"; import "./cloud-discover"; import "./cloud-google-pref"; @@ -54,12 +53,6 @@ export class HaConfigVoiceAssistantsAssistants extends LitElement { > ` : nothing} - ${isComponentLoaded(this.hass, "ai_task") - ? html`` - : nothing} ${this.cloudStatus?.logged_in ? html`