blueprint: name: Text AI Request description: Send a prompt to Text AI service and store the response in a Text Helper domain: automation source_url: https://github.com/smkrv/ha-text-ai/blob/main/blueprints/automation/ha_text_ai_request.yaml input: trigger_type: name: Trigger Type description: Select the type of trigger for automation default: state selector: select: options: - state - numeric_state - time - template trigger_entity: name: Trigger Entity description: Entity that will trigger this automation selector: entity: {} state_from: name: From State description: Optional 'from state' condition (for state trigger) default: "" selector: text: required: false state_to: name: To State description: Optional 'to state' condition (for state trigger) default: "" selector: text: required: false numeric_above: name: Above Value description: Trigger when numeric value is above (for numeric state) required: false selector: number: mode: box step: 0.1 numeric_below: name: Below Value description: Trigger when numeric value is below (for numeric state) required: false selector: number: mode: box step: 0.1 time_at: name: Time description: Time for the trigger (for time trigger) required: false selector: time: {} template_value: name: Template description: Template condition (for template trigger) required: false selector: template: {} prompt_template: name: Prompt Template description: Template for the prompt. You can use template syntax, e.g., {{ states('sensor.temperature') }} selector: text: multiline: true response_id: name: Response ID description: Unique identifier for the Text Helper that will store the response selector: text: model: name: AI Model description: The AI model to use for generation default: gpt-3.5-turbo selector: select: options: - gpt-4 - gpt-3.5-turbo - gpt-3.5-turbo-16k temperature: name: Temperature description: Controls randomness in the response (0-2) default: 0.7 selector: number: min: 0.0 max: 2.0 step: 0.1 mode: slider max_tokens: name: Max Tokens description: Maximum length of the response default: 150 selector: number: min: 1 max: 4096 step: 1 top_p: name: Top P description: Controls diversity via nucleus sampling default: 1.0 selector: number: min: 0.0 max: 1.0 step: 0.1 mode: slider frequency_penalty: name: Frequency Penalty description: Reduces repetition of token sequences default: 0.0 selector: number: min: -2.0 max: 2.0 step: 0.1 mode: slider presence_penalty: name: Presence Penalty description: Reduces repetition of topics default: 0.0 selector: number: min: -2.0 max: 2.0 step: 0.1 mode: slider mode: queued max_exceeded: silent trigger: - choose: - conditions: - condition: template value_template: "{{ trigger_type == 'state' }}" sequence: - platform: state entity_id: !input trigger_entity from: !input state_from to: !input state_to - conditions: - condition: template value_template: "{{ trigger_type == 'numeric_state' }}" sequence: - platform: numeric_state entity_id: !input trigger_entity above: !input numeric_above below: !input numeric_below - conditions: - condition: template value_template: "{{ trigger_type == 'time' }}" sequence: - platform: time at: !input time_at - conditions: - condition: template value_template: "{{ trigger_type == 'template' }}" sequence: - platform: template value_template: !input template_value variables: prompt_template: !input prompt_template response_id: !input response_id model: !input model temperature: !input temperature max_tokens: !input max_tokens top_p: !input top_p frequency_penalty: !input frequency_penalty presence_penalty: !input presence_penalty action: - service: ha_text_ai.text_ai_call data: prompt: "{{ prompt_template }}" response_id: "{{ response_id }}" model: "{{ model }}" temperature: "{{ temperature }}" max_tokens: "{{ max_tokens }}" top_p: "{{ top_p }}" frequency_penalty: "{{ frequency_penalty }}" presence_penalty: "{{ presence_penalty }}"