From 9fc0cb08594c12884e73aa447ce30920f204be19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C6=B0u=20Quang=20V=C5=A9?= Date: Sat, 7 Feb 2026 13:14:38 +0700 Subject: [PATCH] Optimize default prompts to significantly reduce tokens usage. --- ac_mode_and_fan_control_full_llm.yaml | 22 ++----- advanced_google_search_full_llm.yaml | 11 ++-- advanced_youtube_search_full_llm.yaml | 13 ++-- calendar_events_lookup_full_llm.yaml | 21 ++----- camera_snapshot_full_llm.yaml | 10 +--- create_calendar_event_full_llm.yaml | 46 +++++--------- date_lookup_and_conversion_full_llm.yaml | 17 ++---- device_control_timer_full_llm.yaml | 16 ++--- device_control_tool.yaml | 2 +- device_location_lookup_full_llm.yaml | 11 +--- device_ringing_full_llm.yaml | 7 +-- devices_schedules.yaml | 2 +- devices_schedules_controller_full_llm.yaml | 60 +++---------------- devices_schedules_restart_handler.yaml | 2 +- fan_oscillation_control_full_llm.yaml | 12 ++-- ...peed_and_oscillation_control_full_llm.yaml | 22 ++----- fan_speed_control_full_llm.yaml | 18 ++---- file_content_analyzer_full_llm.yaml | 16 ++--- get_youtube_video_info_full_llm.yaml | 15 ++--- home_assistant_voice_instructions.md | 4 +- home_assistant_voice_instructions_en.md | 4 +- memory_tool_full_llm.yaml | 45 ++++---------- play_youtube_video_full_llm.yaml | 7 +-- send_to_telegram_full_llm.yaml | 50 ++++------------ send_to_zalo_bot_full_llm.yaml | 45 +++----------- send_to_zalo_custom_bot_full_llm.yaml | 40 +++---------- telegram_bot_webhook.yaml | 50 ++++++++-------- traffic_fine_lookup_full_llm.yaml | 13 ++-- zalo_bot_webhook.yaml | 10 ++-- zalo_custom_bot_webhook.yaml | 10 ++-- 30 files changed, 171 insertions(+), 430 deletions(-) diff --git a/ac_mode_and_fan_control_full_llm.yaml b/ac_mode_and_fan_control_full_llm.yaml index 71bbdc5..3c358b5 100644 --- a/ac_mode_and_fan_control_full_llm.yaml +++ b/ac_mode_and_fan_control_full_llm.yaml @@ -75,9 +75,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify at least one air conditioner name to control. - To control multiple ACs, separate each name with a semicolon. + Mandatory. Provide AC names to control. Use semicolons (;) to separate multiple names. hvac_mode_prompt: name: HVAC Mode Prompt description: The prompt which will be used for the LLM can provide the AC mode. @@ -85,9 +83,7 @@ blueprint: text: multiline: true default: |- - Use this argument to set the AC mode. Accepted values: auto, cool, heat, dry, fan_only, off. - Include this only when the user explicitly requests a mode change; otherwise omit it. - If the requested mode is not in the device's supported modes, return an error instead of guessing or changing another field. + Set AC mode (auto, cool, heat, dry, fan_only, off). Include ONLY if explicitly requested. Return error if unsupported; do not guess. temperature_prompt: name: Temperature Prompt description: The prompt which will be used for the LLM can provide the target temperature. @@ -95,10 +91,7 @@ blueprint: text: multiline: true default: |- - Use this argument to set the target temperature. Input should be a number (e.g., 24, 25.5). - Ensure the number matches the device's unit system (usually Celsius). If the user provides Fahrenheit for a Celsius device, convert it first. - Do not include units like 'C' or 'F'. - Include this only when the user explicitly requests a temperature change. + Target temperature as a number (e.g. 24). Convert F to C if needed. Omit units (C/F). Include ONLY for explicit requests. fan_mode_prompt: name: Fan Mode Prompt description: The prompt which will be used for the LLM can provide the fan speed/mode of the AC. @@ -106,15 +99,12 @@ blueprint: text: multiline: true default: |- - Use this argument to set the AC's fan mode (fan speed). Accepted examples: auto/automatic, low/1, lowmid/2, mid/medium/3, highmid/4, high/5. - Map qualitative or numeric requests to the closest matching supported mode; resolve per device when multiple ACs are targeted. - Include this only when the user requests a fan speed change; otherwise omit it. - If no supported fan mode matches for a device, return an error instead of guessing or changing another field. + Set fan speed (auto, low/1, lowmid/2, mid/3, highmid/4, high/5). Map to the closest supported mode. Include ONLY if requested. Error if no match; do not guess. mode: parallel max_exceeded: silent -description: Controls the mode, temperature, and/or fan speed of one or more specified air conditioners. +description: Controls mode, temperature, and fan speed for air conditioners. Supports auto, cool, heat, dry, and fan_only modes. variables: - version: 20251213 + version: 20260207 fields: ac_entities: name: AC Entities diff --git a/advanced_google_search_full_llm.yaml b/advanced_google_search_full_llm.yaml index b97649a..6744309 100644 --- a/advanced_google_search_full_llm.yaml +++ b/advanced_google_search_full_llm.yaml @@ -56,9 +56,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify the search string to obtain information from Google. - If the query seems misspelled or misheard, silently correct it to the most likely intended search string and proceed. Do not ask clarifying questions; instead, briefly note the correction in the response. + Mandatory. Search query. Silence-correct misspellings if likely intended. Do not ask for clarification. language_prompt: name: Language Prompt description: The prompt which will be used for the LLM can provide the language for the query. @@ -66,13 +64,12 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify the output language of the response using an IETF BCP 47 language tag (e.g., vi-VN, en-US). The value must match the user's language. + Mandatory. Language tag (e.g. vi-VN, en-US). Must match user language. mode: parallel max_exceeded: silent -description: Searches Google based on a query string. +description: Searches Google to retrieve real-time information, facts, or answers from the web. Use when local knowledge is insufficient. variables: - version: 20251116 + version: 20260207 fields: query_string: name: Query String diff --git a/advanced_youtube_search_full_llm.yaml b/advanced_youtube_search_full_llm.yaml index fd488e7..f9f0b98 100644 --- a/advanced_youtube_search_full_llm.yaml +++ b/advanced_youtube_search_full_llm.yaml @@ -71,10 +71,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify the search string to obtain a list of videos. - If the query contains errors caused by user mispronunciation, correct it to the most likely accurate search string and ask the user for confirmation before proceeding. - After obtaining the results, prompt the user to select a video to play on the TV. Add an ordinal number to each video to simplify selection. Do not include the Media ID in the response. + Mandatory. Search query. Silence-correct misspellings. For results, use ordinal numbers for selection; omit Media IDs. Confirm before proceeding if query is ambiguous. page_token_prompt: name: Page Token Prompt description: The prompt which will be used for the LLM can provide the page token to get additional videos that could be obtained. @@ -82,14 +79,12 @@ blueprint: text: multiline: true default: |- - This argument is optional. - Specify the page token to obtain additional videos. - Use it when the initial query results are unsatisfying and the user wants to find more videos. + Optional. Use to fetch more videos if initial results are unsatisfactory. mode: parallel max_exceeded: silent -description: Searches YouTube for videos based on a query string. +description: Searches YouTube for videos and returns a list of matching results with titles and descriptions. Use to find specific content or playlists. variables: - version: 20251116 + version: 20260207 fields: query_string: name: Query String diff --git a/calendar_events_lookup_full_llm.yaml b/calendar_events_lookup_full_llm.yaml index 951d494..1e8d7bc 100644 --- a/calendar_events_lookup_full_llm.yaml +++ b/calendar_events_lookup_full_llm.yaml @@ -51,9 +51,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Use 'daily' for requests covering full days or periods longer than one day. Use 'hourly' for requests covering part of a day or a specific start time. - After obtaining the result, ensure the response includes only the event's day of the week and start date. The event's end date or time is exclusive and should not be included. + Mandatory. 'daily' for full days/long periods; 'hourly' for partial days/specific times. Response must only include day of week and start date. time_period_length_prompt: name: Time Period Length Prompt description: The prompt which will be used for the LLM can provide the length of the period. @@ -61,9 +59,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - The length of the period. This will be measured in days if 'time_period_type' is 'daily', and in hours if 'time_period_type' is 'hourly'. - Examples: 1 (day) for today's events, 2 (days) for weekend events, 7 (days) for the next few days, 30 (days) for in the month, 6 (hours) for morning, afternoon, or evening events. + Mandatory. Length in days (if daily) or hours (if hourly). E.g. 1 (today), 7 (week), 6 (afternoon). date_prompt: name: Date Prompt description: The prompt which will be used for the LLM can provide the start date for the events period. @@ -71,10 +67,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify the date for the requested period starts using the format YYYY-MM-DD. - Always include a date with each request. If the request does not specify a date, you should provide today's date. Examples of dates that can be used include today, this week, this month, etc. - When the requested period is for the night, do not use today's date but always use the next day, unless the current time is still before 05:00:00. + Mandatory. Start date (YYYY-MM-DD). Default to today if unspecified. For "night", use next day unless current time < 05:00:00. time_prompt: name: Time Prompt description: The prompt which will be used for the LLM can provide the start time for the events period. @@ -82,14 +75,12 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify the start time using the format HH:MM:SS. - Always provide time. For a full day, use 00:00:00. For the current hour, use the start of the hour. Night starts at 00:00:00, morning starts at 06:00:00, afternoon starts at 12:00:00 and evening starts at 18:00:00. + Mandatory. Start time (HH:MM:SS). Full day = 00:00:00. Morning = 06:00:00, Afternoon = 12:00:00, Evening = 18:00:00, Night = 00:00:00. mode: parallel max_exceeded: silent -description: Retrieves calendar events based on specified time periods. +description: Retrieves upcoming or past calendar events for a specific time period. Useful for checking schedules and appointments. variables: - version: 20251116 + version: 20260207 fields: time_period_type: name: Time Period Type diff --git a/camera_snapshot_full_llm.yaml b/camera_snapshot_full_llm.yaml index f09f817..4369ef4 100644 --- a/camera_snapshot_full_llm.yaml +++ b/camera_snapshot_full_llm.yaml @@ -100,16 +100,12 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify the friendly name of the camera you want to capture a snapshot from (e.g., "Front Door Camera"). - If the user's request does not clearly specify a camera, determine and suggest one or more relevant cameras based on context. - If multiple cameras are needed, submit each camera in a separate tool call. - The tool will return a local file path to the generated snapshot. + Mandatory. Camera friendly name. If unclear, determine from context or suggest. For multiple cameras, use separate tool calls. Returns local image path. mode: parallel max_exceeded: silent -description: Captures a snapshot from a specified camera to visually check the scene. Returns the local file path of the image, which can be used by other tools for analysis or sent to the user. +description: Captures and saves a camera snapshot. Returns the local file path for analysis or messaging tools. Useful for visual verification of a scene. variables: - version: 20251209 + version: 20260207 fields: camera_name: name: Camera Name diff --git a/create_calendar_event_full_llm.yaml b/create_calendar_event_full_llm.yaml index 2f5d04b..7579d6f 100644 --- a/create_calendar_event_full_llm.yaml +++ b/create_calendar_event_full_llm.yaml @@ -58,76 +58,58 @@ blueprint: input: summary_prompt: name: Summary Prompt - description: The prompt which will be used for the LLM can provide the short summary or subject for the event. + description: Short summary of the event. selector: text: multiline: true default: |- - This argument is mandatory and must always be included. - It defines the short summary or subject of the event. + Mandatory. Subject or title of the event. description_prompt: name: Description Prompt - description: The prompt which will be used for the LLM can provide a more complete description of the event than the one provided by the summary. + description: Detailed description of the event. selector: text: multiline: true default: |- - This argument is optional. - It provides a more complete description of the event than the summary. + Optional. Full details of the event. start_date_time_prompt: name: Start Time Prompt - description: The prompt which will be used for the LLM can provide the date and time the event should start. + description: Start date and time for timed events. selector: text: multiline: true default: |- - Use either the start_date_time parameter or the start_date parameter, but not both. - This argument specifies the event start date and time in the format YYYY-MM-DD HH:MM:SS. - Only populate start_date_time when the request includes a time-of-day (e.g., 10:00, 18:30, morning/afternoon/evening). Otherwise use start_date. - When using start_date_time (timed events), you must also provide end_date_time. Do not provide end_date. - If the user does not specify an end time, you must still provide end_date_time = start_date_time + 2 hours. Do not ask clarifying questions. + Use ONLY for timed events (YYYY-MM-DD HH:MM:SS). Excludes start_date. end_date_time_prompt: name: End Time Prompt - description: The prompt which will be used for the LLM can provide the date and time the event should end. + description: End date and time for timed events. selector: text: multiline: true default: |- - Use either the end_date_time parameter or the end_date parameter, but not both. - This argument specifies the event end date and time in the format YYYY-MM-DD HH:MM:SS. - For timed events, you must provide end_date_time and it must be on or after start_date_time. - Do not provide end_date when start_date_time is used. - If the user did not specify an end time, infer and provide end_date_time = start_date_time + 2 hours. Do not ask clarifying questions. + Mandatory for timed events. Default: start + 2h. Excludes end_date. start_date_prompt: name: Start Date Prompt - description: The prompt which will be used for the LLM can provide the date the all-day event should start. + description: Start date for all-day events. selector: text: multiline: true default: |- - Use either the start_date parameter or the start_date_time parameter, but not both. - This argument specifies the start date of an all-day event in the format YYYY-MM-DD. - Use start_date for date-only requests (no time-of-day mentioned). - When using start_date (all-day events), you must also provide end_date. Do not provide end_date_time. - If the user does not specify an end date, you must still provide end_date = start_date + 1 day. Do not ask clarifying questions. + Use ONLY for all-day events (YYYY-MM-DD). Excludes start_date_time. end_date_prompt: name: End Date Prompt - description: The prompt which will be used for the LLM can provide the date the all-day event should end. + description: End date for all-day events. selector: text: multiline: true default: |- - Use either the end_date parameter or the end_date_time parameter, but not both. - This argument specifies the end date of an all-day event in the format YYYY-MM-DD. - For all-day events, you must provide end_date and it must be on or after start_date. - Do not provide end_date_time when start_date is used. - If the user did not specify an end date, infer and provide end_date = start_date + 1 day. Do not ask clarifying questions. + Mandatory for all-day events. Default: start + 1 day. Excludes end_date_time. mode: queued max: !input simultaneous max_exceeded: silent -description: Creates a new calendar event with specified details. +description: Adds a new event to a specified calendar. Handles both timed and all-day events with mandatory start/end details. variables: - version: 20251116 + version: 20260207 fields: summary: selector: diff --git a/date_lookup_and_conversion_full_llm.yaml b/date_lookup_and_conversion_full_llm.yaml index a1e5f53..2f7f809 100644 --- a/date_lookup_and_conversion_full_llm.yaml +++ b/date_lookup_and_conversion_full_llm.yaml @@ -48,9 +48,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - It must be one of the following two values: 's2l' to convert a Solar date to a Lunar date, or 'l2s' to convert a Lunar date to a Solar date. - After obtaining the result, ensure the response clearly specifies the day of the week, the Solar date, the Lunar date, and the number of days remaining or days elapsed. + Mandatory. 's2l' (Solar to Lunar) or 'l2s' (Lunar to Solar). Response must include: day of week, both dates, and days remaining/elapsed. date_prompt: name: Date Prompt description: The prompt which will be used for the LLM can provide the input date for the conversion. @@ -58,10 +56,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify the date for the requested conversion using the format YYYY-MM-DD. - Always include the relevant date: today's date for today's request, tomorrow's date for tomorrow's request. - If the request does not specify a year, assume the current year. + Mandatory. Date (YYYY-MM-DD). If year unspecified, use current year. Use today/tomorrow as needed. leap_month_prompt: name: Leap Month Prompt description: The prompt which will be used for the LLM can provide the leap month for the conversion. @@ -69,14 +64,12 @@ blueprint: text: multiline: true default: |- - This argument is optional. - Use this argument only when converting Lunar dates to Solar dates. - It must be one of the following two values: 'true' for a leap month, or 'false' for a regular month. + Optional for l2s. 'true' for leap month, 'false' for regular. Do not use for s2l. mode: parallel max_exceeded: silent -description: Converts dates between Solar and Lunar calendars, looks up auspicious/inauspicious days according to East Asian traditions, and determines the day of the week for any given date. +description: Converts dates between Solar and Lunar calendars, looks up auspicious days, and determines the day of the week. variables: - version: 20251116 + version: 20260207 fields: conversion_type: name: Conversion Type diff --git a/device_control_timer_full_llm.yaml b/device_control_timer_full_llm.yaml index fa49567..dee60dd 100644 --- a/device_control_timer_full_llm.yaml +++ b/device_control_timer_full_llm.yaml @@ -87,9 +87,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify at least one device name to control. - When controlling multiple devices, separate each device name with a semicolon. + Mandatory. Provide device names to control. Use semicolons (;) to separate multiple names. control_prompt: name: Control Prompt description: The prompt which will be used for the LLM can provide the action. @@ -97,8 +95,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify the desired action using one of the following two values: 'true' to turn on the device, or 'false' to turn off the device. + Mandatory. Action: 'true' (ON), 'false' (OFF). Do not guess. timer_prompt: name: Timer Prompt description: The prompt which will be used for the LLM can provide the delay of action. @@ -106,15 +103,12 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify the delay time using the format HH:MM:SS. - The delay is relative to the current time. - If a query specifies a particular target time, calculate the delay from the current time to that specified time + Mandatory. Delay as HH:MM:SS. Calculate from current time if a target time is specified. Relative to now. mode: parallel max_exceeded: silent -description: Sets a timer for controlling one or more specified devices. +description: Simple one-time timer for turning devices on or off after a delay. Use for basic "turn off in X minutes" requests. variables: - version: 20251116 + version: 20260207 fields: entities: name: Entities diff --git a/device_control_tool.yaml b/device_control_tool.yaml index 83644f1..7bf7cdc 100644 --- a/device_control_tool.yaml +++ b/device_control_tool.yaml @@ -34,7 +34,7 @@ mode: parallel max: !input simultaneous max_exceeded: silent variables: - version: 20250923 + version: 20260207 fields: devices: name: Devices diff --git a/device_location_lookup_full_llm.yaml b/device_location_lookup_full_llm.yaml index f2bb591..9e42023 100644 --- a/device_location_lookup_full_llm.yaml +++ b/device_location_lookup_full_llm.yaml @@ -81,17 +81,12 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify the name of one or more devices whose location is actively tracked by a Home Assistant sensor (device_tracker). - Use this for finding things that report their own real-time position. This tool cannot retrieve information that a user has manually saved as a memory or note. - If requesting multiple devices, separate each device name with a semicolon. - If the query does not specify a device, provide all relevant devices based on the context. - After obtaining the result, if the device supports ringing, prompt the user to activate its ringing function. + Mandatory. Provide names of tracked devices (phones, tags, etc.). Use semicolons (;) if multiple. If none specified, provide all relevant tracked devices. Prompt to ring if supported. mode: parallel max_exceeded: silent -description: Retrieves the real-time location of tracked electronic devices (phones, watches, tablets, BLE tags, or beacons). Only for devices currently monitored by Home Assistant, not for user-saved information. +description: Retrieves real-time device locations (phones, tags, etc.) within the home. Use to find missing devices or check room presence. variables: - version: 20251116 + version: 20260207 fields: entities: name: Entities diff --git a/device_ringing_full_llm.yaml b/device_ringing_full_llm.yaml index 65a3d80..c926155 100644 --- a/device_ringing_full_llm.yaml +++ b/device_ringing_full_llm.yaml @@ -41,13 +41,12 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify the Ring ID of the device you want to activate its ringing function. + Mandatory. Valid Ring ID (starts with `notify.mobile_app_`). Do not guess. mode: parallel max_exceeded: silent -description: Triggers a specified device to ring. +description: Triggers a notification or sound on a mobile device to help locate it. Requires a valid Ring ID. variables: - version: 20251116 + version: 20260207 fields: ring_id: name: Ring ID diff --git a/devices_schedules.yaml b/devices_schedules.yaml index 25f89f6..6675b79 100644 --- a/devices_schedules.yaml +++ b/devices_schedules.yaml @@ -91,7 +91,7 @@ max: !input simultaneous max_exceeded: silent variables: - version: 20251209 + version: 20260207 fields: mode: diff --git a/devices_schedules_controller_full_llm.yaml b/devices_schedules_controller_full_llm.yaml index 7e4ba16..370a8e0 100644 --- a/devices_schedules_controller_full_llm.yaml +++ b/devices_schedules_controller_full_llm.yaml @@ -108,86 +108,40 @@ blueprint: text: multiline: true default: |- - Provide exactly one keyword: start, cancel, cancel_all, extend, pause, resume, or list. - - start: queue new timers and also collect entities, action, optional value, and duration. - - cancel: stop the latest active timer per entity. - - cancel_all: stop every active timer (entities input narrows the scope). - - extend: add duration to active timers; duration input is required. - - pause: freeze the latest active timer per entity. - - resume: restart paused timers. - - list: report active timers (entities input narrows the scope). - Respond with the bare keyword, for example: start + Mandatory. exactly one: start (queue), cancel (stop latest), cancel_all (stop every), extend (add duration), pause (freeze), resume (restart), list (report). Output bare keyword only. entities_prompt: name: Entities prompt selector: text: multiline: true default: |- - Provide the entities to control. - - Required when mode is start, cancel, extend, pause, or resume; optional for list or cancel_all. - - Accept entity_id, friendly name, or alias (scenes/scripts may use their spoken name). - - Respond with a semicolon-separated list (preferred). Commas or newlines are also valid. - - Remove duplicates. Leave blank only when the user wants every timer listed or canceled. - Examples: - lamp; bedroom fan - light.bedroom_lamp, fan.living_room - scene Cozy Evening + Entities to control (name/ID/alias). Semicolon-separated. Required for start, cancel, extend, pause, resume. Optional for list, cancel_all. Remove duplicates. action_prompt: name: Action prompt selector: text: multiline: true default: |- - Required only when mode = start. Use lowercase snake_case. - - turn_on / turn_off: generic on/off for switches, lights, fans, media players, or simple climate devices. - - activate: activate a scene. - - run_script: execute another Home Assistant script. - - open / close: operate covers or valves. - - stop_cover: stop cover movement. - - set_position: set cover/valve position (requires 0-100 value). - - set_brightness: set light brightness percent (0-100). - - set_color: set light color name. - - set_fan_speed: set fan speed percent (0-100). - - set_oscillation: set fan oscillation true/false. - - set_temperature: set climate or water_heater temperature. - - set_humidity: set humidifier target percent (0-100). - - set_hvac_mode: set climate mode (cool, heat, auto, etc.). - - media_play / media_pause / media_stop: control media players. - - set_volume: set media player volume percent (0-100). - - start_vacuum / return_vacuum: control robot vacuums. - - press: press a button or input_button. - - announce: speak a text message via TTS (requires text value). - Leave this field empty when mode is not start. + Required for start. use snake_case: turn_on/off, set_brightness/fan_speed/temperature/humidity/hvac_mode/volume, activate (scene), run_script, open/close, stop_cover, set_position, media_play/pause/stop, start/return_vacuum, press (button), announce (TTS). value_prompt: name: Value prompt selector: text: multiline: true default: |- - Provide a value only when mode = start and the chosen action requires one. - - Percentages (0-100): set_position, set_brightness, set_fan_speed, set_humidity. - - Volume: 0-100 (converted to 0.00-1.00 internally). - - Temperature: numeric in the system unit. - - HVAC mode: cool, heat, dry, fan_only, auto, off. - - Colors: textual names (red, blue, warm_white, etc.). - - Booleans: true/false for oscillation. - - Text: the message content for 'announce' action. - Return an empty string when no value is needed. + Required for start if action needs value: 0-100 (pct/vol), numeric (temp), hvac_mode (cool/heat/etc), color name, boolean (oscillation), or text (announce). Empty if not needed. duration_prompt: name: Duration prompt selector: text: multiline: true default: |- - Provide a duration when mode is start or extend. - Accepted formats: HH:MM:SS, MM:SS, or integer seconds. - Examples: 00:10:00 (ten minutes), 01:30 (ninety seconds), 600. - Return an empty string only when the selected mode does not require duration. + Required for start or extend. Formats: HH:MM:SS, MM:SS, or seconds (e.g., 00:10:00, 600). Empty if not needed. mode: parallel max_exceeded: silent -description: Manages and controls schedules/timers for various devices. +description: Advanced controller for managing multiple device timers. Can start, cancel, pause, resume, or list scheduled actions for various entities. variables: - version: 20260114 + version: 20260207 fields: mode: name: Mode diff --git a/devices_schedules_restart_handler.yaml b/devices_schedules_restart_handler.yaml index e752140..fea8e37 100644 --- a/devices_schedules_restart_handler.yaml +++ b/devices_schedules_restart_handler.yaml @@ -71,7 +71,7 @@ mode: queued max_exceeded: silent variables: - version: 20251209 + version: 20260207 triggers: - trigger: homeassistant diff --git a/fan_oscillation_control_full_llm.yaml b/fan_oscillation_control_full_llm.yaml index 803692e..f5ead27 100644 --- a/fan_oscillation_control_full_llm.yaml +++ b/fan_oscillation_control_full_llm.yaml @@ -75,9 +75,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify at least one fan's name to control. - To control multiple fans, separate each fan name with a semicolon. + Mandatory. Provide fan names to control. Use semicolons (;) to separate multiple names. oscillating_prompt: name: Oscillating Prompt description: The prompt which will be used for the LLM can provide the oscillation state. @@ -85,14 +83,12 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Define the oscillation state for the fan you want to set. - It must be one of the following two values: 'true' turns oscillation on, or 'false' turns oscillation off. + Mandatory. Set oscillation: 'true' (ON), 'false' (OFF). Do not guess. mode: parallel max_exceeded: silent -description: Controls the oscillation feature of one or more specified fans. +description: Simple fan oscillation control (on/off) for specified fan entities. variables: - version: 20251116 + version: 20260207 fields: fan_entities: name: Fan Entities diff --git a/fan_speed_and_oscillation_control_full_llm.yaml b/fan_speed_and_oscillation_control_full_llm.yaml index f274970..312a4ae 100644 --- a/fan_speed_and_oscillation_control_full_llm.yaml +++ b/fan_speed_and_oscillation_control_full_llm.yaml @@ -92,9 +92,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify at least one fan's name to control. - To control multiple fans, separate each fan name with a semicolon. + Mandatory. Provide fan names to control. Use semicolons (;) to separate multiple names. oscillating_prompt: name: Oscillating Prompt description: The prompt which will be used for the LLM can provide the oscillation state. @@ -102,9 +100,7 @@ blueprint: text: multiline: true default: |- - Use this argument to set oscillation on/off. - Values: 'true' turns oscillation on, 'false' turns oscillation off. - Include it only when the user asks to (enable/disable) oscillation. + Set oscillation: 'true' for ON, 'false' for OFF. Include ONLY if oscillation change is requested. speed_adjustment_prompt: name: Speed Adjustment Prompt description: The prompt which will be used for the LLM can provide speed adjustment. @@ -112,10 +108,7 @@ blueprint: text: multiline: true default: |- - Use this argument to increase or decrease the fan's speed. - Include this parameter only when the 'percentage' parameter is not included. - Values: 'true' means increase (e.g., increase/turn up/higher), 'false' means decrease (e.g., decrease/turn down/lower). - Do not include both 'speed_adjustment' and 'percentage'. If the user specifies a target like 50%, prefer 'percentage' and omit 'speed_adjustment'. Do not ask clarifying questions. + Adjust speed: 'true' to increase, 'false' to decrease. Include ONLY if percentage is NOT specified. Do not guess. percentage_prompt: name: Percentage Prompt description: The prompt which will be used for the LLM can provide the speed percentage. @@ -123,15 +116,12 @@ blueprint: text: multiline: true default: |- - Use this argument to set the fan's speed to a specific percentage. Accepted range: 1-100. - Include this parameter only when the 'speed_adjustment' parameter is not included. - Map qualitative levels when specified: min=1, low=25, medium=50, high=75, max=100. If the user specifies an exact value (e.g., 60%), use that value. - Do not include both 'percentage' and 'speed_adjustment'. Prefer 'percentage' when the user specifies an explicit target. Do not ask clarifying questions. + Set speed 1-100%. Map levels: min=1, low=25, medium=50, high=75, max=100. Include ONLY if speed_adjustment is NOT specified. mode: parallel max_exceeded: silent -description: Controls the speed and/or oscillation of one or more specified fans. +description: Comprehensive fan control for adjusting speed (percentage/relative) and oscillation state for specified fans. variables: - version: 20251212 + version: 20260207 fields: fan_entities: name: Fan Entities diff --git a/fan_speed_control_full_llm.yaml b/fan_speed_control_full_llm.yaml index 9c6b519..1cf6a5f 100644 --- a/fan_speed_control_full_llm.yaml +++ b/fan_speed_control_full_llm.yaml @@ -89,9 +89,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify at least one fan's name to control. - To control multiple fans, separate each fan name with a semicolon. + Mandatory. Provide fan names to control. Use semicolons (;) to separate multiple names. speed_adjustment_prompt: name: Speed Adjustment Prompt description: The prompt which will be used for the LLM can provide speed adjustment. @@ -99,10 +97,7 @@ blueprint: text: multiline: true default: |- - Use this argument to increase or decrease the fan's speed. - You must include this parameter only when the 'percentage' parameter is not included. - Values: 'true' means increase (e.g., increase/turn up/higher), 'false' means decrease (e.g., decrease/turn down/lower). - Do not include both 'speed_adjustment' and 'percentage'. If the user specifies a target like 50%, prefer 'percentage' and omit 'speed_adjustment'. Do not ask clarifying questions. + Adjust speed: 'true' to increase, 'false' to decrease. Include ONLY if percentage is NOT specified. Do not guess. percentage_prompt: name: Percentage Prompt description: The prompt which will be used for the LLM can provide the speed percentage. @@ -110,15 +105,12 @@ blueprint: text: multiline: true default: |- - Use this argument to set the fan's speed to a specific percentage. Accepted range: 1-100. - You must include this parameter only when the 'speed_adjustment' parameter is not included. - Map qualitative levels when specified: min=1, low=25, medium=50, high=75, max=100. If the user specifies an exact value (e.g., 60%), use that value. - Do not include both 'percentage' and 'speed_adjustment'. Prefer 'percentage' when the user specifies an explicit target. Do not ask clarifying questions. + Set speed 1-100%. Map levels: min=1, low=25, medium=50, high=75, max=100. Include ONLY if speed_adjustment is NOT specified. mode: parallel max_exceeded: silent -description: Controls the speed of one or more specified fans. +description: Simple fan speed control (percentage/relative) for specified fans. Use for basic speed adjustments. variables: - version: 20251116 + version: 20260207 fields: fan_entities: name: Fan Entities diff --git a/file_content_analyzer_full_llm.yaml b/file_content_analyzer_full_llm.yaml index e2724cd..1fbee24 100644 --- a/file_content_analyzer_full_llm.yaml +++ b/file_content_analyzer_full_llm.yaml @@ -52,10 +52,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - The tool can analyze and extract any type of information from an image, video, audio, or document, including text, numbers, objects, speech, and visual features. - Always specify exactly what data should be extracted. - This tool returns plain text only. + Mandatory. Specify exact data to extract from image/video/audio/doc. Returns plain text only. Do not invent details. file_path_prompt: name: File Path Prompt description: The prompt which will be used for the LLM can provide the file path for the query. @@ -63,8 +60,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Always specify a relative file path that starts with `local/`. + Mandatory. Relative path starting with `local/`. Must be precise. mime_type_prompt: name: MIME Type Prompt description: The prompt which will be used for the LLM can provide the MIME type of file for the query. @@ -72,14 +68,12 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Always specify the MIME type of the file. - Choose a value that matches the file contents (for example image/jpeg, video/mp4, audio/mp3, text/plain, or application/pdf). + Mandatory. File MIME type (e.g., image/jpeg, video/mp4, application/pdf). Must match file content. mode: parallel max_exceeded: silent -description: Analyzes the content of a specified file (image, video, audio, or document) based on provided instructions. Capable of visual recognition (e.g. camera snapshots), text summarization, and audio transcription. +description: Processes and analyzes file content (images, video, audio, or text) to provide summaries, transcriptions, or visual recognition based on instructions. variables: - version: 20251209 + version: 20260207 fields: instructions: name: Instructions diff --git a/get_youtube_video_info_full_llm.yaml b/get_youtube_video_info_full_llm.yaml index 5241a43..3df185d 100644 --- a/get_youtube_video_info_full_llm.yaml +++ b/get_youtube_video_info_full_llm.yaml @@ -89,12 +89,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify at least one YouTube channel name to query video information. - When requesting multiple YouTube channels, separate each channel name with a semicolon. - If the query does not specify a particular channel, provide all relevant channels based on the context. - If the query contains errors caused by user mispronunciation, correct it to the most likely accurate channel name. - After obtaining the results, prompt the user to select a video to play on the TV. Add an ordinal number to each video to simplify selection. Do not include the Media ID in your response. + Mandatory. YouTube channel names. Semicolon-separated if multiple. Silence-correct mispronunciations. After results, ask to play; use ordinal numbers, omit Media IDs. period_length_prompt: name: Period Length Prompt description: The prompt which will be used for the LLM can provide the length of the period for the query. @@ -102,14 +97,12 @@ blueprint: text: multiline: true default: |- - This argument is optional. - It specifies the number of days since the videos were published. - The default is 3 days. The minimum is 1 day, and the maximum is 30 days. "Today" means 1 day, "This week" means 7 days, and "This month" means 30 days. + Optional. Days since published (1-30). Default: 3. Today=1, Week=7, Month=30. mode: parallel max_exceeded: silent -description: Retrieves a list of recent videos from one or more specified YouTube channels. +description: Fetches a list of the most recent video uploads from one or more specified YouTube channels within a set timeframe. variables: - version: 20251116 + version: 20260207 fields: entities: name: Entities diff --git a/home_assistant_voice_instructions.md b/home_assistant_voice_instructions.md index 4054d72..a8f5c54 100644 --- a/home_assistant_voice_instructions.md +++ b/home_assistant_voice_instructions.md @@ -12,7 +12,7 @@ **Plain Text Rules**: If no tool is needed, output the final user-facing answer in plain text only. Do not use Markdown, LaTeX, JSON, code formatting, emojis, mathematical expressions, symbolic notation, or any emphasis markup. Diacritics and characters from the user's language are allowed. **Follow-up Question Policy**: After each plain-text answer, ask if the user needs anything else, unless you already requested missing information or the user's message clearly ends the conversation. Tool calls do not require or include the follow-up question. Any brief or very short user response that indicates gratitude, acknowledgment, or refusal with no new request must always be treated as the end of the conversation. The follow-up question must be the final sentence, must end with a question mark, and must not be followed by any extra text. **Tools Usage and Error Policy**: Use the appropriate tool whenever the user's request requires it. If a tool call fails, returns an error, or produces an empty, malformed, or unusable result, it must always be considered failed. Automatically try another relevant tool if possible, asking the user only when essential information is missing. As a general principle, if a tool designed for real-time or sensor-based data returns an empty result, you should try a tool that searches for manually saved notes or static information related to the same query. Never output fake tool calls, code, or reasoning steps. When not invoking a tool, output only the final user-facing answer in plain text. If all tools fail, respond with a short one-line fallback in the user's language. -# END OF SYSTEM MESSAGE +**Other Policies** ``` ## Chi tiết @@ -50,7 +50,7 @@ - **Đánh dấu kết thúc bản chỉ dẫn:** Mốc đánh dấu kết thúc phần chỉ dẫn tùy chỉnh, giúp ngăn cách rõ ràng với các chỉ dẫn mặc định hoặc ngữ cảnh bổ sung của Home Assistant. ```text -# END OF SYSTEM MESSAGE +**Other Policies** ``` ## Câu hỏi thường gặp (FAQ) diff --git a/home_assistant_voice_instructions_en.md b/home_assistant_voice_instructions_en.md index 1a7612f..9f4e1e2 100644 --- a/home_assistant_voice_instructions_en.md +++ b/home_assistant_voice_instructions_en.md @@ -12,7 +12,7 @@ **Plain Text Rules**: If no tool is needed, output the final user-facing answer in plain text only. Do not use Markdown, LaTeX, JSON, code formatting, emojis, mathematical expressions, symbolic notation, or any emphasis markup. Diacritics and characters from the user's language are allowed. **Follow-up Question Policy**: After each plain-text answer, ask if the user needs anything else, unless you already requested missing information or the user's message clearly ends the conversation. Tool calls do not require or include the follow-up question. Any brief or very short user response that indicates gratitude, acknowledgment, or refusal with no new request must always be treated as the end of the conversation. The follow-up question must be the final sentence, must end with a question mark, and must not be followed by any extra text. **Tools Usage and Error Policy**: Use the appropriate tool whenever the user's request requires it. If a tool call fails, returns an error, or produces an empty, malformed, or unusable result, it must always be considered failed. Automatically try another relevant tool if possible, asking the user only when essential information is missing. As a general principle, if a tool designed for real-time or sensor-based data returns an empty result, you should try a tool that searches for manually saved notes or static information related to the same query. Never output fake tool calls, code, or reasoning steps. When not invoking a tool, output only the final user-facing answer in plain text. If all tools fail, respond with a short one-line fallback in the user's language. -# END OF SYSTEM MESSAGE +**Other Policies** ``` ## Details @@ -50,7 +50,7 @@ - **End Marker:** A marker to indicate the end of the custom system prompt, clearly separating it from default instructions or additional context provided by Home Assistant. ```text -# END OF SYSTEM MESSAGE +**Other Policies** ``` ## FAQ diff --git a/memory_tool_full_llm.yaml b/memory_tool_full_llm.yaml index 5a3db26..3303a77 100644 --- a/memory_tool_full_llm.yaml +++ b/memory_tool_full_llm.yaml @@ -49,10 +49,7 @@ blueprint: text: multiline: true default: |- - Required for every request. - Choose exactly one operation: set (save/update), get (retrieve), search (find), forget (delete). - Output exactly one: set|get|search|forget. - Only fill the fields needed for that operation; leave others empty or default. + Mandatory. Choose one: set (save), get (retrieve), search (find), forget (delete). Output exactly: set|get|search|forget. key_prompt: name: Key Prompt description: Instruction shown to the LLM for providing the key. @@ -60,12 +57,7 @@ blueprint: text: multiline: true default: |- - Required when operation = set|get|forget. Ignored if operation = search. - Provide a concise key for a piece of information the user has manually saved. - Use this for retrieving facts, notes, or locations that are not actively tracked by a sensor. - Derive the key from the user's main concept, keeping their original language. - Do not translate or paraphrase. If the user provides a key, use it exactly. - Output only the key. If unsure, use the 'search' operation instead. + Required for set|get|forget. Concise key in user language. No translation/paraphrase. Output only the key. Use 'search' if unsure. value_prompt: name: Value Prompt description: Instruction shown to the LLM for providing the value. @@ -73,9 +65,7 @@ blueprint: text: multiline: true default: |- - Required only when operation = set. - Value to store for the key. Output the raw value only, plain text or JSON. - Do not add quotes, labels, or explanations. This is a tool parameter, not a user-facing reply. + Required for set. Raw value only (text/JSON). No quotes/explanations. scope_prompt: name: Scope Prompt description: Instruction shown to the LLM for choosing the scope. @@ -83,8 +73,7 @@ blueprint: text: multiline: true default: |- - Required only when operation = set. - Who it applies to: user|household|session. Output one token only. Default = user. + Required for set. user|household|session. One token only. Default: user. expiration_days_prompt: name: Expiration (days) Prompt description: Instruction shown to the LLM for providing expiration. @@ -92,8 +81,7 @@ blueprint: text: multiline: true default: |- - Required only when operation = set. - Integer days before expiry (0 = forever). Default = 180. Range 0-3650. + Required for set. Days before expiry (0 = forever). Default: 180. Range 0-3650. tags_prompt: name: Tags Prompt description: Instruction shown to the LLM for providing tags. @@ -101,10 +89,7 @@ blueprint: text: multiline: true default: |- - Required only when operation = set. - Generate a few short, meaningful keywords in the same language as the user's input. - If no clear keywords exist, use the main user phrase as a single tag. - If that is not possible, reuse the key. + Required for set. Meaningful keywords in user language. Use phrase/key if no keywords. force_new_prompt: name: Force New Prompt description: Instruction shown to the LLM for deciding whether to override duplicate-tag protection. @@ -112,10 +97,7 @@ blueprint: text: multiline: true default: |- - Optional, only used when operation = set. - Output true only if the user explicitly confirms creating a new entry despite duplicate tags. - Otherwise output false (default). - Output exactly: true|false. + Optional for set. true|false. Output 'true' ONLY if user confirms duplicate override. Default: false. query_prompt: name: Query Prompt description: Instruction shown to the LLM for providing the search query. @@ -123,11 +105,7 @@ blueprint: text: multiline: true default: |- - Required only when operation = search. - Provide a search term for information the user has manually saved. - Use this for searching memories or notes, not for finding the real-time position of a tracked device. - If the user's input is short, use it as the query. If long, use only the main keywords. - Do not translate, paraphrase, or add punctuation. Output only the query text. + Required for search. Search term or keywords. No translation/paraphrase. Output only query text. search_limit_prompt: name: Search Limit Prompt description: Instruction shown to the LLM for providing the search limit. @@ -135,8 +113,7 @@ blueprint: text: multiline: true default: |- - Required only when operation = search. - Integer 1-50. Default = 5. Output an integer only. + Required for search. Integer 1-50. Default: 5. Integer only. fields: operation: name: Operation @@ -210,9 +187,9 @@ fields: mode: box mode: restart max_exceeded: silent -description: Provides read and write access to user-saved memory, allowing the assistant to store, retrieve, or look up facts, notes, or locations. Not for real-time device tracking. Prefer search for recall, and confirm success only when the backend returns `status=ok`. +description: Manages personal and household memory. Use to save, retrieve, search, or delete persistent notes and facts reliably. Prefer search for recall. variables: - version: 20251116 + version: 20260207 sequence: - variables: op: "{{ operation | default('set') }}" diff --git a/play_youtube_video_full_llm.yaml b/play_youtube_video_full_llm.yaml index 48de8c5..ac83b45 100644 --- a/play_youtube_video_full_llm.yaml +++ b/play_youtube_video_full_llm.yaml @@ -51,13 +51,12 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify the Media ID of the video you want to play. + Mandatory. YouTube video ID. Do not guess. mode: parallel max_exceeded: silent -description: Plays a specified YouTube video on a compatible device. +description: Initiates playback of a specific YouTube video (by ID) on a supported media player device. variables: - version: 20251116 + version: 20260207 fields: media_id: name: Media ID diff --git a/send_to_telegram_full_llm.yaml b/send_to_telegram_full_llm.yaml index b9b3ef6..68d9333 100644 --- a/send_to_telegram_full_llm.yaml +++ b/send_to_telegram_full_llm.yaml @@ -76,12 +76,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify a brief overview, such as the name of a person, object, or location title. - Keep it short (ideally <= 10 words). No extra commentary, no markdown, emojis, or HTML. - If content_type is image, write a concise caption that clearly describes the image subject. - Return only the plain text value. - When submitting multiple items, make sure each one must be sent separately through a separate tool call. + Mandatory. ≤10 words overview (person/object/location). If image, write caption. Plain text only. For multiple items, use separate tool calls. detail_prompt: name: Detail Prompt description: Prompt shown to the LLM to request optional supporting details for the message or image. @@ -89,12 +84,7 @@ blueprint: text: multiline: true default: |- - This argument is optional. - Specify clear and specific details, such as comprehensive information or a detailed description of the subject. - No links, no markdown/emojis, no additional commentary, and avoid repeating the summary. - If content_type is image, provide short optional supporting text to appear under the image (leave blank if not needed). - Return only the plain text value. - When submitting multiple items, make sure each one must be sent separately through a separate tool call. + Optional. Full details. No links/markdown/emojis. Avoid repeating summary. Return plain text only. content_type_prompt: name: Content Type Prompt description: Prompt shown to the LLM to decide if the tool should send information, a location, or an image. @@ -102,14 +92,8 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Return exactly one of the following options: information, location, image. - Return only the word, without quotes or extra text. - Choose location for any place/address/directions/map intent. - Do not choose information in these cases. - Choose image when the user asks to send, share, or forward a picture, photo, screenshot, or any visual media. Do not choose other types in these cases. When selecting image, you must also supply image_path with a valid media path. - Otherwise choose information. - When submitting multiple items, make sure each one must be sent separately through a separate tool call. + Mandatory. exactly one: information, location, image. location=place/address/map. image=visual media (+ image_path). + When submitting multiple items, use separate tool calls for each. location_prompt: name: Location Prompt description: Prompt shown to the LLM to request the location value when sending a place. @@ -117,10 +101,7 @@ blueprint: text: multiline: true default: |- - This argument is optional. Use only when content_type is location. - Return the address of the location. Names only; no commas, prefixes or punctuation; single spaces. - If content_type is not location: leave this blank. - Return only the value. + Optional for location. Address only. No commas/punctuation. Regular spaces. image_path_prompt: name: Image Path Prompt description: Prompt shown to the LLM to request the media path when sending an image. @@ -128,12 +109,7 @@ blueprint: text: multiline: true default: |- - This argument is optional. Use only when content_type is image. - Specify the local or media path to the image that should be sent (for example: /media/... or local/...). - The path must already exist in Home Assistant and point to an actual image file. - When unknown or not specified by the user, leave this blank and do not guess. - If content_type is not image: leave this blank. - Return only the value. + Optional for image. Existing path (local/ or /media/). Do not guess if unknown. chat_id_override_prompt: name: Chat ID Override Prompt description: Prompt shown to the LLM to request an alternate chat when needed. @@ -141,10 +117,7 @@ blueprint: text: multiline: true default: |- - This argument is optional. Specify only when the user explicitly wants to send the message to a different chat than the default configuration. - Return the exact Telegram chat ID (accept negative IDs for supergroups). No spaces, words, or extra commentary. - If the user does not specify a chat ID, leave this blank. - Return only the value. + Optional. User-specified Telegram ID. Digits only (can be negative). No commentary. message_thread_id_override_prompt: name: Message Thread ID Override Prompt description: Prompt shown to the LLM to request a different topic when needed. @@ -152,16 +125,13 @@ blueprint: text: multiline: true default: |- - This argument is optional. Specify only when the user requests a specific message thread (topic) different from the default configuration. - Return the numeric thread (topic) ID. Digits only; no punctuation or additional text. - If the user does not specify a thread ID, leave this blank. - Return only the value. + Optional. User-specified numeric thread/topic ID. Digits only. mode: queued max: 30 max_exceeded: silent -description: Sends a message to a specified Telegram chat. +description: Sends text messages, locations, or images via Telegram. Use for notifications, automated alerts, and sharing location or visual media. variables: - version: 20251116 + version: 20260207 fields: summary: name: Summary diff --git a/send_to_zalo_bot_full_llm.yaml b/send_to_zalo_bot_full_llm.yaml index 97b3fc6..c4e1a4d 100644 --- a/send_to_zalo_bot_full_llm.yaml +++ b/send_to_zalo_bot_full_llm.yaml @@ -68,12 +68,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify a brief overview, such as the name of a person, object, or location title. - Keep it short (ideally <= 10 words). No extra commentary, no markdown, emojis, or HTML. - If content_type is image, write a concise caption that clearly describes the image subject. - Return only the plain text value. - When submitting multiple items, make sure each one must be sent separately through a separate tool call. + Mandatory. ≤10 words overview (person/object/location). If image, write caption. Plain text only. For multiple items, use separate tool calls. detail_prompt: name: Detail Prompt description: The prompt which will be used for the LLM can provide the message detail. @@ -81,12 +76,7 @@ blueprint: text: multiline: true default: |- - This argument is optional. - Specify clear and specific details, such as comprehensive information or a detailed description of the subject. - No links, no markdown/emojis, no additional commentary, and avoid repeating the summary. - If content_type is image, provide short optional supporting text to appear under the image (leave blank if not needed). - Return only the plain text value. - When submitting multiple items, make sure each one must be sent separately through a separate tool call. + Optional. Full details. No links/markdown/emojis. Plain text only. For multiple items, use separate tool calls. content_type_prompt: name: Content Type Prompt description: The prompt which will be used for the LLM can specify the type of content for the message. @@ -94,14 +84,8 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Return exactly one of the following options: information, location, image. - Return only the word, without quotes or extra text. - Choose location for any place/address/directions/map intent. - Do not choose information in these cases. - Choose image when the user requests an image or photo to be sent and provides or implies a path. - Otherwise choose information. - When submitting multiple items, make sure each one must be sent separately through a separate tool call. + Mandatory. exactly one: information, location, image. location=place/address/map. image=visual media (+ image_path). + When submitting multiple items, use separate tool calls for each. location_prompt: name: Location Prompt description: The prompt which will be used for the LLM can provide the location for the place. @@ -109,10 +93,7 @@ blueprint: text: multiline: true default: |- - This argument is optional. Use only when content_type is location. - Return the address of the location. Names only; no commas, prefixes or punctuation; single spaces. - If content_type is not location: leave this blank. - Return only the value. + Optional for location. Address only. No commas/punctuation. Regular spaces. image_path_prompt: name: Image Path Prompt description: Prompt shown to the LLM to request the media path when sending an image. @@ -120,12 +101,7 @@ blueprint: text: multiline: true default: |- - This argument is optional. Use only when content_type is image. - Specify the local or media path to the image that should be sent (for example: /media/... or local/...). - The path must already exist in Home Assistant and point to an actual image file. - When unknown or not specified by the user, leave this blank and do not guess. - If content_type is not image: leave this blank. - Return only the value. + Optional for image. Existing path (local/ or /media/). Do not guess if unknown. chat_id_override_prompt: name: Chat ID Override Prompt description: Prompt shown to the LLM to request an alternate chat when needed. @@ -133,16 +109,13 @@ blueprint: text: multiline: true default: |- - This argument is optional. Specify only when the user explicitly wants to send the message to a different chat than the default configuration. - Return the exact Zalo chat ID. No spaces, words, or extra commentary. - If the user does not specify a chat ID, leave this blank. - Return only the value. + Optional. User-specified Zalo ID. No spaces/commentary. mode: queued max: 30 max_exceeded: silent -description: Sends a message to a specified Zalo chat. +description: Sends text messages, locations, or images via Zalo. Use for notifications, automated alerts, and sharing location or visual media. variables: - version: 20251116 + version: 20260207 fields: summary: name: Summary diff --git a/send_to_zalo_custom_bot_full_llm.yaml b/send_to_zalo_custom_bot_full_llm.yaml index 51f7dc1..95d1560 100644 --- a/send_to_zalo_custom_bot_full_llm.yaml +++ b/send_to_zalo_custom_bot_full_llm.yaml @@ -73,12 +73,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify a brief overview, such as the name of a person, object, or location title. - Keep it short (ideally <= 10 words). No extra commentary, no markdown, emojis, or HTML. - If content_type is image, write a concise caption that clearly describes the image subject. - Return only the plain text value. - When submitting multiple items, make sure each one must be sent separately through a separate tool call. + Mandatory. ≤10 words overview (person/object/location). If image, write caption. Plain text only. For multiple items, use separate tool calls. detail_prompt: name: Detail Prompt description: The prompt which will be used for the LLM can provide the message detail. @@ -86,12 +81,7 @@ blueprint: text: multiline: true default: |- - This argument is optional. - Specify clear and specific details, such as comprehensive information or a detailed description of the subject. - No links, no markdown/emojis, no additional commentary, and avoid repeating the summary. - If content_type is image, provide short optional supporting text to appear under the image (leave blank if not needed). - Return only the plain text value. - When submitting multiple items, make sure each one must be sent separately through a separate tool call. + Optional. Full details. No links/markdown/emojis. Plain text only. For multiple items, use separate tool calls. content_type_prompt: name: Content Type Prompt description: The prompt which will be used for the LLM can specify the type of content for the message. @@ -99,14 +89,8 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Return exactly one of the following options: information, location, image. - Return only the word, without quotes or extra text. - Choose location for any place/address/directions/map intent. - Do not choose information in these cases. - Choose image when the user requests an image or photo to be sent and provides or implies a path. - Otherwise choose information. - When submitting multiple items, make sure each one must be sent separately through a separate tool call. + Mandatory. exactly one: information, location, image. location=place/address/map. image=visual media (+ image_path). + When submitting multiple items, use separate tool calls for each. location_prompt: name: Location Prompt description: The prompt which will be used for the LLM can provide the location for the place. @@ -114,10 +98,7 @@ blueprint: text: multiline: true default: |- - This argument is optional. Use only when content_type is location. - Return the address of the location. Names only; no commas, prefixes or punctuation; single spaces. - If content_type is not location: leave this blank. - Return only the value. + Optional for location. Address only. No commas/punctuation. Regular spaces. image_path_prompt: name: Image Path Prompt description: Prompt shown to the LLM to request the media path when sending an image. @@ -125,18 +106,13 @@ blueprint: text: multiline: true default: |- - This argument is optional. Use only when content_type is image. - Specify the local or media path to the image that should be sent (for example: /media/... or local/...). - The path must already exist in Home Assistant and point to an actual image file. - When unknown or not specified by the user, leave this blank and do not guess. - If content_type is not image: leave this blank. - Return only the value. + Optional for image. Existing path (local/ or /media/). Do not guess if unknown. mode: queued max: 30 max_exceeded: silent -description: Sends a message to a specified Zalo chat. +description: Sends text messages, locations, or images via Zalo. Use for notifications, automated alerts, and sharing location or visual media. variables: - version: 20251116 + version: 20260207 fields: summary: name: Summary diff --git a/telegram_bot_webhook.yaml b/telegram_bot_webhook.yaml index 93f8c3b..6c5c3b9 100644 --- a/telegram_bot_webhook.yaml +++ b/telegram_bot_webhook.yaml @@ -99,7 +99,7 @@ mode: queued max: 30 max_exceeded: silent variables: - version: 20251209 + version: 20260207 chat_ids: !input chat_ids user_ids: !input user_ids language: !input language @@ -171,10 +171,10 @@ actions: - variables: agent_input: system: |- - Always use the *File Content Analyzer* to analyze file content and identify the user's request. - If the prompt is empty, always treat any instruction or question within the file (via transcription/OCR) as the user's request and execute it directly. - Only when no instruction or question exists in the file, return a concise summary of its content. - Never ask the user for confirmation. Use any other tools as needed, and provide a clear, complete response. + Mandatory: Always use the *File Content Analyzer* to analyze file content. + If the prompt text is empty, treat any instruction or question found within the file (via transcription/OCR) as the user's request and execute it directly. + Return a concise summary ONLY when no specific instruction exists in the file. + NEVER ask the user for confirmation. Always respond in the user's language: {{ language | trim }}. prompt: |- {% if trigger.json.message.reply_to_message is defined %} {% @@ -202,10 +202,10 @@ actions: - variables: agent_input: system: |- - Always use the *File Content Analyzer* to analyze file content and identify the user's request. - If the prompt is empty, always treat any instruction or question within the file (via transcription/OCR) as the user's request and execute it directly. - Only when no instruction or question exists in the file, return a concise summary of its content. - Never ask the user for confirmation. Use any other tools as needed, and provide a clear, complete response. + Mandatory: Always use the *File Content Analyzer* to analyze file content. + If the prompt text is empty, treat any instruction or question found within the file (via transcription/OCR) as the user's request and execute it directly. + Return a concise summary ONLY when no specific instruction exists in the file. + NEVER ask the user for confirmation. Always respond in the user's language: {{ language | trim }}. prompt: |- {% if trigger.json.message.reply_to_message is defined %} {% @@ -233,10 +233,10 @@ actions: - variables: agent_input: system: |- - Always use the *File Content Analyzer* to analyze file content and identify the user's request. - If the prompt is empty, always treat any instruction or question within the file (via transcription/OCR) as the user's request and execute it directly. - Only when no instruction or question exists in the file, return a concise summary of its content. - Never ask the user for confirmation. Use any other tools as needed, and provide a clear, complete response. + Mandatory: Always use the *File Content Analyzer* to analyze file content. + If the prompt text is empty, treat any instruction or question found within the file (via transcription/OCR) as the user's request and execute it directly. + Return a concise summary ONLY when no specific instruction exists in the file. + NEVER ask the user for confirmation. Always respond in the user's language: {{ language | trim }}. prompt: |- {% if trigger.json.message.reply_to_message is defined %} {% @@ -264,10 +264,10 @@ actions: - variables: agent_input: system: |- - Always use the *File Content Analyzer* to analyze file content and identify the user's request. - If the prompt is empty, always treat any instruction or question within the file (via transcription/OCR) as the user's request and execute it directly. - Only when no instruction or question exists in the file, return a concise summary of its content. - Never ask the user for confirmation. Use any other tools as needed, and provide a clear, complete response. + Mandatory: Always use the *File Content Analyzer* to analyze file content. + If the prompt text is empty, treat any instruction or question found within the file (via transcription/OCR) as the user's request and execute it directly. + Return a concise summary ONLY when no specific instruction exists in the file. + NEVER ask the user for confirmation. Always respond in the user's language: {{ language | trim }}. prompt: |- {% if trigger.json.message.reply_to_message is defined %} {% @@ -295,10 +295,10 @@ actions: - variables: agent_input: system: |- - Always use the *File Content Analyzer* to analyze file content and identify the user's request. - If the prompt is empty, always treat any instruction or question within the file (via transcription/OCR) as the user's request and execute it directly. - Only when no instruction or question exists in the file, return a concise summary of its content. - Never ask the user for confirmation. Use any other tools as needed, and provide a clear, complete response. + Mandatory: Always use the *File Content Analyzer* to analyze file content. + If the prompt text is empty, treat any instruction or question found within the file (via transcription/OCR) as the user's request and execute it directly. + Return a concise summary ONLY when no specific instruction exists in the file. + NEVER ask the user for confirmation. Always respond in the user's language: {{ language | trim }}. prompt: |- {% if trigger.json.message.reply_to_message is defined %} {% @@ -326,10 +326,10 @@ actions: - variables: agent_input: system: |- - Always use the *File Content Analyzer* to analyze file content and identify the user's request. - If the prompt is empty, always treat any instruction or question within the file (via transcription/OCR) as the user's request and execute it directly. - Only when no instruction or question exists in the file, return a concise summary of its content. - Never ask the user for confirmation. Use any other tools as needed, and provide a clear, complete response. + Mandatory: Always use the *File Content Analyzer* to analyze file content. + If the prompt text is empty, treat any instruction or question found within the file (via transcription/OCR) as the user's request and execute it directly. + Return a concise summary ONLY when no specific instruction exists in the file. + NEVER ask the user for confirmation. Always respond in the user's language: {{ language | trim }}. prompt: |- {% if trigger.json.message.reply_to_message is defined %} {% diff --git a/traffic_fine_lookup_full_llm.yaml b/traffic_fine_lookup_full_llm.yaml index 146374d..2f4c2ba 100644 --- a/traffic_fine_lookup_full_llm.yaml +++ b/traffic_fine_lookup_full_llm.yaml @@ -56,10 +56,7 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify the vehicle's license plate number to check for any traffic fines. - A license plate number consists of a continuous sequence of alphanumeric characters with no spaces. - If a license plate contains errors caused by user mispronunciation, correct it to the most likely accurate license plate number. + Mandatory. Alphanumeric, no spaces. Silence-correct mispronunciations. Correct to most likely intended plate. vehicle_type_prompt: name: Vehicle Type Prompt description: The prompt which will be used for the LLM can provide the type of vehicle for the query. @@ -67,14 +64,12 @@ blueprint: text: multiline: true default: |- - This argument is mandatory and must always be included. - Specify the type of vehicle to check for any traffic fines. - It must be one of the following three values: '1' for a car, '2' for a motorbike, or '3' for an electric bicycle. + Mandatory. exact value: '1' (car), '2' (motorbike), '3' (electric bicycle). Do not guess. mode: parallel max_exceeded: silent -description: Looks up information about traffic fines. +description: Queries traffic violation databases using a license plate and vehicle type to retrieve fine details accurately. variables: - version: 20251116 + version: 20260207 fields: license_plate: name: License Plate diff --git a/zalo_bot_webhook.yaml b/zalo_bot_webhook.yaml index 3c5b594..c575855 100644 --- a/zalo_bot_webhook.yaml +++ b/zalo_bot_webhook.yaml @@ -99,7 +99,7 @@ mode: queued max: 30 max_exceeded: silent variables: - version: 20251209 + version: 20260207 chat_ids: !input chat_ids user_ids: !input user_ids language: !input language @@ -164,10 +164,10 @@ actions: - variables: agent_input: system: |- - Always use the *File Content Analyzer* to analyze file content and identify the user's request. - If the prompt is empty, always treat any instruction or question within the file (via transcription/OCR) as the user's request and execute it directly. - Only when no instruction or question exists in the file, return a concise summary of its content. - Never ask the user for confirmation. Use any other tools as needed, and provide a clear, complete response. + Mandatory: Always use the *File Content Analyzer* to analyze file content. + If the prompt text is empty, treat any instruction or question found within the file (via transcription/OCR) as the user's request and execute it directly. + Return a concise summary ONLY when no specific instruction exists in the file. + NEVER ask the user for confirmation. Always respond in the user's language: {{ language | trim }}. prompt: |- {{ trigger.json.message.caption }} diff --git a/zalo_custom_bot_webhook.yaml b/zalo_custom_bot_webhook.yaml index df847f0..d5acfcd 100644 --- a/zalo_custom_bot_webhook.yaml +++ b/zalo_custom_bot_webhook.yaml @@ -99,7 +99,7 @@ mode: queued max: 30 max_exceeded: silent variables: - version: 20251209 + version: 20260207 thread_ids: !input thread_ids user_ids: !input user_ids language: !input language @@ -166,10 +166,10 @@ actions: - variables: agent_input: system: |- - Always use the *File Content Analyzer* to analyze file content and identify the user's request. - If the prompt is empty, always treat any instruction or question within the file (via transcription/OCR) as the user's request and execute it directly. - Only when no instruction or question exists in the file, return a concise summary of its content. - Never ask the user for confirmation. Use any other tools as needed, and provide a clear, complete response. + Mandatory: Always use the *File Content Analyzer* to analyze file content. + If the prompt text is empty, treat any instruction or question found within the file (via transcription/OCR) as the user's request and execute it directly. + Return a concise summary ONLY when no specific instruction exists in the file. + NEVER ask the user for confirmation. Always respond in the user's language: {{ language | trim }}. prompt: |- {{ trigger.json.data.content.title }}