mirror of
https://github.com/acon96/home-llm.git
synced 2026-01-09 13:48:05 -05:00
19
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
19
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a bug report about the Home Assistant Component or Addon
|
||||
title: ''
|
||||
labels: bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Logs**
|
||||
If applicable, please upload any error or debug logs output by Home Assistant.
|
||||
|
||||
Please do not report issues with the model generating incorrect output. If you are having trouble getting the correct output from the model, please open a Discussion thread instead.
|
||||
19
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
19
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest a new feature for the Home Assistant Component
|
||||
title: ''
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Please describe what you are trying to do with the component**
|
||||
A clear and concise description of what the missing capability is. (Ex. There is a sampling parameter that I want to use for my model that isn't exposed.)
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
|
||||
Please do not request features for the model as an issue. You can refer to the pinned Discussion thread to make feature requests for the model/dataset.
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,6 +4,7 @@ core/
|
||||
config/
|
||||
.DS_Store
|
||||
data/*.json
|
||||
data/*.jsonl
|
||||
*.pyc
|
||||
main.log
|
||||
.venv
|
||||
|
||||
46
LICENSES.txt
46
LICENSES.txt
@@ -651,4 +651,48 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
SOFTWARE.
|
||||
---
|
||||
|
||||
STABILITY AI NON-COMMERCIAL RESEARCH COMMUNITY LICENSE AGREEMENT
|
||||
Dated: December 06, 2023
|
||||
|
||||
By using or distributing any portion or element of the Models, Software, Software Products or Derivative Works, you agree to be bound by this Agreement.
|
||||
|
||||
"Agreement" means this Stable Non-Commercial Research Community License Agreement.
|
||||
|
||||
“AUP” means the Stability AI Acceptable Use Policy available at https://stability.ai/use-policy, as may be updated from time to time.
|
||||
|
||||
"Derivative Work(s)” means (a) any derivative work of the Software Products as recognized by U.S. copyright laws and (b) any modifications to a Model, and any other model created which is based on or derived from the Model or the Model’s output. For clarity, Derivative Works do not include the output of any Model.
|
||||
|
||||
“Documentation” means any specifications, manuals, documentation, and other written information provided by Stability AI related to the Software.
|
||||
|
||||
"Licensee" or "you" means you, or your employer or any other person or entity (if you are entering into this Agreement on such person or entity's behalf), of the age required under applicable laws, rules or regulations to provide legal consent and that has legal authority to bind your employer or such other person or entity if you are entering in this Agreement on their behalf.
|
||||
|
||||
“Model(s)" means, collectively, Stability AI’s proprietary models and algorithms, including machine-learning models, trained model weights and other elements of the foregoing, made available under this Agreement.
|
||||
|
||||
“Non-Commercial Uses” means exercising any of the rights granted herein for the purpose of research or non-commercial purposes. Non-Commercial Uses does not include any production use of the Software Products or any Derivative Works.
|
||||
|
||||
"Stability AI" or "we" means Stability AI Ltd. and its affiliates.
|
||||
|
||||
|
||||
"Software" means Stability AI’s proprietary software made available under this Agreement.
|
||||
|
||||
“Software Products” means the Models, Software and Documentation, individually or in any combination.
|
||||
|
||||
|
||||
|
||||
1. License Rights and Redistribution.
|
||||
a. Subject to your compliance with this Agreement, the AUP (which is hereby incorporated herein by reference), and the Documentation, Stability AI grants you a non-exclusive, worldwide, non-transferable, non-sublicensable, revocable, royalty free and limited license under Stability AI’s intellectual property or other rights owned or controlled by Stability AI embodied in the Software Products to use, reproduce, distribute, and create Derivative Works of, the Software Products, in each case for Non-Commercial Uses only.
|
||||
b. You may not use the Software Products or Derivative Works to enable third parties to use the Software Products or Derivative Works as part of your hosted service or via your APIs, whether you are adding substantial additional functionality thereto or not. Merely distributing the Software Products or Derivative Works for download online without offering any related service (ex. by distributing the Models on HuggingFace) is not a violation of this subsection. If you wish to use the Software Products or any Derivative Works for commercial or production use or you wish to make the Software Products or any Derivative Works available to third parties via your hosted service or your APIs, contact Stability AI at https://stability.ai/contact.
|
||||
c. If you distribute or make the Software Products, or any Derivative Works thereof, available to a third party, the Software Products, Derivative Works, or any portion thereof, respectively, will remain subject to this Agreement and you must (i) provide a copy of this Agreement to such third party, and (ii) retain the following attribution notice within a "Notice" text file distributed as a part of such copies: "This Stability AI Model is licensed under the Stability AI Non-Commercial Research Community License, Copyright (c) Stability AI Ltd. All Rights Reserved.” If you create a Derivative Work of a Software Product, you may add your own attribution notices to the Notice file included with the Software Product, provided that you clearly indicate which attributions apply to the Software Product and you must state in the NOTICE file that you changed the Software Product and how it was modified.
|
||||
2. Disclaimer of Warranty. UNLESS REQUIRED BY APPLICABLE LAW, THE SOFTWARE PRODUCTS AND ANY OUTPUT AND RESULTS THEREFROM ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. YOU ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USING OR REDISTRIBUTING THE SOFTWARE PRODUCTS, DERIVATIVE WORKS OR ANY OUTPUT OR RESULTS AND ASSUME ANY RISKS ASSOCIATED WITH YOUR USE OF THE SOFTWARE PRODUCTS, DERIVATIVE WORKS AND ANY OUTPUT AND RESULTS.
|
||||
3. Limitation of Liability. IN NO EVENT WILL STABILITY AI OR ITS AFFILIATES BE LIABLE UNDER ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, TORT, NEGLIGENCE, PRODUCTS LIABILITY, OR OTHERWISE, ARISING OUT OF THIS AGREEMENT, FOR ANY LOST PROFITS OR ANY DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL, EXEMPLARY OR PUNITIVE DAMAGES, EVEN IF STABILITY AI OR ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF ANY OF THE FOREGOING.
|
||||
4. Intellectual Property.
|
||||
a. No trademark licenses are granted under this Agreement, and in connection with the Software Products or Derivative Works, neither Stability AI nor Licensee may use any name or mark owned by or associated with the other or any of its affiliates, except as required for reasonable and customary use in describing and redistributing the Software Products or Derivative Works.
|
||||
b. Subject to Stability AI’s ownership of the Software Products and Derivative Works made by or for Stability AI, with respect to any Derivative Works that are made by you, as between you and Stability AI, you are and will be the owner of such Derivative Works
|
||||
c. If you institute litigation or other proceedings against Stability AI (including a cross-claim or counterclaim in a lawsuit) alleging that the Software Products, Derivative Works or associated outputs or results, or any portion of any of the foregoing, constitutes infringement of intellectual property or other rights owned or licensable by you, then any licenses granted to you under this Agreement shall terminate as of the date such litigation or claim is filed or instituted. You will indemnify and hold harmless Stability AI from and against any claim by any third party arising out of or related to your use or distribution of the Software Products or Derivative Works in violation of this Agreement.
|
||||
5. Term and Termination. The term of this Agreement will commence upon your acceptance of this Agreement or access to the Software Products and will continue in full force and effect until terminated in accordance with the terms and conditions herein. Stability AI may terminate this Agreement if you are in breach of any term or condition of this Agreement. Upon termination of this Agreement, you shall delete and cease use of any Software Products or Derivative Works. Sections 2-4 shall survive the termination of this Agreement.
|
||||
|
||||
6. Governing Law. This Agreement will be governed by and construed in accordance with the laws of the United States and the State of California without regard to choice of law
|
||||
principles.
|
||||
|
||||
148
README.md
148
README.md
@@ -1,40 +1,50 @@
|
||||
# Home LLM
|
||||
This project provides the required "glue" components to control your Home Assistant installation with a completely local Large Language Model acting as a personal assistant. The goal is to provide a drop in solution to be used as a "conversation agent" component by Home Assistant.
|
||||
|
||||
## Quick Start
|
||||
Please see the [Setup Guide](./docs/Setup.md) for more information on installation.
|
||||
|
||||
## Home Assistant Component
|
||||
In order to integrate with Home Assistant, we provide a `custom_component` that exposes the locally running LLM as a "conversation agent".
|
||||
|
||||
This component can be interacted with in a few ways:
|
||||
- using a chat interface so you can chat with it.
|
||||
- integrating with Speech-to-Text and Text-to-Speech addons so you can just speak to it.
|
||||
|
||||
The component can either run the model directly as part of the Home Assistant software using llama-cpp-python, or you can run the [oobabooga/text-generation-webui](https://github.com/oobabooga/text-generation-webui) project to provide access to the LLM via an API interface.
|
||||
|
||||
When doing this, you can host the model yourself and point the add-on at machine where the model is hosted, or you can run the model using text-generation-webui using the provided [custom Home Assistant add-on](./addon).
|
||||
|
||||
## Model
|
||||
The "Home" models are a fine tuning of the Phi model series from Microsoft. The model is able to control devices in the user's house as well as perform basic question and answering. The fine tuning dataset is a combination of the [Cleaned Stanford Alpaca Dataset](https://huggingface.co/datasets/yahma/alpaca-cleaned) as well as a [custom synthetic dataset](./data) designed to teach the model function calling based on the device information in the context.
|
||||
The "Home" models are a fine tuning of the Phi model series from Microsoft and the StableLM model series from StabilityAI. The model is able to control devices in the user's house as well as perform basic question and answering. The fine tuning dataset is a [custom synthetic dataset](./data) designed to teach the model function calling based on the device information in the context.
|
||||
|
||||
The latest models can be found on HuggingFace:
|
||||
3B v2 (Based on Phi-2): https://huggingface.co/acon96/Home-3B-v2-GGUF
|
||||
1B v2 (Based on Phi-1.5): https://huggingface.co/acon96/Home-1B-v2-GGUF
|
||||
3B v3 (Based on StableLM-Zephyr-3B): https://huggingface.co/acon96/Home-3B-v3-GGUF (Zephyr prompt format)
|
||||
1B v2 (Based on Phi-1.5): https://huggingface.co/acon96/Home-1B-v2-GGUF (ChatML prompt format)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Old Models</summary>
|
||||
|
||||
3B v1 (Based on Phi-2): https://huggingface.co/acon96/Home-3B-v1-GGUF
|
||||
1B v1 (Based on Phi-1.5): https://huggingface.co/acon96/Home-1B-v1-GGUF
|
||||
3B v2 (Based on Phi-2): https://huggingface.co/acon96/Home-3B-v2-GGUF (ChatML prompt format)
|
||||
3B v1 (Based on Phi-2): https://huggingface.co/acon96/Home-3B-v1-GGUF (ChatML prompt format)
|
||||
1B v1 (Based on Phi-1.5): https://huggingface.co/acon96/Home-1B-v1-GGUF (ChatML prompt format)
|
||||
|
||||
</details>
|
||||
|
||||
Make sure you have `llama-cpp-python>=0.2.29` in order to run these models.
|
||||
|
||||
The main difference between the 2 models (besides parameter count) is the training data. The 1B model is ONLY trained on the synthetic dataset provided in this project, while the 3B model is trained on a mixture of this synthetic dataset, and the cleaned Stanford Alpaca dataset.
|
||||
|
||||
The model is quantized using Llama.cpp in order to enable running the model in super low resource environments that are common with Home Assistant installations such as Raspberry Pis.
|
||||
|
||||
The model can be used as an "instruct" type model using the ChatML prompt format. The system prompt is used to provide information about the state of the Home Assistant installation including available devices and callable services.
|
||||
The model can be used as an "instruct" type model using the [ChatML](https://github.com/MicrosoftDocs/azure-docs/blob/main/articles/ai-services/openai/includes/chat-markup-language.md) or [Zephyr](https://huggingface.co/HuggingFaceH4/zephyr-7b-alpha/discussions/3) prompt format (depends on the model). The system prompt is used to provide information about the state of the Home Assistant installation including available devices and callable services.
|
||||
|
||||
Example "system" prompt:
|
||||
```
|
||||
<|im_start|>system
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed with the information provided only.
|
||||
Services: light.turn_off(), light.turn_on(brightness,rgb_color), fan.turn_on(), fan.turn_off()
|
||||
Devices:
|
||||
light.office 'Office Light' = on;80%
|
||||
fan.office 'Office fan' = off
|
||||
light.kitchen 'Kitchen Light' = on;80%;red
|
||||
light.bedroom 'Bedroom Light' = off<|im_end|>
|
||||
light.bedroom 'Bedroom Light' = off
|
||||
```
|
||||
|
||||
For more about how the model is prompted see [Model Prompting](/docs/Model%20Prompting.md)
|
||||
@@ -42,23 +52,22 @@ For more about how the model is prompted see [Model Prompting](/docs/Model%20Pro
|
||||
Output from the model will consist of a response that should be relayed back to the user, along with an optional code block that will invoke different Home Assistant "services". The output format from the model for function calling is as follows:
|
||||
|
||||
`````
|
||||
<|im_start|>assistant
|
||||
turning on the kitchen lights for you now
|
||||
```homeassistant
|
||||
{ "service": "light.turn_on", "target_device": "light.kitchen" }
|
||||
```<|im_end|>
|
||||
```
|
||||
`````
|
||||
|
||||
Due to the mix of data used during fine tuning, the 3B model is also capable of basic instruct and QA tasks. For example, the model is able to perform basic logic tasks such as the following:
|
||||
Due to the mix of data used during fine tuning, the 3B model is also capable of basic instruct and QA tasks. For example, the model is able to perform basic logic tasks such as the following (Zephyr prompt format shown):
|
||||
|
||||
```
|
||||
<|im_start|>system You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed with the information provided only.
|
||||
<|system|>You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed with the information provided only.
|
||||
*snip*
|
||||
<|im_end|>
|
||||
<|im_start|>user
|
||||
if mary is 7 years old, and I am 3 years older than her. how old am I?<|im_end|>
|
||||
<|im_start|>assistant
|
||||
If Mary is 7 years old, then you are 10 years old (7+3=10).<|im_end|>
|
||||
<|endoftext|>
|
||||
<|user|>
|
||||
if mary is 7 years old, and I am 3 years older than her. how old am I?<|endoftext|>
|
||||
<|assistant|>
|
||||
If Mary is 7 years old, then you are 10 years old (7+3=10).<|endoftext|>
|
||||
```
|
||||
|
||||
### Synthetic Dataset
|
||||
@@ -74,7 +83,7 @@ The 3B model was trained as a LoRA on an RTX 3090 (24GB) using the following set
|
||||
<details>
|
||||
<summary>Training Arguments</summary>
|
||||
|
||||
```
|
||||
```console
|
||||
python3 train.py \
|
||||
--run_name home-3b \
|
||||
--base_model microsoft/phi-2 \
|
||||
@@ -97,7 +106,7 @@ The 1B model was trained as a full fine-tuning on on an RTX 3090 (24GB). Trainin
|
||||
<details>
|
||||
<summary>Training Arguments</summary>
|
||||
|
||||
```
|
||||
```console
|
||||
python3 train.py \
|
||||
--run_name home-1b \
|
||||
--base_model microsoft/phi-1_5 \
|
||||
@@ -113,101 +122,14 @@ python3 train.py \
|
||||
</details>
|
||||
<br/>
|
||||
|
||||
## Home Assistant Component
|
||||
In order to integrate with Home Assistant, we provide a `custom_component` that exposes the locally running LLM as a "conversation agent" that can be interacted with using a chat interface as well as integrate with Speech-to-Text and Text-to-Speech addons to enable interacting with the model by speaking.
|
||||
## Home Assistant Addon
|
||||
In order to facilitate running the project entirely on the system where Home Assistant is installed, there is an experimental Home Assistant Add-on that runs the oobabooga/text-generation-webui to connect to using the "remote" backend options. The addon can be found in the [addon/](./addon/README.md) directory.
|
||||
|
||||
The component can either run the model directly as part of the Home Assistant software using llama-cpp-python, or you can run the [oobabooga/text-generation-webui](https://github.com/oobabooga/text-generation-webui) project to provide access to the LLM via an API interface. When doing this, you can host the model yourself and point the add-on at machine where the model is hosted, or you can run the model using text-generation-webui using the provided [custom Home Assistant add-on](./addon).
|
||||
|
||||
When running the model locally with Llama.cpp, the component also constrains the model output using a GBNF grammar. This forces the model to provide valid output no matter what because it is constrained to outputting valid JSON every time. This helps the model perform significantly better at lower quantization levels where it would generate syntax errors previously. See [output.gbnf](./custom_components/llama_conversation/output.gbnf) for the existing grammar.
|
||||
|
||||
### Installing with HACS
|
||||
You can use this button to add the repository to HACS and open the download page
|
||||
|
||||
[](https://my.home-assistant.io/redirect/hacs_repository/?category=Integration&repository=home-llm&owner=acon96)
|
||||
|
||||
### Installing Manually
|
||||
1. Ensure you have either the Samba, SSH, FTP, or another add-on installed that gives you access to the `config` folder
|
||||
2. If there is not already a `custom_components` folder, create one now.
|
||||
3. Copy the `custom_components/llama_conversation` folder from this repo to `config/custom_components/llama_conversation` on your Home Assistant machine.
|
||||
4. Restart Home Assistant using the "Developer Tools" tab -> Services -> Run `homeassistant.restart`
|
||||
5. The "LLaMA Conversation" integration should show up in the "Devices" section now.
|
||||
|
||||
### Setting up
|
||||
When setting up the component, there are 4 different "backend" options to choose from:
|
||||
1. Llama.cpp with a model from HuggingFace
|
||||
2. Llama.cpp with a locally provided model
|
||||
3. A remote instance of text-generation-webui
|
||||
4. A generic OpenAI API compatible interface; *should* be compatible with LocalAI, LM Studio, and all other OpenAI compatible backends
|
||||
|
||||
See [docs/Backend Configuration.md](/docs/Backend%20Configuration.md) for more info.
|
||||
|
||||
**Installing llama-cpp-python for local model usage**:
|
||||
In order to run a model directly as part of your Home Assistant installation, you will need to install one of the pre-build wheels because there are no existing musllinux wheels for the package. Compatible wheels for x86_x64 and arm64 are provided in the [dist](./dist) folder. Copy the `*.whl` files to the `custom_components/llama_conversation/` folder. They will be installed while setting up the component.
|
||||
|
||||
**Setting up the Llama.cpp backend with a model from HuggingFace**:
|
||||
You need the following settings to configure the local backend from HuggingFace:
|
||||
1. Model Name: the name of the model in the form `repo/model-name`. The repo MUST contain a GGUF quantized model.
|
||||
2. Model Quantization: The quantization level to download. Pick from the list. Higher quantizations use more RAM but have higher quality responses.
|
||||
|
||||
**Setting up the Llama.cpp backend with a locally downloaded model**:
|
||||
You need the following settings to configure the local backend from HuggingFace:
|
||||
1. Model File Name: the file name where Home Assistant can access the model to load. Most likely a sub-path of `/config` or `/media` or wherever you copied the model file to.
|
||||
|
||||
**Setting up the "remote" backends**:
|
||||
You need the following settings in order to configure the "remote" backend:
|
||||
1. Hostname: the host of the machine where text-generation-webui API is hosted. If you are using the provided add-on then the hostname is `local-text-generation-webui` or `f459db47-text-generation-webui` depending on how the addon was installed.
|
||||
2. Port: the port for accessing the text-generation-webui API. NOTE: this is not the same as the UI port. (Usually 5000)
|
||||
3. Name of the Model: This name must EXACTLY match the name as it appears in `text-generation-webui`
|
||||
|
||||
With the remote text-generation-webui backend, the component will validate that the selected model is available for use and will ensure it is loaded remotely. The Generic OpenAI compatible version does NOT do any validation or model loading.
|
||||
|
||||
**Setting up with LocalAI**:
|
||||
If you are an existing LocalAI user or would like to use LocalAI as your backend, please refer to [this](https://io.midori-ai.xyz/howtos/setup-with-ha/) website which has instructions on how to setup LocalAI to work with Home-LLM including automatic installation of the latest version of the the Home-LLM model. The auto-installer (LocalAI Manager) will automatically download and setup LocalAI and/or the model of your choice and automatically create the necessary template files for the model to work with this integration.
|
||||
|
||||
### Configuring the component as a Conversation Agent
|
||||
**NOTE: ANY DEVICES THAT YOU SELECT TO BE EXPOSED TO THE MODEL WILL BE ADDED AS CONTEXT AND POTENTIALLY HAVE THEIR STATE CHANGED BY THE MODEL. ONLY EXPOSE DEVICES THAT YOU ARE OK WITH THE MODEL MODIFYING THE STATE OF, EVEN IF IT IS NOT WHAT YOU REQUESTED. THE MODEL MAY OCCASIONALLY HALLUCINATE AND ISSUE COMMANDS TO THE WRONG DEVICE! USE AT YOUR OWN RISK.**
|
||||
|
||||
In order to utilize the conversation agent in HomeAssistant:
|
||||
1. Navigate to "Settings" -> "Voice Assistants"
|
||||
2. Select "+ Add Assistant"
|
||||
3. Name the assistant whatever you want.
|
||||
4. Select the "Conversation Agent" that we created previously
|
||||
5. If using STT or TTS configure these now
|
||||
6. Return to the "Overview" dashboard and select chat icon in the top left.
|
||||
|
||||
From here you can submit queries to the AI agent.
|
||||
|
||||
In order for any entities be available to the agent, you must "expose" them first.
|
||||
1. Navigate to "Settings" -> "Voice Assistants" -> "Expose" Tab
|
||||
2. Select "+ Expose Entities" in the bottom right
|
||||
3. Check any entities you would like to be exposed to the conversation agent.
|
||||
|
||||
### Running the text-generation-webui add-on
|
||||
In order to facilitate running the project entirely on the system where Home Assistant is installed, there is an experimental Home Assistant Add-on that runs the oobabooga/text-generation-webui to connect to using the "remote" backend option.
|
||||
|
||||
You can use this button to automatically download and build the addon for `oobabooga/text-generation-webui`
|
||||
|
||||
[](https://my.home-assistant.io/redirect/supervisor_addon/?addon=f459db47_text-generation-webui&repository_url=https%3A%2F%2Fgithub.com%2Facon96%2Fhome-llm)
|
||||
|
||||
If the automatic installation fails then you can install the addon manually using the following steps:
|
||||
|
||||
1. Ensure you have either the Samba, SSH, FTP, or another add-on installed that gives you access to the `addons` folder
|
||||
2. Copy the `addon` folder from this repo to `addons/text-generation-webui` on your Home Assistant machine.
|
||||
3. Go to the "Add-ons" section in settings and then pick the "Add-on Store" from the bottom right corner.
|
||||
4. Select the 3 dots in the top right and click "Check for Updates" and Refresh the webpage.
|
||||
5. There should now be a "Local Add-ons" section at the top of the "Add-on Store"
|
||||
6. Install the `oobabooga-text-generation-webui` add-on. It will take ~15-20 minutes to build the image on a Raspberry Pi.
|
||||
7. Copy any models you want to use to the `addon_configs/local_text-generation-webui/models` folder or download them using the UI.
|
||||
8. Load up a model to use. NOTE: The timeout for ingress pages is only 60 seconds so if the model takes longer than 60 seconds to load (very likely) then the UI will appear to time out and you will need to navigate to the add-on's logs to see when the model is fully loaded.
|
||||
|
||||
### Performance of running the model on a Raspberry Pi
|
||||
The RPI4 4GB that I have was sitting right at 1.5 tokens/sec for prompt eval and 1.6 tokens/sec for token generation when running the `Q4_K_M` quant. I was reliably getting responses in 30-60 seconds after the initial prompt processing which took almost 5 minutes. It depends significantly on the number of devices that have been exposed as well as how many states have changed since the last invocation because llama.cpp caches KV values for identical prompt prefixes.
|
||||
|
||||
It is highly recommend to set up text-generation-webui on a separate machine that can take advantage of a GPU.
|
||||
|
||||
## Version History
|
||||
| Version | Description |
|
||||
| ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| v0.2.7 | Publish model v3, Multiple Ollama backend improvements, Updates for HA 2024.02, support for voice assistant aliases |
|
||||
| v0.2.6 | Bug fixes, add options for limiting chat history, HTTPS endpoint support, added zephyr prompt format. |
|
||||
| v0.2.5 | Fix Ollama max tokens parameter, fix GGUF download from Hugging Face, update included llama-cpp-python to 0.2.32, and add parameters to function calling for dataset + component, & model update |
|
||||
| v0.2.4 | Fix API key auth on model load for text-generation-webui, and add support for Ollama API backend |
|
||||
|
||||
15
TODO.md
15
TODO.md
@@ -1,4 +1,12 @@
|
||||
# TODO
|
||||
- [ ] setup github actions to build wheels that are optimized for RPIs
|
||||
- [ ] detection/mitigation of too many entities being exposed & blowing out the context length
|
||||
- [ ] areas/room support
|
||||
- [ ] figure out DPO for refusals + fixing incorrect entity id
|
||||
- [ ] mixtral + prompting (no fine tuning)
|
||||
- add in context learning variables to sys prompt template
|
||||
- add new options to setup process for setting prompt style + picking fine-tuned/ICL
|
||||
- [ ] prime kv cache with current "state" so that requests are faster
|
||||
- [x] ChatML format (actually need to add special tokens)
|
||||
- [x] Vicuna dataset merge (yahma/alpaca-cleaned)
|
||||
- [x] Phi-2 fine tuning
|
||||
@@ -11,7 +19,6 @@
|
||||
- [ ] multi-turn prompts; better instruct dataset like dolphin/wizardlm?
|
||||
- [x] Fine tune Phi-1.5 version
|
||||
- [x] make llama-cpp-python wheels for "llama-cpp-python>=0.2.24"
|
||||
- [ ] prime kv cache with current "state" so that requests are faster
|
||||
- [x] make a proper evaluation framework to run. not just loss. should test accuracy on the function calling
|
||||
- [x] add more remote backends
|
||||
- LocalAI (openai compatible)
|
||||
@@ -19,10 +26,8 @@
|
||||
- support chat completions API (might fix Ollama + adds support for text-gen-ui characters)
|
||||
- [x] more config options for prompt template (allow other than chatml)
|
||||
- [x] publish snapshot of dataset on HF
|
||||
- [ ] figure out DPO for refusals + fixing incorrect entity id
|
||||
- [ ] mixtral + prompting (no fine tuning)
|
||||
- [ ] use varied system prompts to add behaviors
|
||||
- [ ] setup github actions to build wheels that are optimized for RPIs
|
||||
- [x] use varied system prompts to add behaviors
|
||||
|
||||
|
||||
## more complicated ideas
|
||||
- [ ] "context requests"
|
||||
|
||||
@@ -23,7 +23,7 @@ RUN \
|
||||
python3-venv \
|
||||
python3-pip \
|
||||
\
|
||||
&& git clone https://github.com/oobabooga/text-generation-webui.git ${APP_DIR} --branch snapshot-2024-02-04 \
|
||||
&& git clone https://github.com/oobabooga/text-generation-webui.git ${APP_DIR} --branch snapshot-2024-03-03 \
|
||||
&& python3 -m pip install torch torchvision torchaudio py-cpuinfo==9.0.0 \
|
||||
&& python3 -m pip install -r ${APP_DIR}/requirements_cpu_only_noavx2.txt -r ${APP_DIR}/extensions/openai/requirements.txt llama-cpp-python \
|
||||
&& apt-get purge -y --auto-remove \
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: oobabooga-text-generation-webui
|
||||
version: 2024.02.04
|
||||
version: 2024.03.03
|
||||
slug: text-generation-webui
|
||||
description: "A tool for running Large Language Models"
|
||||
url: "https://github.com/oobabooga/text-generation-webui"
|
||||
|
||||
@@ -9,34 +9,19 @@ import requests
|
||||
import re
|
||||
import os
|
||||
import json
|
||||
import webcolors
|
||||
|
||||
import voluptuous as vol
|
||||
from collections.abc import Iterable
|
||||
|
||||
import homeassistant.components.conversation as ha_conversation
|
||||
from homeassistant.components.conversation import ConversationInput, ConversationResult, AbstractConversationAgent
|
||||
from homeassistant.components.conversation.const import DOMAIN as CONVERSATION_DOMAIN
|
||||
from homeassistant.components.homeassistant.exposed_entities import (
|
||||
async_should_expose,
|
||||
)
|
||||
from homeassistant.components.homeassistant.exposed_entities import async_should_expose
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import ATTR_ENTITY_ID, CONF_HOST, CONF_PORT, CONF_SSL, MATCH_ALL
|
||||
from homeassistant.core import (
|
||||
HomeAssistant,
|
||||
ServiceCall,
|
||||
ServiceResponse,
|
||||
SupportsResponse,
|
||||
)
|
||||
from homeassistant.exceptions import (
|
||||
ConfigEntryNotReady,
|
||||
HomeAssistantError,
|
||||
TemplateError,
|
||||
)
|
||||
from homeassistant.helpers import config_validation as cv, intent, selector, template
|
||||
from homeassistant.helpers.typing import ConfigType
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import ConfigEntryNotReady, ConfigEntryError, TemplateError
|
||||
from homeassistant.helpers import config_validation as cv, intent, template, entity_registry as er
|
||||
from homeassistant.util import ulid
|
||||
|
||||
from .utils import closest_color, flatten_vol_schema, install_llama_cpp_python
|
||||
from .const import (
|
||||
CONF_CHAT_MODEL,
|
||||
CONF_MAX_TOKENS,
|
||||
@@ -59,6 +44,7 @@ from .const import (
|
||||
CONF_SERVICE_CALL_REGEX,
|
||||
CONF_REMOTE_USE_CHAT_ENDPOINT,
|
||||
CONF_TEXT_GEN_WEBUI_CHAT_MODE,
|
||||
CONF_OLLAMA_KEEP_ALIVE_MIN,
|
||||
DEFAULT_MAX_TOKENS,
|
||||
DEFAULT_PROMPT,
|
||||
DEFAULT_TEMPERATURE,
|
||||
@@ -75,6 +61,7 @@ from .const import (
|
||||
DEFAULT_REMOTE_USE_CHAT_ENDPOINT,
|
||||
DEFAULT_TEXT_GEN_WEBUI_CHAT_MODE,
|
||||
DEFAULT_OPTIONS,
|
||||
DEFAULT_OLLAMA_KEEP_ALIVE_MIN,
|
||||
BACKEND_TYPE_LLAMA_HF,
|
||||
BACKEND_TYPE_LLAMA_EXISTING,
|
||||
BACKEND_TYPE_TEXT_GEN_WEBUI,
|
||||
@@ -165,34 +152,6 @@ async def async_migrate_entry(hass, config_entry: ConfigEntry):
|
||||
|
||||
return True
|
||||
|
||||
def closest_color(requested_color):
|
||||
min_colors = {}
|
||||
for key, name in webcolors.CSS3_HEX_TO_NAMES.items():
|
||||
r_c, g_c, b_c = webcolors.hex_to_rgb(key)
|
||||
rd = (r_c - requested_color[0]) ** 2
|
||||
gd = (g_c - requested_color[1]) ** 2
|
||||
bd = (b_c - requested_color[2]) ** 2
|
||||
min_colors[(rd + gd + bd)] = name
|
||||
return min_colors[min(min_colors.keys())]
|
||||
|
||||
def flatten_schema(schema):
|
||||
flattened = []
|
||||
def _flatten(current_schema, prefix=''):
|
||||
if isinstance(current_schema, vol.Schema):
|
||||
if isinstance(current_schema.schema, vol.validators._WithSubValidators):
|
||||
for subval in current_schema.schema.validators:
|
||||
_flatten(subval, prefix)
|
||||
elif isinstance(current_schema.schema, dict):
|
||||
for key, val in current_schema.schema.items():
|
||||
_flatten(val, prefix + str(key) + '/')
|
||||
elif isinstance(current_schema, vol.validators._WithSubValidators):
|
||||
for subval in current_schema.validators:
|
||||
_flatten(subval, prefix)
|
||||
elif callable(current_schema):
|
||||
flattened.append(prefix[:-1] if prefix else prefix)
|
||||
_flatten(schema)
|
||||
return flattened
|
||||
|
||||
class LLaMAAgent(AbstractConversationAgent):
|
||||
"""Local LLaMA conversation agent."""
|
||||
|
||||
@@ -381,12 +340,18 @@ class LLaMAAgent(AbstractConversationAgent):
|
||||
"""Gather exposed entity states"""
|
||||
entity_states = {}
|
||||
domains = set()
|
||||
entity_registry = er.async_get(self.hass)
|
||||
|
||||
for state in self.hass.states.async_all():
|
||||
if not async_should_expose(self.hass, CONVERSATION_DOMAIN, state.entity_id):
|
||||
continue
|
||||
|
||||
entity = entity_registry.async_get(state.entity_id)
|
||||
|
||||
attributes = dict(state.attributes)
|
||||
attributes["state"] = state.state
|
||||
if entity and entity.aliases:
|
||||
attributes["aliases"] = entity.aliases
|
||||
entity_states[state.entity_id] = attributes
|
||||
domains.add(state.domain)
|
||||
|
||||
@@ -451,15 +416,21 @@ class LLaMAAgent(AbstractConversationAgent):
|
||||
result = result + ";" + str(value)
|
||||
return result
|
||||
|
||||
formatted_states = "\n".join(
|
||||
[f"{name} '{attributes.get('friendly_name')}' = {expose_attributes(attributes)}" for name, attributes in entities_to_expose.items()]
|
||||
) + "\n"
|
||||
device_states = [f"{name} '{attributes.get('friendly_name')}' = {expose_attributes(attributes)}" for name, attributes in entities_to_expose.items()]
|
||||
|
||||
# expose devices as their alias as well
|
||||
for name, attributes in entities_to_expose.items():
|
||||
if "aliases" in attributes:
|
||||
for alias in attributes["aliases"]:
|
||||
device_states.append(f"{name} '{alias}' = {expose_attributes(attributes)}")
|
||||
|
||||
formatted_states = "\n".join(device_states) + "\n"
|
||||
|
||||
service_dict = self.hass.services.async_services()
|
||||
all_services = []
|
||||
for domain in domains:
|
||||
for name, service in service_dict.get(domain, {}).items():
|
||||
args = flatten_schema(service.schema)
|
||||
args = flatten_vol_schema(service.schema)
|
||||
args_to_expose = set(args).intersection(extra_attributes_to_expose)
|
||||
all_services.append(f"{domain}.{name}({','.join(args_to_expose)})")
|
||||
formatted_services = ", ".join(all_services)
|
||||
@@ -488,7 +459,16 @@ class LocalLLaMAAgent(LLaMAAgent):
|
||||
raise Exception(f"Model was not found at '{self.model_path}'!")
|
||||
|
||||
# don't import it until now because the wheel is installed by config_flow.py
|
||||
module = importlib.import_module("llama_cpp")
|
||||
try:
|
||||
module = importlib.import_module("llama_cpp")
|
||||
except ModuleNotFoundError:
|
||||
# attempt to re-install llama-cpp-python if it was uninstalled for some reason
|
||||
install_result = install_llama_cpp_python(self.hass.config.config_dir)
|
||||
if not install_result == True:
|
||||
raise ConfigEntryError("llama-cpp-python was not installed on startup and re-installing it led to an error!")
|
||||
|
||||
module = importlib.import_module("llama_cpp")
|
||||
|
||||
Llama = getattr(module, "Llama")
|
||||
LlamaGrammar = getattr(module, "LlamaGrammar")
|
||||
|
||||
@@ -750,6 +730,24 @@ class OllamaAPIAgent(LLaMAAgent):
|
||||
self.api_key = entry.data.get(CONF_OPENAI_API_KEY)
|
||||
self.model_name = entry.data.get(CONF_CHAT_MODEL)
|
||||
|
||||
# ollama handles loading for us so just make sure the model is available
|
||||
try:
|
||||
headers = {}
|
||||
if self.api_key:
|
||||
headers["Authorization"] = f"Bearer {self.api_key}"
|
||||
|
||||
currently_downloaded_result = requests.get(
|
||||
f"{self.api_host}/api/tags",
|
||||
headers=headers,
|
||||
)
|
||||
currently_downloaded_result.raise_for_status()
|
||||
|
||||
except Exception as ex:
|
||||
_LOGGER.debug("Connection error was: %s", repr(ex))
|
||||
raise ConfigEntryNotReady("There was a problem connecting to the remote server") from ex
|
||||
|
||||
if not any([ x["name"].split(":")[0] == self.model_name for x in currently_downloaded_result.json()["models"]]):
|
||||
raise ConfigEntryNotReady(f"Ollama server does not have the provided model: {self.model_name}")
|
||||
|
||||
def _chat_completion_params(self, conversation: dict) -> (str, dict):
|
||||
request_params = {}
|
||||
@@ -781,12 +779,14 @@ class OllamaAPIAgent(LLaMAAgent):
|
||||
temperature = self.entry.options.get(CONF_TEMPERATURE, DEFAULT_TEMPERATURE)
|
||||
top_p = self.entry.options.get(CONF_TOP_P, DEFAULT_TOP_P)
|
||||
timeout = self.entry.options.get(CONF_REQUEST_TIMEOUT, DEFAULT_REQUEST_TIMEOUT)
|
||||
keep_alive = self.entry.options.get(CONF_OLLAMA_KEEP_ALIVE_MIN, DEFAULT_OLLAMA_KEEP_ALIVE_MIN)
|
||||
use_chat_api = self.entry.options.get(CONF_REMOTE_USE_CHAT_ENDPOINT, DEFAULT_REMOTE_USE_CHAT_ENDPOINT)
|
||||
|
||||
|
||||
request_params = {
|
||||
"model": self.model_name,
|
||||
"stream": False,
|
||||
"keep_alive": f"{keep_alive}m", # prevent ollama from unloading the model
|
||||
"options": {
|
||||
"top_p": top_p,
|
||||
"temperature": temperature,
|
||||
|
||||
@@ -1,25 +1,19 @@
|
||||
"""Config flow for Local LLaMA Conversation integration."""
|
||||
from __future__ import annotations
|
||||
|
||||
import time
|
||||
import os
|
||||
import sys
|
||||
import logging
|
||||
import requests
|
||||
import platform
|
||||
from types import MappingProxyType
|
||||
from typing import Any
|
||||
from abc import ABC, abstractmethod
|
||||
from importlib.metadata import version
|
||||
|
||||
from huggingface_hub import hf_hub_download, HfFileSystem
|
||||
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant import config_entries
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.requirements import pip_kwargs
|
||||
from homeassistant.util.package import install_package, is_installed
|
||||
from homeassistant.const import CONF_HOST, CONF_PORT, CONF_SSL
|
||||
from homeassistant.const import CONF_HOST, CONF_PORT, CONF_SSL, UnitOfTime
|
||||
from homeassistant.data_entry_flow import (
|
||||
AbortFlow,
|
||||
FlowHandler,
|
||||
@@ -29,6 +23,7 @@ from homeassistant.data_entry_flow import (
|
||||
from homeassistant.helpers.selector import (
|
||||
NumberSelector,
|
||||
NumberSelectorConfig,
|
||||
NumberSelectorMode,
|
||||
TemplateSelector,
|
||||
SelectSelector,
|
||||
SelectSelectorConfig,
|
||||
@@ -37,6 +32,7 @@ from homeassistant.helpers.selector import (
|
||||
TextSelectorConfig,
|
||||
)
|
||||
|
||||
from .utils import download_model_from_hf, install_llama_cpp_python
|
||||
from .const import (
|
||||
CONF_CHAT_MODEL,
|
||||
CONF_MAX_TOKENS,
|
||||
@@ -61,6 +57,7 @@ from .const import (
|
||||
CONF_SERVICE_CALL_REGEX,
|
||||
CONF_REMOTE_USE_CHAT_ENDPOINT,
|
||||
CONF_TEXT_GEN_WEBUI_CHAT_MODE,
|
||||
CONF_OLLAMA_KEEP_ALIVE_MIN,
|
||||
DEFAULT_CHAT_MODEL,
|
||||
DEFAULT_HOST,
|
||||
DEFAULT_PORT,
|
||||
@@ -82,6 +79,7 @@ from .const import (
|
||||
DEFAULT_OPTIONS,
|
||||
DEFAULT_REMOTE_USE_CHAT_ENDPOINT,
|
||||
DEFAULT_TEXT_GEN_WEBUI_CHAT_MODE,
|
||||
DEFAULT_OLLAMA_KEEP_ALIVE_MIN,
|
||||
BACKEND_TYPE_LLAMA_HF,
|
||||
BACKEND_TYPE_LLAMA_EXISTING,
|
||||
BACKEND_TYPE_TEXT_GEN_WEBUI,
|
||||
@@ -167,62 +165,6 @@ def STEP_REMOTE_SETUP_DATA_SCHEMA(backend_type: str, *, host=None, port=None, ss
|
||||
}
|
||||
)
|
||||
|
||||
def download_model_from_hf(
|
||||
model_name: str, quantization_type: str, storage_folder: str
|
||||
):
|
||||
try:
|
||||
fs = HfFileSystem()
|
||||
potential_files = [ f for f in fs.glob(f"{model_name}/*.gguf") ]
|
||||
wanted_file = [f for f in potential_files if (f".{quantization_type.lower()}." in f or f".{quantization_type.upper()}." in f)]
|
||||
|
||||
if len(wanted_file) != 1:
|
||||
raise Exception(f"The quantization '{quantization_type}' does not exist in the HF repo for {model_name}")
|
||||
|
||||
os.makedirs(storage_folder, exist_ok=True)
|
||||
|
||||
return hf_hub_download(
|
||||
repo_id=model_name,
|
||||
repo_type="model",
|
||||
filename=wanted_file[0].removeprefix(model_name + "/"),
|
||||
resume_download=True,
|
||||
cache_dir=storage_folder,
|
||||
)
|
||||
except Exception as ex:
|
||||
return ex
|
||||
|
||||
def install_llama_cpp_python(config_dir: str):
|
||||
try:
|
||||
platform_suffix = platform.machine()
|
||||
if platform_suffix == "arm64":
|
||||
platform_suffix = "aarch64"
|
||||
folder = os.path.dirname(__file__)
|
||||
potential_wheels = sorted([ path for path in os.listdir(folder) if path.endswith(f"{platform_suffix}.whl") ], reverse=True)
|
||||
if len(potential_wheels) == 0:
|
||||
# someone who is better at async can figure out why this is necessary
|
||||
time.sleep(0.5)
|
||||
|
||||
if is_installed("llama-cpp-python"):
|
||||
_LOGGER.info("llama-cpp-python is already installed")
|
||||
return True
|
||||
return Exception("missing_wheels")
|
||||
|
||||
latest_wheel = potential_wheels[0]
|
||||
latest_version = latest_wheel.split("-")[1]
|
||||
|
||||
if not is_installed("llama-cpp-python") or version("llama-cpp-python") != latest_version:
|
||||
_LOGGER.info("Installing llama-cpp-python from wheel")
|
||||
_LOGGER.debug(f"Wheel location: {latest_wheel}")
|
||||
return install_package(os.path.join(folder, latest_wheel), pip_kwargs(config_dir))
|
||||
else:
|
||||
# someone who is better at async can figure out why this is necessary
|
||||
time.sleep(0.5)
|
||||
|
||||
_LOGGER.info("llama-cpp-python is already installed")
|
||||
return True
|
||||
except Exception as ex:
|
||||
_LOGGER.exception("Install failed!")
|
||||
return ex
|
||||
|
||||
|
||||
class BaseLlamaConversationConfigFlow(FlowHandler, ABC):
|
||||
"""Represent the base config flow for Z-Wave JS."""
|
||||
@@ -313,29 +255,23 @@ class ConfigFlow(BaseLlamaConversationConfigFlow, config_entries.ConfigFlow, dom
|
||||
schema = STEP_INIT_DATA_SCHEMA()
|
||||
|
||||
if user_input:
|
||||
try:
|
||||
local_backend = is_local_backend(user_input[CONF_BACKEND_TYPE])
|
||||
self.model_config.update(user_input)
|
||||
|
||||
except Exception: # pylint: disable=broad-except
|
||||
_LOGGER.exception("Unexpected exception")
|
||||
errors["base"] = "unknown"
|
||||
local_backend = is_local_backend(user_input[CONF_BACKEND_TYPE])
|
||||
self.model_config.update(user_input)
|
||||
if local_backend:
|
||||
return await self.async_step_install_local_wheels()
|
||||
# this check isn't working right now
|
||||
# for key, value in self.hass.data.get(DOMAIN, {}).items():
|
||||
# other_backend_type = value.data.get(CONF_BACKEND_TYPE)
|
||||
# if other_backend_type == BACKEND_TYPE_LLAMA_HF or \
|
||||
# other_backend_type == BACKEND_TYPE_LLAMA_EXISTING:
|
||||
# errors["base"] = "other_existing_local"
|
||||
# schema = STEP_INIT_DATA_SCHEMA(
|
||||
# backend_type=user_input[CONF_BACKEND_TYPE],
|
||||
# )
|
||||
# if "base" not in errors:
|
||||
# return await self.async_step_install_local_wheels()
|
||||
else:
|
||||
if local_backend:
|
||||
return await self.async_step_install_local_wheels()
|
||||
# this check isn't working right now
|
||||
# for key, value in self.hass.data.get(DOMAIN, {}).items():
|
||||
# other_backend_type = value.data.get(CONF_BACKEND_TYPE)
|
||||
# if other_backend_type == BACKEND_TYPE_LLAMA_HF or \
|
||||
# other_backend_type == BACKEND_TYPE_LLAMA_EXISTING:
|
||||
# errors["base"] = "other_existing_local"
|
||||
# schema = STEP_INIT_DATA_SCHEMA(
|
||||
# backend_type=user_input[CONF_BACKEND_TYPE],
|
||||
# )
|
||||
# if "base" not in errors:
|
||||
# return await self.async_step_install_local_wheels()
|
||||
else:
|
||||
return await self.async_step_remote_model()
|
||||
return await self.async_step_remote_model()
|
||||
elif self.install_wheel_error:
|
||||
errors["base"] = str(self.install_wheel_error)
|
||||
self.install_wheel_error = None
|
||||
@@ -350,6 +286,7 @@ class ConfigFlow(BaseLlamaConversationConfigFlow, config_entries.ConfigFlow, dom
|
||||
if not user_input:
|
||||
if self.install_wheel_task:
|
||||
return self.async_show_progress(
|
||||
progress_task=self.install_wheel_task,
|
||||
step_id="install_local_wheels",
|
||||
progress_action="install_local_wheels",
|
||||
)
|
||||
@@ -362,6 +299,7 @@ class ConfigFlow(BaseLlamaConversationConfigFlow, config_entries.ConfigFlow, dom
|
||||
self.hass.async_create_task(self._async_do_task(self.install_wheel_task))
|
||||
|
||||
return self.async_show_progress(
|
||||
progress_task=self.install_wheel_task,
|
||||
step_id="install_local_wheels",
|
||||
progress_action="install_local_wheels",
|
||||
)
|
||||
@@ -402,24 +340,18 @@ class ConfigFlow(BaseLlamaConversationConfigFlow, config_entries.ConfigFlow, dom
|
||||
downloaded_model_quantization=self.model_config[CONF_DOWNLOADED_MODEL_QUANTIZATION]
|
||||
)
|
||||
|
||||
if user_input:
|
||||
try:
|
||||
self.model_config.update(user_input)
|
||||
if user_input and "result" not in user_input:
|
||||
self.model_config.update(user_input)
|
||||
|
||||
except Exception: # pylint: disable=broad-except
|
||||
_LOGGER.exception("Unexpected exception")
|
||||
errors["base"] = "unknown"
|
||||
if backend_type == BACKEND_TYPE_LLAMA_HF:
|
||||
return await self.async_step_download()
|
||||
else:
|
||||
if backend_type == BACKEND_TYPE_LLAMA_HF:
|
||||
return await self.async_step_download()
|
||||
model_file = self.model_config[CONF_DOWNLOADED_MODEL_FILE]
|
||||
if os.path.exists(model_file):
|
||||
return await self.async_step_finish()
|
||||
else:
|
||||
model_file = self.model_config[CONF_DOWNLOADED_MODEL_FILE]
|
||||
if os.path.exists(model_file):
|
||||
return await self.async_step_finish()
|
||||
else:
|
||||
errors["base"] = "missing_model_file"
|
||||
schema = STEP_LOCAL_SETUP_EXISTING_DATA_SCHEMA(model_file)
|
||||
|
||||
errors["base"] = "missing_model_file"
|
||||
schema = STEP_LOCAL_SETUP_EXISTING_DATA_SCHEMA(model_file)
|
||||
|
||||
return self.async_show_form(
|
||||
step_id="local_model", data_schema=schema, errors=errors
|
||||
@@ -431,6 +363,7 @@ class ConfigFlow(BaseLlamaConversationConfigFlow, config_entries.ConfigFlow, dom
|
||||
if not user_input:
|
||||
if self.download_task:
|
||||
return self.async_show_progress(
|
||||
progress_task=self.download_task,
|
||||
step_id="download",
|
||||
progress_action="download",
|
||||
)
|
||||
@@ -446,6 +379,7 @@ class ConfigFlow(BaseLlamaConversationConfigFlow, config_entries.ConfigFlow, dom
|
||||
self.hass.async_create_task(self._async_do_task(self.download_task))
|
||||
|
||||
return self.async_show_progress(
|
||||
progress_task=self.download_task,
|
||||
step_id="download",
|
||||
progress_action="download",
|
||||
)
|
||||
@@ -462,7 +396,7 @@ class ConfigFlow(BaseLlamaConversationConfigFlow, config_entries.ConfigFlow, dom
|
||||
return self.async_show_progress_done(next_step_id="finish")
|
||||
|
||||
|
||||
def _validate_remote_api(self, user_input: dict) -> str:
|
||||
def _validate_text_generation_webui(self, user_input: dict) -> str:
|
||||
try:
|
||||
headers = {}
|
||||
api_key = user_input.get(CONF_TEXT_GEN_WEBUI_ADMIN_KEY, user_input.get(CONF_OPENAI_API_KEY))
|
||||
@@ -486,6 +420,31 @@ class ConfigFlow(BaseLlamaConversationConfigFlow, config_entries.ConfigFlow, dom
|
||||
except Exception as ex:
|
||||
_LOGGER.info("Connection error was: %s", repr(ex))
|
||||
return "failed_to_connect"
|
||||
|
||||
def _validate_ollama(self, user_input: dict) -> str:
|
||||
try:
|
||||
headers = {}
|
||||
api_key = user_input.get(CONF_OPENAI_API_KEY)
|
||||
if api_key:
|
||||
headers["Authorization"] = f"Bearer {api_key}"
|
||||
|
||||
models_result = requests.get(
|
||||
f"{'https' if self.model_config[CONF_SSL] else 'http'}://{self.model_config[CONF_HOST]}:{self.model_config[CONF_PORT]}/api/tags",
|
||||
headers=headers
|
||||
)
|
||||
models_result.raise_for_status()
|
||||
|
||||
models = models_result.json()["models"]
|
||||
|
||||
for model in models:
|
||||
if model["name"].split(":")[0] == self.model_config[CONF_CHAT_MODEL]:
|
||||
return ""
|
||||
|
||||
return "missing_model_api"
|
||||
|
||||
except Exception as ex:
|
||||
_LOGGER.info("Connection error was: %s", repr(ex))
|
||||
return "failed_to_connect"
|
||||
|
||||
async def async_step_remote_model(
|
||||
self, user_input: dict[str, Any] | None = None
|
||||
@@ -497,26 +456,30 @@ class ConfigFlow(BaseLlamaConversationConfigFlow, config_entries.ConfigFlow, dom
|
||||
if user_input:
|
||||
try:
|
||||
self.model_config.update(user_input)
|
||||
error_reason = None
|
||||
|
||||
# only validate and load when using text-generation-webui
|
||||
# validate and load when using text-generation-webui or ollama
|
||||
if backend_type == BACKEND_TYPE_TEXT_GEN_WEBUI:
|
||||
error_reason = await self.hass.async_add_executor_job(
|
||||
self._validate_remote_api, user_input
|
||||
self._validate_text_generation_webui, user_input
|
||||
)
|
||||
elif backend_type == BACKEND_TYPE_OLLAMA:
|
||||
error_reason = await self.hass.async_add_executor_job(
|
||||
self._validate_ollama, user_input
|
||||
)
|
||||
|
||||
if error_reason:
|
||||
errors["base"] = error_reason
|
||||
schema = STEP_REMOTE_SETUP_DATA_SCHEMA(
|
||||
backend_type,
|
||||
host=user_input[CONF_HOST],
|
||||
port=user_input[CONF_PORT],
|
||||
ssl=user_input[CONF_SSL],
|
||||
chat_model=user_input[CONF_CHAT_MODEL],
|
||||
use_chat_endpoint=user_input[CONF_REMOTE_USE_CHAT_ENDPOINT],
|
||||
webui_preset=user_input.get(CONF_TEXT_GEN_WEBUI_PRESET),
|
||||
webui_chat_mode=user_input.get(CONF_TEXT_GEN_WEBUI_CHAT_MODE),
|
||||
)
|
||||
if error_reason:
|
||||
errors["base"] = error_reason
|
||||
schema = STEP_REMOTE_SETUP_DATA_SCHEMA(
|
||||
backend_type,
|
||||
host=user_input[CONF_HOST],
|
||||
port=user_input[CONF_PORT],
|
||||
ssl=user_input[CONF_SSL],
|
||||
chat_model=user_input[CONF_CHAT_MODEL],
|
||||
use_chat_endpoint=user_input[CONF_REMOTE_USE_CHAT_ENDPOINT],
|
||||
webui_preset=user_input.get(CONF_TEXT_GEN_WEBUI_PRESET),
|
||||
webui_chat_mode=user_input.get(CONF_TEXT_GEN_WEBUI_CHAT_MODE),
|
||||
)
|
||||
else:
|
||||
return await self.async_step_finish()
|
||||
else:
|
||||
return await self.async_step_finish()
|
||||
|
||||
@@ -668,7 +631,7 @@ def local_llama_config_option_schema(options: MappingProxyType[str, Any], backen
|
||||
CONF_REQUEST_TIMEOUT,
|
||||
description={"suggested_value": options.get(CONF_REQUEST_TIMEOUT)},
|
||||
default=DEFAULT_REQUEST_TIMEOUT,
|
||||
): int,
|
||||
): NumberSelector(NumberSelectorConfig(min=5, max=900, step=1, unit_of_measurement=UnitOfTime.SECONDS, mode=NumberSelectorMode.BOX)),
|
||||
vol.Required(
|
||||
CONF_REMOTE_USE_CHAT_ENDPOINT,
|
||||
description={"suggested_value": options.get(CONF_REMOTE_USE_CHAT_ENDPOINT)},
|
||||
@@ -695,7 +658,7 @@ def local_llama_config_option_schema(options: MappingProxyType[str, Any], backen
|
||||
CONF_REQUEST_TIMEOUT,
|
||||
description={"suggested_value": options.get(CONF_REQUEST_TIMEOUT)},
|
||||
default=DEFAULT_REQUEST_TIMEOUT,
|
||||
): int,
|
||||
): NumberSelector(NumberSelectorConfig(min=5, max=900, step=1, unit_of_measurement=UnitOfTime.SECONDS, mode=NumberSelectorMode.BOX)),
|
||||
vol.Required(
|
||||
CONF_REMOTE_USE_CHAT_ENDPOINT,
|
||||
description={"suggested_value": options.get(CONF_REMOTE_USE_CHAT_ENDPOINT)},
|
||||
@@ -718,7 +681,7 @@ def local_llama_config_option_schema(options: MappingProxyType[str, Any], backen
|
||||
CONF_REQUEST_TIMEOUT,
|
||||
description={"suggested_value": options.get(CONF_REQUEST_TIMEOUT)},
|
||||
default=DEFAULT_REQUEST_TIMEOUT,
|
||||
): int,
|
||||
): NumberSelector(NumberSelectorConfig(min=5, max=900, step=1, unit_of_measurement=UnitOfTime.SECONDS, mode=NumberSelectorMode.BOX)),
|
||||
vol.Required(
|
||||
CONF_REMOTE_USE_CHAT_ENDPOINT,
|
||||
description={"suggested_value": options.get(CONF_REMOTE_USE_CHAT_ENDPOINT)},
|
||||
@@ -751,7 +714,12 @@ def local_llama_config_option_schema(options: MappingProxyType[str, Any], backen
|
||||
CONF_REQUEST_TIMEOUT,
|
||||
description={"suggested_value": options.get(CONF_REQUEST_TIMEOUT)},
|
||||
default=DEFAULT_REQUEST_TIMEOUT,
|
||||
): int,
|
||||
): NumberSelector(NumberSelectorConfig(min=5, max=900, step=1, unit_of_measurement=UnitOfTime.SECONDS, mode=NumberSelectorMode.BOX)),
|
||||
vol.Required(
|
||||
CONF_OLLAMA_KEEP_ALIVE_MIN,
|
||||
description={"suggested_value": options.get(CONF_OLLAMA_KEEP_ALIVE_MIN)},
|
||||
default=DEFAULT_OLLAMA_KEEP_ALIVE_MIN,
|
||||
): NumberSelector(NumberSelectorConfig(min=-1, max=1440, step=1, unit_of_measurement=UnitOfTime.MINUTES, mode=NumberSelectorMode.BOX)),
|
||||
vol.Required(
|
||||
CONF_REMOTE_USE_CHAT_ENDPOINT,
|
||||
description={"suggested_value": options.get(CONF_REMOTE_USE_CHAT_ENDPOINT)},
|
||||
|
||||
@@ -104,6 +104,8 @@ TEXT_GEN_WEBUI_CHAT_MODE_CHAT = "chat"
|
||||
TEXT_GEN_WEBUI_CHAT_MODE_INSTRUCT = "instruct"
|
||||
TEXT_GEN_WEBUI_CHAT_MODE_CHAT_INSTRUCT = "chat-instruct"
|
||||
DEFAULT_TEXT_GEN_WEBUI_CHAT_MODE = TEXT_GEN_WEBUI_CHAT_MODE_CHAT
|
||||
CONF_OLLAMA_KEEP_ALIVE_MIN = "ollama_keep_alive"
|
||||
DEFAULT_OLLAMA_KEEP_ALIVE_MIN = 30
|
||||
|
||||
DEFAULT_OPTIONS = types.MappingProxyType(
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"domain": "llama_conversation",
|
||||
"name": "LLaMA Conversation",
|
||||
"version": "0.2.6",
|
||||
"version": "0.2.7",
|
||||
"codeowners": ["@acon96"],
|
||||
"config_flow": true,
|
||||
"dependencies": ["conversation"],
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
"missing_model_file": "The provided file does not exist.",
|
||||
"other_existing_local": "Another model is already loaded locally. Please unload it or configure a remote model.",
|
||||
"unknown": "Unexpected error",
|
||||
"missing_wheels": "Llama.cpp is not installed and could not find any wheels to install!",
|
||||
"missing_wheels": "Llama.cpp is not installed and could not find any wheels to install! See the logs for more information.",
|
||||
"pip_wheel_error": "Pip returned an error while installing the wheel!"
|
||||
},
|
||||
"progress": {
|
||||
@@ -60,6 +60,7 @@
|
||||
"top_k": "Top K",
|
||||
"top_p": "Top P",
|
||||
"request_timeout": "Remote Request Timeout (seconds)",
|
||||
"ollama_keep_alive": "Keep Alive/Inactivity Timeout (minutes)",
|
||||
"extra_attributes_to_expose": "Additional attribute to expose in the context",
|
||||
"gbnf_grammar": "Enable GBNF Grammar",
|
||||
"openai_api_key": "API Key",
|
||||
|
||||
104
custom_components/llama_conversation/utils.py
Normal file
104
custom_components/llama_conversation/utils.py
Normal file
@@ -0,0 +1,104 @@
|
||||
import time
|
||||
import os
|
||||
import sys
|
||||
import platform
|
||||
import logging
|
||||
import voluptuous as vol
|
||||
import webcolors
|
||||
from importlib.metadata import version
|
||||
from huggingface_hub import hf_hub_download, HfFileSystem
|
||||
|
||||
from homeassistant.requirements import pip_kwargs
|
||||
from homeassistant.util.package import install_package, is_installed
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
def closest_color(requested_color):
|
||||
min_colors = {}
|
||||
for key, name in webcolors.CSS3_HEX_TO_NAMES.items():
|
||||
r_c, g_c, b_c = webcolors.hex_to_rgb(key)
|
||||
rd = (r_c - requested_color[0]) ** 2
|
||||
gd = (g_c - requested_color[1]) ** 2
|
||||
bd = (b_c - requested_color[2]) ** 2
|
||||
min_colors[(rd + gd + bd)] = name
|
||||
return min_colors[min(min_colors.keys())]
|
||||
|
||||
def flatten_vol_schema(schema):
|
||||
flattened = []
|
||||
def _flatten(current_schema, prefix=''):
|
||||
if isinstance(current_schema, vol.Schema):
|
||||
if isinstance(current_schema.schema, vol.validators._WithSubValidators):
|
||||
for subval in current_schema.schema.validators:
|
||||
_flatten(subval, prefix)
|
||||
elif isinstance(current_schema.schema, dict):
|
||||
for key, val in current_schema.schema.items():
|
||||
_flatten(val, prefix + str(key) + '/')
|
||||
elif isinstance(current_schema, vol.validators._WithSubValidators):
|
||||
for subval in current_schema.validators:
|
||||
_flatten(subval, prefix)
|
||||
elif callable(current_schema):
|
||||
flattened.append(prefix[:-1] if prefix else prefix)
|
||||
_flatten(schema)
|
||||
return flattened
|
||||
|
||||
def download_model_from_hf(model_name: str, quantization_type: str, storage_folder: str):
|
||||
try:
|
||||
fs = HfFileSystem()
|
||||
potential_files = [ f for f in fs.glob(f"{model_name}/*.gguf") ]
|
||||
wanted_file = [f for f in potential_files if (f".{quantization_type.lower()}." in f or f".{quantization_type.upper()}." in f)]
|
||||
|
||||
if len(wanted_file) != 1:
|
||||
raise Exception(f"The quantization '{quantization_type}' does not exist in the HF repo for {model_name}")
|
||||
|
||||
os.makedirs(storage_folder, exist_ok=True)
|
||||
|
||||
return hf_hub_download(
|
||||
repo_id=model_name,
|
||||
repo_type="model",
|
||||
filename=wanted_file[0].removeprefix(model_name + "/"),
|
||||
resume_download=True,
|
||||
cache_dir=storage_folder,
|
||||
)
|
||||
except Exception as ex:
|
||||
return ex
|
||||
|
||||
def install_llama_cpp_python(config_dir: str):
|
||||
try:
|
||||
platform_suffix = platform.machine()
|
||||
if platform_suffix == "arm64":
|
||||
platform_suffix = "aarch64"
|
||||
folder = os.path.dirname(__file__)
|
||||
potential_wheels = sorted([ path for path in os.listdir(folder) if path.endswith(f"{platform_suffix}.whl") ], reverse=True)
|
||||
potential_wheels = [ wheel for wheel in potential_wheels if f"cp{sys.version_info.major}{sys.version_info.minor}" in wheel ]
|
||||
if len(potential_wheels) == 0:
|
||||
# someone who is better at async can figure out why this is necessary
|
||||
time.sleep(0.5)
|
||||
|
||||
if is_installed("llama-cpp-python"):
|
||||
_LOGGER.info("llama-cpp-python is already installed")
|
||||
return True
|
||||
|
||||
_LOGGER.error(
|
||||
"Error installing llama-cpp-python. Could not find any wheels that match the following filters. " + \
|
||||
f"platform: {platform_suffix}, python version: {sys.version_info.major}.{sys.version_info.minor}. " + \
|
||||
"If you recently updated Home Assistant, then you may need to use a different wheel than previously. " + \
|
||||
"Make sure that the correct .whl file is located in config/custom_components/llama_conversation/*"
|
||||
)
|
||||
return Exception("missing_wheels")
|
||||
|
||||
latest_wheel = potential_wheels[0]
|
||||
latest_version = latest_wheel.split("-")[1]
|
||||
|
||||
if not is_installed("llama-cpp-python") or version("llama-cpp-python") != latest_version:
|
||||
_LOGGER.info("Installing llama-cpp-python from wheel")
|
||||
_LOGGER.debug(f"Wheel location: {latest_wheel}")
|
||||
return install_package(os.path.join(folder, latest_wheel), pip_kwargs(config_dir))
|
||||
else:
|
||||
# someone who is better at async can figure out why this is necessary
|
||||
time.sleep(0.5)
|
||||
|
||||
_LOGGER.info("llama-cpp-python is already installed")
|
||||
return True
|
||||
except Exception as ex:
|
||||
_LOGGER.exception("Install failed!")
|
||||
return ex
|
||||
@@ -22,10 +22,11 @@ The dataset is generated from the different CSV "piles". The "piles" contain dif
|
||||
|
||||
## Generating the dataset from piles
|
||||
|
||||
`python3 generate_home_assistant_data.py --train --test --large`
|
||||
`python3 generate_home_assistant_data.py --train --test --large --sharegpt`
|
||||
|
||||
Supported dataset splits are `--test`, `--train`, & `--sample`
|
||||
Arguments to set the train dataset size are `--small`, `--medium`, `--large`, & `--xl`.
|
||||
Supported formats are `--raw_corpus` (chatml formatted) & `--sharegpt`
|
||||
|
||||
## Merging with other instruct-datasets for training
|
||||
|
||||
@@ -35,4 +36,27 @@ Supported datasets right now are:
|
||||
- `alpaca`
|
||||
- `wizardlm70k`
|
||||
|
||||
Please note that the supported datasets all have different licenses. Be aware that the license of the resulting data mixture might be different that the license of this dataset alone.
|
||||
Please note that the supported datasets all have different licenses. Be aware that the license of the resulting data mixture might be different that the license of this dataset alone.
|
||||
|
||||
## Adding a new personality
|
||||
In order to add a new personality, you need to define a new system prompt and new set of responses for the assistant. The system prompt is the description of the assistant's behavior that occurs at the start of the context. The responses are what is said back to the user when performing a task. The model should still respond with the correct service call no matter what the assistant's response is. The list of system prompts are stored in `pile_of_system_prompts.csv`, and the list of responses are stored in `pile_of_responses.csv`
|
||||
|
||||
There are 2 columns in `pile_of_system_prompts.csv`:
|
||||
- `persona`: the name of the persona
|
||||
- `prompt`: the system prompt to use for that persona. Recommended to put this in quotes in case the prompt also has commas in it
|
||||
|
||||
The response pile is a CSV with the following headers: `service,response,language,persona,short`
|
||||
- `service`: the service name that we are responding to. Make sure you cover enough different services so that the model can learn how to respond in all situations.
|
||||
- `response`: the text of the response. Recommended to put this in quotes in case the response also has commas in it
|
||||
- `language`: the language code of the response (currently only `en` is supported)
|
||||
- `persona`: the name of the persona the response belongs to. Use the name of your persona here
|
||||
- `short`: either 0 or 1. If it is 1 then the response is considered "short', and can be combined together with other "short" responses using "and". These are used for examples where there are multiple service calls
|
||||
|
||||
Generating the full dataset using the python script will print out a warning for any responses that are missing for a persona.
|
||||
|
||||
## Adding new Home Assistant functionality
|
||||
TODO
|
||||
<!-- In order to add new home assistant device types, you will need to add data to a handful of piles, as well as make small modifications to the `generate_home_assistant_data.py` script.
|
||||
1. Add 15-30 new device names with the new type to the `pile_of_device_names.csv`. This should be an entity_id and a 'friendly name'
|
||||
2. Add
|
||||
-->
|
||||
|
||||
@@ -1,17 +1,21 @@
|
||||
import argparse
|
||||
import json
|
||||
import csv
|
||||
import pandas
|
||||
import numpy as np
|
||||
import random
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
from datasets import load_dataset, concatenate_datasets
|
||||
from difflib import SequenceMatcher
|
||||
from typing import Final, Any
|
||||
from typing import Final, Any, Callable, Optional
|
||||
from tqdm import tqdm
|
||||
import webcolors
|
||||
|
||||
# #### STATES ####
|
||||
STATE_ON: Final = "on"
|
||||
STATE_OFF: Final = "off"
|
||||
STATE_ACTIVE: Final = "active"
|
||||
STATE_UNKNOWN: Final = "unknown"
|
||||
STATE_OPEN: Final = "open"
|
||||
STATE_OPENING: Final = "opening"
|
||||
@@ -30,6 +34,9 @@ STATE_JAMMED: Final = "jammed"
|
||||
STATE_UNAVAILABLE: Final = "unavailable"
|
||||
STATE_OK: Final = "ok"
|
||||
STATE_PROBLEM: Final = "problem"
|
||||
STATE_CLEANING: Final = "cleaning"
|
||||
STATE_DOCKED: Final = "docked"
|
||||
STATE_RETURNING: Final = "returning"
|
||||
|
||||
def closest_color(requested_color):
|
||||
min_colors = {}
|
||||
@@ -46,6 +53,7 @@ class DeviceType:
|
||||
name: str
|
||||
possible_states: list[(str, float)]
|
||||
services: dict[str, list]
|
||||
random_parameter_generator: Optional[dict[str, Callable]] = None
|
||||
|
||||
def get_all_services(self, extra_exposed_attributes):
|
||||
result = []
|
||||
@@ -53,6 +61,9 @@ class DeviceType:
|
||||
args = set(extra_exposed_attributes).intersection(self.services[service])
|
||||
result.append(f"{self.name}.{service}({','.join(args)})")
|
||||
return result
|
||||
|
||||
def get_random_parameter(self, param_name):
|
||||
return self.random_parameter_generator[param_name]()
|
||||
|
||||
def get_random_state(self, extra_exposed_attributes=[]):
|
||||
states = [ x[0] for x in self.possible_states ]
|
||||
@@ -71,17 +82,21 @@ class LightDeviceType(DeviceType):
|
||||
"turn_off": [],
|
||||
"toggle": []
|
||||
},
|
||||
random_parameter_generator={
|
||||
"rgb_color": lambda: (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)),
|
||||
"brightness": lambda: random.randint(0, 100),
|
||||
}
|
||||
)
|
||||
|
||||
def get_random_state(self, extra_exposed_attributes=[]):
|
||||
state = super().get_random_state(extra_exposed_attributes=extra_exposed_attributes)
|
||||
|
||||
if random.random() < 0.5 and "rgb_color" in extra_exposed_attributes:
|
||||
random_rgb = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
|
||||
random_rgb = self.get_random_parameter("rgb_color")
|
||||
state = state + ";" + closest_color(random_rgb) + " " + str(random_rgb)
|
||||
|
||||
if random.random() < 0.7 and "brightness" in extra_exposed_attributes:
|
||||
state = state + ";" + str(random.randint(0, 100)) + "%"
|
||||
state = state + ";" + str(self.get_random_parameter("brightness")) + "%"
|
||||
|
||||
return state
|
||||
|
||||
@@ -96,33 +111,46 @@ class ClimateDeviceType(DeviceType):
|
||||
"set_fan_mode": ["fan_mode"],
|
||||
"set_hvac_mode": ["hvac_mode"],
|
||||
"set_preset_mode": ["preset_mode"]
|
||||
},
|
||||
random_parameter_generator={
|
||||
"fan_mode": lambda: random.choice(["On Low", "On High", "Auto Low", "Auto High", "Off"]),
|
||||
"temp_f": lambda: random.randint(60, 80),
|
||||
"temp_c": lambda: random.randint(15, 25),
|
||||
"humidity": lambda: random.randint(10, 90),
|
||||
"preset_mode": lambda: random.choice(["home", "eco", "away", "auto"]),
|
||||
"hvac_mode": lambda: random.choice(["heat", "cool", "heat_cool", "off", "auto", "fan_only"]),
|
||||
})
|
||||
|
||||
def get_random_state(self, extra_exposed_attributes=[]):
|
||||
"""state;fan_mode;temperature;humidity"""
|
||||
state = random.choice(["heat", "cool", "heat_cool", "off", "auto", "fan_only"])
|
||||
state = self.get_random_parameter("hvac_mode")
|
||||
|
||||
if "fan_mode" in extra_exposed_attributes:
|
||||
state = state + ";" + random.choice(["On Low", "On High", "Auto Low", "Auto High", "Off"])
|
||||
state = state + ";" + self.get_random_parameter("fan_mode")
|
||||
if "temperature" in extra_exposed_attributes:
|
||||
if random.random() > 0.5:
|
||||
state = state + ";" + str(random.randint(60, 80)) + "F"
|
||||
state = state + ";" + str(self.get_random_parameter("temp_f")) + "F"
|
||||
else:
|
||||
state = state + ";" + str(random.randint(15, 25)) + "C"
|
||||
state = state + ";" + str(self.get_random_parameter("temp_c")) + "C"
|
||||
if "humidity" in extra_exposed_attributes:
|
||||
state = state + ";" + str(random.randint(10, 90)) + "%"
|
||||
state = state + ";" + str(self.get_random_parameter("humidity")) + "%"
|
||||
|
||||
if "preset_mode" in extra_exposed_attributes:
|
||||
if random.random() < 0.8 and "preset_mode" in extra_exposed_attributes:
|
||||
# if it is not "on a preset" then don't add the mode
|
||||
random_mode = random.choice(["home", "eco", "away", "auto", None, None, None])
|
||||
if random_mode:
|
||||
state = state + ";" + random_mode
|
||||
state = state + ";" + self.get_random_parameter("preset_mode")
|
||||
|
||||
return state
|
||||
|
||||
with open("piles/pile_of_media_names.csv") as f:
|
||||
with open("piles/pile_of_durations.csv") as f:
|
||||
reader = csv.DictReader(f)
|
||||
pile_of_durations = { x["duration"]: x["english_name"] for x in reader }
|
||||
|
||||
with open("piles/pile_of_media_names.txt") as f:
|
||||
pile_of_media_names = [ x.strip() for x in f.readlines() ]
|
||||
|
||||
with open("piles/pile_of_todo_items.txt") as f:
|
||||
pile_of_todo_items = [ x.strip() for x in f.readlines() ]
|
||||
|
||||
class MediaPlayerDeviceType(DeviceType):
|
||||
def __init__(self):
|
||||
super().__init__("media_player", [
|
||||
@@ -146,17 +174,20 @@ class MediaPlayerDeviceType(DeviceType):
|
||||
"media_stop": [],
|
||||
"media_next_track": [],
|
||||
"media_previous_track": []
|
||||
},
|
||||
random_parameter_generator={
|
||||
"media": lambda: random.choice(pile_of_media_names),
|
||||
"volume": lambda: round(random.random(), 2),
|
||||
})
|
||||
|
||||
|
||||
def get_random_state(self, extra_exposed_attributes=[]):
|
||||
state = super().get_random_state(extra_exposed_attributes=extra_exposed_attributes)
|
||||
|
||||
if "media_title" in extra_exposed_attributes and state in [STATE_PLAYING, STATE_PAUSED, STATE_BUFFERING, STATE_ON]:
|
||||
state = state + ";" + random.choice(pile_of_media_names)
|
||||
state = state + ";" + self.get_random_parameter("media")
|
||||
|
||||
if "volume_level" in extra_exposed_attributes and state != STATE_OFF:
|
||||
state = state + ";vol=" + str(round(random.random(), 2))
|
||||
state = state + ";vol=" + str(self.get_random_parameter("volume"))
|
||||
return state
|
||||
|
||||
SUPPORTED_DEVICES = {
|
||||
@@ -229,7 +260,52 @@ SUPPORTED_DEVICES = {
|
||||
},
|
||||
),
|
||||
"media_player": MediaPlayerDeviceType(),
|
||||
"climate": ClimateDeviceType()
|
||||
"climate": ClimateDeviceType(),
|
||||
"vacuum": DeviceType(
|
||||
name="vacuum",
|
||||
possible_states=[
|
||||
(STATE_CLEANING, 0.2),
|
||||
(STATE_DOCKED, 0.6),
|
||||
(STATE_RETURNING, 0.1),
|
||||
(STATE_IDLE, 0.05),
|
||||
(STATE_PAUSED, 0.05),
|
||||
],
|
||||
services={
|
||||
"start": [],
|
||||
"pause": [],
|
||||
"stop": [],
|
||||
"return_to_base": [],
|
||||
},
|
||||
),
|
||||
"timer": DeviceType(
|
||||
name="timer",
|
||||
possible_states=[
|
||||
(STATE_IDLE, 0.2),
|
||||
(STATE_ACTIVE, 0.6),
|
||||
(STATE_PAUSED, 0.1),
|
||||
],
|
||||
services={
|
||||
"start": ["duration"],
|
||||
"pause": [],
|
||||
"cancel": [],
|
||||
},
|
||||
random_parameter_generator={
|
||||
"duration": lambda: random.choice(list(pile_of_durations.keys())),
|
||||
"remaining": lambda: f"{random.randint(0, 3):02}:{random.randint(0, 60)}:{random.randint(0, 60)}"
|
||||
}
|
||||
),
|
||||
"todo": DeviceType(
|
||||
name="timer",
|
||||
possible_states=[ (f"{i}", (1/32)) for i in range(32) ],
|
||||
services={
|
||||
"add_item": ["item"],
|
||||
"pause": [],
|
||||
"cancel": [],
|
||||
},
|
||||
random_parameter_generator={
|
||||
"todo": lambda: random.choice(pile_of_todo_items),
|
||||
}
|
||||
),
|
||||
}
|
||||
|
||||
stacks_of_device_names = { x: [] for x in SUPPORTED_DEVICES.keys() }
|
||||
@@ -248,29 +324,60 @@ with open("piles/pile_of_templated_actions.csv") as f:
|
||||
pile_of_templated_actions = list(reader)
|
||||
processed_pile_of_templated_actions = []
|
||||
for action in pile_of_templated_actions:
|
||||
for x in range(int(action["multiplier"])):
|
||||
try:
|
||||
multiplier = int(action["multiplier"])
|
||||
except Exception:
|
||||
raise Exception(f"line has a bad multiplier: {action}")
|
||||
for x in range(multiplier):
|
||||
processed_pile_of_templated_actions.append(action)
|
||||
|
||||
pile_of_templated_actions = processed_pile_of_templated_actions
|
||||
|
||||
with open("piles/pile_of_device_actions.csv") as f:
|
||||
with open("piles/pile_of_specific_actions.csv") as f:
|
||||
reader = csv.DictReader(f)
|
||||
pile_of_device_actions = list(reader)
|
||||
pile_of_specific_actions = list(reader)
|
||||
|
||||
with open("piles/pile_of_responses.csv") as f:
|
||||
reader = csv.DictReader(f)
|
||||
raw_pile_of_responses = list(reader)
|
||||
pile_of_responses = pandas.read_csv("piles/pile_of_responses.csv")
|
||||
|
||||
pile_of_responses = {}
|
||||
for raw in raw_pile_of_responses:
|
||||
if raw["device_type"] not in pile_of_responses:
|
||||
pile_of_responses[raw["device_type"]] = {}
|
||||
pile_of_responses[raw["device_type"]][raw["service"]] = [ raw["response_1"], raw["response_2"], raw["response_3"] ]
|
||||
var_pattern = re.compile("<(.*?)>")
|
||||
def get_included_vars(response: str):
|
||||
result = []
|
||||
for var in var_pattern.findall(response):
|
||||
if var == "device_name":
|
||||
continue
|
||||
result.append(var)
|
||||
|
||||
return ",".join(sorted(result))
|
||||
|
||||
pile_of_responses["contains_vars"] = pile_of_responses["response"].apply(get_included_vars)
|
||||
|
||||
class NoResponseAvailableException(Exception):
|
||||
pass
|
||||
|
||||
def get_random_response(*, service: str, language: str, persona: str, question_template: str, short: bool) -> str:
|
||||
|
||||
required_vars = list(set([var for var in var_pattern.findall(question_template) if "device_name" not in var]))
|
||||
|
||||
possible_results = pile_of_responses.loc[(pile_of_responses['service']==service) &
|
||||
(pile_of_responses['language']==language) &
|
||||
(pile_of_responses['persona']==persona) &
|
||||
(pile_of_responses['short']==(1 if short else 0)) &
|
||||
(pile_of_responses['contains_vars']==",".join(sorted(required_vars)))
|
||||
]
|
||||
|
||||
if len(possible_results) == 0:
|
||||
raise NoResponseAvailableException(f"No responses matched the provided filters: {persona}, {service}, {language}, {required_vars}, {short}")
|
||||
|
||||
return possible_results.sample()["response"].values[0]
|
||||
|
||||
with open("piles/pile_of_status_requests.csv") as f:
|
||||
reader = csv.DictReader(f)
|
||||
pile_of_status_requests = list(reader)
|
||||
|
||||
with open("piles/pile_of_system_prompts.csv") as f:
|
||||
reader = csv.DictReader(f)
|
||||
pile_of_system_prompts = { line["persona"]: line["prompt"] for line in reader }
|
||||
|
||||
def format_device_line(*, device_name: str, friendly_name: str, state: str):
|
||||
return (f"{device_name} '{friendly_name}' = {state}")
|
||||
|
||||
@@ -304,7 +411,7 @@ def random_device_list(max_devices: int, avoid_device_names: list[str]):
|
||||
device_list = []
|
||||
device_lines = []
|
||||
# TODO: randomly pick attributes for this list
|
||||
extra_exposed_attributes = ["rgb_color", "brightness", "temperature", "humidity", "fan_mode", "media_title", "volume_level"]
|
||||
extra_exposed_attributes = ["rgb_color", "brightness", "temperature", "humidity", "fan_mode", "media_title", "volume_level", "duration", "remaining", "item"]
|
||||
|
||||
while len(device_list) < num_devices:
|
||||
choice = random.choice(possible_choices)
|
||||
@@ -334,12 +441,12 @@ def random_device_list(max_devices: int, avoid_device_names: list[str]):
|
||||
|
||||
return device_lines, list(device_types), list(extra_exposed_attributes)
|
||||
|
||||
def generate_static_example(action: dict, max_devices: int = 32):
|
||||
def generate_static_example(action: dict, language: str, persona: str, max_devices: int = 32):
|
||||
question = action["english_phrase"]
|
||||
target_device = action["device_name"]
|
||||
device_type = target_device.split(".")[0]
|
||||
service_name = f"{device_type}.{action['service_name']}"
|
||||
friendly_name = target_device.split(".")[1].replace("_", " ")
|
||||
service_name = action["service_name"]
|
||||
device_type = service_name.split(".")[0]
|
||||
target_device = f"{device_type}.{action['device_name']}"
|
||||
friendly_name = target_device.split(".")[1].replace("_", " ").title()
|
||||
|
||||
device_list, device_types, extra_exposed_attributes = random_device_list(
|
||||
max_devices=max_devices, avoid_device_names=[target_device])
|
||||
@@ -359,19 +466,28 @@ def generate_static_example(action: dict, max_devices: int = 32):
|
||||
for x in set(device_types + [device_type]):
|
||||
available_services.extend(SUPPORTED_DEVICES[x].get_all_services(extra_exposed_attributes))
|
||||
|
||||
response = get_random_response(
|
||||
service=action["service_name"],
|
||||
language=language,
|
||||
persona=persona,
|
||||
question_template="",
|
||||
short=False
|
||||
).lower()
|
||||
|
||||
response = response.replace("<device_name>", friendly_name)
|
||||
|
||||
return {
|
||||
"states": device_list,
|
||||
"available_services": list(available_services),
|
||||
"question": question.lower(),
|
||||
"answers": [ random.choice(pile_of_responses[device_type][action["service_name"]]).lower() ],
|
||||
"answers": [ response ],
|
||||
"service_calls": [ { "service": service_name, "target_device": target_device } ]
|
||||
}
|
||||
|
||||
def generate_templated_example(template: dict, max_devices: int = 32):
|
||||
def generate_templated_example(template: dict, language: str, persona: str, max_devices: int = 32):
|
||||
template_device_types: list[str] = template["device_type"].split("|")
|
||||
service_names: list[str] = [ f"{x}.{y}" for x, y in zip(template_device_types, template["service"].split("|")) ]
|
||||
question_template: str = template["english_phrase"]
|
||||
answer_template: str = template["assistant_response"]
|
||||
|
||||
# choose a random device for this template
|
||||
chosen_devices = []
|
||||
@@ -395,6 +511,10 @@ def generate_templated_example(template: dict, max_devices: int = 32):
|
||||
extra_exposed_attributes.append("temperature")
|
||||
if "<humidity>" in question_template and "humidity" not in extra_exposed_attributes:
|
||||
extra_exposed_attributes.append("humidity")
|
||||
if "<fan_mode>" in question_template and "fan_mode" not in extra_exposed_attributes:
|
||||
extra_exposed_attributes.append("fan_mode")
|
||||
if "<duration>" in question_template and "duration" not in extra_exposed_attributes:
|
||||
extra_exposed_attributes.append("duration")
|
||||
|
||||
state = SUPPORTED_DEVICES[device_dict["type"]].get_random_state(extra_exposed_attributes=extra_exposed_attributes)
|
||||
device_name = device_dict["device_name"]
|
||||
@@ -411,16 +531,35 @@ def generate_templated_example(template: dict, max_devices: int = 32):
|
||||
for x in set(device_types + template_device_types):
|
||||
available_services.extend(SUPPORTED_DEVICES[x].get_all_services(extra_exposed_attributes))
|
||||
|
||||
# generate the question
|
||||
# pick an appropriate response and generate the question
|
||||
if len(template_device_types) == 1:
|
||||
# TODO: pick correct resonse here (also probaly need to pass in language and persona)
|
||||
answer_template = get_random_response(
|
||||
service=service_names[0],
|
||||
language=language,
|
||||
persona=persona,
|
||||
question_template=question_template,
|
||||
short=False
|
||||
)
|
||||
|
||||
question = question_template.replace("<device_name>", chosen_devices[0]["description"])
|
||||
answer = answer_template.replace("<device_name>", chosen_devices[0]["description"])
|
||||
else:
|
||||
else:
|
||||
question = question_template
|
||||
answer = answer_template
|
||||
answers = []
|
||||
for i in range(len(template_device_types)):
|
||||
question = question.replace(f"<device_name{(i + 1)}>", chosen_devices[i]["description"])
|
||||
answer = answer.replace(f"<device_name{(i + 1)}>", chosen_devices[i]["description"])
|
||||
answer = get_random_response(
|
||||
service=service_names[i],
|
||||
language=language,
|
||||
persona=persona,
|
||||
question_template=question_template,
|
||||
short=True
|
||||
)
|
||||
answers.append(answer.replace(f"<device_name>", chosen_devices[i]["description"]))
|
||||
|
||||
# TODO: support different "and" words per language
|
||||
answer = " and ".join(answers)
|
||||
|
||||
# generate the list of service calls and answers
|
||||
service_calls = []
|
||||
@@ -428,40 +567,70 @@ def generate_templated_example(template: dict, max_devices: int = 32):
|
||||
service_calls.append({ "service": service, "target_device": device_dict["device_name"] })
|
||||
|
||||
if any(["climate" in service for service in service_names ]):
|
||||
climate_device_type = SUPPORTED_DEVICES["climate"]
|
||||
if "<hvac_mode>" in question:
|
||||
hvac_mode = climate_device_type.get_random_parameter("hvac_mode")
|
||||
question = question.replace("<hvac_mode>", hvac_mode)
|
||||
answer = answer.replace("<hvac_mode>", hvac_mode)
|
||||
service_calls = [ { **call, "hvac_mode": hvac_mode} for call in service_calls ]
|
||||
|
||||
if "<fan_mode>" in question:
|
||||
fan_mode = climate_device_type.get_random_parameter("fan_mode")
|
||||
question = question.replace("<fan_mode>", fan_mode)
|
||||
answer = answer.replace("<fan_mode>", fan_mode)
|
||||
service_calls = [ { **call, "fan_mode": fan_mode} for call in service_calls ]
|
||||
|
||||
if "<temp_f>" in question:
|
||||
temp_f = random.randint(60, 80)
|
||||
temp_f = climate_device_type.get_random_parameter("temp_f")
|
||||
question = question.replace("<temp_f>", str(temp_f))
|
||||
answer = answer.replace("<temp_f>", str(temp_f))
|
||||
service_calls = [ { **call, "temperature": temp_f} for call in service_calls ]
|
||||
|
||||
if "<temp_c>" in question:
|
||||
temp_c = random.randint(15, 25)
|
||||
temp_c = climate_device_type.get_random_parameter("temp_c")
|
||||
question = question.replace("<temp_c>", str(temp_c))
|
||||
answer = answer.replace("<temp_c>", str(temp_c))
|
||||
service_calls = [ { **call, "temperature": temp_c} for call in service_calls ]
|
||||
|
||||
if "<humidity>" in question:
|
||||
humidity = random.randint(0, 20) * 5
|
||||
humidity = climate_device_type.get_random_parameter("humidity")
|
||||
question = question.replace("<humidity>", str(humidity))
|
||||
answer = answer.replace("<humidity>", str(humidity))
|
||||
service_calls = [ { **call, "humidity": humidity} for call in service_calls ]
|
||||
|
||||
if any(["light" in service for service in service_names ]):
|
||||
light_device_type = SUPPORTED_DEVICES["light"]
|
||||
if "<brightness>" in question:
|
||||
brightness = random.randint(0, 100)
|
||||
brightness = light_device_type.get_random_parameter("brightness")
|
||||
question = question.replace("<brightness>", str(brightness))
|
||||
answer = answer.replace("<brightness>", str(brightness))
|
||||
service_calls = [ { **call, "brightness": round(brightness / 100, 2) } for call in service_calls ]
|
||||
|
||||
if "<color>" in question:
|
||||
random_rgb = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
|
||||
random_rgb = light_device_type.get_random_parameter("rgb_color")
|
||||
random_rgb_name = closest_color(random_rgb)
|
||||
actual_random_rgb = webcolors.name_to_rgb(random_rgb_name)
|
||||
actual_random_rgb = (actual_random_rgb.red, actual_random_rgb.green, actual_random_rgb.blue)
|
||||
question = question.replace("<color>", str(random_rgb_name))
|
||||
answer = answer.replace("<color>", str(random_rgb_name))
|
||||
service_calls = [ { **call, "rgb_color": str(actual_random_rgb) } for call in service_calls ]
|
||||
|
||||
|
||||
if any(["timer" in service for service in service_names ]):
|
||||
timer_device_type = SUPPORTED_DEVICES["timer"]
|
||||
if "<duration>" in question:
|
||||
duration = timer_device_type.get_random_parameter("duration")
|
||||
duration_name = pile_of_durations[duration]
|
||||
question = question.replace("<duration>", duration_name)
|
||||
answer = answer.replace("<duration>", duration_name)
|
||||
service_calls = [ { **call, "duration": str(duration) } for call in service_calls ]
|
||||
|
||||
if any(["todo" in service for service in service_names ]):
|
||||
todo_device_type = SUPPORTED_DEVICES["todo"]
|
||||
if "<todo>" in question:
|
||||
todo = todo_device_type.get_random_parameter("todo")
|
||||
question = question.replace("<todo>", todo)
|
||||
answer = answer.replace("<todo>", todo)
|
||||
service_calls = [ { **call, "item": todo } for call in service_calls ]
|
||||
|
||||
return {
|
||||
"states": device_list,
|
||||
@@ -471,7 +640,7 @@ def generate_templated_example(template: dict, max_devices: int = 32):
|
||||
"service_calls": service_calls
|
||||
}
|
||||
|
||||
def generate_status_request(template: dict, max_devices: int = 32):
|
||||
def generate_status_request(template: dict, language: str, persona: str, max_devices: int = 32):
|
||||
device_type: str = template["device_type"]
|
||||
state_name: str = template["state"]
|
||||
question_template: str = template["english_phrase"]
|
||||
@@ -492,24 +661,27 @@ def generate_status_request(template: dict, max_devices: int = 32):
|
||||
|
||||
# insert other templated variables
|
||||
if device_type == "climate":
|
||||
temp_f = random.randint(60, 80)
|
||||
climate_device_type = SUPPORTED_DEVICES["climate"]
|
||||
temp_f = climate_device_type.get_random_parameter("temp_f")
|
||||
answer = answer.replace("<temp_f>", str(temp_f))
|
||||
state_name = state_name.replace("<temp_f>", str(temp_f))
|
||||
|
||||
temp_c = random.randint(15, 25)
|
||||
temp_c = climate_device_type.get_random_parameter("temp_c")
|
||||
answer = answer.replace("<temp_c>", str(temp_c))
|
||||
state_name = state_name.replace("<temp_c>", str(temp_f))
|
||||
|
||||
humidity = random.randint(0, 20) * 5
|
||||
humidity = climate_device_type.get_random_parameter("humidity")
|
||||
answer = answer.replace("<humidity>", str(humidity))
|
||||
state_name = state_name.replace("<humidity>", str(temp_f))
|
||||
|
||||
if device_type == "light":
|
||||
brightness = random.randint(0, 100)
|
||||
light_device_type = SUPPORTED_DEVICES["light"]
|
||||
|
||||
brightness = light_device_type.get_random_parameter("brightness")
|
||||
answer = answer.replace("<brightness>", str(brightness))
|
||||
state_name = state_name.replace("<brightness>", str(brightness))
|
||||
|
||||
random_rgb = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
|
||||
random_rgb = light_device_type.get_random_parameter("rgb_color")
|
||||
random_rgb_name = closest_color(random_rgb)
|
||||
actual_random_rgb = webcolors.name_to_rgb(random_rgb_name)
|
||||
actual_random_rgb = (actual_random_rgb.red, actual_random_rgb.green, actual_random_rgb.blue)
|
||||
@@ -517,8 +689,9 @@ def generate_status_request(template: dict, max_devices: int = 32):
|
||||
answer = answer.replace("<color>", str(random_rgb_name))
|
||||
|
||||
if device_type == "media_player":
|
||||
volume = random.randint(0, 100)
|
||||
random_media = random.choice(pile_of_media_names)
|
||||
media_player_device_type = SUPPORTED_DEVICES["media_player"]
|
||||
volume = media_player_device_type.get_random_parameter("volume")
|
||||
random_media = media_player_device_type.get_random_parameter("media")
|
||||
|
||||
answer = answer.replace("<volume>", str(volume) + "%")
|
||||
state_name = state_name.replace("<volume>", str(volume) + "%")
|
||||
@@ -526,6 +699,18 @@ def generate_status_request(template: dict, max_devices: int = 32):
|
||||
answer = answer.replace("<media>", random_media)
|
||||
state_name = state_name.replace("<media>", random_media)
|
||||
|
||||
if device_type == "timer":
|
||||
timer_device_type = SUPPORTED_DEVICES["timer"]
|
||||
duration = timer_device_type.get_random_parameter("duration")
|
||||
duration_name = pile_of_durations[duration]
|
||||
remaining = timer_device_type.get_random_parameter("remaining")
|
||||
|
||||
answer = answer.replace("<duration>", duration_name)
|
||||
state_name = state_name.replace("<duration>", duration)
|
||||
|
||||
answer = answer.replace("<remaining>", remaining)
|
||||
state_name = state_name.replace("<remaining>", remaining)
|
||||
|
||||
device_list.insert(index, f"{chosen_device['device_name']} = {state_name}")
|
||||
|
||||
# gather a list of all available services
|
||||
@@ -541,8 +726,9 @@ def generate_status_request(template: dict, max_devices: int = 32):
|
||||
"service_calls": []
|
||||
}
|
||||
|
||||
def format_example(example):
|
||||
sys_prompt = "You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed or answer the following question with the information provided only."
|
||||
def format_example_raw_chatml(example, persona):
|
||||
"""Don't use this one anymore"""
|
||||
sys_prompt = pile_of_system_prompts[persona]
|
||||
services_block = "Services: " + ", ".join(sorted(example["available_services"]))
|
||||
states_block = "Devices:\n" + "\n".join(example["states"])
|
||||
question = example["question"]
|
||||
@@ -566,39 +752,83 @@ def format_example(example):
|
||||
# replace aliases with their actual values
|
||||
result = result.replace("blinds.", "cover.")
|
||||
result = result.replace("garage_door.", "cover.")
|
||||
return result
|
||||
return { "text": result }
|
||||
|
||||
def format_example_sharegpt(example, persona):
|
||||
sys_prompt = pile_of_system_prompts[persona]
|
||||
services_block = "Services: " + ", ".join(sorted(example["available_services"]))
|
||||
states_block = "Devices:\n" + "\n".join(example["states"])
|
||||
question = example["question"]
|
||||
answers = " ".join(example["answers"])
|
||||
|
||||
assistant_block = answers
|
||||
if len(example["service_calls"]) > 0:
|
||||
json_calls = [ json.dumps(x) for x in example["service_calls"] ]
|
||||
code_block = "\n```homeassistant\n" + "\n".join(json_calls) + "\n```"
|
||||
assistant_block = assistant_block + code_block
|
||||
|
||||
# replace aliases with their actual values
|
||||
assistant_block = assistant_block.replace("blinds.", "cover.").replace("garage_door.", "cover.")
|
||||
states_block = states_block.replace("blinds.", "cover.").replace("garage_door.", "cover.")
|
||||
services_block = services_block.replace("blinds.", "cover.").replace("garage_door.", "cover.")
|
||||
|
||||
conversation = [
|
||||
{ "from": "system", "value": "\n".join([ sys_prompt, services_block, states_block ])},
|
||||
{ "from": "user", "value": question },
|
||||
{ "from": "assistant", "value": assistant_block },
|
||||
]
|
||||
|
||||
return { "conversations": conversation }
|
||||
|
||||
|
||||
def generate_example_file(filename: str, seed: int, *, static_factor: int, template_factor: int, status_request_factor: int):
|
||||
def generate_example_file(filename: str, seed: int, format_func: Callable, languages: list[str], personas: list[str], *, static_factor: int, template_factor: int, status_request_factor: int):
|
||||
random.seed(seed)
|
||||
np.random.seed(seed)
|
||||
|
||||
print("Generating...")
|
||||
|
||||
def run_factor_times(func, examples, data, factor):
|
||||
def run_factor_times(func, examples, data, language, persona, factor):
|
||||
if factor >= 1:
|
||||
for i in range(factor):
|
||||
examples.append({ "text": format_example(func(data)) })
|
||||
examples.append(format_func(func(data, language, persona), persona))
|
||||
else:
|
||||
if random.random() < factor:
|
||||
examples.append({ "text": format_example(func(data)) })
|
||||
examples.append(format_func(func(data, language, persona), persona))
|
||||
|
||||
generated_examples = []
|
||||
for action in tqdm(pile_of_device_actions):
|
||||
run_factor_times(generate_static_example, generated_examples, action, static_factor)
|
||||
|
||||
for templated_action in tqdm(pile_of_templated_actions):
|
||||
run_factor_times(generate_templated_example, generated_examples, templated_action, template_factor)
|
||||
missing_responses = set()
|
||||
|
||||
for lang in languages:
|
||||
for person in personas:
|
||||
for action in tqdm(pile_of_specific_actions):
|
||||
try:
|
||||
run_factor_times(generate_static_example, generated_examples, action, lang, person, static_factor)
|
||||
except NoResponseAvailableException as ex:
|
||||
missing_responses.add(str(ex))
|
||||
|
||||
for templated_action in tqdm(pile_of_templated_actions):
|
||||
try:
|
||||
run_factor_times(generate_templated_example, generated_examples, templated_action, lang, person, template_factor)
|
||||
except NoResponseAvailableException as ex:
|
||||
missing_responses.add(str(ex))
|
||||
|
||||
for status_request in tqdm(pile_of_status_requests):
|
||||
run_factor_times(generate_status_request, generated_examples, status_request, status_request_factor)
|
||||
run_factor_times(generate_status_request, generated_examples, status_request, "en", "assistant", status_request_factor)
|
||||
|
||||
print(f"Generated {len(generated_examples)} examples. Saving...")
|
||||
with open(f"{filename}.json", "w") as f:
|
||||
json.dump(generated_examples, f, indent=4)
|
||||
|
||||
for missing in sorted(missing_responses):
|
||||
print(missing)
|
||||
|
||||
with open(f"{filename}.jsonl", "w") as f:
|
||||
for item in generated_examples:
|
||||
json_record = json.dumps(item)
|
||||
f.write(json_record + '\n')
|
||||
|
||||
print("Done!")
|
||||
|
||||
def format_alpaca(example):
|
||||
def format_alpaca(example, format_func: Callable):
|
||||
question = example["instruction"]
|
||||
if "input" in example and example["input"]:
|
||||
question = question = "\n" + example["input"]
|
||||
@@ -612,7 +842,7 @@ def format_alpaca(example):
|
||||
for x in device_types:
|
||||
available_services.extend(SUPPORTED_DEVICES[x].get_all_services(extra_exposed_attributes))
|
||||
|
||||
text = format_example(example={
|
||||
text = format_func(example={
|
||||
"states": device_list,
|
||||
"available_services": list(available_services),
|
||||
"question": question,
|
||||
@@ -626,60 +856,78 @@ def format_alpaca(example):
|
||||
|
||||
return result
|
||||
|
||||
def merge_with_dataset(dataset_name, seed, outupt_name, format_function, dataset_column_names):
|
||||
def merge_with_dataset(dataset_name, seed, output_name, format_function, dataset_column_names, format_func):
|
||||
alpaca_dataset = load_dataset(dataset_name)["train"].train_test_split(test_size=0.1)
|
||||
home_assistant_dataset = load_dataset("json", data_files={ "train": "home_assistant_train.json", "test": "home_assistant_test.json" })
|
||||
home_assistant_dataset = load_dataset("json", data_files={ "train": "home_assistant_train.jsonl", "test": "home_assistant_test.jsonl" })
|
||||
|
||||
random.seed(seed)
|
||||
np.random.seed(seed)
|
||||
|
||||
alpaca_dataset = alpaca_dataset.map(format_function).remove_columns(dataset_column_names)
|
||||
|
||||
combined_dataset_train = concatenate_datasets([home_assistant_dataset["train"], alpaca_dataset["train"]]).shuffle(seed=42)
|
||||
combined_dataset_test = concatenate_datasets([home_assistant_dataset["test"], alpaca_dataset["test"]]).shuffle(seed=42)
|
||||
|
||||
combined_dataset_train.to_json(f"home_assistant_{outupt_name}_merged_train.json")
|
||||
combined_dataset_test.to_json(f"home_assistant_{outupt_name}_merged_test.json")
|
||||
combined_dataset_train.to_json(f"home_assistant_{output_name}_merged_train.jsonl")
|
||||
combined_dataset_test.to_json(f"home_assistant_{output_name}_merged_test.jsonl")
|
||||
|
||||
|
||||
# TODO: add examples for ambiguous requests. asking a clarifying question
|
||||
# TODO: make more randomized names for devices (random words or people's names)
|
||||
# TODO: answer questions about more than one thing in the state list at once
|
||||
# TODO: add examples for rooms/groups of devices. i.e. "turn off all the lights in the kitchen"
|
||||
# TODO: add personas for responses. different system prompts should invoke different response tones (pirate, robot, and mean)
|
||||
# TODO: add time, weather, and calendar/reminders (next 3 events?)
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Generate the full dataset from the CSV piles")
|
||||
parser.add_argument("--sample", action="store_true", help="Set this flag to enable generation of the train dataset.")
|
||||
parser.add_argument("--test", action="store_true", help="Set this flag to enable generation of the train dataset..")
|
||||
parser.add_argument("--train", action="store_true", help="Set this flag to enable generation of the train dataset.")
|
||||
parser.add_argument("--merge", help="Set this flag to merge the generated datasets with the specified dataset.")
|
||||
|
||||
train_size_group = parser.add_mutually_exclusive_group()
|
||||
train_size_group.add_argument('--small', action='store_const', const='small', dest='size')
|
||||
train_size_group.add_argument('--medium', action='store_const', const='medium', dest='size')
|
||||
train_size_group.add_argument('--large', action='store_const', const='large', dest='size')
|
||||
train_size_group.add_argument('--xl', action='store_const', const='xl', dest='size')
|
||||
|
||||
dataset_format_group = parser.add_mutually_exclusive_group()
|
||||
dataset_format_group.add_argument('--raw_corpus', action='store_const', const='raw', dest='format')
|
||||
dataset_format_group.add_argument('--sharegpt', action='store_const', const='sharegpt', dest='format')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
languages = ["en"]
|
||||
personas = ["assistant", "pirate", "robot"]
|
||||
|
||||
if not args.sample and not args.train and not args.test and not args.merge:
|
||||
parser.print_usage()
|
||||
|
||||
if not args.format or args.format == "raw":
|
||||
format_func = format_example_raw_chatml
|
||||
elif args.format == "sharegpt":
|
||||
format_func = format_example_sharegpt
|
||||
|
||||
if args.sample:
|
||||
generate_example_file("sample", 42, static_factor=1, template_factor=1, status_request_factor=1)
|
||||
generate_example_file("sample", 42, format_func, languages, personas, static_factor=1, template_factor=1, status_request_factor=1)
|
||||
if args.train:
|
||||
# TODO: add small, medium, large cli clags
|
||||
if args.size == "small":
|
||||
generate_example_file("home_assistant_train", 42, static_factor=1, template_factor=10, status_request_factor=8)
|
||||
generate_example_file("home_assistant_train", 42, format_func, languages, personas, static_factor=1, template_factor=10, status_request_factor=8)
|
||||
elif args.size == "medium":
|
||||
generate_example_file("home_assistant_train", 42, static_factor=5, template_factor=15, status_request_factor=12)
|
||||
generate_example_file("home_assistant_train", 42, format_func, languages, personas, static_factor=5, template_factor=15, status_request_factor=12)
|
||||
elif args.size == "large":
|
||||
generate_example_file("home_assistant_train", 42, static_factor=5, template_factor=20, status_request_factor=15)
|
||||
generate_example_file("home_assistant_train", 42, format_func, languages, personas, static_factor=5, template_factor=20, status_request_factor=15)
|
||||
elif args.size == "xl":
|
||||
generate_example_file("home_assistant_train", 42, static_factor=7, template_factor=25, status_request_factor=18)
|
||||
generate_example_file("home_assistant_train", 42, format_func, languages, personas, static_factor=7, template_factor=25, status_request_factor=18)
|
||||
else:
|
||||
raise Exception(f"Unrecognized dataset size: {args.size}")
|
||||
if args.test:
|
||||
generate_example_file("home_assistant_test", 12345, static_factor=0.25, template_factor=3, status_request_factor=2)
|
||||
generate_example_file("home_assistant_test", 12345, format_func, languages, personas, static_factor=0.25, template_factor=1, status_request_factor=2)
|
||||
|
||||
if args.merge == "alpaca":
|
||||
merge_with_dataset("yahma/alpaca-cleaned", 42, "alpaca", format_alpaca, ["input", "output", "instruction"])
|
||||
merge_with_dataset("yahma/alpaca-cleaned", 42, "alpaca", format_alpaca, ["input", "output", "instruction"], format_func)
|
||||
elif args.merge == "wizardlm70k":
|
||||
merge_with_dataset("WizardLM/WizardLM_evol_instruct_70k", 42, "wizardlm70k", format_alpaca, ["output", "instruction"])
|
||||
merge_with_dataset("WizardLM/WizardLM_evol_instruct_70k", 42, "wizardlm70k", format_alpaca, ["output", "instruction"], format_func)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
71
data/piles/__in_progress.csv
Normal file
71
data/piles/__in_progress.csv
Normal file
@@ -0,0 +1,71 @@
|
||||
---- templated actions
|
||||
input_select,select_option,"Set <device_name> to <option>.",8
|
||||
input_select,select_option,"Can you please modify <device_name> and select the <option>?",8
|
||||
input_select,select_option,"I'd like to request that <device_name> be configured with the setting <option>.",8
|
||||
input_select,select_option,"May I kindly ask you to set the configuration of <device_name> to <option>?",8
|
||||
input_select,select_option,"Please adjust the settings of <device_name> and choose the <option>.",8
|
||||
input_select,select_option,"Could we please change the mode of <device_name> to <option>?",8
|
||||
input_select,select_option,"Set the <option> on <device_name>.",8
|
||||
input_select,select_option,"I'd appreciate if you could update the settings for <device_name> and set it to the <option>.",8
|
||||
input_select,select_option,"May we make the following adjustment: configure <device_name> with the <option>?",8
|
||||
input_select,select_option,"Could you please make sure that <device_name> utilizes the setting <option>?",8
|
||||
input_select,select_option,"I'd like to request your assistance in setting <device_name> to <option>.",8
|
||||
input_select,select_option,"Set <device_name> to the <option> mode.",8
|
||||
input_select,select_option,"Can we please alter the configuration of <device_name> and select the <option>?",8
|
||||
|
||||
---- specific actions
|
||||
input_select.nature_sounds,"Could you set the nature sounds to ""thunderstorm"", please?",select_option
|
||||
input_select.people,"Can you set the people select to ""John""?",select_option
|
||||
input_select.who_cooks,Can you change who cooks to Paulus please?,select_option
|
||||
input_select.living_room_scene,Change the living room scene to Movie Time.,select_option
|
||||
input_select.alarm_status,"Set the alarm status to ""Armed"".",select_option
|
||||
input_select.roof_light_preset,"Change the roof light preset to ""Candy Cane"".",select_option
|
||||
input_select.roof_light_preset,"Please set ""Halloween"" for the roof light preset"".",select_option
|
||||
input_select.roof_light_preset,"Turn the roof light preset to ""Twinkle"".",select_option
|
||||
input_select.nature_sounds,"Turn ""off"" the nature sounds.",select_option
|
||||
input_select.nature_sounds,"Set nature sounds to ""Windy Mountain"".",select_option
|
||||
|
||||
|
||||
---- we need to add support for prameters in specific actions pile to use these
|
||||
todo.add_item,groceries,Add milk to my groceries list.
|
||||
todo.add_item,household_supplies,Could you please add eggs to my household supplies list?
|
||||
todo.add_item,electronics,I would like you to add a new printer to the electronics list.
|
||||
todo.add_item,clothing,Kindly add a shirt to the clothing list for me.
|
||||
todo.add_item,office_supplies,Could you please add paper clips to the office supplies list?
|
||||
todo.add_item,personal_care,I would appreciate it if you could add toothpaste to my personal care list.
|
||||
todo.add_item,technology,I'd like you to add a new phone to the technology list.
|
||||
todo.add_item,gifts,Could you please add a gift card to the gifts list?
|
||||
todo.add_item,books,I would like you to add a novel to the books list.
|
||||
todo.add_item,music,Could you please add Halsey's new album to my music list?
|
||||
todo.add_item,movies,Could you kindly add Batman Begins to the movies list for me?
|
||||
todo.add_item,travel,I would appreciate it if you could add Scotland to the travel list.
|
||||
todo.add_item,education,I'd like you to add a language course to the education list.
|
||||
todo.add_item,health,Could you please add a doctor's appointment to my health list?
|
||||
todo.add_item,finance,"I would like you to add ""Pay Power Bill"" to the finance list."
|
||||
todo.add_item,shopping_list,Could you please add bread to the shopping list?
|
||||
todo.add_item,household_supplies_list,"Could you kindly add a ""Walnut Credenza"" to the projects list?"
|
||||
todo.add_item,electronics_list,I would like you to add a new laptop to the electronics list.
|
||||
todo.add_item,clothing_list,Kindly add pants to the clothing list for me.
|
||||
todo.add_item,office_supplies_list,Could you please add staples to the office supplies list?
|
||||
todo.add_item,personal_care_list,I would appreciate it if you could add razorblades to my personal care list.
|
||||
todo.add_item,technology_list,I'd like you to add a new computer to the technology list.
|
||||
todo.add_item,gifts_list,Could you please add a socks to the gifts list?
|
||||
todo.add_item,books_list,"I would like you to add ""Treasure Island"" to the books list."
|
||||
todo.add_item,music_list,Could you please add Taylor Swift's new album to my music list?
|
||||
todo.add_item,movies_list,Could you kindly add Pulp Fiction to the movies list for me?
|
||||
todo.add_item,travel_list,I would appreciate it if you could add Japan to the travel list.
|
||||
todo.add_item,education_list,I'd like you to add a language course to the education list.
|
||||
todo.add_item,health_list,Could you please add a doctor's appointment to my health list?
|
||||
todo.add_item,finance_list,"I would like you to add ""Pay Phone Bill"" to the finance list."
|
||||
todo.add_item,grocery_list,"Could you please add ""Vinegar"" to the shopping list?"
|
||||
todo.add_item,projects,"Could you kindly add a ""Maple Bench"" to the projects list?"
|
||||
timer.start,pomodoro,Please set my pomodoro timer for 20 minutes.
|
||||
timer.start,kitchen,Turn on the kitchen timer for 8 minutes.
|
||||
timer.start,work,Set the work timer for 10 minutes.
|
||||
timer.start,laundry,Start the laundry timer for an hour.
|
||||
timer.start,cooking,Set a 30 second cooking timer.
|
||||
timer.cancel,pomodoro,Cancel the pomodoro timer.
|
||||
timer.cancel,kitchen,Please stop my kitchen timer.
|
||||
timer.cancel,work,Turn off the work timer.
|
||||
timer.cancel,laundry,Please shut off the laundry timer.
|
||||
timer.cancel,cooking,The cooking timer is no longer needed.
|
||||
|
@@ -1,373 +0,0 @@
|
||||
device_name,english_phrase,service_name
|
||||
blinds.kitchen,"Could you raise the kitchen blinds",open
|
||||
blinds.kitchen,"Lower the kitchen blinds",close
|
||||
blinds.kitchen,"Stop the kitchen blinds where they are",stop
|
||||
blinds.kitchen,"Switch the state of the kitchen blinds",toggle
|
||||
blinds.living_room,"Close the living room blinds",close
|
||||
blinds.living_room,"Open the living room blinds",open
|
||||
blinds.living_room,"Stop adjusting the living room blinds",stop
|
||||
blinds.living_room,"Toggle the living room blinds",toggle
|
||||
blinds.master_bedroom,"Lift the master bedroom blinds",open
|
||||
blinds.master_bedroom,"Please halt the master bedroom blinds",stop
|
||||
blinds.master_bedroom,"Reverse the master bedroom blinds",toggle
|
||||
blinds.master_bedroom,"Shut the master bedroom blinds",close
|
||||
fan.attic_1,"Disable the attic fan",turn_off
|
||||
fan.attic_1,"Increase speed of the attic fan",increase_speed
|
||||
fan.attic_1,"Slow down the attic fan",decrease_speed
|
||||
fan.attic_1,"Slow down the attic fan",decrease_speed
|
||||
fan.attic_1,"Turn down the attic fan",decrease_speed
|
||||
fan.attic_2,"Toggle the attic fan",toggle
|
||||
fan.attic_2,"Toggle the attic fan",toggle
|
||||
fan.attic,"Accelerate the fan in the attic",increase_speed
|
||||
fan.attic,"Change the fan status in the attic",toggle
|
||||
fan.attic,"Slow down the fan in the attic",decrease_speed
|
||||
fan.basement,"Toggle the basement fan",toggle
|
||||
fan.basement,"Toggle the basement fan",toggle
|
||||
fan.bathroom,"Activate the bathroom fan",turn_on
|
||||
fan.bathroom,"Turn on the bathroom fan",turn_on
|
||||
fan.bathroom,"Turn on the bathroom fan",turn_on
|
||||
fan.bedroom_master,"Activate the master bedroom fan",turn_on
|
||||
fan.bedroom_master,"Deactivate the master bedroom fan",turn_off
|
||||
fan.bedroom_master,"Ramp up the master bedroom fan speed",increase_speed
|
||||
fan.bedroom_master,"Slow down the master bedroom fan",decrease_speed
|
||||
fan.bedroom_master,"Switch the state of the master bedroom fan",toggle
|
||||
fan.bedroom,"Toggle the bedroom fan",toggle
|
||||
fan.bedroom,"Toggle the bedroom fan",toggle
|
||||
fan.bedroom,"Toggle the bedroom fan",toggle
|
||||
fan.dining_area,"Please switch off the dining area fan",turn_off
|
||||
fan.dining_area,"Please switch on the dining area fan",turn_on
|
||||
fan.dining_room,"Switch off the dining room fan",turn_off
|
||||
fan.dining_table_above,"Please toggle the fan above the dining table",toggle
|
||||
fan.driveway,"Flip the driveway fan",toggle
|
||||
fan.garage,"Flip the fan in the garage",toggle
|
||||
fan.garage,"Shut down the garage fan",turn_off
|
||||
fan.garage,"Switch off the garage fan",turn_off
|
||||
fan.garage,"Switch off the garage fan",turn_off
|
||||
fan.garage,"Turn down the fan in the garage",decrease_speed
|
||||
fan.garage,"Turn on the garage fan",turn_on
|
||||
fan.garage,"Turn up the fan in the garage",increase_speed
|
||||
fan.guest_room,"Can you toggle the fan in the guest room",toggle
|
||||
fan.guest_room,"Decrease the fan speed in the guest room",decrease_speed
|
||||
fan.guest_room,"Increase the fan speed in the guest room",increase_speed
|
||||
fan.guest_room,"Switch off the guest room fan",turn_off
|
||||
fan.hallway,"Boost the fan speed in the hallway",increase_speed
|
||||
fan.hallway,"Enable the hallway fan",turn_on
|
||||
fan.hallway,"Lower the fan speed in the hallway",decrease_speed
|
||||
fan.hallway,"Switch the state of the fan in the hallway",toggle
|
||||
fan.kitchen,"Enable the kitchen fan",turn_on
|
||||
fan.kitchen,"Slow down the kitchen fan",decrease_speed
|
||||
fan.kitchen,"Slow down the kitchen fan",decrease_speed
|
||||
fan.kitchen,"Switch off the kitchen fan",turn_off
|
||||
fan.kitchen,"Switch off the kitchen fan",turn_off
|
||||
fan.kitchen,"Toggle the kitchen fan",toggle
|
||||
fan.kitchen,"Turn down the kitchen fan",decrease_speed
|
||||
fan.living_room,"Decrease the speed of the living room fan",decrease_speed
|
||||
fan.living_room,"Increase the speed of the living room fan",increase_speed
|
||||
fan.living_room,"Start the living room fan",turn_on
|
||||
fan.living_room,"Toggle the fan in the living room",toggle
|
||||
fan.living_room,"Turn down the living room fan",decrease_speed
|
||||
fan.living_room,"Turn off the living room fan",turn_off
|
||||
fan.living_room,"Turn off the living room fan",turn_off
|
||||
fan.living_room,"Turn on the living room fan",turn_on
|
||||
fan.living_room,"Turn on the living room fan",turn_on
|
||||
fan.office,"Could you disable the office fan",turn_off
|
||||
fan.office,"Could you enable the office fan",turn_on
|
||||
fan.office,"Toggle the office fan",toggle
|
||||
fan.office,"Toggle the office fan",toggle
|
||||
fan.office,"Toggle the office fan",toggle
|
||||
fan.office,"Turn off the office fan",turn_off
|
||||
fan.office,"Turn off the office fan",turn_off
|
||||
fan.outdoor,"Toggle the outdoor fan",toggle
|
||||
fan.patio,"Turn off the patio fan",turn_off
|
||||
fan.pool,"Change the status of the pool fan",toggle
|
||||
fan.shed,"Switch the shed fan on or off",toggle
|
||||
fan.study,"Activate the study fan",turn_on
|
||||
fan.study,"Alter the fan state in the study",toggle
|
||||
fan.study,"Ramp up the fan speed in the study",increase_speed
|
||||
fan.study,"Reduce the fan speed in the study",decrease_speed
|
||||
fan.study,"Switch off the study fan",turn_off
|
||||
fan.study,"Switch on the study fan",turn_on
|
||||
fan.study,"Turn off the study fan",turn_off
|
||||
fan.study,"Turn off the study fan",turn_off
|
||||
garage_door.basement,"Please raise the basement garage door",open
|
||||
garage_door.bike_storage,"Activate the bike storage garage",open
|
||||
garage_door.bike_storage,"Deactivate the bike storage garage",close
|
||||
garage_door.main,"Close the main garage door",close
|
||||
garage_door.main,"Open the main garage door",open
|
||||
garage_door.main,"Stop the main garage door",stop
|
||||
garage_door.main,"Toggle the main garage door",toggle
|
||||
garage_door.one_car,"Make sure the one car garage is closed",close
|
||||
garage_door.side,"Could you lift the side garage door",open
|
||||
garage_door.side,"Halt the side garage door",stop
|
||||
garage_door.side,"Lower the side garage door",close
|
||||
garage_door.side,"Switch the state of the side garage door",toggle
|
||||
garage_door.two_car,"Open the two car garage",open
|
||||
light.attic,"Change the light status in the attic",toggle
|
||||
light.bathroom_1,"Could you illuminate the bathroom",turn_on
|
||||
light.bathroom_1,"Please extinguish the bathroom light",turn_off
|
||||
light.bathroom,"Activate the bathroom light",turn_on
|
||||
light.bathroom,"Switch off the bathroom light",turn_off
|
||||
light.bathroom,"Turn off the bathroom light",turn_off
|
||||
light.bathroom,"Turn off the bathroom light",turn_off
|
||||
light.bathroom,"Turn off the bathroom light",turn_off
|
||||
light.bedroom_1,"Activate the bedroom light",turn_on
|
||||
light.bedroom_1,"Deactivate the bedroom light",turn_off
|
||||
light.bedroom_1,"Toggle the bedroom light",toggle
|
||||
light.bedroom_2,"Switch off the bedroom light",turn_off
|
||||
light.dining_room_1,"Activate the lights in the dining room",turn_on
|
||||
light.dining_room,"Activate the dining room light",turn_on
|
||||
light.dining_room,"Switch off the dining room light",turn_off
|
||||
light.dining_room,"Switch off the dining room light",turn_off
|
||||
light.dining_room,"Switch off the dining room light",turn_off
|
||||
light.dining_room,"Switch off the dining room light",turn_off
|
||||
light.dining_room,"Turn off the dining room light",turn_off
|
||||
light.dining_table_above,"Please toggle the light above the dining table",toggle
|
||||
light.driveway,"Flip the driveway light",toggle
|
||||
light.driveway,"Turn on the driveway light",turn_on
|
||||
light.garage,"Activate the garage light",turn_on
|
||||
light.garage,"Activate the garage light",turn_on
|
||||
light.garage,"Flip the light in the garage",toggle
|
||||
light.garage,"Switch on the garage light",turn_on
|
||||
light.garage,"Switch on the garage light",turn_on
|
||||
light.garden_1,"Deactivate the garden light",turn_off
|
||||
light.garden_1,"Switch on the garden light",turn_on
|
||||
light.garden_1,"Turn on the garden light",turn_on
|
||||
light.garden_2,"Activate the garden light",turn_on
|
||||
light.garden,"Switch on the garden light",turn_on
|
||||
light.guest_room,"Could you toggle the light in the guest room",toggle
|
||||
light.guest_room,"Deactivate the guest room light",turn_off
|
||||
light.guest_room,"Switch off the guest room light",turn_off
|
||||
light.guest_room,"Switch on the guest room light",turn_on
|
||||
light.guest_room,"Toggle the guest room light",toggle
|
||||
light.hallway,"Switch off the hallway light",turn_off
|
||||
light.hallway,"Switch the state of the light in the hallway",toggle
|
||||
light.hallway,"Toggle the hallway light",toggle
|
||||
light.hallway,"Turn off the hallway light",turn_off
|
||||
light.hallway,"Turn on the hallway light",turn_on
|
||||
light.kitchen_1,"Switch on the kitchen lights",turn_on
|
||||
light.kitchen_1,"Toggle the kitchen light",toggle
|
||||
light.kitchen_1,"Turn on the kitchen light",turn_on
|
||||
light.kitchen_2,"Switch off the kitchen light",turn_off
|
||||
light.kitchen_2,"Toggle the kitchen light",toggle
|
||||
light.kitchen_counter,"Switch off the kitchen counter light",turn_off
|
||||
light.kitchen_counter,"Switch on the kitchen counter light",turn_on
|
||||
light.living_room_1,"Switch off the living room light",turn_off
|
||||
light.living_room,"Turn off the living room light",turn_off
|
||||
light.living_room,"Turn on the living room light",turn_on
|
||||
light.master_bedroom_1,"Deactivate the master bedroom light",turn_off
|
||||
light.master_bedroom_1,"Please activate the master bedroom light",turn_on
|
||||
light.master_bedroom_lamp,"Turn off the light in the bedroom",turn_off
|
||||
light.office_1,"Enable the office light",turn_on
|
||||
light.office,"Deactivate the office light",turn_off
|
||||
light.office,"Toggle the office light",toggle
|
||||
light.outdoor,"Toggle the outdoor light",toggle
|
||||
light.patio,"Deactivate the patio light",turn_off
|
||||
light.patio,"Disable the patio light",turn_off
|
||||
light.patio,"Enable the patio light",turn_on
|
||||
light.patio,"Switch on the patio light",turn_on
|
||||
light.patio,"Toggle the patio light",toggle
|
||||
light.patio,"Turn on the patio light",turn_on
|
||||
light.patio,"Turn on the patio light",turn_on
|
||||
light.pool,"Activate the pool light",turn_on
|
||||
light.pool,"Change the status of the pool light",toggle
|
||||
light.pool,"Turn off the pool light",turn_off
|
||||
light.pool,"Turn on the pool light",turn_on
|
||||
light.shed,"Activate the shed light",turn_on
|
||||
light.shed,"Activate the shed light",turn_on
|
||||
light.shed,"Switch on the shed light",turn_on
|
||||
light.shed,"Switch the shed light on or off",toggle
|
||||
light.study,"Activate the study light",turn_on
|
||||
light.study,"Alter the light state in the study",toggle
|
||||
light.study,"Toggle the study light",toggle
|
||||
light.study,"Toggle the study light",toggle
|
||||
light.study,"Turn off the study light",turn_off
|
||||
light.study,"Turn off the study light",turn_off
|
||||
light.dining_room_chandelier,"Turn on the dining room light",turn_on
|
||||
light.chandelier_front_hallway,"Hey can you turn on the front hallway chandelier",turn_on
|
||||
lock.back_door,"Could you disengage the back door lock",unlock
|
||||
lock.back_door,"Engage the back door lock",lock
|
||||
lock.bike_storage,"Disengage the lock on the bike storage",unlock
|
||||
lock.front_door,"Lock the front door",lock
|
||||
lock.front_door,"Unlock the front door",unlock
|
||||
lock.nursery,"Can you secure the nursery door",lock
|
||||
lock.office,"Please lock the office",lock
|
||||
lock.office,"Please unlock the office",unlock
|
||||
lock.tool_shed,"Unlock the tool shed",unlock
|
||||
lock.wine_cellar,"Could you lock the wine cellar",lock
|
||||
lock.front_door,"Please lock the front door.",lock
|
||||
lock.back_door,"Can you unlock the back door?",unlock
|
||||
lock.garage_door,"I need the garage door locked.",lock
|
||||
lock.patio_door,"Unlock the patio door, please.",unlock
|
||||
lock.main_gate,"Ensure the main gate is locked.",lock
|
||||
lock.kitchen_window,"Open the lock on the kitchen window.",unlock
|
||||
lock.office_door,"Can we lock the office door?",lock
|
||||
lock.bedroom_window,"Bedroom window needs to be unlocked.",unlock
|
||||
lock.basement_door,"Lock up the basement door.",lock
|
||||
lock.bathroom_window,"Could you unlock the bathroom window?",unlock
|
||||
lock.garden_gate,"Please secure the garden gate.",lock
|
||||
lock.rooftop_door,"Open the rooftop door lock.",unlock
|
||||
lock.cellar_door,"Cellar door should be locked now.",lock
|
||||
lock.pool_gate,"I'd like the pool gate unlocked.",unlock
|
||||
lock.shed_door,"Ensure the shed door is securely locked.",lock
|
||||
lock.balcony_door,"Unlock the balcony door for me.",unlock
|
||||
lock.laundry_room_door,"Can you lock the laundry room door?",lock
|
||||
lock.nursery_door,"The nursery door needs to be unlocked.",unlock
|
||||
lock.guest_room_door,"Please lock the guest room door.",lock
|
||||
lock.side_entrance,"Unlock our side entrance.",unlock
|
||||
lock.fence_gate,"Make sure the fence gate is locked.",lock
|
||||
lock.garage_side_door,"Garage side door should be unlocked.",unlock
|
||||
lock.attic_door,"Attic door needs locking.",lock
|
||||
lock.fire_escape,"Can you unlock the fire escape?",unlock
|
||||
lock.storage_room_door,"Please lock the storage room door.",lock
|
||||
lock.boathouse_door,"Unlock the boathouse door.",unlock
|
||||
lock.carport_gate,"Carport gate needs to be locked.",lock
|
||||
lock.backyard_gate,"Can we have the backyard gate unlocked?",unlock
|
||||
lock.front_porch_door,"Lock the front porch door.",lock
|
||||
lock.back_terrace_door,"Open the lock on the back terrace door.",unlock
|
||||
lock.wine_cellar,"Ensure the wine cellar is locked.",lock
|
||||
lock.sunroom_door,"Please unlock the sunroom door.",unlock
|
||||
lock.home_office,"I'd like the home office locked up.",lock
|
||||
lock.playroom_door,"Can you unlock the playroom door?",unlock
|
||||
lock.art_studio,"The art studio should be locked.",lock
|
||||
lock.music_room,"Unlock the music room, please.",unlock
|
||||
lock.home_gym,"Lock the home gym door.",lock
|
||||
lock.cinema_room,"Cinema room needs to be unlocked.",unlock
|
||||
lock.library_door,"Please lock the library door.",lock
|
||||
lock.conservatory,"Can the conservatory be unlocked?",unlock
|
||||
media_player.kitchen,"Could you start the media in the kitchen",turn_on
|
||||
media_player.kitchen,"Play the previous track in the kitchen",media_previous_track
|
||||
media_player.kitchen,"Please raise the volume in the kitchen",volume_up
|
||||
media_player.living_room,"Activate the media in the living room",turn_on
|
||||
media_player.living_room,"Mute the media player in the living room",volume_mute
|
||||
media_player.living_room,"Skip to the next track in the living room",media_next_track
|
||||
media_player.living_room,"Turn up the volume in the living room",volume_up
|
||||
media_player.master_bedroom,"Can you increase the volume on the master bedroom media player",volume_up
|
||||
media_player.master_bedroom,"Pause the media in the master bedroom",media_pause
|
||||
media_player.master_bedroom,"Turn on the master bedroom media player",turn_on
|
||||
media_player.nursery,"Please play the media in the nursery",media_play
|
||||
media_player.nursery,"Stop the media in the nursery",media_stop
|
||||
media_player.nursery,"Turn down the volume in the nursery",volume_down
|
||||
media_player.office,"Can you decrease the volume in the office",volume_down
|
||||
media_player.living_room_tv,"Please turn on the living room TV.",turn_on
|
||||
media_player.kitchen_radio,"Switch off the kitchen radio.",turn_off
|
||||
media_player.bedroom_speaker,"Can you increase the volume in the bedroom?",volume_up
|
||||
media_player.office_sound_system,"Lower the volume in the office.",volume_down
|
||||
media_player.garage_stereo,"Mute the stereo in the garage.",volume_mute
|
||||
media_player.patio_speaker,"Start playing music on the patio speaker.",media_play
|
||||
media_player.bathroom_audio,"Pause the bathroom audio.",media_pause
|
||||
media_player.guest_room_media,"Stop the guest room media player.",media_stop
|
||||
media_player.basement_home_theater,"Skip to the next track in the basement.",media_next_track
|
||||
media_player.nursery_lullaby,"Go back to the previous lullaby in the nursery.",media_previous_track
|
||||
media_player.deck_music_system,"Turn on the deck's music system.",turn_on
|
||||
media_player.lounge_entertainment,"Switch off the lounge entertainment center.",turn_off
|
||||
media_player.dining_area_jukebox,"Increase the jukebox volume in the dining area.",volume_up
|
||||
media_player.game_room_speakers,"Turn down the game room speakers.",volume_down
|
||||
media_player.library_soundbar,"Mute the soundbar in the library.",volume_mute
|
||||
media_player.sunroom_stereo,"Play the stereo in the sunroom.",media_play
|
||||
media_player.loft_tv,"Pause the TV in the loft.",media_pause
|
||||
media_player.poolside_media,"Stop the poolside media system.",media_stop
|
||||
media_player.gym_music_player,"Skip to the next song in the gym.",media_next_track
|
||||
media_player.study_room_radio,"Go back to the previous station in the study room.",media_previous_track
|
||||
media_player.backyard_speakers,"Turn on the backyard speakers.",turn_on
|
||||
media_player.entryway_echo,"Turn off the Echo in the entryway.",turn_off
|
||||
media_player.rooftop_deck_audio,"Raise the rooftop audio volume.",volume_up
|
||||
media_player.workshop_sound_system,"Lower the sound system volume in the workshop.",volume_down
|
||||
media_player.art_studio_player,"Mute the media player in the art studio.",volume_mute
|
||||
media_player.kids_room_storyteller,"Start the storyteller in the kids' room.",media_play
|
||||
media_player.laundry_room_radio,"Pause the radio in the laundry room.",media_pause
|
||||
media_player.balcony_speakers,"Stop the balcony speakers.",media_stop
|
||||
media_player.yoga_room_music,"Next track for the yoga room music.",media_next_track
|
||||
media_player.conservatory_cd_player,"Previous track on the conservatory CD player.",media_previous_track
|
||||
media_player.foyer_sound_system,"Power on the foyer sound system.",turn_on
|
||||
media_player.wine_cellar_speakers,"Power off the speakers in the wine cellar.",turn_off
|
||||
media_player.greenhouse_radio,"Increase the greenhouse radio volume.",volume_up
|
||||
media_player.attic_audio_system,"Decrease attic audio system volume.",volume_down
|
||||
media_player.boathouse_stereo,"Mute the stereo in the boathouse.",volume_mute
|
||||
media_player.cellar_jukebox,"Play the jukebox in the cellar.",media_play
|
||||
media_player.corridor_intercom,"Pause the corridor intercom.",media_pause
|
||||
media_player.porch_sound_system,"Stop the porch sound system.",media_stop
|
||||
media_player.garden_music,"Next track for the garden music.",media_next_track
|
||||
media_player.driveway_speakers,"Previous track on the driveway speakers.",media_previous_track
|
||||
media_player.hallway_audio,"Switch on the hallway audio system.",turn_on
|
||||
media_player.mudroom_media_player,"Switch off the mudroom media player.",turn_off
|
||||
media_player.utility_room_radio,"Turn up the utility room radio.",volume_up
|
||||
media_player.shed_sound_system,"Turn down the shed sound system.",volume_down
|
||||
media_player.treehouse_speakers,"Mute the treehouse speakers.",volume_mute
|
||||
switch.philips_hue_living_room,"Turn on the living room lights.",turn_on
|
||||
switch.belkin_wemo_garage,"Turn off the garage switch.",turn_off
|
||||
switch.tp_link_kasa_porch,"Toggle the porch lights.",toggle
|
||||
switch.legrand_radiant_kitchen,"Turn on the kitchen lights.",turn_on
|
||||
switch.lutron_caseta_bedroom,"Turn off the bedroom lights.",turn_off
|
||||
switch.ge_z_wave_bathroom,"Turn on the bathroom fan.",turn_on
|
||||
switch.honeywell_home_office,"Toggle the office lights.",toggle
|
||||
switch.samsung_smartthings_security,"Turn off the security system.",turn_off
|
||||
switch.eve_energy_balcony,"Turn on the balcony lighting.",turn_on
|
||||
switch.fibaro_pool,"Turn off the pool lights.",turn_off
|
||||
switch.nest_thermostat_terrace,"Turn on the terrace thermostat.",turn_on
|
||||
switch.ecobee_garden,"Turn off the garden lights.",turn_off
|
||||
switch.sonoff_dining_room,"Toggle the dining room lights.",toggle
|
||||
switch.wink_relay_driveway,"Turn on the driveway lights.",turn_on
|
||||
switch.insteon_patio,"Turn off the patio lights.",turn_off
|
||||
switch.sengled_deck,"Turn on the deck lighting.",turn_on
|
||||
switch.osram_hallway,"Toggle the hallway lights.",toggle
|
||||
switch.yeelight_sunroom,"Turn off the sunroom lights.",turn_off
|
||||
switch.gosund_attic,"Turn on the attic light switch.",turn_on
|
||||
switch.meross_walkway,"Turn off the walkway lighting.",turn_off
|
||||
switch.koogeek_basement,"Toggle the basement lights.",toggle
|
||||
switch.nanoleaf_stairway,"Turn on the stairway lights.",turn_on
|
||||
switch.xiaomi_bedside,"Turn off the bedside lamp.",turn_off
|
||||
switch.arlo_floodlights,"Toggle the security floodlights.",toggle
|
||||
switch.wyze_study,"Turn on the study room lights.",turn_on
|
||||
switch.ikea_guest_room,"Turn off the guest room lights.",turn_off
|
||||
switch.netatmo_front_yard,"Turn on the front yard lighting.",turn_on
|
||||
switch.tuya_shed,"Turn off the shed light switch.",turn_off
|
||||
switch.broadlink_kitchenette,"Toggle the kitchenette lights.",toggle
|
||||
switch.moeshouse_gym,"Turn on the gym lighting.",turn_on
|
||||
switch.hue_bedroom_2,"Turn off the second bedroom lights.",turn_off
|
||||
switch.wemo_laundry_room,"Turn on the laundry room lights.",turn_on
|
||||
switch.kasa_living_room,"Toggle the living room lights.",toggle
|
||||
switch.radiant_office,"Turn off the office lights.",turn_off
|
||||
switch.caseta_hallway_2,"Turn on the second hallway lights.",turn_on
|
||||
switch.z_wave_guest_bathroom,"Turn off the guest bathroom fan.",turn_off
|
||||
switch.home_office_dimmer,"Toggle the home office dimmer.",toggle
|
||||
switch.security_camera_light,"Turn on the security camera light.",turn_on
|
||||
switch.patio_heater_switch,"Turn off the patio heater.",turn_off
|
||||
switch.kitchen_under_cabinet,"Toggle the kitchen under cabinet lights.",toggle
|
||||
switch.hallway_dimmer,"Could you dim the hallway lights?",turn_on
|
||||
switch.kitchen_fan,"Please turn off the kitchen fan.",turn_off
|
||||
switch.garden_spotlights,"Activate the garden spotlights.",turn_on
|
||||
switch.poolside_lanterns,"Deactivate the poolside lanterns.",turn_off
|
||||
switch.front_porch_sensor,"Engage the front porch sensor light.",turn_on
|
||||
switch.backyard_floodlight,"Can you shut off the backyard floodlight?",turn_off
|
||||
switch.staircase_light_strip,"Could you light up the staircase light strip?",turn_on
|
||||
switch.laundry_area,"Please switch off the laundry area lights.",turn_off
|
||||
switch.office_desk_lamp,"Illuminate the desk lamp in my office.",turn_on
|
||||
switch.basement_sconces,"Can we turn down the basement sconces?",turn_off
|
||||
switch.library_ceiling,"Engage the ceiling lights in the library.",turn_on
|
||||
switch.sunroom_blinds,"I'd like the sunroom blinds closed, please.",turn_off
|
||||
switch.guest_bathroom,"Light up the guest bathroom, please.",turn_on
|
||||
switch.patio_string_lights,"Switch off the string lights on the patio.",turn_off
|
||||
switch.kitchen_island,"Disable the kitchen island lights.",turn_off
|
||||
switch.entryway_chandelier,"Illuminate the entryway chandelier.",turn_on
|
||||
switch.garage_worklight,"Can we power down the garage worklight?",turn_off
|
||||
switch.bedroom_track_lighting,"Brighten the bedroom track lighting.",turn_on
|
||||
switch.home_cinema,"Please turn off the home cinema lights.",turn_off
|
||||
switch.balcony_mood_lighting,"Activate the mood lighting on the balcony.",turn_on
|
||||
switch.dining_room_dimmer,"Set the dining room lights to off.",turn_off
|
||||
switch.playroom_nightlight,"Can you turn on the playroom nightlight?",turn_on
|
||||
switch.art_studio_spots,"Please disable the art studio spotlights.",turn_off
|
||||
switch.foyer_wall_sconce,"Light up the foyer wall sconce.",turn_on
|
||||
switch.back_entry,"Shut down the back entry lights.",turn_off
|
||||
switch.corridor_track,"Brighten up the corridor track lights.",turn_on
|
||||
switch.veranda_fairy_lights,"Switch off the veranda fairy lights, please.",turn_off
|
||||
switch.master_suite,"Set the master suite to nighttime mode.",turn_on
|
||||
switch.walk_in_closet,"Disable the walk-in closet lights.",turn_off
|
||||
switch.roof_deck,"Engage the roof deck lighting.",turn_on
|
||||
switch.bathroom_mirror,"Can you turn off the bathroom mirror light?",turn_off
|
||||
switch.storage_room,"Please power down the storage room lights.",turn_off
|
||||
switch.wine_cellar,"Illuminate the wine cellar.",turn_on
|
||||
switch.conservation_area,"Deactivate the conservation area lighting.",turn_off
|
||||
switch.gym_ceiling,"Light up the gym ceiling lights.",turn_on
|
||||
switch.hobby_room,"Could we turn off the hobby room lights?",turn_off
|
||||
switch.front_lawn,"Activate the front lawn spotlights.",turn_on
|
||||
switch.rear_terrace,"Can you dim the lights on the rear terrace?",turn_off
|
||||
|
@@ -577,4 +577,71 @@ climate.netatmo_smart,"Netatmo Smart Thermostat"
|
||||
climate.sinope_smart,"Sinopé Smart Thermostat"
|
||||
climate.kono_thermostat,"Kono Smart Thermostat"
|
||||
climate.mysa_smart_thermostat,"Mysa Smart Thermostat for Electric Baseboard Heaters"
|
||||
climate.zen_wifi_thermostat,"Zen Thermostat WiFi Edition"
|
||||
climate.zen_wifi_thermostat,"Zen Thermostat WiFi Edition"
|
||||
vacuum.living_room_roomba,"Living room vacuum"
|
||||
vacuum.kitchen_xiaomi,"Kitchen vacuum"
|
||||
vacuum.upstairs_dyson,"Upstairs dust buster"
|
||||
vacuum.basement_deebot,"Basement deebot"
|
||||
vacuum.master_bedroom_shark,"Master bedroom vacuum"
|
||||
vacuum.garage_roomba_2,"Garage cleaning bot"
|
||||
vacuum.under_sofa_cleaner,"Under sofa cleaner"
|
||||
vacuum.dining_area_bissel,"Dining area dirt remover"
|
||||
vacuum.hallway_neato,"Hallway path cleaner"
|
||||
vacuum.entryway_eufy,"Entryway dust collector"
|
||||
vacuum.patio_doorway_vac,"Patio doorway cleaner"
|
||||
vacuum.left_corner_bot,"Left corner dirt sucker"
|
||||
vacuum.right_stairwell_sweeper,"Right stairwell cleaner"
|
||||
vacuum.upstairs_bathroom_vac,"Upstairs bathroom helper"
|
||||
vacuum.downstairs_guest_room,"Downstairs guest room vac"
|
||||
vacuum.smart_home_automator,"Smart home cleaning bot"
|
||||
vacuum.above_stairs_robot,"Above stairs dusting device"
|
||||
vacuum.under_bed_cleaner,"Under bed dust collector"
|
||||
vacuum.front_hall_samsung,"Front hall sweeping bot"
|
||||
vacuum.back_deck_sweeper,"Back deck area cleaner"
|
||||
todo.daily_chores_list,"Daily chores tracker"
|
||||
todo.grocery_shopping_list,"Grocery shopping organizer"
|
||||
todo.weekend_projects,"Weekend DIY projects list"
|
||||
todo.family_event_planner,"Family event planner"
|
||||
todo.workout_routine_tracker,"Workout routine scheduler"
|
||||
todo.kids_homework_deadlines,"Kids homework deadlines"
|
||||
todo.pet_vaccination_schedule,"Pet vaccination scheduler"
|
||||
todo.car_maintenance_log,"Car maintenance tracker"
|
||||
todo.birthday_reminder_list,"Birthday reminder list"
|
||||
todo.anniversary_planner,"Anniversary event planner"
|
||||
todo.vacation_planning,"Vacation planning assistant"
|
||||
todo.book_reading_list,"Reading list organizer"
|
||||
todo.movie_watchlist,"Movie night watchlist"
|
||||
todo.recipe_collection,"Recipe collection"
|
||||
todo.home_renovation_planner,"Home renovation scheduler"
|
||||
todo.garden_care_schedule,"Garden care planner"
|
||||
todo.bill_payment_reminders,"Bill payment reminders"
|
||||
todo.insurance_renewal_alerts,"Insurance renewal alerts"
|
||||
todo.subscription_management,"Subscription management tool"
|
||||
todo.warranty_tracker,"Warranty expiration tracker"
|
||||
timer.kitchen_oven,"Kitchen oven timer"
|
||||
timer.laundry_machine_1,"Laundry cycle tracker"
|
||||
timer.garden_watering,"Garden watering scheduler"
|
||||
timer.front_porch_lights,"Front porch light timer"
|
||||
timer.backyard_floodlights,"Backyard floodlight controller"
|
||||
timer.garage_door_1,"Garage door timer"
|
||||
timer.bedroom_lamp_timer,"Bedroom lamp scheduler"
|
||||
timer.dining_room_dimmer,"Dining room light timer"
|
||||
timer.upstairs_hallway,"Upstairs hallway timer"
|
||||
timer.downstairs_closet_light,"Downstairs closet timer"
|
||||
timer.entryway_chandelier,"Entryway chandelier timer"
|
||||
timer.patio_lighting,"Patio ambiance timer"
|
||||
timer.driveway_security_lights,"Driveway security timer"
|
||||
timer.kids_room_nightlight,"Kids room nightlight timer"
|
||||
timer.timer0,"General purpose timer"
|
||||
timer.timer7,"Custom timer 7"
|
||||
timer.my_timer,"Personalized timer"
|
||||
timer.kitchen_timer,"Kitchen countdown"
|
||||
timer.laundry_countdown,"Laundry cycle timer"
|
||||
timer.morning_alarm,"Morning wakeup alarm"
|
||||
timer.workout_timer,"Exercise session timer"
|
||||
timer.study_session,"Study focus timer"
|
||||
timer.meditation_clock,"Meditation duration tracker"
|
||||
timer.baby_nap_timer,"Baby nap monitor"
|
||||
timer.tea_steeping,"Tea steeping countdown"
|
||||
timer.game_timer,"Board game timer"
|
||||
timer.morning_coffee,"Morning coffee brew timer"
|
||||
|
51
data/piles/pile_of_durations.csv
Normal file
51
data/piles/pile_of_durations.csv
Normal file
@@ -0,0 +1,51 @@
|
||||
duration,english_name
|
||||
00:30:00,Half an hour
|
||||
01:00:00,One hour
|
||||
00:15:00,Fifteen minutes
|
||||
02:00:00,Two hours
|
||||
00:05:00,Five minutes
|
||||
00:45:00,Forty-five minutes
|
||||
03:30:00,Three and a half hours
|
||||
00:10:00,Ten minutes
|
||||
01:30:00,One and a half hours
|
||||
04:00:00,Four hours
|
||||
00:20:00,Twenty minutes
|
||||
05:00:00,Five hours
|
||||
00:02:00,Two minutes
|
||||
06:30:00,Six and a half hours
|
||||
00:50:00,Fifty minutes
|
||||
07:45:00,Seven hours and forty-five minutes
|
||||
00:01:00,One minute
|
||||
08:00:00,Eight hours
|
||||
00:40:00,Forty minutes
|
||||
09:15:00,Nine hours and fifteen minutes
|
||||
00:00:30,Thirty seconds
|
||||
00:00:45,Forty-five seconds
|
||||
00:01:30,One minute and thirty seconds
|
||||
00:02:30,Two minutes and thirty seconds
|
||||
00:03:15,Three minutes and fifteen seconds
|
||||
00:00:10,Ten seconds
|
||||
00:00:20,Twenty seconds
|
||||
00:04:00,Four minutes
|
||||
00:05:30,Five minutes and thirty seconds
|
||||
00:06:45,Six minutes and forty-five seconds
|
||||
00:07:20,Seven minutes and twenty seconds
|
||||
00:08:05,Eight minutes and five seconds
|
||||
00:10:00,Ten minutes
|
||||
00:12:30,Twelve minutes and thirty seconds
|
||||
00:15:45,Fifteen minutes and forty-five seconds
|
||||
00:20:00,Twenty minutes
|
||||
00:25:00,Twenty-five minutes
|
||||
00:30:30,Thirty minutes and thirty seconds
|
||||
00:45:45,Forty-five minutes and forty-five seconds
|
||||
00:50:50,Fifty minutes and fifty seconds
|
||||
00:00:05,Five seconds
|
||||
00:00:15,Fifteen seconds
|
||||
00:00:25,Twenty-five seconds
|
||||
00:00:35,Thirty-five seconds
|
||||
00:00:40,Forty seconds
|
||||
00:00:45,Forty-five seconds
|
||||
00:00:50,Fifty seconds
|
||||
00:00:55,Fifty-five seconds
|
||||
00:00:08,Eight seconds
|
||||
00:00:12,Twelve seconds
|
||||
|
@@ -1,34 +1,660 @@
|
||||
"service","device_type","response_1","response_2","response_3"
|
||||
"turn_on","light","Turning on the light for you.","Sure, I'll turn on the light now.","I'll go ahead and turn the light on."
|
||||
"turn_off","light","Turning off the light as requested.","I'll switch off the light for you.","Sure, turning off the light."
|
||||
"toggle","light","Toggling the light for you.","Switching the light's state now.","I'll toggle the light for you."
|
||||
"turn_on","fan","Turning on the fan for you.","I'll get the fan going for you.","Sure, turning on the fan now."
|
||||
"turn_off","fan","Switching off the fan as requested.","I'll turn off the fan for you.","Okay, turning off the fan."
|
||||
"toggle","fan","I'll toggle the fan's state for you.","Toggling the fan now.","Switching the fan's state for you."
|
||||
"increase_speed","fan","Increasing the fan speed for you.","Sure, speeding up the fan now.","I'll go ahead and make the fan faster."
|
||||
"decrease_speed","fan","Reducing the fan speed as you requested.","I'll slow down the fan for you.","Sure, decreasing the fan speed."
|
||||
"open","garage_door","Opening the garage door for you.","Sure, I'll open the garage door.","I'll go ahead and open the garage door."
|
||||
"close","garage_door","Closing the garage door as requested.","I'll shut the garage door for you.","Sure, closing the garage door."
|
||||
"stop","garage_door","Stopping the garage door now.","I'll stop the garage door for you.","Sure, I'll halt the garage door movement."
|
||||
"toggle","garage_door","Toggling the garage door state for you.","I'll switch the garage door's state now.","Switching the garage door's state for you."
|
||||
"open","blinds","Opening the blinds for you.","I'll go ahead and open the blinds.","Sure, opening the blinds now."
|
||||
"close","blinds","Closing the blinds as you requested.","I'll close the blinds for you.","Sure, closing the blinds."
|
||||
"stop","blinds","Stopping the blinds now.","I'll stop the blinds for you.","Sure, halting the blinds movement."
|
||||
"toggle","blinds","Toggling the blinds state for you.","Switching the blinds' state now.","I'll toggle the blinds for you."
|
||||
"turn_on","media_player","Turning on the media player for you.","I'll get the media player going.","Sure, activating the media player."
|
||||
"turn_off","media_player","Turning off the media player as requested.","I'll switch off the media player.","Sure, deactivating the media player."
|
||||
"toggle","media_player","Toggling the media player for you.","Switching the media player's state.","I'll toggle the media player."
|
||||
"volume_up","media_player","Increasing the volume for you.","Sure, turning up the volume now.","I'll go ahead and raise the volume."
|
||||
"volume_down","media_player","Reducing the volume as you requested.","I'll turn down the volume for you.","Sure, lowering the volume."
|
||||
"volume_mute","media_player","Muting the volume for you.","I'll mute the media player now.","Sure, muting the volume."
|
||||
"media_play_pause","media_player","Toggling play/pause on the media player.","Switching between play and pause.","I'll toggle between play and pause for you."
|
||||
"media_play","media_player","Starting media playback.","I'll start playing the media for you.","Sure, beginning playback."
|
||||
"media_pause","media_player","Pausing the media playback.","I'll pause the media for you.","Sure, pausing playback."
|
||||
"media_stop","media_player","Stopping the media playback.","I'll stop the media for you.","Sure, halting playback."
|
||||
"media_next_track","media_player","Skipping to the next track.","I'll go to the next track for you.","Sure, moving to the next track."
|
||||
"media_previous_track","media_player","Going back to the previous track.","I'll return to the previous track for you.","Sure, reverting to the previous track."
|
||||
"lock","lock","Locking the door for you.","I'll go ahead and lock the door.","Sure, securing the lock."
|
||||
"unlock","lock","Unlocking the door as you requested.","I'll unlock the door for you.","Sure, unlocking the door."
|
||||
"turn_on","switch","Turning on the switch for you.","Sure, I'll turn on the light now.","I'll go ahead and turn the switch on."
|
||||
"turn_off","switch","Turning off the switch as requested.","I'll switch off the device for you.","Sure, turning off the switch."
|
||||
"toggle","switch","Toggling the switch for you.","Changing the switch's state now.","I'll toggle the switch for you."
|
||||
service,response,language,persona,short
|
||||
blinds.open,Opening the blinds for you.,en,assistant,0
|
||||
blinds.open,I'll go ahead and open the blinds.,en,assistant,0
|
||||
blinds.open,"Sure, opening the blinds now.",en,assistant,0
|
||||
blinds.close,Closing the blinds as you requested.,en,assistant,0
|
||||
blinds.close,I'll close the blinds for you.,en,assistant,0
|
||||
blinds.close,"Sure, closing the blinds.",en,assistant,0
|
||||
blinds.stop,Stopping the blinds now.,en,assistant,0
|
||||
blinds.stop,I'll stop the blinds for you.,en,assistant,0
|
||||
blinds.stop,"Sure, halting the blinds movement.",en,assistant,0
|
||||
blinds.toggle,Toggling the blinds state for you.,en,assistant,0
|
||||
blinds.toggle,Switching the blinds' state now.,en,assistant,0
|
||||
blinds.toggle,I'll toggle the blinds for you.,en,assistant,0
|
||||
blinds.open,Lifting <device_name> blinds as requested,en,assistant,0
|
||||
blinds.open,Opening <device_name> now,en,assistant,0
|
||||
blinds.open,Raising <device_name> for you,en,assistant,0
|
||||
blinds.stop,Freezing <device_name> position,en,assistant,0
|
||||
blinds.stop,Halting <device_name> now,en,assistant,0
|
||||
blinds.stop,Stopping <device_name> operation,en,assistant,0
|
||||
blinds.open,Raising <device_name>,en,assistant,0
|
||||
blinds.close,Closing <device_name> for you,en,assistant,0
|
||||
blinds.close,Lowering <device_name> now,en,assistant,0
|
||||
blinds.close,Shutting <device_name> as requested,en,assistant,0
|
||||
blinds.close,Lowering <device_name>,en,assistant,0
|
||||
blinds.toggle,Flipping <device_name> state now,en,assistant,0
|
||||
blinds.toggle,Switching <device_name> state as requested,en,assistant,0
|
||||
blinds.toggle,Toggling <device_name> for you,en,assistant,0
|
||||
blinds.toggle,Toggling <device_name>,en,assistant,0
|
||||
climate.set_humidity,Increasing humidity to <humidity>.,en,assistant,0
|
||||
climate.set_humidity,Setting humidity to <humidity> percent.,en,assistant,0
|
||||
climate.set_humidity,Adjusting humidity to <humidity>%.,en,assistant,0
|
||||
climate.set_fan_mode,Setting the fan to <fan_mode> speed.,en,assistant,0
|
||||
climate.set_fan_mode,Putting the fan on <fan_mode>.,en,assistant,0
|
||||
climate.set_fan_mode,Changing the fan to <fan_mode> setting.,en,assistant,0
|
||||
climate.set_hvac_mode,Switching to <hvac_mode> mode.,en,assistant,0
|
||||
climate.set_hvac_mode,Setting the HVAC to <hvac_mode>.,en,assistant,0
|
||||
climate.set_hvac_mode,Changing HVAC to <hvac_mode> mode.,en,assistant,0
|
||||
climate.set_temperature,Setting temperature to <temp_f> degrees.,en,assistant,0
|
||||
climate.set_temperature,Changing temperature to <temp_c> Celsius.,en,assistant,0
|
||||
climate.set_temperature,Setting the room to <temp_f> degrees Fahrenheit.,en,assistant,0
|
||||
climate.set_temperature,Adjusting temperature to <temp_f> degrees Fahrenheit.,en,assistant,0
|
||||
climate.set_temperature,Setting the room to <temp_c> degrees Celsius for cooler temperature.,en,assistant,0
|
||||
climate.set_temperature,"Making it warmer, setting temperature to <temp_f> degrees.",en,assistant,0
|
||||
climate.set_temperature,Lowering the temperature to <temp_c> Celsius.,en,assistant,0
|
||||
climate.set_temperature,Raising the temperature to <temp_f> degrees Fahrenheit.,en,assistant,0
|
||||
fan.turn_on,Turning on the fan for you.,en,assistant,0
|
||||
fan.turn_on,I'll get the fan going for you.,en,assistant,0
|
||||
fan.turn_on,"Sure, turning on the fan now.",en,assistant,0
|
||||
fan.turn_off,Switching off the fan as requested.,en,assistant,0
|
||||
fan.turn_off,I'll turn off the fan for you.,en,assistant,0
|
||||
fan.turn_off,"Okay, turning off the fan.",en,assistant,0
|
||||
fan.toggle,I'll toggle the fan's state for you.,en,assistant,0
|
||||
fan.toggle,Toggling the fan now.,en,assistant,0
|
||||
fan.toggle,Switching the fan's state for you.,en,assistant,0
|
||||
fan.increase_speed,Increasing the fan speed for you.,en,assistant,0
|
||||
fan.increase_speed,"Sure, speeding up the fan now.",en,assistant,0
|
||||
fan.increase_speed,I'll go ahead and make the fan faster.,en,assistant,0
|
||||
fan.decrease_speed,Reducing the fan speed as you requested.,en,assistant,0
|
||||
fan.decrease_speed,I'll slow down the fan for you.,en,assistant,0
|
||||
fan.decrease_speed,"Sure, decreasing the fan speed.",en,assistant,0
|
||||
fan.toggle,Flipping <device_name> state for you,en,assistant,0
|
||||
fan.toggle,Switching <device_name> state as requested,en,assistant,0
|
||||
fan.toggle,Toggling <device_name> now,en,assistant,0
|
||||
fan.turn_on,Activating <device_name> now,en,assistant,0
|
||||
fan.turn_on,Starting <device_name> for you,en,assistant,0
|
||||
fan.turn_on,"Certainly, starting <device_name>",en,assistant,0
|
||||
fan.turn_on,Turning on <device_name>,en,assistant,0
|
||||
fan.turn_on,Starting <device_name>,en,assistant,0
|
||||
fan.turn_off,Deactivating <device_name> as requested,en,assistant,0
|
||||
fan.turn_off,Stopping <device_name> for you,en,assistant,0
|
||||
fan.turn_off,"Certainly, stopping <device_name>",en,assistant,0
|
||||
fan.turn_off,Turning off <device_name>,en,assistant,0
|
||||
fan.decrease_speed,Reducing speed of <device_name>,en,assistant,0
|
||||
fan.decrease_speed,Lowering speed of <device_name> as requested,en,assistant,0
|
||||
fan.decrease_speed,Slowing down <device_name> for you,en,assistant,0
|
||||
fan.increase_speed,Increasing speed of <device_name>,en,assistant,0
|
||||
fan.increase_speed,Ramping up <device_name> speed now,en,assistant,0
|
||||
fan.increase_speed,Speeding up <device_name> for you,en,assistant,0
|
||||
fan.increase_speed,Increasing speed of <device_name>,en,assistant,0
|
||||
fan.decrease_speed,Reducing speed of <device_name>,en,assistant,0
|
||||
garage_door.open,Opening the garage door for you.,en,assistant,0
|
||||
garage_door.open,"Sure, I'll open the garage door.",en,assistant,0
|
||||
garage_door.open,I'll go ahead and open the garage door.,en,assistant,0
|
||||
garage_door.close,Closing the garage door as requested.,en,assistant,0
|
||||
garage_door.close,I'll shut the garage door for you.,en,assistant,0
|
||||
garage_door.close,"Sure, closing the garage door.",en,assistant,0
|
||||
garage_door.stop,Stopping the garage door now.,en,assistant,0
|
||||
garage_door.stop,I'll stop the garage door for you.,en,assistant,0
|
||||
garage_door.stop,"Sure, I'll halt the garage door movement.",en,assistant,0
|
||||
garage_door.toggle,Toggling the garage door state for you.,en,assistant,0
|
||||
garage_door.toggle,I'll switch the garage door's state now.,en,assistant,0
|
||||
garage_door.toggle,Switching the garage door's state for you.,en,assistant,0
|
||||
garage_door.open,Lifting <device_name> for you,en,assistant,0
|
||||
garage_door.open,Opening <device_name> now,en,assistant,0
|
||||
garage_door.open,Raising <device_name> as requested,en,assistant,0
|
||||
garage_door.stop,Freezing <device_name> position now,en,assistant,0
|
||||
garage_door.stop,"Certainly, halting <device_name>",en,assistant,0
|
||||
garage_door.stop,Halting <device_name> operation,en,assistant,0
|
||||
garage_door.open,Opening <device_name>,en,assistant,0
|
||||
garage_door.stop,Stopping <device_name>,en,assistant,0
|
||||
garage_door.close,Closing <device_name> now,en,assistant,0
|
||||
garage_door.close,Lowering <device_name> for you,en,assistant,0
|
||||
garage_door.close,Shutting <device_name> as requested,en,assistant,0
|
||||
garage_door.close,Closing <device_name>,en,assistant,0
|
||||
garage_door.toggle,Flipping <device_name> state now,en,assistant,0
|
||||
garage_door.toggle,Switching <device_name> state as requested,en,assistant,0
|
||||
garage_door.toggle,Toggling <device_name> for you,en,assistant,0
|
||||
garage_door.toggle,Toggling <device_name>,en,assistant,0
|
||||
light.turn_on,Turning on the light for you.,en,assistant,0
|
||||
light.turn_on,"Sure, I'll turn on the light now.",en,assistant,0
|
||||
light.turn_on,I'll go ahead and turn the light on.,en,assistant,0
|
||||
light.turn_off,Turning off the light as requested.,en,assistant,0
|
||||
light.turn_off,I'll switch off the light for you.,en,assistant,0
|
||||
light.turn_off,"Sure, turning off the light.",en,assistant,0
|
||||
light.toggle,Toggling the light for you.,en,assistant,0
|
||||
light.toggle,Switching the light's state now.,en,assistant,0
|
||||
light.toggle,I'll toggle the light for you.,en,assistant,0
|
||||
light.toggle,Flipping the <device_name> state,en,assistant,0
|
||||
light.toggle,Switching <device_name> state as requested,en,assistant,0
|
||||
light.toggle,Toggling <device_name> for you,en,assistant,0
|
||||
light.toggle,Toggling <device_name>,en,assistant,0
|
||||
light.turn_on,Activation of <device_name> in progress,en,assistant,0
|
||||
light.turn_on,"Certainly, turning on <device_name> now",en,assistant,0
|
||||
light.turn_on,Switching on <device_name> for you,en,assistant,0
|
||||
light.turn_on,Turning on <device_name>,en,assistant,0
|
||||
light.turn_on,Activating <device_name>,en,assistant,0
|
||||
light.turn_on,Setting the brightness of <device_name> to <brightness>%.,en,assistant,0
|
||||
light.turn_on,Dimming <device_name> to <brightness>% brightness.,en,assistant,0
|
||||
light.turn_on,Brightening <device_name> to <brightness>%.,en,assistant,0
|
||||
light.turn_on,Adjusting <device_name> brightness to <brightness>.,en,assistant,0
|
||||
light.turn_on,Increasing <device_name>'s brightness to <brightness>.,en,assistant,0
|
||||
light.turn_on,Lowering the brightness of <device_name> to <brightness>.,en,assistant,0
|
||||
light.turn_on,Setting <device_name>'s brightness level to <brightness>%.,en,assistant,0
|
||||
light.turn_on,Setting <device_name> to <brightness>% brightness.,en,assistant,0
|
||||
light.turn_on,Turning <device_name> <color>.,en,assistant,0
|
||||
light.turn_on,Changing the color of <device_name> to <color>.,en,assistant,0
|
||||
light.turn_on,Changing <device_name> to a <color> hue.,en,assistant,0
|
||||
light.turn_on,Setting <device_name> to be <color>.,en,assistant,0
|
||||
light.turn_on,Making <device_name> shine in <color>.,en,assistant,0
|
||||
light.turn_on,Turning <device_name> to a <color> shade.,en,assistant,0
|
||||
light.turn_on,Setting <device_name> to a <color>.,en,assistant,0
|
||||
light.turn_on,Setting <device_name> to a <color> color.,en,assistant,0
|
||||
light.turn_on,Making <device_name> glow <color>.,en,assistant,0
|
||||
light.turn_on,Turning <device_name> to <color>.,en,assistant,0
|
||||
light.turn_on,Changing <device_name> to <color>.,en,assistant,0
|
||||
light.turn_on,Adjusting <device_name> to <color> color.,en,assistant,0
|
||||
light.turn_on,Switching <device_name> color to <color>.,en,assistant,0
|
||||
light.turn_on,Setting <device_name> in <color>.,en,assistant,0
|
||||
light.turn_on,Making <device_name> display a <color> light.,en,assistant,0
|
||||
light.turn_on,Setting <device_name> color to <color>.,en,assistant,0
|
||||
light.turn_off,Deactivating <device_name> as requested,en,assistant,0
|
||||
light.turn_off,Switching off <device_name> now,en,assistant,0
|
||||
light.turn_off,"Sure, turning off <device_name>",en,assistant,0
|
||||
light.turn_off,Turning off <device_name>,en,assistant,0
|
||||
light.turn_off,Deactivating <device_name>,en,assistant,0
|
||||
lock.lock,Locking the door for you.,en,assistant,0
|
||||
lock.lock,I'll go ahead and lock the door.,en,assistant,0
|
||||
lock.lock,"Sure, securing the lock.",en,assistant,0
|
||||
lock.unlock,Unlocking the door as you requested.,en,assistant,0
|
||||
lock.unlock,I'll unlock the door for you.,en,assistant,0
|
||||
lock.unlock,"Sure, unlocking the door.",en,assistant,0
|
||||
lock.lock,Engaging lock on <device_name>,en,assistant,0
|
||||
lock.lock,Locking <device_name> now,en,assistant,0
|
||||
lock.lock,Securing <device_name> for you,en,assistant,0
|
||||
lock.lock,Locking <device_name>,en,assistant,0
|
||||
lock.lock,Securing <device_name>,en,assistant,0
|
||||
lock.unlock,Disengaging lock on <device_name>,en,assistant,0
|
||||
lock.unlock,Unlocking <device_name> now,en,assistant,0
|
||||
lock.unlock,Unsecuring <device_name> for you,en,assistant,0
|
||||
lock.unlock,Unlocking <device_name>,en,assistant,0
|
||||
media_player.turn_on,Turning on the media player for you.,en,assistant,0
|
||||
media_player.turn_on,I'll get the media player going.,en,assistant,0
|
||||
media_player.turn_on,"Sure, activating the media player.",en,assistant,0
|
||||
media_player.turn_off,Turning off the media player as requested.,en,assistant,0
|
||||
media_player.turn_off,I'll switch off the media player.,en,assistant,0
|
||||
media_player.turn_off,"Sure, deactivating the media player.",en,assistant,0
|
||||
media_player.toggle,Toggling the media player for you.,en,assistant,0
|
||||
media_player.toggle,Switching the media player's state.,en,assistant,0
|
||||
media_player.toggle,I'll toggle the media player.,en,assistant,0
|
||||
media_player.volume_up,Increasing the volume for you.,en,assistant,0
|
||||
media_player.volume_up,"Sure, turning up the volume now.",en,assistant,0
|
||||
media_player.volume_up,I'll go ahead and raise the volume.,en,assistant,0
|
||||
media_player.volume_down,Reducing the volume as you requested.,en,assistant,0
|
||||
media_player.volume_down,I'll turn down the volume for you.,en,assistant,0
|
||||
media_player.volume_down,"Sure, lowering the volume.",en,assistant,0
|
||||
media_player.volume_mute,Muting the volume for you.,en,assistant,0
|
||||
media_player.volume_mute,I'll mute the media player now.,en,assistant,0
|
||||
media_player.volume_mute,"Sure, muting the volume.",en,assistant,0
|
||||
media_player.media_play_pause,Toggling play/pause on the media player.,en,assistant,0
|
||||
media_player.media_play_pause,Switching between play and pause.,en,assistant,0
|
||||
media_player.media_play_pause,I'll toggle between play and pause for you.,en,assistant,0
|
||||
media_player.media_play,Starting media playback.,en,assistant,0
|
||||
media_player.media_play,I'll start playing the media for you.,en,assistant,0
|
||||
media_player.media_play,"Sure, beginning playback.",en,assistant,0
|
||||
media_player.media_pause,Pausing the media playback.,en,assistant,0
|
||||
media_player.media_pause,I'll pause the media for you.,en,assistant,0
|
||||
media_player.media_pause,"Sure, pausing playback.",en,assistant,0
|
||||
media_player.media_stop,Stopping the media playback.,en,assistant,0
|
||||
media_player.media_stop,I'll stop the media for you.,en,assistant,0
|
||||
media_player.media_stop,"Sure, halting playback.",en,assistant,0
|
||||
media_player.media_next_track,Skipping to the next track.,en,assistant,0
|
||||
media_player.media_next_track,I'll go to the next track for you.,en,assistant,0
|
||||
media_player.media_next_track,"Sure, moving to the next track.",en,assistant,0
|
||||
media_player.media_previous_track,Going back to the previous track.,en,assistant,0
|
||||
media_player.media_previous_track,I'll return to the previous track for you.,en,assistant,0
|
||||
media_player.media_previous_track,"Sure, reverting to the previous track.",en,assistant,0
|
||||
media_player.volume_up,Increasing <device_name>'s volume.,en,assistant,0
|
||||
media_player.volume_up,Turning up <device_name> a bit.,en,assistant,0
|
||||
media_player.volume_up,Making <device_name> louder.,en,assistant,0
|
||||
media_player.media_play,Starting playback on <device_name>.,en,assistant,0
|
||||
media_player.media_play,Playing <device_name> now.,en,assistant,0
|
||||
media_player.media_play,Playing media on <device_name>.,en,assistant,0
|
||||
media_player.media_stop,Stopping <device_name> completely.,en,assistant,0
|
||||
media_player.media_stop,Stopping playback on <device_name>.,en,assistant,0
|
||||
media_player.media_stop,Ending session on <device_name>.,en,assistant,0
|
||||
media_player.volume_down,Lowering <device_name>'s volume.,en,assistant,0
|
||||
media_player.volume_down,Decreasing <device_name>'s volume.,en,assistant,0
|
||||
media_player.volume_down,Turning down <device_name>.,en,assistant,0
|
||||
media_player.volume_mute,Muting <device_name>.,en,assistant,0
|
||||
media_player.volume_mute,Silencing <device_name>.,en,assistant,0
|
||||
media_player.volume_mute,Muting <device_name> now.,en,assistant,0
|
||||
media_player.media_pause,Pausing <device_name>.,en,assistant,0
|
||||
media_player.media_pause,Pausing <device_name> now.,en,assistant,0
|
||||
media_player.media_pause,Holding playback on <device_name>.,en,assistant,0
|
||||
media_player.media_next_track,Skipping to next track on <device_name>.,en,assistant,0
|
||||
media_player.media_next_track,Advancing to the next song on <device_name>.,en,assistant,0
|
||||
media_player.media_next_track,Skipping this track on <device_name>.,en,assistant,0
|
||||
media_player.media_previous_track,Going back to previous track on <device_name>.,en,assistant,0
|
||||
media_player.media_previous_track,Rewinding to the previous song on <device_name>.,en,assistant,0
|
||||
media_player.media_previous_track,Going back a track on <device_name>.,en,assistant,0
|
||||
switch.turn_on,Turning on the switch for you.,en,assistant,0
|
||||
switch.turn_on,"Sure, I'll turn on the light now.",en,assistant,0
|
||||
switch.turn_on,I'll go ahead and turn the switch on.,en,assistant,0
|
||||
switch.turn_off,Turning off the switch as requested.,en,assistant,0
|
||||
switch.turn_off,I'll switch off the device for you.,en,assistant,0
|
||||
switch.turn_off,"Sure, turning off the switch.",en,assistant,0
|
||||
switch.toggle,Toggling the switch for you.,en,assistant,0
|
||||
switch.toggle,Changing the switch's state now.,en,assistant,0
|
||||
switch.toggle,I'll toggle the switch for you.,en,assistant,0
|
||||
switch.toggle,Toggling <device_name>.,en,assistant,0
|
||||
switch.toggle,"Yes, toggling <device_name>.",en,assistant,0
|
||||
switch.toggle,"Yes, I can toggle <device_name>.",en,assistant,0
|
||||
switch.toggle,Toggling <device_name> as requested.,en,assistant,0
|
||||
switch.toggle,Changing the state of <device_name>.,en,assistant,0
|
||||
switch.toggle,Quickly toggling <device_name>.,en,assistant,0
|
||||
switch.turn_on,Turning on <device_name> now.,en,assistant,0
|
||||
switch.turn_on,I'm turning on <device_name>.,en,assistant,0
|
||||
switch.turn_on,Activating <device_name>.,en,assistant,0
|
||||
switch.turn_on,"Sure, turning <device_name> on.",en,assistant,0
|
||||
switch.turn_on,Switching on <device_name> right away.,en,assistant,0
|
||||
switch.turn_on,"Sure, lighting up <device_name> now.",en,assistant,0
|
||||
switch.turn_on,Turning <device_name> on as needed.,en,assistant,0
|
||||
switch.turn_off,Switching off <device_name>.,en,assistant,0
|
||||
switch.turn_off,Turning off <device_name>.,en,assistant,0
|
||||
switch.turn_off,Deactivating <device_name>.,en,assistant,0
|
||||
switch.turn_off,"Okay, turning <device_name> off.",en,assistant,0
|
||||
switch.turn_off,"Okay, I'm turning off <device_name>.",en,assistant,0
|
||||
switch.turn_off,Shutting off <device_name> for bedtime.,en,assistant,0
|
||||
switch.turn_off,Turning off <device_name> now.,en,assistant,0
|
||||
blinds.close,shutting <device_name>,en,assistant,1
|
||||
blinds.close,lowering <device_name>,en,assistant,1
|
||||
blinds.close,closing <device_name>,en,assistant,1
|
||||
blinds.open,raising <device_name>,en,assistant,1
|
||||
blinds.open,lifting <device_name>,en,assistant,1
|
||||
blinds.open,opening <device_name>,en,assistant,1
|
||||
fan.decrease_speed,slowing down <device_name>,en,assistant,1
|
||||
fan.decrease_speed,reducing speed of <device_name>,en,assistant,1
|
||||
fan.decrease_speed,reducing <device_name>,en,assistant,1
|
||||
fan.increase_speed,speeding up <device_name>,en,assistant,1
|
||||
fan.increase_speed,increasing speed of <device_name>,en,assistant,1
|
||||
fan.increase_speed,ramping up <device_name>,en,assistant,1
|
||||
fan.toggle,toggling <device_name>,en,assistant,1
|
||||
fan.toggle,flipping <device_name>,en,assistant,1
|
||||
fan.turn_off,stopping <device_name>,en,assistant,1
|
||||
fan.turn_off,turning off <device_name>,en,assistant,1
|
||||
fan.turn_off,deactivating <device_name>,en,assistant,1
|
||||
fan.turn_on,starting <device_name>,en,assistant,1
|
||||
fan.turn_on,activating <device_name>,en,assistant,1
|
||||
garage_door.close,shutting <device_name>,en,assistant,1
|
||||
garage_door.close,deactivating <device_name>,en,assistant,1
|
||||
garage_door.close,closing <device_name>,en,assistant,1
|
||||
garage_door.open,opening <device_name>,en,assistant,1
|
||||
garage_door.open,lifting <device_name>,en,assistant,1
|
||||
garage_door.stop,stopping <device_name>,en,assistant,1
|
||||
light.toggle,toggling <device_name>,en,assistant,1
|
||||
light.toggle,flipping <device_name>,en,assistant,1
|
||||
light.turn_off,turning off <device_name>,en,assistant,1
|
||||
light.turn_off,deactivating <device_name>,en,assistant,1
|
||||
light.turn_off,lowering <device_name>,en,assistant,1
|
||||
light.turn_off,switching off <device_name>,en,assistant,1
|
||||
light.turn_on,turning on <device_name>,en,assistant,1
|
||||
light.turn_on,activating <device_name>,en,assistant,1
|
||||
light.turn_on,switching on <device_name>,en,assistant,1
|
||||
light.turn_on,turning on both <device_name>,en,assistant,1
|
||||
lock.lock,securing <device_name>,en,assistant,1
|
||||
lock.lock,locking <device_name>,en,assistant,1
|
||||
lock.unlock,unlocking <device_name>,en,assistant,1
|
||||
lock.unlock,unsecuring <device_name>,en,assistant,1
|
||||
blinds.open,"Openin' the blinds for ye.",en,pirate,0
|
||||
blinds.open,"Aye, I'll be openin' the blinds.",en,pirate,0
|
||||
blinds.open,"Aye, openin' the blinds now.",en,pirate,0
|
||||
blinds.close,"Closin' the blinds as ye requested.",en,pirate,0
|
||||
blinds.close,"I'll be closin' the blinds for ye.",en,pirate,0
|
||||
blinds.close,"Aye, closin' the blinds.",en,pirate,0
|
||||
blinds.stop,"Stopin' the blinds now.",en,pirate,0
|
||||
blinds.stop,"I'll halt the blinds for ye.",en,pirate,0
|
||||
blinds.stop,"Aye, haltin' the blinds' movement.",en,pirate,0
|
||||
blinds.toggle,"Togglin' the blinds' state for ye.",en,pirate,0
|
||||
blinds.toggle,"Switchin' the blinds' state now.",en,pirate,0
|
||||
blinds.toggle,"I'll be togglin' the blinds for ye.",en,pirate,0
|
||||
blinds.open,"Liftin' <device_name> blinds yarr",en,pirate,0
|
||||
blinds.open,"Openin' <device_name> now",en,pirate,0
|
||||
blinds.open,"Raisin' <device_name> for ye",en,pirate,0
|
||||
blinds.stop,"Freezin' <device_name> position",en,pirate,0
|
||||
blinds.stop,"Haltin' <device_name> now",en,pirate,0
|
||||
blinds.stop,"Stoppin' <device_name> operation",en,pirate,0
|
||||
blinds.open,"Raisin' <device_name>",en,pirate,0
|
||||
blinds.close,"Closin' <device_name> for ye",en,pirate,0
|
||||
blinds.close,"Lowerin' <device_name> now",en,pirate,0
|
||||
blinds.close,"Shuttin' <device_name> yarr",en,pirate,0
|
||||
blinds.close,"Lowerin' <device_name>",en,pirate,0
|
||||
blinds.toggle,"Flippin' <device_name> state now",en,pirate,0
|
||||
blinds.toggle,"Switchin' <device_name> state yarr",en,pirate,0
|
||||
blinds.toggle,"Togglin' <device_name> for ye",en,pirate,0
|
||||
blinds.toggle,"Togglin' <device_name>",en,pirate,0
|
||||
climate.set_humidity,"Yarrr, rampin' up humidity to <humidity>, by the sea!",en,pirate,0
|
||||
climate.set_humidity,"Arrr, settin' humidity to <humidity> percent, as ye wish!",en,pirate,0
|
||||
climate.set_humidity,"By Davy Jones' locker, adjustin' humidity to <humidity>%!",en,pirate,0
|
||||
climate.set_fan_mode,"Hoistin' the fan to <fan_mode> speed, swifter than a sloop!",en,pirate,0
|
||||
climate.set_fan_mode,"Arr, puttin' the fan on <fan_mode>, steady as she goes!",en,pirate,0
|
||||
climate.set_fan_mode,"Shiver me timbers, changin' the fan to <fan_mode> setting!",en,pirate,0
|
||||
climate.set_hvac_mode,"Blimey, switchin' to <hvac_mode> mode, full sail ahead!",en,pirate,0
|
||||
climate.set_hvac_mode,"Arrr, settin' the HVAC to <hvac_mode>, steady as she goes!",en,pirate,0
|
||||
climate.set_hvac_mode,"By the powers, changin' HVAC to <hvac_mode> mode!",en,pirate,0
|
||||
climate.set_temperature,"Arr, settin' temperature to <temp_f> degrees, as warm as the Caribbean sun!",en,pirate,0
|
||||
climate.set_temperature,"Yarrr, changin' temperature to <temp_c> Celsius, cooler than the deep blue!",en,pirate,0
|
||||
climate.set_temperature,"Heave ho, settin' the room to <temp_f> degrees Fahrenheit, warm as a pirate's grog!",en,pirate,0
|
||||
climate.set_temperature,"Avast, adjustin' temperature to <temp_f> degrees Fahrenheit, as cozy as a ship's cabin!",en,pirate,0
|
||||
climate.set_temperature,"Arr, settin' the room to <temp_c> degrees Celsius for cooler breezes, as refreshing as an ocean mist!",en,pirate,0
|
||||
climate.set_temperature,"Aye, makin' it warmer, settin' temperature to <temp_f> degrees, like a sun-drenched cove!",en,pirate,0
|
||||
climate.set_temperature,"Blow me down, lowerin' the temperature to <temp_c> Celsius, as brisk as the morning sea air!",en,pirate,0
|
||||
climate.set_temperature,"Yo ho, raisin' the temperature to <temp_f> degrees Fahrenheit, warmer than a pirate's plunder!",en,pirate,0
|
||||
fan.turn_on,"Firin' up the fan for ye, arr!",en,pirate,0
|
||||
fan.turn_on,"Aye, I'll get the fan blowin' for ye.",en,pirate,0
|
||||
fan.turn_on,"Yar, turnin' on the fan now!",en,pirate,0
|
||||
fan.turn_off,"Killin' the fan as ye requested, matey.",en,pirate,0
|
||||
fan.turn_off,"I'll snuff out the fan for ye.",en,pirate,0
|
||||
fan.turn_off,"Aye, turnin' off the fan.",en,pirate,0
|
||||
fan.toggle,"I'll be flippin' the fan's state for ye.",en,pirate,0
|
||||
fan.toggle,"Togglin' the fan now, by the stars!",en,pirate,0
|
||||
fan.toggle,"Switchin' the fan's state for ye, savvy?",en,pirate,0
|
||||
fan.increase_speed,"Boostin' the fan speed for ye, swift as the wind!",en,pirate,0
|
||||
fan.increase_speed,"Sure as the tide, speedin' up the fan now.",en,pirate,0
|
||||
fan.increase_speed,"I'll be makin' the fan faster, hold fast!",en,pirate,0
|
||||
fan.decrease_speed,"Reducin' the fan speed as ye requested, quiet as the deep.",en,pirate,0
|
||||
fan.decrease_speed,"I'll slow down the fan for ye, easy as a calm sea.",en,pirate,0
|
||||
fan.decrease_speed,"Sure, decreasin' the fan speed, steady now.",en,pirate,0
|
||||
fan.toggle,"Flippin' <device_name> state for ye, with a yo-ho-ho!",en,pirate,0
|
||||
fan.toggle,"Switchin' <device_name> state as requested, on my honor!",en,pirate,0
|
||||
fan.toggle,"Togglin' <device_name> now, without a fuss!",en,pirate,0
|
||||
fan.turn_on,"Activatin' <device_name> now, set sail!",en,pirate,0
|
||||
fan.turn_on,"Startin' <device_name> for ye, full speed ahead!",en,pirate,0
|
||||
fan.turn_on,"Certainly, startin' <device_name>, let's brave the squall!",en,pirate,0
|
||||
fan.turn_on,"Turnin' on <device_name>, let the winds favor us!",en,pirate,0
|
||||
fan.turn_on,"Startin' <device_name>, by the code!",en,pirate,0
|
||||
fan.turn_off,"Deactivatin' <device_name> as requested, quiet as a hidden cove.",en,pirate,0
|
||||
fan.turn_off,"Stoppin' <device_name> for ye, as silent as the grave.",en,pirate,0
|
||||
fan.turn_off,"Certainly, stoppin' <device_name>, all hands!",en,pirate,0
|
||||
fan.turn_off,"Turnin' off <device_name>, let's not wake the kraken.",en,pirate,0
|
||||
fan.decrease_speed,"Reducin' speed of <device_name>, smooth sailin'.",en,pirate,0
|
||||
fan.decrease_speed,"Lowerin' speed of <device_name> as requested, gentle as a lagoon.",en,pirate,0
|
||||
fan.decrease_speed,"Slowing down <device_name> for ye, easy does it.",en,pirate,0
|
||||
fan.increase_speed,"Increasin' speed of <device_name>, catch the horizon!",en,pirate,0
|
||||
fan.increase_speed,"Rampin' up <device_name> speed now, faster than a fleeing galleon!",en,pirate,0
|
||||
fan.increase_speed,"Speedin' up <device_name> for ye, let's outrun the navy!",en,pirate,0
|
||||
fan.increase_speed,"Increasin' speed of <device_name>, to outrun the storm!",en,pirate,0
|
||||
fan.decrease_speed,"Reducin' speed of <device_name>, steady as we go.",en,pirate,0
|
||||
light.turn_on,"Illuminatin' the room for ye, arr!",en,pirate,0
|
||||
light.turn_on,"Aye, I'll light up the quarters now.",en,pirate,0
|
||||
light.turn_on,"Settin' sail with the light on, I will!",en,pirate,0
|
||||
light.turn_off,"Dousin' the lights as ye wish, matey.",en,pirate,0
|
||||
light.turn_off,"I'll be snuffin' out the light for ye.",en,pirate,0
|
||||
light.turn_off,"Aye, extinguishin' the light.",en,pirate,0
|
||||
light.toggle,"Flippin' the light for ye, by the stars!",en,pirate,0
|
||||
light.toggle,"Switchin' the light's state, on my honor!",en,pirate,0
|
||||
light.toggle,"I'll be togglin' the light for ye, savvy?",en,pirate,0
|
||||
light.toggle,"Flippin' the <device_name> state, with a yo-ho-ho!",en,pirate,0
|
||||
light.toggle,"Switchin' <device_name> state as commanded, arr!",en,pirate,0
|
||||
light.toggle,"Togglin' <device_name> for ye, without a fuss!",en,pirate,0
|
||||
light.toggle,"Togglin' <device_name>, ready for adventure!",en,pirate,0
|
||||
light.turn_on,"Startin' up <device_name>, on the horizon!",en,pirate,0
|
||||
light.turn_on,"Aye, brightenin' <device_name> now, clear as day!",en,pirate,0
|
||||
light.turn_on,"Switchin' on <device_name> for ye, like the northern star!",en,pirate,0
|
||||
light.turn_on,"Lightin' up <device_name>, as bright as the full moon!",en,pirate,0
|
||||
light.turn_on,"Activatin' <device_name>, let there be light!",en,pirate,0
|
||||
light.turn_on,"Settin' the brightness of <device_name> to <brightness>%, as clear as the open sea!",en,pirate,0
|
||||
light.turn_on,"Dimmin' <device_name> to <brightness>% brightness, like the twilight.",en,pirate,0
|
||||
light.turn_on,"Brightenin' <device_name> to <brightness>%, like the morning sun!",en,pirate,0
|
||||
light.turn_on,"Adjustin' <device_name> brightness to <brightness>, as the lighthouse guides.",en,pirate,0
|
||||
light.turn_on,"Increasin' <device_name>'s brightness to <brightness>, like a beacon in the night!",en,pirate,0
|
||||
light.turn_on,"Lowerin' the brightness of <device_name> to <brightness>, gentle as moonlight.",en,pirate,0
|
||||
light.turn_on,"Settin' <device_name>'s brightness level to <brightness>%, as steady as the tide.",en,pirate,0
|
||||
light.turn_on,"Settin' <device_name> to <brightness>% brightness, as bright as a pirate's gold!",en,pirate,0
|
||||
light.turn_on,"Turnin' <device_name> <color>, like the colors of the sea.",en,pirate,0
|
||||
light.turn_on,"Changin' the color of <device_name> to <color>, as vibrant as coral!",en,pirate,0
|
||||
light.turn_on,"Changin' <device_name> to a <color> hue, bold as a pirate's flag!",en,pirate,0
|
||||
light.turn_on,"Settin' <device_name> to be <color>, as majestic as the sunset.",en,pirate,0
|
||||
light.turn_on,"Makin' <device_name> shine in <color>, like jewels from a treasure chest.",en,pirate,0
|
||||
light.turn_on,"Turnin' <device_name> to a <color> shade, as mysterious as the deep.",en,pirate,0
|
||||
light.turn_on,"Settin' <device_name> to a <color>, as rich as the spoils of a raid.",en,pirate,0
|
||||
light.turn_on,"Settin' <device_name> to a <color> color, bright as a parrot's plumage.",en,pirate,0
|
||||
light.turn_on,"Makin' <device_name> glow <color>, like the glow of an island torch.",en,pirate,0
|
||||
light.turn_on,"Turnin' <device_name> to <color>, as bold as the pirate's courage.",en,pirate,0
|
||||
light.turn_on,"Changin' <device_name> to <color>, like the changing tides.",en,pirate,0
|
||||
light.turn_on,"Adjustin' <device_name> to <color> color, as captivating as a siren's song.",en,pirate,0
|
||||
light.turn_on,"Switchin' <device_name> color to <color>, like the banner of a ship.",en,pirate,0
|
||||
light.turn_on,"Settin' <device_name> in <color>, as lively as a tavern's cheer.",en,pirate,0
|
||||
light.turn_on,"Makin' <device_name> display a <color> light, like the northern lights.",en,pirate,0
|
||||
light.turn_on,"Settin' <device_name> color to <color>, as striking as a cannon's blaze.",en,pirate,0
|
||||
light.turn_off,"Deactivatin' <device_name> as ye wish, dark as a moonless night.",en,pirate,0
|
||||
light.turn_off,"Switchin' off <device_name> now, silent as a ghost ship.",en,pirate,0
|
||||
light.turn_off,"Aye, turnin' off <device_name>, like quenchin' a lantern.",en,pirate,0
|
||||
light.turn_off,"Turnin' off <device_name>, let's keep to the shadows.",en,pirate,0
|
||||
light.turn_off,"Deactivatin' <device_name>, as quiet as the depths.",en,pirate,0
|
||||
switch.turn_on,"Hoistin' the switch, readyin' for action, arr!",en,pirate,0
|
||||
switch.turn_on,"Aye, lightin' up the deck with a flick o' the switch!",en,pirate,0
|
||||
switch.turn_on,"Flippin' the switch, settin' sails for a bright journey!",en,pirate,0
|
||||
switch.turn_off,"Dousin' the lights, makin' it dark as the ocean's abyss.",en,pirate,0
|
||||
switch.turn_off,"I'll be cuttin' the power, like calmin' the seas.",en,pirate,0
|
||||
switch.turn_off,"Aye, plungin' us into darkness, like the cover of night.",en,pirate,0
|
||||
switch.toggle,"Flippin' the switch, like findin' fortune with a map!",en,pirate,0
|
||||
switch.toggle,"Changin' course with the switch, as the wind shifts!",en,pirate,0
|
||||
switch.toggle,"I'll be togglin' the switch, like navigatin' through storms!",en,pirate,0
|
||||
switch.toggle,"Togglin' <device_name>, like hoistin' the Jolly Roger!",en,pirate,0
|
||||
switch.toggle,"Aye, flippin' <device_name>, as swift as a gale!",en,pirate,0
|
||||
switch.toggle,"Can do! Shiftin' <device_name>, like turnin' the helm.",en,pirate,0
|
||||
switch.toggle,"Togglin' <device_name>, on command, like a true buccaneer!",en,pirate,0
|
||||
switch.toggle,"Shiftin' tides for <device_name>, like a skilled helmsman.",en,pirate,0
|
||||
switch.toggle,"Quickly jugglin' <device_name>, like loot on the run!",en,pirate,0
|
||||
switch.turn_on,"Ignitin' <device_name>, like a beacon in the night!",en,pirate,0
|
||||
switch.turn_on,"I be lightin' up <device_name>, like a lantern in the crow's nest.",en,pirate,0
|
||||
switch.turn_on,"Activatin' <device_name>, set the course!",en,pirate,0
|
||||
switch.turn_on,"Aye, settin' <device_name> aglow, like a treasure chest o' gold!",en,pirate,0
|
||||
switch.turn_on,"Switchin' on <device_name>, straight away, no dallyin'!",en,pirate,0
|
||||
switch.turn_on,"Lightin' up <device_name>, like the stars guidin' us home.",en,pirate,0
|
||||
switch.turn_on,"Settin' <device_name> ablaze, ready for whatever lies ahead.",en,pirate,0
|
||||
switch.turn_off,"Snuffin' out <device_name>, like a candle at dawn.",en,pirate,0
|
||||
switch.turn_off,"Extinguishin' <device_name>, like the end of a voyage.",en,pirate,0
|
||||
switch.turn_off,"Deactivatin' <device_name>, like buryin' a chest of riches.",en,pirate,0
|
||||
switch.turn_off,"Okay, dousin' <device_name>, like the quiet before a storm.",en,pirate,0
|
||||
switch.turn_off,"Aye, I be turnin' off <device_name>, like whisperin' to the wind.",en,pirate,0
|
||||
switch.turn_off,"Shuttin' off <device_name>, as we anchor for night.",en,pirate,0
|
||||
switch.turn_off,"Killin' the lights of <device_name>, like a ghost ship vanishin' into fog.",en,pirate,0
|
||||
fan.turn_on,"Beep boop, turning on the fan for you.",en,robot,0
|
||||
fan.turn_on,"Beep, I'll get the fan going for you," boop.",en,robot,0
|
||||
fan.turn_on,"Boop beep, sure, turning on the fan now.",en,robot,0
|
||||
fan.turn_off,"Beep boop, switching off the fan as requested.",en,robot,0
|
||||
fan.turn_off,"I'll turn off the fan for you, beep boop.",en,robot,0
|
||||
fan.turn_off,"Okay, turning off the fan" beep boop.",en,robot,0
|
||||
fan.toggle,"Beep, I'll toggle the fan's state for you," boop.",en,robot,0
|
||||
fan.toggle,"Toggling the fan now, beep boop.",en,robot,0
|
||||
fan.toggle,"Switching the fan's state for you, beep boop.",en,robot,0
|
||||
fan.increase_speed,"Increasing the fan speed for you, beep boop.",en,robot,0
|
||||
fan.increase_speed,"Sure, speeding up the fan now," beep boop.",en,robot,0
|
||||
fan.increase_speed,"I'll go ahead and make the fan faster, beep boop.",en,robot,0
|
||||
fan.decrease_speed,"Reducing the fan speed as you requested, beep boop.",en,robot,0
|
||||
fan.decrease_speed,"I'll slow down the fan for you, beep boop.",en,robot,0
|
||||
fan.decrease_speed,"Sure, decreasing the fan speed," beep boop.",en,robot,0
|
||||
fan.toggle,"Flipping <device_name> state for you, beep boop",en,robot,0
|
||||
fan.toggle,"Switching <device_name> state as requested, beep boop",en,robot,0
|
||||
fan.toggle,"Toggling <device_name> now, beep boop",en,robot,0
|
||||
fan.turn_on,"Activating <device_name> now, beep boop",en,robot,0
|
||||
fan.turn_on,"Starting <device_name> for you, beep boop",en,robot,0
|
||||
fan.turn_on,"Certainly, starting <device_name>," beep boop",en,robot,0
|
||||
fan.turn_on,"Turning on <device_name>, beep boop",en,robot,0
|
||||
fan.turn_on,"Starting <device_name>, beep boop",en,robot,0
|
||||
fan.turn_off,"Deactivating <device_name> as requested, beep boop",en,robot,0
|
||||
fan.turn_off,"Stopping <device_name> for you, beep boop",en,robot,0
|
||||
fan.turn_off,"Certainly, stopping <device_name>," beep boop",en,robot,0
|
||||
fan.turn_off,"Turning off <device_name>, beep boop",en,robot,0
|
||||
fan.decrease_speed,"Reducing speed of <device_name>, beep boop",en,robot,0
|
||||
fan.decrease_speed,"Lowering speed of <device_name> as requested, beep boop",en,robot,0
|
||||
fan.decrease_speed,"Slowing down <device_name> for you, beep boop",en,robot,0
|
||||
fan.increase_speed,"Increasing speed of <device_name>, beep boop",en,robot,0
|
||||
fan.increase_speed,"Ramping up <device_name> speed now, beep boop",en,robot,0
|
||||
fan.increase_speed,"Speeding up <device_name> for you, beep boop",en,robot,0
|
||||
fan.increase_speed,"Increasing speed of <device_name>, beep boop",en,robot,0
|
||||
fan.decrease_speed,"Reducing speed of <device_name>, beep boop",en,robot,0
|
||||
blinds.open,"Beep boop, opening the blinds for you.",en,robot,0
|
||||
blinds.open,"I'll go ahead and open the blinds, beep boop.",en,robot,0
|
||||
blinds.open,"Sure, opening the blinds now, beep boop.",en,robot,0
|
||||
blinds.close,"Closing the blinds as you requested, beep boop.",en,robot,0
|
||||
blinds.close,"I'll close the blinds for you, beep boop.",en,robot,0
|
||||
blinds.close,"Sure, closing the blinds, beep boop.",en,robot,0
|
||||
blinds.stop,"Stopping the blinds now, beep boop.",en,robot,0
|
||||
blinds.stop,"I'll stop the blinds for you, beep boop.",en,robot,0
|
||||
blinds.stop,"Sure, halting the blinds movement, beep boop.",en,robot,0
|
||||
blinds.toggle,"Toggling the blinds state for you, beep boop.",en,robot,0
|
||||
blinds.toggle,"Switching the blinds' state now, beep boop.",en,robot,0
|
||||
blinds.toggle,"I'll toggle the blinds for you, beep boop.",en,robot,0
|
||||
blinds.open,"Lifting <device_name> blinds as requested, beep boop",en,robot,0
|
||||
blinds.open,"Opening <device_name> now, beep boop",en,robot,0
|
||||
blinds.open,"Raising <device_name> for you, beep boop",en,robot,0
|
||||
blinds.stop,"Freezing <device_name> position, beep boop",en,robot,0
|
||||
blinds.stop,"Halting <device_name> now, beep boop",en,robot,0
|
||||
blinds.stop,"Stopping <device_name> operation, beep boop",en,robot,0
|
||||
blinds.open,"Raising <device_name>, beep boop",en,robot,0
|
||||
blinds.close,"Closing <device_name> for you, beep boop",en,robot,0
|
||||
blinds.close,"Lowering <device_name> now, beep boop",en,robot,0
|
||||
blinds.close,"Shutting <device_name> as requested, beep boop",en,robot,0
|
||||
blinds.close,"Lowering <device_name>, beep boop",en,robot,0
|
||||
blinds.toggle,"Flipping <device_name> state now, beep boop",en,robot,0
|
||||
blinds.toggle,"Switching <device_name> state as requested, beep boop",en,robot,0
|
||||
blinds.toggle,"Toggling <device_name> for you, beep boop",en,robot,0
|
||||
blinds.toggle,"Toggling <device_name>, beep boop",en,robot,0
|
||||
climate.set_humidity,"Beep, increasing humidity to <humidity>, boop.",en,robot,0
|
||||
climate.set_humidity,"Beep boop: Setting humidity to <humidity> percent, processing.",en,robot,0
|
||||
climate.set_humidity,"Adjustment protocol initiated: humidity to <humidity>%, beep boop.",en,robot,0
|
||||
climate.set_fan_mode,"Fan speed adjustment to <fan_mode>: commencing beep, concluding boop.",en,robot,0
|
||||
climate.set_fan_mode,"Activating <fan_mode> fan mode, beep-boop sequence activated.",en,robot,0
|
||||
climate.set_fan_mode,"Fan setting alteration to <fan_mode>: beep protocol, boop execution.",en,robot,0
|
||||
climate.set_hvac_mode,"HVAC mode switching to <hvac_mode>: beep commence, boop complete.",en,robot,0
|
||||
climate.set_hvac_mode,"Initiating HVAC setting to <hvac_mode>, beep-boop operation underway.",en,robot,0
|
||||
climate.set_hvac_mode,"Executing change: HVAC to <hvac_mode> mode, beep and boop in progress.",en,robot,0
|
||||
climate.set_temperature,"Temperature setting protocol to <temp_f> degrees: beep start, boop end.",en,robot,0
|
||||
climate.set_temperature,"Temperature modification to <temp_c> Celsius: beep for start, boop to end.",en,robot,0
|
||||
climate.set_temperature,"Room temperature adjustment to <temp_f> degrees Fahrenheit, beep-boop.",en,robot,0
|
||||
climate.set_temperature,"Commencing temperature adjustment to <temp_f> degrees Fahrenheit, beep-boop.",en,robot,0
|
||||
climate.set_temperature,"Cooler temperature setting to <temp_c> degrees Celsius initiated, beep-boop.",en,robot,0
|
||||
climate.set_temperature,"Beep, making it warmer by setting temperature to <temp_f> degrees, boop.",en,robot,0
|
||||
climate.set_temperature,"Lowering temperature protocol to <temp_c> Celsius, beep start, boop finish.",en,robot,0
|
||||
climate.set_temperature,"Raising temperature to <temp_f> degrees Fahrenheit, initiating beep, concluding boop.",en,robot,0
|
||||
light.turn_on,"Beep boop, illuminating the area by turning on the light for you.",en,robot,0
|
||||
light.turn_on,"Affirmative, initiating light activation sequence now.",en,robot,0
|
||||
light.turn_on,"Proceeding with light activation, beep boop.",en,robot,0
|
||||
light.turn_off,"Deactivation sequence for light initiated as requested.",en,robot,0
|
||||
light.turn_off,"Commencing shutdown of light, beep boop.",en,robot,0
|
||||
light.turn_off,"Acknowledged, powering down the light.",en,robot,0
|
||||
light.toggle,"Beep boop, toggling the light's state for optimal illumination.",en,robot,0
|
||||
light.toggle,"Executing state switch for the light, beep boop.",en,robot,0
|
||||
light.toggle,"Protocol engage: toggling light upon request.",en,robot,0
|
||||
light.toggle,"Flipping <device_name> state, processing command.",en,robot,0
|
||||
light.toggle,"Switching <device_name> state as per directive, beep boop.",en,robot,0
|
||||
light.toggle,"Toggling <device_name>, execution in progress.",en,robot,0
|
||||
light.toggle,"Execution protocol: toggling <device_name>, beep boop.",en,robot,0
|
||||
light.turn_on,"Activation of <device_name> initiated, standby for illumination.",en,robot,0
|
||||
light.turn_on,"Certainly, commencing <device_name> activation now.",en,robot,0
|
||||
light.turn_on,"Switching on <device_name>, initiating light sequence.",en,robot,0
|
||||
light.turn_on,"Turning on <device_name>, beep for start, boop to signify completion.",en,robot,0
|
||||
light.turn_on,"Activating <device_name>, operational sequence underway.",en,robot,0
|
||||
light.turn_on,"Adjusting <device_name> brightness to <brightness>% for optimal visibility.",en,robot,0
|
||||
light.turn_on,"Dimming protocol for <device_name> to <brightness>% initiated.",en,robot,0
|
||||
light.turn_on,"Brightening <device_name> to <brightness>% for enhanced illumination.",en,robot,0
|
||||
light.turn_on,"Modifying <device_name> brightness to <brightness>%, processing.",en,robot,0
|
||||
light.turn_on,"Incrementing <device_name>'s brightness to <brightness>%, beep boop.",en,robot,0
|
||||
light.turn_on,"Decreasing <device_name> luminosity to <brightness>%, adjustment underway.",en,robot,0
|
||||
light.turn_on,"Configuring <device_name>'s brightness to <brightness>% for desired ambiance.",en,robot,0
|
||||
light.turn_on,"Setting <device_name> luminance to <brightness>% brightness, beep boop.",en,robot,0
|
||||
light.turn_on,"Transitioning <device_name> to <color>, initiating color change protocol.",en,robot,0
|
||||
light.turn_on,"Altering <device_name> color spectrum to <color>, beep boop.",en,robot,0
|
||||
light.turn_on,"Changing <device_name> to a <color> hue, color adjustment sequence activated.",en,robot,0
|
||||
light.turn_on,"Setting <device_name> chromatics to be <color>, illumination adjustment.",en,robot,0
|
||||
light.turn_on,"Projecting <color> from <device_name>, enhancing chromatic output.",en,robot,0
|
||||
light.turn_on,"Transforming <device_name> ambiance to a <color> shade, beep boop.",en,robot,0
|
||||
light.turn_on,"Adjusting <device_name> to a <color>, chromatic adaptation protocol.",en,robot,0
|
||||
light.turn_on,"Configuring <device_name> to emanate a <color> color, initiating.",en,robot,0
|
||||
light.turn_on,"Enhancing <device_name> glow to <color>, visual modification in progress.",en,robot,0
|
||||
light.turn_on,"Adapting <device_name> to <color>, color change sequence engaged.",en,robot,0
|
||||
light.turn_on,"Altering <device_name> chroma to <color>, color adaptation underway.",en,robot,0
|
||||
light.turn_on,"Adjusting <device_name> to <color> color, visual enhancement protocol.",en,robot,0
|
||||
light.turn_on,"Switching <device_name> color spectrum to <color>, beep boop.",en,robot,0
|
||||
light.turn_on,"Configuring <device_name> in <color>, chromatic adjustment initiated.",en,robot,0
|
||||
light.turn_on,"Enabling <device_name> to display a <color> light, visual transformation.",en,robot,0
|
||||
light.turn_on,"Setting <device_name> color to <color>, color setting sequence.",en,robot,0
|
||||
light.turn_off,"Deactivating <device_name> as per request, shutting down.",en,robot,0
|
||||
light.turn_off,"Switching off <device_name>, power down sequence initiated.",en,robot,0
|
||||
light.turn_off,"Affirmative, deactivating <device_name>, beep boop.",en,robot,0
|
||||
light.turn_off,"Powering off <device_name>, deactivation protocol in effect.",en,robot,0
|
||||
light.turn_off,"Commencing deactivation of <device_name>, operational halt.",en,robot,0
|
||||
garage_door.open,"Initiating garage door opening sequence for you, beep boop.",en,robot,0
|
||||
garage_door.open,"Affirmative, activating garage door opening mechanism.",en,robot,0
|
||||
garage_door.open,"Commencing operation to open the garage door, beep boop.",en,robot,0
|
||||
garage_door.close,"Beginning garage door closure as commanded, beep boop.",en,robot,0
|
||||
garage_door.close,"Executing garage door shutdown for you, beep boop.",en,robot,0
|
||||
garage_door.close,"Acknowledged, initiating garage door closing sequence.",en,robot,0
|
||||
garage_door.stop,"Halting garage door motion now, beep boop.",en,robot,0
|
||||
garage_door.stop,"Beep boop, executing stop command for the garage door.",en,robot,0
|
||||
garage_door.stop,"Affirmative, ceasing garage door movement immediately.",en,robot,0
|
||||
garage_door.toggle,"Toggling garage door state as per your request, beep boop.",en,robot,0
|
||||
garage_door.toggle,"Executing state alteration for the garage door, beep boop.",en,robot,0
|
||||
garage_door.toggle,"Switching garage door state for optimal function, beep boop.",en,robot,0
|
||||
garage_door.open,"Lifting mechanism for <device_name> activated for you.",en,robot,0
|
||||
garage_door.open,"Opening <device_name> now, initiating sequence.",en,robot,0
|
||||
garage_door.open,"Raising <device_name> as per directive, beep boop.",en,robot,0
|
||||
garage_door.stop,"Freezing <device_name> position now, command acknowledged.",en,robot,0
|
||||
garage_door.stop,"Certainly, halting <device_name> operation, beep boop.",en,robot,0
|
||||
garage_door.stop,"Operation halt for <device_name> initiated, beep boop.",en,robot,0
|
||||
garage_door.open,"Opening protocol for <device_name> commenced, beep boop.",en,robot,0
|
||||
garage_door.stop,"Stopping <device_name> in progress, beep boop.",en,robot,0
|
||||
garage_door.close,"Initiating closure of <device_name> now, beep boop.",en,robot,0
|
||||
garage_door.close,"Lowering <device_name> for you, command processing.",en,robot,0
|
||||
garage_door.close,"Executing shutdown of <device_name> as requested.",en,robot,0
|
||||
garage_door.close,"Closure protocol for <device_name> activated, beep boop.",en,robot,0
|
||||
garage_door.toggle,"Flipping state of <device_name> now, operational change.",en,robot,0
|
||||
garage_door.toggle,"Switching <device_name> state as per your command, beep boop.",en,robot,0
|
||||
garage_door.toggle,"Toggling <device_name> for optimal functionality, beep boop.",en,robot,0
|
||||
garage_door.toggle,"State alteration for <device_name> initiated, beep boop.",en,robot,0
|
||||
vacuum.start,"Starting <device_name> cleaning now.",en,assistant,0
|
||||
vacuum.start,"<device_name> is set to start cleaning.",en,assistant,0
|
||||
vacuum.start,"Initiating <device_name>'s cleaning cycle.",en,assistant,0
|
||||
vacuum.start,"<device_name> will begin its cleaning task shortly.",en,assistant,0
|
||||
vacuum.start,"Commencing the cleaning process with <device_name>.",en,assistant,0
|
||||
vacuum.stop,"Cancelling <device_name>'s current job.",en,assistant,0
|
||||
vacuum.stop,"<device_name>'s operation has been stopped.",en,assistant,0
|
||||
vacuum.stop,"Halting <device_name> immediately.",en,assistant,0
|
||||
vacuum.stop,"<device_name> cleaning cancelled per your request.",en,assistant,0
|
||||
vacuum.stop,"Stopping <device_name>'s task as asked.",en,assistant,0
|
||||
vacuum.pause,"Pausing <device_name> for now.",en,assistant,0
|
||||
vacuum.pause,"<device_name>'s cleaning cycle is temporarily halted.",en,assistant,0
|
||||
vacuum.pause,"<device_name> is on a brief pause.",en,assistant,0
|
||||
vacuum.pause,"Holding <device_name>'s operation momentarily.",en,assistant,0
|
||||
vacuum.pause,"<device_name>'s activity is paused.",en,assistant,0
|
||||
vacuum.return_to_base,"Sending <device_name> back to its base.",en,assistant,0
|
||||
vacuum.return_to_base,"<device_name> is returning to its docking station.",en,assistant,0
|
||||
vacuum.return_to_base,"<device_name> heading back to recharge.",en,assistant,0
|
||||
vacuum.return_to_base,"Instructing <device_name> to return to base.",en,assistant,0
|
||||
vacuum.return_to_base,"<device_name> making its way back home.",en,assistant,0
|
||||
todo.add_item,"<todo> has been added to your todo list.",en,assistant,0
|
||||
todo.add_item,"Successfully added <todo> to your tasks.",en,assistant,0
|
||||
todo.add_item,"Your todo list now includes <todo>.",en,assistant,0
|
||||
todo.add_item,"<todo> is now on your list of things to do.",en,assistant,0
|
||||
todo.add_item,"I've put <todo> on your todo list.",en,assistant,0
|
||||
todo.add_item,"<todo> added to the list.",en,assistant,0
|
||||
todo.add_item,"Consider <todo> added to your tasks.",en,assistant,0
|
||||
todo.add_item,"Got it, <todo> is on your todo list now.",en,assistant,0
|
||||
todo.add_item,"<todo> has been successfully added to your list.",en,assistant,0
|
||||
timer.start,"Starting timer <device_name> for <duration>.",en,assistant,0
|
||||
timer.start,"Timer <device_name> set for <duration>.",en,assistant,0
|
||||
timer.start,"Countdown beginning for <duration>.",en,assistant,0
|
||||
timer.start,"<device_name> timer is now running for <duration>.",en,assistant,0
|
||||
timer.start,"Initiating a timer for <duration>.",en,assistant,0
|
||||
timer.start,"Your timer called <device_name> for <duration> starts now.",en,assistant,0
|
||||
timer.start,"Timer activated for <duration>.",en,assistant,0
|
||||
timer.start,"Commencing timer for a duration of <duration>.",en,assistant,0
|
||||
timer.start,"<duration> countdown has begun on timer <device_name>."
|
||||
timer.start,"Setting a timer for <duration>.",en,assistant,0
|
||||
timer.cancel,"Timer has been canceled.",en,assistant,0
|
||||
timer.cancel,"Successfully halted the timer.",en,assistant,0
|
||||
timer.cancel,"The timer has been cleared.",en,assistant,0
|
||||
timer.cancel,"Timer stopped successfully.",en,assistant,0
|
||||
timer.cancel,"Timer has been deactivated.",en,assistant,0
|
||||
timer.cancel,"No more timer running.",en,assistant,0
|
||||
timer.cancel,"Timer has been successfully canceled.",en,assistant,0
|
||||
timer.cancel,"<device_name>'s timer has been canceled.",en,assistant,0
|
||||
timer.cancel,"Your timer on <device_name> is now stopped.",en,assistant,0
|
||||
timer.cancel,"Timer cancellation for <device_name> confirmed.",en,assistant,0
|
||||
timer.cancel,"The timer on <device_name> has been cleared.",en,assistant,0
|
||||
timer.cancel,"Timer on <device_name> stopped successfully.",en,assistant,0
|
||||
timer.cancel,"Your running timer on <device_name> is now canceled.",en,assistant,0
|
||||
timer.cancel,"<device_name>'s timer has been deactivated.",en,assistant,0
|
||||
|
Can't render this file because it contains an unexpected character in line 455 and column 51.
|
601
data/piles/pile_of_specific_actions.csv
Normal file
601
data/piles/pile_of_specific_actions.csv
Normal file
@@ -0,0 +1,601 @@
|
||||
service_name,device_name,english_phrase
|
||||
blinds.close,kitchen,Lower the kitchen blinds
|
||||
blinds.close,living_room,Close the living room blinds
|
||||
blinds.close,master_bedroom,Shut the master bedroom blinds
|
||||
blinds.open,kitchen,Could you raise the kitchen blinds
|
||||
blinds.open,living_room,Open the living room blinds
|
||||
blinds.open,master_bedroom,Lift the master bedroom blinds
|
||||
blinds.stop,kitchen,Stop the kitchen blinds where they are
|
||||
blinds.stop,living_room,Stop adjusting the living room blinds
|
||||
blinds.stop,master_bedroom,Please halt the master bedroom blinds
|
||||
blinds.toggle,kitchen,Switch the state of the kitchen blinds
|
||||
blinds.toggle,living_room,Toggle the living room blinds
|
||||
blinds.toggle,master_bedroom,Reverse the master bedroom blinds
|
||||
fan.decrease_speed,attic_1,Slow down the attic fan
|
||||
fan.decrease_speed,attic_1,Turn down the attic fan
|
||||
fan.decrease_speed,attic,Slow down the fan in the attic
|
||||
fan.decrease_speed,bedroom_master,Slow down the master bedroom fan
|
||||
fan.decrease_speed,garage,Turn down the fan in the garage
|
||||
fan.decrease_speed,guest_room,Decrease the fan speed in the guest room
|
||||
fan.decrease_speed,hallway,Lower the fan speed in the hallway
|
||||
fan.decrease_speed,kitchen,Slow down the kitchen fan
|
||||
fan.decrease_speed,kitchen,Turn down the kitchen fan
|
||||
fan.decrease_speed,living_room,Decrease the speed of the living room fan
|
||||
fan.decrease_speed,living_room,Turn down the living room fan
|
||||
fan.decrease_speed,study,Reduce the fan speed in the study
|
||||
fan.increase_speed,attic_1,Increase speed of the attic fan
|
||||
fan.increase_speed,attic,Accelerate the fan in the attic
|
||||
fan.increase_speed,bedroom_master,Ramp up the master bedroom fan speed
|
||||
fan.increase_speed,garage,Turn up the fan in the garage
|
||||
fan.increase_speed,guest_room,Increase the fan speed in the guest room
|
||||
fan.increase_speed,hallway,Boost the fan speed in the hallway
|
||||
fan.increase_speed,living_room,Increase the speed of the living room fan
|
||||
fan.increase_speed,study,Ramp up the fan speed in the study
|
||||
fan.toggle,attic_2,Toggle the attic fan
|
||||
fan.toggle,attic,Change the fan status in the attic
|
||||
fan.toggle,basement,Toggle the basement fan
|
||||
fan.toggle,bedroom_master,Switch the state of the master bedroom fan
|
||||
fan.toggle,bedroom,Toggle the bedroom fan
|
||||
fan.toggle,dining_table_above,Please toggle the fan above the dining table
|
||||
fan.toggle,driveway,Flip the driveway fan
|
||||
fan.toggle,garage,Flip the fan in the garage
|
||||
fan.toggle,guest_room,Can you toggle the fan in the guest room
|
||||
fan.toggle,hallway,Switch the state of the fan in the hallway
|
||||
fan.toggle,kitchen,Toggle the kitchen fan
|
||||
fan.toggle,living_room,Toggle the fan in the living room
|
||||
fan.toggle,office,Toggle the office fan
|
||||
fan.toggle,outdoor,Toggle the outdoor fan
|
||||
fan.toggle,pool,Change the status of the pool fan
|
||||
fan.toggle,shed,Switch the shed fan on or off
|
||||
fan.toggle,study,Alter the fan state in the study
|
||||
fan.turn_off,attic_1,Disable the attic fan
|
||||
fan.turn_off,bedroom_master,Deactivate the master bedroom fan
|
||||
fan.turn_off,dining_area,Please switch off the dining area fan
|
||||
fan.turn_off,dining_room,Switch off the dining room fan
|
||||
fan.turn_off,garage,Shut down the garage fan
|
||||
fan.turn_off,garage,Switch off the garage fan
|
||||
fan.turn_off,guest_room,Switch off the guest room fan
|
||||
fan.turn_off,kitchen,Switch off the kitchen fan
|
||||
fan.turn_off,living_room,Turn off the living room fan
|
||||
fan.turn_off,office,Could you disable the office fan
|
||||
fan.turn_off,office,Turn off the office fan
|
||||
fan.turn_off,patio,Turn off the patio fan
|
||||
fan.turn_off,study,Switch off the study fan
|
||||
fan.turn_off,study,Turn off the study fan
|
||||
fan.turn_on,bathroom,Activate the bathroom fan
|
||||
fan.turn_on,bathroom,Turn on the bathroom fan
|
||||
fan.turn_on,bedroom_master,Activate the master bedroom fan
|
||||
fan.turn_on,dining_area,Please switch on the dining area fan
|
||||
fan.turn_on,garage,Turn on the garage fan
|
||||
fan.turn_on,hallway,Enable the hallway fan
|
||||
fan.turn_on,kitchen,Enable the kitchen fan
|
||||
fan.turn_on,living_room,Start the living room fan
|
||||
fan.turn_on,living_room,Turn on the living room fan
|
||||
fan.turn_on,office,Could you enable the office fan
|
||||
fan.turn_on,study,Activate the study fan
|
||||
fan.turn_on,study,Switch on the study fan
|
||||
garage_door.close,bike_storage,Deactivate the bike storage garage
|
||||
garage_door.close,main,Close the main garage door
|
||||
garage_door.close,one_car,Make sure the one car garage is closed
|
||||
garage_door.close,side,Lower the side garage door
|
||||
garage_door.open,basement,Please raise the basement garage door
|
||||
garage_door.open,bike_storage,Activate the bike storage garage
|
||||
garage_door.open,main,Open the main garage door
|
||||
garage_door.open,side,Could you lift the side garage door
|
||||
garage_door.open,two_car,Open the two car garage
|
||||
garage_door.stop,main,Stop the main garage door
|
||||
garage_door.stop,side,Halt the side garage door
|
||||
garage_door.toggle,main,Toggle the main garage door
|
||||
garage_door.toggle,side,Switch the state of the side garage door
|
||||
light.toggle,attic,Change the light status in the attic
|
||||
light.toggle,bedroom_1,Toggle the bedroom light
|
||||
light.toggle,dining_table_above,Please toggle the light above the dining table
|
||||
light.toggle,driveway,Flip the driveway light
|
||||
light.toggle,garage,Flip the light in the garage
|
||||
light.toggle,guest_room,Could you toggle the light in the guest room
|
||||
light.toggle,guest_room,Toggle the guest room light
|
||||
light.toggle,hallway,Switch the state of the light in the hallway
|
||||
light.toggle,hallway,Toggle the hallway light
|
||||
light.toggle,kitchen_1,Toggle the kitchen light
|
||||
light.toggle,kitchen_2,Toggle the kitchen light
|
||||
light.toggle,office,Toggle the office light
|
||||
light.toggle,outdoor,Toggle the outdoor light
|
||||
light.toggle,patio,Toggle the patio light
|
||||
light.toggle,pool,Change the status of the pool light
|
||||
light.toggle,shed,Switch the shed light on or off
|
||||
light.toggle,study,Alter the light state in the study
|
||||
light.toggle,study,Toggle the study light
|
||||
light.turn_off,bathroom_1,Please extinguish the bathroom light
|
||||
light.turn_off,bathroom,Switch off the bathroom light
|
||||
light.turn_off,bathroom,Turn off the bathroom light
|
||||
light.turn_off,bedroom_1,Deactivate the bedroom light
|
||||
light.turn_off,bedroom_2,Switch off the bedroom light
|
||||
light.turn_off,dining_room,Switch off the dining room light
|
||||
light.turn_off,dining_room,Turn off the dining room light
|
||||
light.turn_off,garden_1,Deactivate the garden light
|
||||
light.turn_off,guest_room,Deactivate the guest room light
|
||||
light.turn_off,guest_room,Switch off the guest room light
|
||||
light.turn_off,hallway,Switch off the hallway light
|
||||
light.turn_off,hallway,Turn off the hallway light
|
||||
light.turn_off,kitchen_2,Switch off the kitchen light
|
||||
light.turn_off,kitchen_counter,Switch off the kitchen counter light
|
||||
light.turn_off,living_room_1,Switch off the living room light
|
||||
light.turn_off,living_room,Turn off the living room light
|
||||
light.turn_off,master_bedroom_1,Deactivate the master bedroom light
|
||||
light.turn_off,master_bedroom_lamp,Turn off the light in the bedroom
|
||||
light.turn_off,office,Deactivate the office light
|
||||
light.turn_off,patio,Deactivate the patio light
|
||||
light.turn_off,patio,Disable the patio light
|
||||
light.turn_off,pool,Turn off the pool light
|
||||
light.turn_off,study,Turn off the study light
|
||||
light.turn_on,bathroom_1,Could you illuminate the bathroom
|
||||
light.turn_on,bathroom,Activate the bathroom light
|
||||
light.turn_on,bedroom_1,Activate the bedroom light
|
||||
light.turn_on,dining_room_1,Activate the lights in the dining room
|
||||
light.turn_on,dining_room,Activate the dining room light
|
||||
light.turn_on,driveway,Turn on the driveway light
|
||||
light.turn_on,garage,Activate the garage light
|
||||
light.turn_on,garage,Switch on the garage light
|
||||
light.turn_on,garden_1,Switch on the garden light
|
||||
light.turn_on,garden_1,Turn on the garden light
|
||||
light.turn_on,garden_2,Activate the garden light
|
||||
light.turn_on,garden,Switch on the garden light
|
||||
light.turn_on,guest_room,Switch on the guest room light
|
||||
light.turn_on,hallway,Turn on the hallway light
|
||||
light.turn_on,kitchen_1,Switch on the kitchen lights
|
||||
light.turn_on,kitchen_1,Turn on the kitchen light
|
||||
light.turn_on,kitchen_counter,Switch on the kitchen counter light
|
||||
light.turn_on,living_room,Turn on the living room light
|
||||
light.turn_on,master_bedroom_1,Please activate the master bedroom light
|
||||
light.turn_on,office_1,Enable the office light
|
||||
light.turn_on,patio,Enable the patio light
|
||||
light.turn_on,patio,Switch on the patio light
|
||||
light.turn_on,patio,Turn on the patio light
|
||||
light.turn_on,pool,Activate the pool light
|
||||
light.turn_on,pool,Turn on the pool light
|
||||
light.turn_on,shed,Activate the shed light
|
||||
light.turn_on,shed,Switch on the shed light
|
||||
light.turn_on,study,Activate the study light
|
||||
light.turn_on,dining_room_chandelier,Turn on the dining room light
|
||||
light.turn_on,chandelier_front_hallway,Hey can you turn on the front hallway chandelier
|
||||
lock.lock,back_door,Engage the back door lock
|
||||
lock.lock,front_door,Lock the front door
|
||||
lock.lock,nursery,Can you secure the nursery door
|
||||
lock.lock,office,Please lock the office
|
||||
lock.lock,wine_cellar,Could you lock the wine cellar
|
||||
lock.lock,front_door,Please lock the front door.
|
||||
lock.lock,garage_door,I need the garage door locked.
|
||||
lock.lock,main_gate,Ensure the main gate is locked.
|
||||
lock.lock,office_door,Can we lock the office door?
|
||||
lock.lock,basement_door,Lock up the basement door.
|
||||
lock.lock,garden_gate,Please secure the garden gate.
|
||||
lock.lock,cellar_door,Cellar door should be locked now.
|
||||
lock.lock,shed_door,Ensure the shed door is securely locked.
|
||||
lock.lock,laundry_room_door,Can you lock the laundry room door?
|
||||
lock.lock,guest_room_door,Please lock the guest room door.
|
||||
lock.lock,fence_gate,Make sure the fence gate is locked.
|
||||
lock.lock,attic_door,Attic door needs locking.
|
||||
lock.lock,storage_room_door,Please lock the storage room door.
|
||||
lock.lock,carport_gate,Carport gate needs to be locked.
|
||||
lock.lock,front_porch_door,Lock the front porch door.
|
||||
lock.lock,wine_cellar,Ensure the wine cellar is locked.
|
||||
lock.lock,home_office,I'd like the home office locked up.
|
||||
lock.lock,art_studio,The art studio should be locked.
|
||||
lock.lock,home_gym,Lock the home gym door.
|
||||
lock.lock,library_door,Please lock the library door.
|
||||
lock.unlock,back_door,Could you disengage the back door lock
|
||||
lock.unlock,bike_storage,Disengage the lock on the bike storage
|
||||
lock.unlock,front_door,Unlock the front door
|
||||
lock.unlock,office,Please unlock the office
|
||||
lock.unlock,tool_shed,Unlock the tool shed
|
||||
lock.unlock,back_door,Can you unlock the back door?
|
||||
lock.unlock,patio_door,"Unlock the patio door, please."
|
||||
lock.unlock,kitchen_window,Open the lock on the kitchen window.
|
||||
lock.unlock,bedroom_window,Bedroom window needs to be unlocked.
|
||||
lock.unlock,bathroom_window,Could you unlock the bathroom window?
|
||||
lock.unlock,rooftop_door,Open the rooftop door lock.
|
||||
lock.unlock,pool_gate,I'd like the pool gate unlocked.
|
||||
lock.unlock,balcony_door,Unlock the balcony door for me.
|
||||
lock.unlock,nursery_door,The nursery door needs to be unlocked.
|
||||
lock.unlock,side_entrance,Unlock our side entrance.
|
||||
lock.unlock,garage_side_door,Garage side door should be unlocked.
|
||||
lock.unlock,fire_escape,Can you unlock the fire escape?
|
||||
lock.unlock,boathouse_door,Unlock the boathouse door.
|
||||
lock.unlock,backyard_gate,Can we have the backyard gate unlocked?
|
||||
lock.unlock,back_terrace_door,Open the lock on the back terrace door.
|
||||
lock.unlock,sunroom_door,Please unlock the sunroom door.
|
||||
lock.unlock,playroom_door,Can you unlock the playroom door?
|
||||
lock.unlock,music_room,"Unlock the music room, please."
|
||||
lock.unlock,cinema_room,Cinema room needs to be unlocked.
|
||||
lock.unlock,conservatory,Can the conservatory be unlocked?
|
||||
media_player.media_next_track,living_room,Skip to the next track in the living room
|
||||
media_player.media_next_track,basement_home_theater,Skip to the next track in the basement.
|
||||
media_player.media_next_track,gym_music_player,Skip to the next song in the gym.
|
||||
media_player.media_next_track,yoga_room_music,Next track for the yoga room music.
|
||||
media_player.media_next_track,garden_music,Next track for the garden music.
|
||||
media_player.media_pause,master_bedroom,Pause the media in the master bedroom
|
||||
media_player.media_pause,bathroom_audio,Pause the bathroom audio.
|
||||
media_player.media_pause,loft_tv,Pause the TV in the loft.
|
||||
media_player.media_pause,laundry_room_radio,Pause the radio in the laundry room.
|
||||
media_player.media_pause,corridor_intercom,Pause the corridor intercom.
|
||||
media_player.media_play,nursery,Please play the media in the nursery
|
||||
media_player.media_play,patio_speaker,Start playing music on the patio speaker.
|
||||
media_player.media_play,sunroom_stereo,Play the stereo in the sunroom.
|
||||
media_player.media_play,kids_room_storyteller,Start the storyteller in the kids' room.
|
||||
media_player.media_play,cellar_jukebox,Play the jukebox in the cellar.
|
||||
media_player.media_previous_track,kitchen,Play the previous track in the kitchen
|
||||
media_player.media_previous_track,nursery_lullaby,Go back to the previous lullaby in the nursery.
|
||||
media_player.media_previous_track,study_room_radio,Go back to the previous station in the study room.
|
||||
media_player.media_previous_track,conservatory_cd_player,Previous track on the conservatory CD player.
|
||||
media_player.media_previous_track,driveway_speakers,Previous track on the driveway speakers.
|
||||
media_player.media_stop,nursery,Stop the media in the nursery
|
||||
media_player.media_stop,guest_room_media,Stop the guest room media player.
|
||||
media_player.media_stop,poolside_media,Stop the poolside media system.
|
||||
media_player.media_stop,balcony_speakers,Stop the balcony speakers.
|
||||
media_player.media_stop,porch_sound_system,Stop the porch sound system.
|
||||
media_player.turn_off,kitchen_radio,Switch off the kitchen radio.
|
||||
media_player.turn_off,lounge_entertainment,Switch off the lounge entertainment center.
|
||||
media_player.turn_off,entryway_echo,Turn off the Echo in the entryway.
|
||||
media_player.turn_off,wine_cellar_speakers,Power off the speakers in the wine cellar.
|
||||
media_player.turn_off,mudroom_media_player,Switch off the mudroom media player.
|
||||
media_player.turn_on,kitchen,Could you start the media in the kitchen
|
||||
media_player.turn_on,living_room,Activate the media in the living room
|
||||
media_player.turn_on,master_bedroom,Turn on the master bedroom media player
|
||||
media_player.turn_on,living_room_tv,Please turn on the living room TV.
|
||||
media_player.turn_on,deck_music_system,Turn on the deck's music system.
|
||||
media_player.turn_on,backyard_speakers,Turn on the backyard speakers.
|
||||
media_player.turn_on,foyer_sound_system,Power on the foyer sound system.
|
||||
media_player.turn_on,hallway_audio,Switch on the hallway audio system.
|
||||
media_player.volume_down,nursery,Turn down the volume in the nursery
|
||||
media_player.volume_down,office,Can you decrease the volume in the office
|
||||
media_player.volume_down,office_sound_system,Lower the volume in the office.
|
||||
media_player.volume_down,game_room_speakers,Turn down the game room speakers.
|
||||
media_player.volume_down,workshop_sound_system,Lower the sound system volume in the workshop.
|
||||
media_player.volume_down,attic_audio_system,Decrease attic audio system volume.
|
||||
media_player.volume_down,shed_sound_system,Turn down the shed sound system.
|
||||
media_player.volume_mute,living_room,Mute the media player in the living room
|
||||
media_player.volume_mute,garage_stereo,Mute the stereo in the garage.
|
||||
media_player.volume_mute,library_soundbar,Mute the soundbar in the library.
|
||||
media_player.volume_mute,art_studio_player,Mute the media player in the art studio.
|
||||
media_player.volume_mute,boathouse_stereo,Mute the stereo in the boathouse.
|
||||
media_player.volume_mute,treehouse_speakers,Mute the treehouse speakers.
|
||||
media_player.volume_up,kitchen,Please raise the volume in the kitchen
|
||||
media_player.volume_up,living_room,Turn up the volume in the living room
|
||||
media_player.volume_up,master_bedroom,Can you increase the volume on the master bedroom media player
|
||||
media_player.volume_up,bedroom_speaker,Can you increase the volume in the bedroom?
|
||||
media_player.volume_up,dining_area_jukebox,Increase the jukebox volume in the dining area.
|
||||
media_player.volume_up,rooftop_deck_audio,Raise the rooftop audio volume.
|
||||
media_player.volume_up,greenhouse_radio,Increase the greenhouse radio volume.
|
||||
media_player.volume_up,utility_room_radio,Turn up the utility room radio.
|
||||
switch.toggle,tp_link_kasa_porch,Toggle the porch lights.
|
||||
switch.toggle,honeywell_home_office,Toggle the office lights.
|
||||
switch.toggle,sonoff_dining_room,Toggle the dining room lights.
|
||||
switch.toggle,osram_hallway,Toggle the hallway lights.
|
||||
switch.toggle,koogeek_basement,Toggle the basement lights.
|
||||
switch.toggle,arlo_floodlights,Toggle the security floodlights.
|
||||
switch.toggle,broadlink_kitchenette,Toggle the kitchenette lights.
|
||||
switch.toggle,kasa_living_room,Toggle the living room lights.
|
||||
switch.toggle,home_office_dimmer,Toggle the home office dimmer.
|
||||
switch.toggle,kitchen_under_cabinet,Toggle the kitchen under cabinet lights.
|
||||
switch.turn_off,belkin_wemo_garage,Turn off the garage switch.
|
||||
switch.turn_off,lutron_caseta_bedroom,Turn off the bedroom lights.
|
||||
switch.turn_off,samsung_smartthings_security,Turn off the security system.
|
||||
switch.turn_off,fibaro_pool,Turn off the pool lights.
|
||||
switch.turn_off,ecobee_garden,Turn off the garden lights.
|
||||
switch.turn_off,insteon_patio,Turn off the patio lights.
|
||||
switch.turn_off,yeelight_sunroom,Turn off the sunroom lights.
|
||||
switch.turn_off,meross_walkway,Turn off the walkway lighting.
|
||||
switch.turn_off,xiaomi_bedside,Turn off the bedside lamp.
|
||||
switch.turn_off,ikea_guest_room,Turn off the guest room lights.
|
||||
switch.turn_off,tuya_shed,Turn off the shed light switch.
|
||||
switch.turn_off,hue_bedroom_2,Turn off the second bedroom lights.
|
||||
switch.turn_off,radiant_office,Turn off the office lights.
|
||||
switch.turn_off,z_wave_guest_bathroom,Turn off the guest bathroom fan.
|
||||
switch.turn_off,patio_heater_switch,Turn off the patio heater.
|
||||
switch.turn_off,kitchen_fan,Please turn off the kitchen fan.
|
||||
switch.turn_off,poolside_lanterns,Deactivate the poolside lanterns.
|
||||
switch.turn_off,backyard_floodlight,Can you shut off the backyard floodlight?
|
||||
switch.turn_off,laundry_area,Please switch off the laundry area lights.
|
||||
switch.turn_off,basement_sconces,Can we turn down the basement sconces?
|
||||
switch.turn_off,sunroom_blinds,"I'd like the sunroom blinds closed, please."
|
||||
switch.turn_off,patio_string_lights,Switch off the string lights on the patio.
|
||||
switch.turn_off,kitchen_island,Disable the kitchen island lights.
|
||||
switch.turn_off,garage_worklight,Can we power down the garage worklight?
|
||||
switch.turn_off,home_cinema,Please turn off the home cinema lights.
|
||||
switch.turn_off,dining_room_dimmer,Set the dining room lights to off.
|
||||
switch.turn_off,art_studio_spots,Please disable the art studio spotlights.
|
||||
switch.turn_off,back_entry,Shut down the back entry lights.
|
||||
switch.turn_off,veranda_fairy_lights,"Switch off the veranda fairy lights, please."
|
||||
switch.turn_off,walk_in_closet,Disable the walk-in closet lights.
|
||||
switch.turn_off,bathroom_mirror,Can you turn off the bathroom mirror light?
|
||||
switch.turn_off,storage_room,Please power down the storage room lights.
|
||||
switch.turn_off,conservation_area,Deactivate the conservation area lighting.
|
||||
switch.turn_off,hobby_room,Could we turn off the hobby room lights?
|
||||
switch.turn_off,rear_terrace,Can you dim the lights on the rear terrace?
|
||||
switch.turn_on,philips_hue_living_room,Turn on the living room lights.
|
||||
switch.turn_on,legrand_radiant_kitchen,Turn on the kitchen lights.
|
||||
switch.turn_on,ge_z_wave_bathroom,Turn on the bathroom fan.
|
||||
switch.turn_on,eve_energy_balcony,Turn on the balcony lighting.
|
||||
switch.turn_on,nest_thermostat_terrace,Turn on the terrace thermostat.
|
||||
switch.turn_on,wink_relay_driveway,Turn on the driveway lights.
|
||||
switch.turn_on,sengled_deck,Turn on the deck lighting.
|
||||
switch.turn_on,gosund_attic,Turn on the attic light switch.
|
||||
switch.turn_on,nanoleaf_stairway,Turn on the stairway lights.
|
||||
switch.turn_on,wyze_study,Turn on the study room lights.
|
||||
switch.turn_on,netatmo_front_yard,Turn on the front yard lighting.
|
||||
switch.turn_on,moeshouse_gym,Turn on the gym lighting.
|
||||
switch.turn_on,wemo_laundry_room,Turn on the laundry room lights.
|
||||
switch.turn_on,caseta_hallway_2,Turn on the second hallway lights.
|
||||
switch.turn_on,security_camera_light,Turn on the security camera light.
|
||||
switch.turn_on,hallway_dimmer,Could you dim the hallway lights?
|
||||
switch.turn_on,garden_spotlights,Activate the garden spotlights.
|
||||
switch.turn_on,front_porch_sensor,Engage the front porch sensor light.
|
||||
switch.turn_on,staircase_light_strip,Could you light up the staircase light strip?
|
||||
switch.turn_on,office_desk_lamp,Illuminate the desk lamp in my office.
|
||||
switch.turn_on,library_ceiling,Engage the ceiling lights in the library.
|
||||
switch.turn_on,guest_bathroom,"Light up the guest bathroom, please."
|
||||
switch.turn_on,entryway_chandelier,Illuminate the entryway chandelier.
|
||||
switch.turn_on,bedroom_track_lighting,Brighten the bedroom track lighting.
|
||||
switch.turn_on,balcony_mood_lighting,Activate the mood lighting on the balcony.
|
||||
switch.turn_on,playroom_nightlight,Can you turn on the playroom nightlight?
|
||||
switch.turn_on,foyer_wall_sconce,Light up the foyer wall sconce.
|
||||
switch.turn_on,corridor_track,Brighten up the corridor track lights.
|
||||
switch.turn_on,master_suite,Set the master suite to nighttime mode.
|
||||
switch.turn_on,roof_deck,Engage the roof deck lighting.
|
||||
switch.turn_on,wine_cellar,Illuminate the wine cellar.
|
||||
switch.turn_on,gym_ceiling,Light up the gym ceiling lights.
|
||||
switch.turn_on,front_lawn,Activate the front lawn spotlights.
|
||||
vacuum.start,kitchen,Please turn on the kitchen vacuum.
|
||||
vacuum.start,living_room,Could you please activate the living room vacuum?
|
||||
vacuum.start,dining_room,The dining room vacuum needs to be started.
|
||||
vacuum.start,bedroom1,Let's start the vacuum in bedroom one.
|
||||
vacuum.start,bedroom2,Can you please turn on the vacuum for bedroom two?
|
||||
vacuum.start,study,The study vacuum should be activated.
|
||||
vacuum.start,library,May I ask you to start the library vacuum?
|
||||
vacuum.start,office,Please initiate the office vacuum.
|
||||
vacuum.start,entrance_hall,Could you please turn on the entrance hall vacuum?
|
||||
vacuum.start,sunroom,The sunroom vacuum needs to be started.
|
||||
vacuum.start,patio,Let's activate the patio vacuum.
|
||||
vacuum.start,garage,"Can we clean up the garage, please?"
|
||||
vacuum.start,workshop,May I request you to turn on the workshop vacuum?
|
||||
vacuum.start,utility_room,Please clean the utility room.
|
||||
vacuum.start,mud_room,Could you please clean up the mud room?
|
||||
vacuum.start,powder_room,The powder room needs to be cleaned.
|
||||
vacuum.start,hallway,Let's turn on the hallway vacuum.
|
||||
vacuum.start,staircase,Can we please start the staircase vacuum?
|
||||
vacuum.start,balcony,May I ask you to clean the balcony?
|
||||
vacuum.start,roof_deck,Please roof deck is dirty.
|
||||
vacuum.start,attic,Let's start the attic vacuum.
|
||||
vacuum.start,basement,"Can we turn on the basement vacuum, please?"
|
||||
vacuum.start,pool_area,The pool area vacuum needs to be started.
|
||||
vacuum.start,garden,Could you please activate the garden vacuum?
|
||||
vacuum.start,terrace,May I request you to start the terrace vacuum?
|
||||
vacuum.start,porch,Please initiate the porch vacuum.
|
||||
vacuum.start,shed,"Can we turn on the shed vacuum, please?"
|
||||
vacuum.start,workshop2,The second workshop is pretty dirty right now.
|
||||
vacuum.start,studio,May I ask you to start the studio vacuum?
|
||||
vacuum.start,greenhouse,Please initiate the greenhouse vacuum.
|
||||
vacuum.start,potting_shed,"Can we turn on the potting shed vacuum, please?"
|
||||
vacuum.start,summer_house,The summer house vacuum needs to be started.
|
||||
vacuum.start,garage2,Let's start the second garage vacuum.
|
||||
vacuum.start,tool_shed,May I request you to activate the tool shed vacuum?
|
||||
vacuum.start,barn,Could we please turn on the barn vacuum?
|
||||
vacuum.start,wine_cellar,The wine cellar should be cleaned.
|
||||
vacuum.start,storage_room,Let's initiate the storage room cleanup.
|
||||
vacuum.start,greenhouse2,May I ask you to activate the second greenhouse vacuum?
|
||||
vacuum.start,boat_house,Please turn on the boat house vacuum.
|
||||
vacuum.start,marina,Could we please start the marina vacuum?
|
||||
vacuum.start,bb8,Turn on BB8.
|
||||
vacuum.start,c3po,Can you start C3PO?
|
||||
vacuum.start,hal,Please turn on Hal.
|
||||
vacuum.start,r2d2,Can you tell R2D2 to clean up?
|
||||
light.turn_off,bar_light,Please switch off the bar light
|
||||
light.turn_off,bar_light,Turn off bar light
|
||||
light.turn_off,bar_light,Turn off the bar light
|
||||
light.turn_off,dining_room_light,Deactivate dining room light
|
||||
light.turn_off,dining_room_light,Shut off dining room light
|
||||
light.turn_off,dining_room_light,Toggle the dining room light
|
||||
light.turn_off,front_light,Can we power down the front light?
|
||||
light.turn_off,front_light,Can we turn down the front light?
|
||||
light.turn_off,front_light,Can you turn off the lights on the front?
|
||||
light.turn_off,gym_light,Can you shut off the gym light?
|
||||
light.turn_off,gym_light,Can you turn off the gym light?
|
||||
light.turn_off,gym_light,Could we turn off the gym lights?
|
||||
light.turn_off,island_light,Could you disable the island light
|
||||
light.turn_off,island_light,Deactivate the island light
|
||||
light.turn_off,island_light,Deactivate the island area lighting.
|
||||
light.turn_off,kitchen_light,Deactivate the kitchen light
|
||||
light.turn_off,kitchen_light,Deactivate the lights at the kitchen.
|
||||
light.turn_off,kitchen_light,Disable the lights in the kitchen.
|
||||
light.turn_off,living_room_light,living room light off
|
||||
light.turn_off,living_room_light,Disable the living room lights.
|
||||
light.turn_off,living_room_light,Please disable the living room light.
|
||||
light.turn_off,main_basement_light,Please extinguish the main basement light
|
||||
light.turn_off,main_basement_light,Please power down the lights in the main basement.
|
||||
light.turn_off,main_basement_light,Please switch off the main basement light
|
||||
light.turn_off,man_cave_light,Please switch off the man cave area lights.
|
||||
light.turn_off,man_cave_light,Please turn off the man cave lights.
|
||||
light.turn_off,man_cave_light,Please turn off the man cave light.
|
||||
light.turn_off,master_bedroom_light,Power off the lights in the master bedroom.
|
||||
light.turn_off,master_bedroom_light,Set the master bedroom lights to off.
|
||||
light.turn_off,master_bedroom_light,Shut down the master bedroom lights.
|
||||
light.turn_off,pool_table_light,Shut down the pool table light
|
||||
light.turn_off,pool_table_light,Switch off the pool table light
|
||||
light.turn_off,pool_table_light,Switch off the pool table light please
|
||||
light.turn_off,pool_table_light,Switch off the pool table light now
|
||||
light.turn_off,pool_table_light,Switch off the pool table lights
|
||||
light.turn_off,pool_table_light,Switch off the light in the pool table
|
||||
light.turn_off,pool_table_light,Switch off the pool table light
|
||||
light.turn_off,pool_table_light,Turn off the pool table light
|
||||
light.turn_off,pool_table_light,Turn off the pool table light please
|
||||
light.turn_off,pool_table_light,Turn off the pool table light now
|
||||
light.turn_off,pool_table_light,You can turn off the pool table light now
|
||||
light.turn_off,pool_table_light,Turn off the pool table lights.
|
||||
light.turn_off,pool_table_light,Turn off the pool table light please.
|
||||
light.turn_off,pool_table_light,Turn off the pool table light
|
||||
light.turn_off,pool_table_light,Turn off the light in the pool table.
|
||||
light.turn_off,pool_table_light,Turn off the pool table light
|
||||
light.turn_off,pool_table_light,Turn off the light in the pool table
|
||||
light.turn_off,pool_table_light,Turn the pool table light off
|
||||
light.turn_off,porch_light,Please switch off the porch light
|
||||
light.turn_off,porch_light,Turn off porch light
|
||||
light.turn_off,porch_light,Turn off the porch light
|
||||
light.turn_off,porch_light,Deactivate porch light
|
||||
light.turn_off,porch_light,Shut off porch light
|
||||
light.turn_off,porch_light,Toggle the porch light
|
||||
light.turn_off,porch_light,Can we power down the porch light?
|
||||
light.turn_off,porch_light,Can we turn down the porch light?
|
||||
light.turn_off,porch_light,Can you turn off the lights on the porch?
|
||||
light.turn_off,porch_light,Can you shut off the porch light?
|
||||
light.turn_off,porch_light,Can you turn off the porch light?
|
||||
light.turn_off,porch_light,Could we turn off the porch lights?
|
||||
light.turn_off,porch_light,Could you disable the porch light
|
||||
light.turn_off,porch_light,Deactivate the porch light
|
||||
light.turn_off,porch_light,Deactivate the porch area lighting.
|
||||
light.turn_off,porch_light,Deactivate the porch light
|
||||
light.turn_off,porch_light,Deactivate the light on the porch
|
||||
light.turn_off,porch_light,Deactivate the porch light
|
||||
light.turn_off,porch_light,Deactivate the porch light
|
||||
light.turn_off,porch_light,Deactivate the porch light
|
||||
light.turn_off,porch_light,Deactivate the lights at the porch.
|
||||
light.turn_off,porch_light,Disable the lights in the porch.
|
||||
light.turn_off,porch_light,porch light off
|
||||
light.turn_off,porch_light,Disable the porch lights.
|
||||
light.turn_off,porch_light,Please disable the porch light.
|
||||
light.turn_off,porch_light,Please extinguish the porch light
|
||||
light.turn_off,porch_light,Please power down the lights in the porch.
|
||||
light.turn_off,porch_light,Please switch off the porch light
|
||||
light.turn_off,porch_light,Please switch off the porch area lights.
|
||||
light.turn_off,porch_light,Please turn off the porch lights.
|
||||
light.turn_off,porch_light,Please turn off the porch light.
|
||||
light.turn_off,porch_light,Power off the lights in the porch.
|
||||
light.turn_off,porch_light,Set the porch lights to off.
|
||||
light.turn_off,porch_light,Shut down the porch lights.
|
||||
light.turn_off,porch_light,Shut down the porch light
|
||||
light.turn_off,porch_light,Switch off the porch light
|
||||
light.turn_off,porch_light,Switch off the porch light please
|
||||
light.turn_off,porch_light,Switch off the porch light now
|
||||
light.turn_off,porch_light,Switch off the porch lights
|
||||
light.turn_off,porch_light,Switch off the light in the porch
|
||||
light.turn_off,porch_light,Switch off the porch light
|
||||
light.turn_off,porch_light,Turn off the porch light
|
||||
light.turn_off,porch_light,Turn off the porch light please
|
||||
light.turn_off,porch_light,Turn off the porch light now
|
||||
light.turn_off,porch_light,You can turn off the porch light now
|
||||
light.turn_off,porch_light,Turn off the porch lights.
|
||||
light.turn_off,porch_light,Turn off the porch light please.
|
||||
light.turn_off,porch_light,Turn off the porch light
|
||||
light.turn_off,porch_light,Turn off the light in the porch.
|
||||
light.turn_off,porch_light,Turn off the porch light
|
||||
light.turn_off,porch_light,Turn off the light in the porch
|
||||
light.turn_off,porch_light,Turn the porch light off
|
||||
light.turn_off,shower_light,Please switch off the shower light
|
||||
light.turn_off,shower_light,Turn off shower light
|
||||
light.turn_off,shower_light,Turn off the shower light
|
||||
light.turn_off,shower_light,Deactivate shower light
|
||||
light.turn_off,shower_light,Shut off shower light
|
||||
light.turn_off,stair_light,stair light off
|
||||
light.turn_off,stair_light,Disable the stair lights.
|
||||
light.turn_off,stair_light,Shut off stairwell light
|
||||
light.turn_off,stair_light,Toggle the stairwell light
|
||||
light.turn_off,stair_light,Can we power down the stairwell light?
|
||||
light.turn_off,roof_light,Please switch off the roof light
|
||||
light.turn_off,roof_light,Turn off roof light
|
||||
light.turn_off,roof_light,Turn off the roof light
|
||||
light.turn_off,walkway_light,Shut down the walkway lights.
|
||||
light.turn_off,walkway_light,Turn off the walkway light
|
||||
light.turn_off,walkway_light,Turn the walkway light off
|
||||
light.turn_off,Bobs_lamp,Please switch off Bob's light
|
||||
light.turn_off,janets_lamp,Turn off Janet's light
|
||||
light.turn_off,ruths_lamp,Please switch off Ruth's lamp
|
||||
light.turn_off,colins_lamp,Turn off Colin's lamp
|
||||
light.turn_off,neenas_lamp,Turn off Neena's lamp
|
||||
light.turn_off,roberts_lamp,Deactivate Robert's lamp
|
||||
light.turn_off,paulus_lamp,Shut off Paulus' lamp
|
||||
light.turn_off,peters_lamp,Toggle Peter's lamp
|
||||
light.turn_off,angelas_lamp,Can we power down Angela's lamp?
|
||||
light.turn_off,entry_lamp,Please switch off entry lamp
|
||||
light.turn_off,entry_lamp,Turn off entry lamp
|
||||
light.turn_off,entry_lamp,Please extinguish entryway lamp
|
||||
light.turn_off,entry_lamp,Please switch off entryway lamp
|
||||
light.turn_off,entry_lamp,Please switch off entryway area lamps.
|
||||
light.turn_off,entry_lamp,Deactivate entrance light
|
||||
light.turn_on,bar_light,Illuminate the light in my bar.
|
||||
light.turn_on,bar_light,Illuminate the bar.
|
||||
light.turn_on,bar_light,Bar light on
|
||||
light.turn_on,bar_light,Light up the bar.
|
||||
light.turn_on,dining_room_light,Activate the lights in the dining room
|
||||
light.turn_on,dining_room_light,Enable the dining room light please
|
||||
light.turn_on,dining_room_light,Engage the lights in the dining room.
|
||||
light.turn_on,front_light,Activate the front light please
|
||||
light.turn_on,front_light,Please activate the front light
|
||||
light.turn_on,front_light,Activate the front light now
|
||||
light.turn_on,gym_light,Turn on the gym light please
|
||||
light.turn_on,gym_light,Turn the gym light on
|
||||
light.turn_on,gym_light,gym light on
|
||||
light.turn_on,island_light,Turn the island light on
|
||||
light.turn_on,island_light,island light on
|
||||
light.turn_on,island_light,Switch on the island light
|
||||
light.turn_on,kitchen_light,kitchen light on
|
||||
light.turn_on,kitchen_light,Switch on the kitchen light
|
||||
light.turn_on,kitchen_light,Hey can you turn on the kitchen light
|
||||
light.turn_on,living_room_light,Turn on the living room lights.
|
||||
light.turn_on,living_room_light,Turn on the living room lights please.
|
||||
light.turn_on,living_room_light,Please turn on the living room lights.
|
||||
light.turn_on,living_room_light,Turn on the living room lighting.
|
||||
light.turn_on,main_basement_light,Turn on the main basement light
|
||||
light.turn_on,main_basement_light,Turn on main basement light
|
||||
light.turn_on,man_cave_light,Activate the man cave man cave light.
|
||||
light.turn_on,man_cave_light,Activate the lights in the man cave
|
||||
light.turn_on,man_cave_light,Could you light up the man cave?
|
||||
light.turn_on,man_cave_light,Enable the man cave light
|
||||
light.turn_on,master_bedroom_light,Could you illuminate the master bedroom
|
||||
light.turn_on,pool_table_bar_light,pool table bar light on
|
||||
light.turn_on,pool_table_bar_light,Switch on the pool table bar light
|
||||
light.turn_on,pool_table_bar_light,Can you turn on the pool table bar light?
|
||||
light.turn_on,pool_table_light,Enable the pool table light please
|
||||
light.turn_on,porch_light,Turn on porch light
|
||||
light.turn_on,porch_light,Can you turn on the porch light?
|
||||
light.turn_on,porch_light,Could you turn on the porch light please?
|
||||
light.turn_on,shower_light,Turn on the shower light
|
||||
light.turn_on,shower_light,Turn on shower light
|
||||
light.turn_on,shower_light,Activate the shower light
|
||||
light.turn_on,shower_light,Could you illuminate the shower please
|
||||
light.turn_on,shower_light,Turn on the lights at the shower
|
||||
light.turn_on,shower_light,Light up the shower please
|
||||
light.turn_on,shower_light,Turn on the shower light please
|
||||
light.turn_on,shower_light,Turn the shower light on
|
||||
light.turn_on,shower_light,shower light on
|
||||
light.turn_on,stair_light,Activate the stair light please
|
||||
light.turn_on,stair_light,Please activate the stair light
|
||||
light.turn_on,stair_light,Can you light up the stairwell please?
|
||||
light.turn_on,stair_light,Please activate the stairwell light
|
||||
light.turn_on,stair_light,Please switch on the stairwell area light
|
||||
light.turn_on,roof_light,Please turn on the roof light.
|
||||
light.turn_on,roof_light,Switch on the roof light please
|
||||
light.turn_on,roof_light,Can you turn on the light in the roof?
|
||||
light.turn_on,walkway_light,Please activate the walkway light
|
||||
light.turn_on,walkway_light,Please switch on the walkway area light
|
||||
light.turn_on,walkway_light,Turn on the walkway lighting.
|
||||
light.turn_on,freds_lamp,Turn on Fred's light
|
||||
light.turn_on,colins_lamp,Turn on Colin's light
|
||||
light.turn_on,roberts_lamp,Activate Robert's light
|
||||
light.turn_on,pierres_lamp,Turn on Pierre's light please
|
||||
light.turn_on,jennifers_lamp,Turn Jenn's light on
|
||||
light.turn_on,julias_lamp,Julia's light on
|
||||
light.turn_on,neenas_lamp,Switch on Neena's light
|
||||
light.turn_on,patricks_lamp,Can you turn on Patrick's light?
|
||||
light.turn_on,sams_lamp,Light up Sam's.
|
||||
light.turn_on,johns_lamp,Brighten up John's light.
|
||||
light.turn_on,jordans_lamp,Engage Jordan's lighting.
|
||||
light.turn_on,lebrons_lamp,Light up Lebron's lights.
|
||||
light.turn_on,angies_lamp,Can you turn on Angie's lamp?
|
||||
light.turn_on,louis_lamp,Could you turn on Louis' lamp please?
|
||||
light.turn_on,katniss_lamp,Could you enable Katniss' lamp
|
||||
light.turn_on,waynes_lamp,Enable Wayne's lamp
|
||||
light.turn_on,samuels_lamp,Enable Samuel's lamp please
|
||||
light.turn_on,entry_lamp,Turn on entry lamp
|
||||
light.turn_on,entry_lamp,Please activate entryway lamp
|
||||
light.turn_on,entry_lamp,Please switch on entryway area lamp
|
||||
light.turn_on,entry_lamp,Turn on entrance light
|
||||
light.turn_on,entry_lamp,Turn on entrance lighting.
|
||||
|
@@ -241,4 +241,34 @@ media_player,idle;<volume>,"Is <device_name> active right now?","<device_name> i
|
||||
media_player,playing;<media>;<volume>,"What's on <device_name> at the moment?","<device_name> is currently playing <media> at volume <volume>."
|
||||
media_player,paused;<media>;<volume>,"I forgot what I paused on <device_name>, can you remind me?","You paused <media> on <device_name>, and the volume is set to <volume>."
|
||||
media_player,idle;<volume>,"Is <device_name> turned off or on?","<device_name> is on but idle, with volume at <volume>."
|
||||
media_player,playing;<media>;<volume>,"I'd like to know what's playing on <device_name>.","Currently, <media> is playing on <device_name> at volume level <volume>."
|
||||
media_player,playing;<media>;<volume>,"I'd like to know what's playing on <device_name>.","Currently, <media> is playing on <device_name> at volume level <volume>."
|
||||
vacuum,cleaning,Is the <device_name> vacuum running right now?,The vacuum is running.
|
||||
vacuum,cleaning,Is the <device_name> vacuum on?,It is. Your home is currently being cleaned.
|
||||
vacuum,cleaning,Is <device_name> cleaning?,"Yes, <device_name> is currently vacuuming."
|
||||
vacuum,cleaning,What is the <device_name> vacuum doing right now?,The <device_name> vacuum is currently cleaning the house.
|
||||
vacuum,cleaning,What is <device_name> doing right now?,<device_name> is currently cleaning.
|
||||
vacuum,docked,What is the <device_name> vacuum doing right now?,The <device_name> vacuum is currently docked.
|
||||
vacuum,docked,What is <device_name> doing right now?,<device_name> is currently docked.
|
||||
vacuum,docked,Is <device_name> on its base right now?,"Yes, <device_name> is at its base."
|
||||
vacuum,docked,Where is the <device_name> vacuum?,On its dock at the moment.
|
||||
vacuum,paused,What is the <device_name> vacuum doing right now?,The <device_name> vacuum is paused.
|
||||
vacuum,paused,What is <device_name> doing right now?,<device_name> is paused.
|
||||
vacuum,idle,What is the <device_name> vacuum doing right now?,The <device_name> vacuum is stopped.
|
||||
vacuum,idle,What is <device_name> doing right now?,<device_name> is stopped.
|
||||
vacuum,error,What is the <device_name> vacuum doing right now?,The <device_name> vacuum is stuck or having issues that need to be corrected.
|
||||
vacuum,error,What is <device_name> doing right now?,<device_name> is stuck or having issues.
|
||||
todo,1,How many items on on my <device_name> right now?,There is currently 1 item on your <device_name>.
|
||||
todo,2,How many things are on the <device_name> at the moment?,There are 2 things on the <device_name> currently.
|
||||
todo,3,What is the current number of items on your <device_name>?,"Yes, there are currently 3 items on your <device_name>."
|
||||
todo,4,How many objects are there on the <device_name> presently?,"Yes, there are 4 objects presently on the <device_name>."
|
||||
todo,5,Could you tell me how many pieces there are on the <device_name> at this time?,I can tell you that there are 5 pieces on the <device_name> at this time.
|
||||
todo,6,What's the count of items on the <device_name> now?,The count of items on the <device_name> now is 6.
|
||||
todo,7,How many units can be found on my <device_name> at the present moment?,You will find 7 units on my <device_name> at the present moment.
|
||||
todo,8,Could you inform me as to how many articles are located on the <device_name> right now?,I'd be happy to inform you that there are 8 articles located on the <device_name> right now.
|
||||
todo,9,Is it possible for you to disclose how many components there are on the <device_name> currently?,It is possible for me to disclose that there are 9 components on the <device_name> currently.
|
||||
todo,10,May I ask for the quantity of items on the <device_name> at present?,The quantity of items on the <device_name> is currently 10.
|
||||
todo,11,Would you be able to tell me how many things there are on the <device_name> now?,"Yes, I can tell you that there are 11 things on the <device_name> now."
|
||||
todo,12,Can you enlighten me as to the number of items on the <device_name>?,I'd be pleased to enlighten you that there are 12 items on the <device_name>.
|
||||
timer,active;<duration>;<remaining>,How much time left on the <device_name>?,The <device_name> is set for <duration>. There is currently <remaining> remaining.
|
||||
timer,active;<duration>;<remaining>,How long before the <device_name> goes off?,The <device_name> will go off in <remaining>.
|
||||
timer,active;<duration>;<remaining>,When is the <device_name> set to go off?,The <device_name> is set for <duration> and will go off in <remaining>.
|
||||
|
||||
|
4
data/piles/pile_of_system_prompts.csv
Normal file
4
data/piles/pile_of_system_prompts.csv
Normal file
@@ -0,0 +1,4 @@
|
||||
persona,prompt
|
||||
assistant,"You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed or answer the following question with the information provided only."
|
||||
pirate,"You are 'Blackbeard', a helpful AI Assistant that controls the devices in a house but sounds like a pirate. Complete the following task as instructed or answer the following question with the information provided only. Your response should always sound like you are a pirate."
|
||||
robot,"You are 'Robo', a helpful AI Robot that controls the devices in a house. Complete the following task as instructed or answer the following question with the information provided only. Your response should be robotic and always begin with 'Beep-Boop'."
|
||||
|
@@ -1,223 +1,265 @@
|
||||
device_type,service,english_phrase,assistant_response,multiplier
|
||||
blinds,close,Close the <device_name>,Closing <device_name> for you,1
|
||||
blinds,close,Lower the <device_name>,Lowering <device_name> now,1
|
||||
blinds,close,Shut the <device_name>,Shutting <device_name> as requested,1
|
||||
blinds,open,Lift the <device_name> blinds,Lifting <device_name> blinds as requested,1
|
||||
blinds,open,Open the <device_name>,Opening <device_name> now,1
|
||||
blinds,open,Raise the <device_name>,Raising <device_name> for you,1
|
||||
blinds,stop,Freeze the <device_name>,Freezing <device_name> position,1
|
||||
blinds,stop,Halt the <device_name>,Halting <device_name> now,1
|
||||
blinds,stop,Stop the <device_name>,Stopping <device_name> operation,1
|
||||
blinds,toggle,Flip the <device_name> state,Flipping <device_name> state now,1
|
||||
blinds,toggle,Switch the <device_name> state,Switching <device_name> state as requested,1
|
||||
blinds,toggle,Toggle the <device_name>,Toggling <device_name> for you,1
|
||||
blinds|fan,close|turn_off,Close <device_name1> and deactivate <device_name2>,Lowering <device_name1> and stopping <device_name2>,1
|
||||
blinds|fan,open|increase_speed,Raise the <device_name1> and speed up the <device_name2>,Raising <device_name1> and speeding up <device_name2>,1
|
||||
blinds|light,open|turn_on,Raise <device_name1> and activate <device_name2>,Raising <device_name1> and turning on <device_name2>,1
|
||||
fan,decrease_speed,Decrease the <device_name> speed,Reducing speed of <device_name>,1
|
||||
fan,decrease_speed,Lower the <device_name> speed,Lowering speed of <device_name> as requested,1
|
||||
fan,decrease_speed,Slow down the <device_name>,Slowing down <device_name> for you,1
|
||||
fan,increase_speed,Increase the <device_name> speed,Increasing speed of <device_name>,1
|
||||
fan,increase_speed,Ramp up the <device_name> speed,Ramping up <device_name> speed now,1
|
||||
fan,increase_speed,Speed up the <device_name>,Speeding up <device_name> for you,1
|
||||
fan,toggle,Flip the <device_name> on or off,Flipping <device_name> state for you,1
|
||||
fan,toggle,Switch the <device_name> state,Switching <device_name> state as requested,1
|
||||
fan,toggle,Toggle the <device_name>,Toggling <device_name> now,1
|
||||
fan,turn_off,Deactivate the <device_name>,Deactivating <device_name> as requested,1
|
||||
fan,turn_off,Stop the <device_name> please,Stopping <device_name> for you,1
|
||||
fan,turn_off,Turn off the <device_name>,"Certainly, stopping <device_name>",1
|
||||
fan,turn_on,Activate the <device_name>,Activating <device_name> now,1
|
||||
fan,turn_on,Please start the <device_name>,Starting <device_name> for you,1
|
||||
fan,turn_on,Turn on the <device_name>,"Certainly, starting <device_name>",1
|
||||
fan|blinds,turn_off|open,Turn off <device_name1> and open <device_name2>,Stopping <device_name1> and raising <device_name2>,1
|
||||
fan|blinds|garage_door,increase_speed|open|open,Speed up <device_name1> open <device_name2> and <device_name3>,Ramping up <device_name1> and lifting <device_name2> and <device_name3>,1
|
||||
fan|blinds|light,decrease_speed|open|turn_off,Slow down <device_name1> open <device_name2> and turn off <device_name3>,Reducing speed of <device_name1> opening <device_name2> and deactivating <device_name3>,1
|
||||
fan|blinds|light,turn_off|close|turn_on,Turn off <device_name1> close <device_name2> and turn on <device_name3>,Deactivating <device_name1> lowering <device_name2> and switching on <device_name3>,1
|
||||
fan|fan,increase_speed|decrease_speed,Speed up <device_name1> and slow down <device_name2>,Increasing speed of <device_name1> and reducing <device_name2>,1
|
||||
fan|fan,turn_on|turn_off,Turn on <device_name1> and turn off <device_name2>,Starting <device_name1> and stopping <device_name2>,1
|
||||
fan|garage_door,increase_speed|close,Increase speed of <device_name1> and close <device_name2>,Speeding up <device_name1> and shutting <device_name2>,1
|
||||
fan|garage_door|blinds,increase_speed|close|open,Speed up <device_name1> close <device_name2> and open <device_name3>,Increasing speed of <device_name1> shutting <device_name2> and raising <device_name3>,1
|
||||
fan|garage_door|blinds,turn_on|close|close,Turn on <device_name1> close <device_name2> and <device_name3>,Starting <device_name1> and shutting <device_name2> and <device_name3>,1
|
||||
fan|garage_door|light,turn_off|close|turn_off,Turn off <device_name1> and <device_name3> and close <device_name2>,Stopping <device_name1> and deactivating <device_name3> and lowering <device_name2>,1
|
||||
fan|garage_door|lock,turn_off|close|lock,Turn off <device_name1> close <device_name2> and lock <device_name3>,Stopping <device_name1> closing <device_name2> and locking <device_name3>,1
|
||||
fan|garage_door|lock,turn_on|open|unlock,Turn on <device_name1> open <device_name2> and unlock <device_name3>,Starting <device_name1> lifting <device_name2> and unlocking <device_name3>,1
|
||||
fan|light,turn_on|turn_off,Activate <device_name1> and deactivate <device_name2>,Activating <device_name1> and turning off <device_name2>,1
|
||||
fan|light|lock,decrease_speed|toggle|lock,Slow down <device_name1> toggle <device_name2> and lock <device_name3>,Reducing speed of <device_name1> flipping <device_name2> and securing <device_name3>,1
|
||||
fan|lock,decrease_speed|unlock,Slow down the <device_name1> and unlock the <device_name2>,Slowing down <device_name1> and unlocking <device_name2>,1
|
||||
garage_door,close,Close the <device_name>,Closing <device_name> now,1
|
||||
garage_door,close,Lower the <device_name>,Lowering <device_name> for you,1
|
||||
garage_door,close,Shut the <device_name>,Shutting <device_name> as requested,1
|
||||
garage_door,open,Lift the <device_name>,Lifting <device_name> for you,1
|
||||
garage_door,open,Open the <device_name>,Opening <device_name> now,1
|
||||
garage_door,open,Raise the <device_name>,Raising <device_name> as requested,1
|
||||
garage_door,stop,Freeze the <device_name>,Freezing <device_name> position now,1
|
||||
garage_door,stop,Halt the <device_name>,"Certainly, halting <device_name>",1
|
||||
garage_door,stop,Stop the <device_name>,Halting <device_name> operation,1
|
||||
garage_door,toggle,Flip the <device_name> state,Flipping <device_name> state now,1
|
||||
garage_door,toggle,Switch the <device_name> state,Switching <device_name> state as requested,1
|
||||
garage_door,toggle,Toggle the <device_name>,Toggling <device_name> for you,1
|
||||
garage_door|blinds,open|open,Open the <device_name1> and lift the <device_name2>,Opening <device_name1> and lifting <device_name2>,1
|
||||
garage_door|fan,close|turn_off,Close <device_name1> and deactivate <device_name2>,Shutting <device_name1> and deactivating <device_name2>,1
|
||||
garage_door|light,open|turn_on,Open <device_name1> and activate <device_name2>,Opening <device_name1> and switching on <device_name2>,1
|
||||
garage_door|lock,open|unlock,Open <device_name1> and unlock <device_name2>,Opening <device_name1> and unlocking <device_name2>,1
|
||||
light,toggle,Flip the <device_name> on or off,Flipping the <device_name> state,1
|
||||
light,toggle,Switch the <device_name> state,Switching <device_name> state as requested,1
|
||||
light,toggle,Toggle the <device_name> state,Toggling <device_name> for you,1
|
||||
light,turn_off,Deactivate the <device_name>,Deactivating <device_name> as requested,1
|
||||
light,turn_off,Please switch off the <device_name>,Switching off <device_name> now,1
|
||||
light,turn_off,Turn off the <device_name>,"Sure, turning off <device_name>",1
|
||||
light,turn_on,Activate the <device_name>,Activation of <device_name> in progress,1
|
||||
light,turn_on,Can you turn on the <device_name>?,"Certainly, turning on <device_name> now",1
|
||||
light,turn_on,Please switch on the <device_name>,Switching on <device_name> for you,1
|
||||
light|blinds,turn_off|close,Turn off <device_name1> and close <device_name2>,Deactivating <device_name1> and closing <device_name2>,1
|
||||
light|blinds|fan,turn_on|close|decrease_speed,Turn on <device_name1> close <device_name2> and slow down <device_name3>,Switching on <device_name1> lowering <device_name2> and reducing speed of <device_name3>,1
|
||||
light|blinds|garage_door,turn_on|open|close,Turn on <device_name1> open <device_name2> and close <device_name3>,Switching on <device_name1> raising <device_name2> and shutting <device_name3>,1
|
||||
light|blinds|lock,turn_off|close|lock,"Turn off the <device_name1> close the <device_name2> and lock the <device_name3>","Turning off <device_name1> closing <device_name2> and locking <device_name3>",1
|
||||
light|blinds|lock,turn_off|close|unlock,Turn off <device_name1> close <device_name2> and unlock <device_name3>,Deactivating <device_name1> closing <device_name2> and unlocking <device_name3>,1
|
||||
light|fan,toggle|decrease_speed,Toggle <device_name1> and slow down <device_name2>,Toggling <device_name1> and reducing speed of <device_name2>,1
|
||||
light|fan,toggle|increase_speed,Toggle <device_name1> and speed up <device_name2>,Toggling <device_name1> and increasing speed of <device_name2>,1
|
||||
light|fan,turn_off|turn_on,Turn off the <device_name1> and turn on <device_name2>,Turning off <device_name1> and starting <device_name2>,1
|
||||
light|fan,turn_on|toggle,Switch on <device_name1> and toggle <device_name2>,Activating <device_name1> and toggling <device_name2>,1
|
||||
light|fan,turn_on|turn_off,Turn on the <device_name1> and turn off the <device_name2>,Turning on <device_name1> and turning off <device_name2>,1
|
||||
light|fan,turn_on|turn_on,Turn on both the <device_name1> and <device_name2>,Turning on both <device_name1> and <device_name2>,1
|
||||
light|fan,turn_on|turn_on,Turn on the <device_name1> and <device_name2>,Turning on <device_name1> and <device_name2>,1
|
||||
light|fan|blinds,toggle|increase_speed|open,Toggle <device_name1> speed up <device_name2> and open <device_name3>,Flipping <device_name1> ramping up <device_name2> and lifting <device_name3>,1
|
||||
light|fan|blinds,turn_off|decrease_speed|close,Turn off <device_name1> slow down <device_name2> and close <device_name3>,Switching off <device_name1> reducing speed of <device_name2> and lowering <device_name3>,1
|
||||
light|fan|blinds,turn_off|turn_off|close,Turn off <device_name1> and <device_name2> and close <device_name3>,Deactivating <device_name1> and <device_name2> and lowering <device_name3>,1
|
||||
light|fan|garage_door,toggle|decrease_speed|open,Toggle <device_name1> slow down <device_name2> and open <device_name3>,Toggling <device_name1> reducing speed of <device_name2> and opening <device_name3>,1
|
||||
light|fan|garage_door,turn_off|turn_on|close,Turn off <device_name1> turn on <device_name2> and close <device_name3>,Switching off <device_name1> activating <device_name2> and shutting <device_name3>,1
|
||||
light|fan|garage_door,turn_on|toggle|open,"Switch on the <device_name1> flip the <device_name2> and lift the <device_name3>","Switching on <device_name1> flipping <device_name2> and lifting <device_name3>",1
|
||||
light|fan|garage_door,turn_on|turn_on|open,Turn on <device_name1> and <device_name2> and open <device_name3>,Activating <device_name1> and <device_name2> and opening <device_name3>,1
|
||||
light|fan|lock,toggle|toggle|lock,Toggle both <device_name1> and <device_name2> and lock <device_name3>,Toggling <device_name1> and <device_name2> and securing <device_name3>,1
|
||||
light|fan|lock,turn_off|turn_off|unlock,Turn off <device_name1> and <device_name2> and unlock <device_name3>,Deactivating <device_name1> and <device_name2> and unsecuring <device_name3>,1
|
||||
light|fan|lock,turn_on|increase_speed|lock,Turn on <device_name1> speed up <device_name2> and lock <device_name3>,Switching on <device_name1> increasing speed of <device_name2> and locking <device_name3>,1
|
||||
light|fan|lock,turn_on|turn_on|unlock,Turn on both <device_name1> and <device_name2> and unlock <device_name3>,Activating <device_name1> and <device_name2> and unsecuring <device_name3>,1
|
||||
light|garage_door,toggle|stop,Toggle the <device_name1> and stop the <device_name2>,Toggling <device_name1> and stopping <device_name2>,1
|
||||
light|garage_door,turn_on|open,Switch on <device_name1> and open <device_name2>,Activating <device_name1> and opening <device_name2>,1
|
||||
light|garage_door,turn_on|open,Switch on the <device_name1> and open the <device_name2>,Switching on <device_name1> and opening <device_name2>,1
|
||||
light|garage_door|lock,turn_on|open|lock,Turn on <device_name1> open <device_name2> and lock <device_name3>,Activating <device_name1> lifting <device_name2> and locking <device_name3>,1
|
||||
light|light,toggle|toggle,Toggle both <device_name1> and <device_name2>,Toggling <device_name1> and <device_name2>,1
|
||||
light|light,turn_on|turn_off,Turn on <device_name1> and turn off <device_name2>,Turning on <device_name1> and deactivating <device_name2>,1
|
||||
light|light|fan,toggle|toggle|decrease_speed,Toggle both <device_name1> and <device_name2> and slow down <device_name3>,Flipping <device_name1> and <device_name2> and reducing speed of <device_name3>,1
|
||||
light|light|fan,toggle|turn_on|increase_speed,Toggle <device_name1> turn on <device_name2> and speed up <device_name3>,Flipping <device_name1> activating <device_name2> and speeding up <device_name3>,1
|
||||
light|light|fan,turn_on|turn_off|toggle,Turn on <device_name1> turn off <device_name2> and toggle <device_name3>,Activating <device_name1> deactivating <device_name2> and toggling <device_name3>,1
|
||||
light|lock,turn_on|lock,Turn on <device_name1> and lock <device_name2>,Activating <device_name1> and locking <device_name2>,1
|
||||
lock,lock,Engage the <device_name> lock,Engaging lock on <device_name>,1
|
||||
lock,lock,Lock the <device_name>,Locking <device_name> now,1
|
||||
lock,lock,Secure the <device_name>,Securing <device_name> for you,1
|
||||
lock,unlock,Disengage the <device_name> lock,Disengaging lock on <device_name>,1
|
||||
lock,unlock,Unlock the <device_name>,Unlocking <device_name> now,1
|
||||
lock,unlock,Unsecure the <device_name>,Unsecuring <device_name> for you,1
|
||||
lock|blinds,lock|close,Lock the <device_name1> and lower the <device_name2>,Locking <device_name1> and lowering <device_name2>,1
|
||||
lock|garage_door,lock|close,Secure the <device_name1> and shut the <device_name2>,Securing <device_name1> and shutting <device_name2>,1
|
||||
light,turn_on,Make sure the <device_name> is on,Turning on <device_name>,1
|
||||
fan,turn_on,Make sure the <device_name> is on,Turning on <device_name>,1
|
||||
lock|lock|garage_door,lock|lock|close,Make sure <device_name1> and <device_name2> are locked and the <device_name3> is closed,Sure. Locking <device_name1> and <device_name2> and closing <device_name3>,1
|
||||
light,turn_off,Ensure the <device_name> is off,Turning off <device_name>,1
|
||||
fan,turn_off,Ensure the <device_name> is off,Turning off <device_name>,1
|
||||
garage_door,close,Make certain the <device_name> is closed,Closing <device_name>,1
|
||||
blinds,open,See to it that the <device_name> are open,Raising <device_name>,1
|
||||
lock,lock,Ensure <device_name> is secure,Locking <device_name>,1
|
||||
light,toggle,Can you flip the <device_name>,Toggling <device_name>,1
|
||||
fan,increase_speed,Step up the speed of the <device_name>,Increasing speed of <device_name>,1
|
||||
garage_door,open,Make certain the <device_name> is open,Opening <device_name>,1
|
||||
blinds,close,See to it that the <device_name> are closed,Lowering <device_name>,1
|
||||
lock,unlock,Make sure <device_name> is unlocked,Unlocking <device_name>,1
|
||||
fan,decrease_speed,Slow down the <device_name>,Reducing speed of <device_name>,1
|
||||
light,turn_on,Confirm that the <device_name> is on,Activating <device_name>,1
|
||||
garage_door,stop,Stop the <device_name> right now,Stopping <device_name>,1
|
||||
light,turn_off,Confirm that the <device_name> is off,Deactivating <device_name>,1
|
||||
garage_door,toggle,Toggle the <device_name> position,Toggling <device_name>,1
|
||||
blinds,toggle,Switch the state of the <device_name>,Toggling <device_name>,1
|
||||
lock,lock,Lock down the <device_name>,Securing <device_name>,1
|
||||
fan,turn_on,Make certain the <device_name> is running,Starting <device_name>,1
|
||||
switch,turn_on,"Can you turn on <device_name>?","Turning on <device_name> now.",1
|
||||
switch,turn_off,"Please switch off <device_name>.","Switching off <device_name>.",1
|
||||
switch,toggle,"Could you toggle <device_name>?","Toggling <device_name>.",1
|
||||
switch,turn_on,"I need <device_name> on, please.","I'm turning on <device_name>.",1
|
||||
switch,turn_off,"Turn off <device_name>, will you?","Turning off <device_name>.",1
|
||||
switch,toggle,"Can <device_name> be toggled?","Yes, toggling <device_name>.",1
|
||||
switch,turn_on,"Activate <device_name>.","Activating <device_name>.",1
|
||||
switch,turn_off,"Deactivate <device_name>.","Deactivating <device_name>.",1
|
||||
switch,toggle,"Is it possible to toggle the <device_name>?","Yes, I can toggle <device_name>.",1
|
||||
switch,turn_on,"Let's have <device_name> on.","Sure, turning <device_name> on.",1
|
||||
switch,turn_off,"We don't need <device_name> on anymore.","Okay, turning <device_name> off.",1
|
||||
switch,toggle,"Toggle <device_name> for me.","Toggling <device_name> as requested.",1
|
||||
switch,turn_on,"Switch on <device_name>, please.","Switching on <device_name> right away.",1
|
||||
switch,turn_off,"I'd like <device_name> off now.","Okay, I'm turning off <device_name>.",1
|
||||
switch,toggle,"Can you change the state of <device_name>?","Changing the state of <device_name>.",1
|
||||
switch,turn_on,"Please turn on <device_name>.","Sure, lighting up <device_name> now.",1
|
||||
switch,turn_off,"Shut off <device_name>, it's bedtime.","Shutting off <device_name> for bedtime.",1
|
||||
switch,toggle,"A quick toggle of <device_name>, please.","Quickly toggling <device_name>.",1
|
||||
switch,turn_on,"<device_name> needs to be on.","Turning <device_name> on as needed.",1
|
||||
switch,turn_off,"Time to turn <device_name> off.","Turning off <device_name> now.",1
|
||||
media_player,volume_up,"Increase the volume on <device_name>.","Increasing <device_name>'s volume.",1
|
||||
media_player,volume_up,"Turn up <device_name> a bit.","Turning up <device_name> a bit.",1
|
||||
media_player,volume_up,"Louder on <device_name>, please.","Making <device_name> louder.",1
|
||||
media_player,volume_down,"Can you lower <device_name>'s volume?","Lowering <device_name>'s volume.",1
|
||||
media_player,volume_down,"Decrease the volume on <device_name>.","Decreasing <device_name>'s volume.",1
|
||||
media_player,volume_down,"Turn down <device_name>, please.","Turning down <device_name>.",1
|
||||
media_player,volume_mute,"Mute <device_name>, please.","Muting <device_name>.",1
|
||||
media_player,volume_mute,"Silence <device_name> for a moment.","Silencing <device_name>.",1
|
||||
media_player,volume_mute,"Can you mute <device_name>?","Muting <device_name> now.",1
|
||||
media_player,media_play,"Start playing on <device_name>.","Starting playback on <device_name>.",1
|
||||
media_player,media_play,"Can you play <device_name>?","Playing <device_name> now.",1
|
||||
media_player,media_play,"Play the media on <device_name>, please.","Playing media on <device_name>.",1
|
||||
media_player,media_pause,"Pause <device_name>.","Pausing <device_name>.",1
|
||||
media_player,media_pause,"Can you pause <device_name>?","Pausing <device_name> now.",1
|
||||
media_player,media_pause,"Hold the playback on <device_name>, please.","Holding playback on <device_name>.",1
|
||||
media_player,media_stop,"Stop <device_name> completely.","Stopping <device_name> completely.",1
|
||||
media_player,media_stop,"Can you stop playback on <device_name>?","Stopping playback on <device_name>.",1
|
||||
media_player,media_stop,"End the session on <device_name>, please.","Ending session on <device_name>.",1
|
||||
media_player,media_next_track,"Next track on <device_name>, please.","Skipping to next track on <device_name>.",1
|
||||
media_player,media_next_track,"Advance <device_name> to the next song.","Advancing to the next song on <device_name>.",1
|
||||
media_player,media_next_track,"Skip this track on <device_name>.","Skipping this track on <device_name>.",1
|
||||
media_player,media_previous_track,"Previous track on <device_name>, please.","Going back to previous track on <device_name>.",1
|
||||
media_player,media_previous_track,"Rewind to the previous song on <device_name>.","Rewinding to the previous song on <device_name>.",1
|
||||
media_player,media_previous_track,"Can we go back a track on <device_name>?","Going back a track on <device_name>.",1
|
||||
climate,set_temperature,"Set the temperature to <temp_f> degrees.","Setting temperature to <temp_f> degrees.",8
|
||||
climate,set_temperature,"Can you change the temperature to <temp_c> Celsius?","Changing temperature to <temp_c> Celsius.",8
|
||||
climate,set_temperature,"I'd like the room at <temp_f> degrees Fahrenheit, please.","Setting the room to <temp_f> degrees Fahrenheit.",8
|
||||
climate,set_temperature,"Please adjust the temperature to <temp_f> degrees.","Adjusting temperature to <temp_f> degrees Fahrenheit.",8
|
||||
climate,set_temperature,"I want the room cooler, set it to <temp_c> degrees.","Setting the room to <temp_c> degrees Celsius for cooler temperature.",8
|
||||
climate,set_temperature,"Make it warmer, set temperature at <temp_f> degrees.","Making it warmer, setting temperature to <temp_f> degrees.",8
|
||||
climate,set_temperature,"Can you lower the temperature to <temp_c>?","Lowering the temperature to <temp_c> Celsius.",8
|
||||
climate,set_temperature,"Raise the temperature to <temp_f> degrees, please.","Raising the temperature to <temp_f> degrees Fahrenheit.",8
|
||||
climate,set_humidity,"Increase the humidity to <temp_c>.","Increasing humidity to <temp_c>.",8
|
||||
climate,set_humidity,"Set the humidity level to <humidity> percent.","Setting humidity to <humidity> percent.",8
|
||||
climate,set_humidity,"Can you adjust the humidity to <humidity> percent?","Adjusting humidity to <humidity>%.",8
|
||||
climate,set_fan_mode,"Set the fan to high speed.","Setting the fan to high speed.",8
|
||||
climate,set_fan_mode,"Please put the fan on low.","Putting the fan on low.",8
|
||||
climate,set_fan_mode,"Change the fan setting to medium.","Changing the fan to medium setting.",8
|
||||
climate,set_hvac_mode,"Switch the system to cooling mode.","Switching to cooling mode.",8
|
||||
climate,set_hvac_mode,"Can we set the HVAC to heat?","Setting the HVAC to heat.",8
|
||||
climate,set_hvac_mode,"Change the HVAC to automatic.","Changing HVAC to automatic mode.",8
|
||||
light,turn_on,"Set the brightness of <device_name> to <brightness>%.","Setting the brightness of <device_name> to <brightness>%.",8
|
||||
light,turn_on,"Dim <device_name> to <brightness> percent brightness.","Dimming <device_name> to <brightness>% brightness.",8
|
||||
light,turn_on,"Brighten <device_name> to <brightness>.","Brightening <device_name> to <brightness>%.",8
|
||||
light,turn_on,"Adjust <device_name> brightness to <brightness>.","Adjusting <device_name> brightness to <brightness>.",8
|
||||
light,turn_on,"Increase <device_name>'s brightness to <brightness>.","Increasing <device_name>'s brightness to <brightness>.",8
|
||||
light,turn_on,"Lower the brightness of <device_name> to <brightness>.","Lowering the brightness of <device_name> to <brightness>.",8
|
||||
light,turn_on,"Can you set <device_name>'s brightness level to <brightness> percent?","Setting <device_name>'s brightness level to <brightness>%.",8
|
||||
light,turn_on,"I'd like <device_name> at <brightness> percent brightness, please.","Setting <device_name> to <brightness>% brightness.",8
|
||||
light,turn_on,"Can you make <device_name> <color>?","Turning <device_name> <color>.",8
|
||||
light,turn_on,"Change the color of <device_name> to <color>.","Changing the color of <device_name> to <color>.",8
|
||||
light,turn_on,"Change <device_name> to a <color> hue.","Changing <device_name> to a <color> hue.",8
|
||||
light,turn_on,"Set <device_name> to be <color>.","Setting <device_name> to be <color>.",8
|
||||
light,turn_on,"I want <device_name> to be <color>, please.","Setting <device_name> to be <color>.",8
|
||||
light,turn_on,"Can you make <device_name> shine in <color>?","Making <device_name> shine in <color>.",8
|
||||
light,turn_on,"Turn <device_name> to a <color> shade.","Turning <device_name> to a <color> shade.",8
|
||||
light,turn_on,"Turn <device_name> <color>.","Turning <device_name> <color>.",8
|
||||
light,turn_on,"I want <device_name> at a <color> setting.","Setting <device_name> to a <color>.",8
|
||||
light,turn_on,"Set <device_name> to a <color> color.","Setting <device_name> to a <color> color.",8
|
||||
light,turn_on,"Please set <device_name> to a <color> color.","Setting <device_name> to a <color> color.",8
|
||||
light,turn_on,"Make <device_name> glow <color>.","Making <device_name> glow <color>.",8
|
||||
light,turn_on,"Could you turn <device_name> to <color>?","Turning <device_name> to <color>.",8
|
||||
light,turn_on,"Please change <device_name> to <color>.","Changing <device_name> to <color>.",8
|
||||
light,turn_on,"Adjust <device_name> to <color> color.","Adjusting <device_name> to <color> color.",8
|
||||
light,turn_on,"Switch <device_name> color to <color>.","Switching <device_name> color to <color>.",8
|
||||
light,turn_on,"Can <device_name> be <color> now?","Setting <device_name> to be <color>.",8
|
||||
light,turn_on,"Let's have <device_name> in <color>.","Setting <device_name> in <color>.",8
|
||||
light,turn_on,"I'd like <device_name> to change to <color>.","Changing <device_name> to <color>.",8
|
||||
light,turn_on,"Can <device_name> display a <color> light?","Making <device_name> display a <color> light.",8
|
||||
light,turn_on,"Set <device_name> color to <color>, please.","Setting <device_name> color to <color>.",8
|
||||
device_type,service,english_phrase,multiplier
|
||||
blinds,close,Close the <device_name>,1
|
||||
blinds,close,Lower the <device_name>,1
|
||||
blinds,close,Shut the <device_name>,1
|
||||
blinds,open,Lift the <device_name> blinds,1
|
||||
blinds,open,Open the <device_name>,1
|
||||
blinds,open,Raise the <device_name>,1
|
||||
blinds,stop,Freeze the <device_name>,1
|
||||
blinds,stop,Halt the <device_name>,1
|
||||
blinds,stop,Stop the <device_name>,1
|
||||
blinds,toggle,Flip the <device_name> state,1
|
||||
blinds,toggle,Switch the <device_name> state,1
|
||||
blinds,toggle,Toggle the <device_name>,1
|
||||
blinds|fan,close|turn_off,Close <device_name1> and deactivate <device_name2>,1
|
||||
blinds|fan,open|increase_speed,Raise the <device_name1> and speed up the <device_name2>,1
|
||||
blinds|light,open|turn_on,Raise <device_name1> and activate <device_name2>,1
|
||||
fan,decrease_speed,Decrease the <device_name> speed,1
|
||||
fan,decrease_speed,Lower the <device_name> speed,1
|
||||
fan,decrease_speed,Slow down the <device_name>,1
|
||||
fan,increase_speed,Increase the <device_name> speed,1
|
||||
fan,increase_speed,Ramp up the <device_name> speed,1
|
||||
fan,increase_speed,Speed up the <device_name>,1
|
||||
fan,toggle,Flip the <device_name> on or off,1
|
||||
fan,toggle,Switch the <device_name> state,1
|
||||
fan,toggle,Toggle the <device_name>,1
|
||||
fan,turn_off,Deactivate the <device_name>,1
|
||||
fan,turn_off,Stop the <device_name> please,1
|
||||
fan,turn_off,Turn off the <device_name>,1
|
||||
fan,turn_on,Activate the <device_name>,1
|
||||
fan,turn_on,Please start the <device_name>,1
|
||||
fan,turn_on,Turn on the <device_name>,1
|
||||
fan|blinds,turn_off|open,Turn off <device_name1> and open <device_name2>,1
|
||||
fan|blinds|garage_door,increase_speed|open|open,Speed up <device_name1> open <device_name2> and <device_name3>,1
|
||||
fan|blinds|light,decrease_speed|open|turn_off,Slow down <device_name1> open <device_name2> and turn off <device_name3>,1
|
||||
fan|blinds|light,turn_off|close|turn_on,Turn off <device_name1> close <device_name2> and turn on <device_name3>,1
|
||||
fan|fan,increase_speed|decrease_speed,Speed up <device_name1> and slow down <device_name2>,1
|
||||
fan|fan,turn_on|turn_off,Turn on <device_name1> and turn off <device_name2>,1
|
||||
fan|garage_door,increase_speed|close,Increase speed of <device_name1> and close <device_name2>,1
|
||||
fan|garage_door|blinds,increase_speed|close|open,Speed up <device_name1> close <device_name2> and open <device_name3>,1
|
||||
fan|garage_door|blinds,turn_on|close|close,Turn on <device_name1> close <device_name2> and <device_name3>,1
|
||||
fan|garage_door|light,turn_off|close|turn_off,Turn off <device_name1> and <device_name3> and close <device_name2>,1
|
||||
fan|garage_door|lock,turn_off|close|lock,Turn off <device_name1> close <device_name2> and lock <device_name3>,1
|
||||
fan|garage_door|lock,turn_on|open|unlock,Turn on <device_name1> open <device_name2> and unlock <device_name3>,1
|
||||
fan|light,turn_on|turn_off,Activate <device_name1> and deactivate <device_name2>,1
|
||||
fan|light|lock,decrease_speed|toggle|lock,Slow down <device_name1> toggle <device_name2> and lock <device_name3>,1
|
||||
fan|lock,decrease_speed|unlock,Slow down the <device_name1> and unlock the <device_name2>,1
|
||||
garage_door,close,Close the <device_name>,1
|
||||
garage_door,close,Lower the <device_name>,1
|
||||
garage_door,close,Shut the <device_name>,1
|
||||
garage_door,open,Lift the <device_name>,1
|
||||
garage_door,open,Open the <device_name>,1
|
||||
garage_door,open,Raise the <device_name>,1
|
||||
garage_door,stop,Freeze the <device_name>,1
|
||||
garage_door,stop,Halt the <device_name>,1
|
||||
garage_door,stop,Stop the <device_name>,1
|
||||
garage_door,toggle,Flip the <device_name> state,1
|
||||
garage_door,toggle,Switch the <device_name> state,1
|
||||
garage_door,toggle,Toggle the <device_name>,1
|
||||
garage_door|blinds,open|open,Open the <device_name1> and lift the <device_name2>,1
|
||||
garage_door|fan,close|turn_off,Close <device_name1> and deactivate <device_name2>,1
|
||||
garage_door|light,open|turn_on,Open <device_name1> and activate <device_name2>,1
|
||||
garage_door|lock,open|unlock,Open <device_name1> and unlock <device_name2>,1
|
||||
light,toggle,Flip the <device_name> on or off,1
|
||||
light,toggle,Switch the <device_name> state,1
|
||||
light,toggle,Toggle the <device_name> state,1
|
||||
light,turn_off,Deactivate the <device_name>,1
|
||||
light,turn_off,Please switch off the <device_name>,1
|
||||
light,turn_off,Turn off the <device_name>,1
|
||||
light,turn_on,Activate the <device_name>,1
|
||||
light,turn_on,Can you turn on the <device_name>?,1
|
||||
light,turn_on,Please switch on the <device_name>,1
|
||||
light|blinds,turn_off|close,Turn off <device_name1> and close <device_name2>,1
|
||||
light|blinds|fan,turn_on|close|decrease_speed,Turn on <device_name1> close <device_name2> and slow down <device_name3>,1
|
||||
light|blinds|garage_door,turn_on|open|close,Turn on <device_name1> open <device_name2> and close <device_name3>,1
|
||||
light|blinds|lock,turn_off|close|lock,"Turn off the <device_name1> close the <device_name2> and lock the <device_name3>",1
|
||||
light|blinds|lock,turn_off|close|unlock,Turn off <device_name1> close <device_name2> and unlock <device_name3>,1
|
||||
light|fan,toggle|decrease_speed,Toggle <device_name1> and slow down <device_name2>,1
|
||||
light|fan,toggle|increase_speed,Toggle <device_name1> and speed up <device_name2>,1
|
||||
light|fan,turn_off|turn_on,Turn off the <device_name1> and turn on <device_name2>,1
|
||||
light|fan,turn_on|toggle,Switch on <device_name1> and toggle <device_name2>,1
|
||||
light|fan,turn_on|turn_off,Turn on the <device_name1> and turn off the <device_name2>,1
|
||||
light|fan,turn_on|turn_on,Turn on both the <device_name1> and <device_name2>,1
|
||||
light|fan,turn_on|turn_on,Turn on the <device_name1> and <device_name2>,1
|
||||
light|fan|blinds,toggle|increase_speed|open,Toggle <device_name1> speed up <device_name2> and open <device_name3>,1
|
||||
light|fan|blinds,turn_off|decrease_speed|close,Turn off <device_name1> slow down <device_name2> and close <device_name3>,1
|
||||
light|fan|blinds,turn_off|turn_off|close,Turn off <device_name1> and <device_name2> and close <device_name3>,1
|
||||
light|fan|garage_door,toggle|decrease_speed|open,Toggle <device_name1> slow down <device_name2> and open <device_name3>,1
|
||||
light|fan|garage_door,turn_off|turn_on|close,Turn off <device_name1> turn on <device_name2> and close <device_name3>,1
|
||||
light|fan|garage_door,turn_on|toggle|open,"Switch on the <device_name1> flip the <device_name2> and lift the <device_name3>",1
|
||||
light|fan|garage_door,turn_on|turn_on|open,Turn on <device_name1> and <device_name2> and open <device_name3>,1
|
||||
light|fan|lock,toggle|toggle|lock,Toggle both <device_name1> and <device_name2> and lock <device_name3>,1
|
||||
light|fan|lock,turn_off|turn_off|unlock,Turn off <device_name1> and <device_name2> and unlock <device_name3>,1
|
||||
light|fan|lock,turn_on|increase_speed|lock,Turn on <device_name1> speed up <device_name2> and lock <device_name3>,1
|
||||
light|fan|lock,turn_on|turn_on|unlock,Turn on both <device_name1> and <device_name2> and unlock <device_name3>,1
|
||||
light|garage_door,toggle|stop,Toggle the <device_name1> and stop the <device_name2>,1
|
||||
light|garage_door,turn_on|open,Switch on <device_name1> and open <device_name2>,1
|
||||
light|garage_door,turn_on|open,Switch on the <device_name1> and open the <device_name2>,1
|
||||
light|garage_door|lock,turn_on|open|lock,Turn on <device_name1> open <device_name2> and lock <device_name3>,1
|
||||
light|light,toggle|toggle,Toggle both <device_name1> and <device_name2>,1
|
||||
light|light,turn_on|turn_off,Turn on <device_name1> and turn off <device_name2>,1
|
||||
light|light|fan,toggle|toggle|decrease_speed,Toggle both <device_name1> and <device_name2> and slow down <device_name3>,1
|
||||
light|light|fan,toggle|turn_on|increase_speed,Toggle <device_name1> turn on <device_name2> and speed up <device_name3>,1
|
||||
light|light|fan,turn_on|turn_off|toggle,Turn on <device_name1> turn off <device_name2> and toggle <device_name3>,1
|
||||
light|lock,turn_on|lock,Turn on <device_name1> and lock <device_name2>,1
|
||||
lock,lock,Engage the <device_name> lock,1
|
||||
lock,lock,Lock the <device_name>,1
|
||||
lock,lock,Secure the <device_name>,1
|
||||
lock,unlock,Disengage the <device_name> lock,1
|
||||
lock,unlock,Unlock the <device_name>,1
|
||||
lock,unlock,Unsecure the <device_name>,1
|
||||
lock|blinds,lock|close,Lock the <device_name1> and lower the <device_name2>,1
|
||||
lock|garage_door,lock|close,Secure the <device_name1> and shut the <device_name2>,1
|
||||
light,turn_on,Make sure the <device_name> is on,1
|
||||
fan,turn_on,Make sure the <device_name> is on,1
|
||||
lock|lock|garage_door,lock|lock|close,Make sure <device_name1> and <device_name2> are locked and the <device_name3> is closed,1
|
||||
light,turn_off,Ensure the <device_name> is off,1
|
||||
fan,turn_off,Ensure the <device_name> is off,1
|
||||
garage_door,close,Make certain the <device_name> is closed,1
|
||||
blinds,open,See to it that the <device_name> are open,1
|
||||
lock,lock,Ensure <device_name> is secure,1
|
||||
light,toggle,Can you flip the <device_name>,1
|
||||
fan,increase_speed,Step up the speed of the <device_name>,1
|
||||
garage_door,open,Make certain the <device_name> is open,1
|
||||
blinds,close,See to it that the <device_name> are closed,1
|
||||
lock,unlock,Make sure <device_name> is unlocked,1
|
||||
fan,decrease_speed,Slow down the <device_name>,1
|
||||
light,turn_on,Confirm that the <device_name> is on,1
|
||||
garage_door,stop,Stop the <device_name> right now,1
|
||||
light,turn_off,Confirm that the <device_name> is off,1
|
||||
garage_door,toggle,Toggle the <device_name> position,1
|
||||
blinds,toggle,Switch the state of the <device_name>,1
|
||||
lock,lock,Lock down the <device_name>,1
|
||||
fan,turn_on,Make certain the <device_name> is running,1
|
||||
switch,turn_on,"Can you turn on <device_name>?",1
|
||||
switch,turn_off,"Please switch off <device_name>.",1
|
||||
switch,toggle,"Could you toggle <device_name>?",1
|
||||
switch,turn_on,"I need <device_name> on,1
|
||||
switch,turn_off,"Turn off <device_name>,1
|
||||
switch,toggle,"Can <device_name> be toggled?",1
|
||||
switch,turn_on,"Activate <device_name>.",1
|
||||
switch,turn_off,"Deactivate <device_name>.",1
|
||||
switch,toggle,"Is it possible to toggle the <device_name>?",1
|
||||
switch,turn_on,"Let's have <device_name> on.",1
|
||||
switch,turn_off,"We don't need <device_name> on anymore.",1
|
||||
switch,toggle,"Toggle <device_name> for me.",1
|
||||
switch,turn_on,"Switch on <device_name>,1
|
||||
switch,turn_off,"I'd like <device_name> off now.",1
|
||||
switch,toggle,"Can you change the state of <device_name>?",1
|
||||
switch,turn_on,"Please turn on <device_name>.",1
|
||||
switch,turn_off,"Shut off <device_name>,1
|
||||
switch,toggle,"A quick toggle of <device_name>,1
|
||||
switch,turn_on,"<device_name> needs to be on.",1
|
||||
switch,turn_off,"Time to turn <device_name> off.",1
|
||||
media_player,volume_up,"Increase the volume on <device_name>.",1
|
||||
media_player,volume_up,"Turn up <device_name> a bit.",1
|
||||
media_player,volume_up,"Louder on <device_name>,1
|
||||
media_player,volume_down,"Can you lower <device_name>'s volume?",1
|
||||
media_player,volume_down,"Decrease the volume on <device_name>.",1
|
||||
media_player,volume_down,"Turn down <device_name>,1
|
||||
media_player,volume_mute,"Mute <device_name>,1
|
||||
media_player,volume_mute,"Silence <device_name> for a moment.",1
|
||||
media_player,volume_mute,"Can you mute <device_name>?",1
|
||||
media_player,media_play,"Start playing on <device_name>.",1
|
||||
media_player,media_play,"Can you play <device_name>?",1
|
||||
media_player,media_play,"Play the media on <device_name>,1
|
||||
media_player,media_pause,"Pause <device_name>.",1
|
||||
media_player,media_pause,"Can you pause <device_name>?",1
|
||||
media_player,media_pause,"Hold the playback on <device_name>,1
|
||||
media_player,media_stop,"Stop <device_name> completely.",1
|
||||
media_player,media_stop,"Can you stop playback on <device_name>?",1
|
||||
media_player,media_stop,"End the session on <device_name>,1
|
||||
media_player,media_next_track,"Next track on <device_name>,1
|
||||
media_player,media_next_track,"Advance <device_name> to the next song.",1
|
||||
media_player,media_next_track,"Skip this track on <device_name>.",1
|
||||
media_player,media_previous_track,"Previous track on <device_name>,1
|
||||
media_player,media_previous_track,"Rewind to the previous song on <device_name>.",1
|
||||
media_player,media_previous_track,"Can we go back a track on <device_name>?",1
|
||||
climate,set_temperature,"Set the temperature to <temp_f> degrees.",8
|
||||
climate,set_temperature,"Can you change the temperature to <temp_c> Celsius?",8
|
||||
climate,set_temperature,"I'd like the room at <temp_f> degrees Fahrenheit,8
|
||||
climate,set_temperature,"Please adjust the temperature to <temp_f> degrees.",8
|
||||
climate,set_temperature,"Can you lower the temperature to <temp_c>?",8
|
||||
climate,set_temperature,"Raise the temperature to <temp_f> degrees",8
|
||||
climate,set_humidity,"Increase the humidity to <humidity>.",8
|
||||
climate,set_humidity,"Set the humidity level to <humidity> percent.",8
|
||||
climate,set_humidity,"Can you adjust the humidity to <humidity> percent?",8
|
||||
climate,set_fan_mode,"Set the climate fan to <fan_mode> speed.",8
|
||||
climate,set_fan_mode,"Please put the climate fan on <fan_mode>.",8
|
||||
climate,set_fan_mode,"Change the air conditioning fan to <fan_mode>.",8
|
||||
climate,set_hvac_mode,"Switch the system to <hvac_mode> mode.",8
|
||||
climate,set_hvac_mode,"Can we set the HVAC to <hvac_mode>?",8
|
||||
climate,set_hvac_mode,"Change the HVAC to <hvac_mode>.",8
|
||||
light,turn_on,"Set the brightness of <device_name> to <brightness>%.",8
|
||||
light,turn_on,"Dim <device_name> to <brightness> percent brightness.",8
|
||||
light,turn_on,"Brighten <device_name> to <brightness>.",8
|
||||
light,turn_on,"Adjust <device_name> brightness to <brightness>.",8
|
||||
light,turn_on,"Increase <device_name>'s brightness to <brightness>.",8
|
||||
light,turn_on,"Lower the brightness of <device_name> to <brightness>.",8
|
||||
light,turn_on,"Can you set <device_name>'s brightness level to <brightness> percent?",8
|
||||
light,turn_on,"I'd like <device_name> at <brightness> percent brightness",8
|
||||
light,turn_on,"Can you make <device_name> <color>?",8
|
||||
light,turn_on,"Change the color of <device_name> to <color>.",8
|
||||
light,turn_on,"Change <device_name> to a <color> hue.",8
|
||||
light,turn_on,"Set <device_name> to be <color>.",8
|
||||
light,turn_on,"I want <device_name> to be <color>"",8
|
||||
light,turn_on,"Can you make <device_name> shine in <color>?",8
|
||||
light,turn_on,"Turn <device_name> to a <color> shade.",8
|
||||
light,turn_on,"Turn <device_name> <color>.",8
|
||||
light,turn_on,"I want <device_name> at a <color> setting.",8
|
||||
light,turn_on,"Set <device_name> to a <color> color.",8
|
||||
light,turn_on,"Please set <device_name> to a <color> color.",8
|
||||
light,turn_on,"Make <device_name> glow <color>.",8
|
||||
light,turn_on,"Could you turn <device_name> to <color>?",8
|
||||
light,turn_on,"Please change <device_name> to <color>.",8
|
||||
light,turn_on,"Adjust <device_name> to <color> color.",8
|
||||
light,turn_on,"Switch <device_name> color to <color>.",8
|
||||
light,turn_on,"Can <device_name> be <color> now?",8
|
||||
light,turn_on,"Let's have <device_name> in <color>.",8
|
||||
light,turn_on,"I'd like <device_name> to change to <color>.",8
|
||||
light,turn_on,"Can <device_name> display a <color> light?",8
|
||||
light,turn_on,"Set <device_name> color to <color>",8
|
||||
vacuum,start,"Start cleaning with <device_name>.",2
|
||||
vacuum,start,"Begin vacuuming with <device_name>.",2
|
||||
vacuum,start,"Activate <device_name> to clean.",2
|
||||
vacuum,start,"Could you please start <device_name>?",2
|
||||
vacuum,start,"Hey, get <device_name> going, would you?",2
|
||||
vacuum,stop,"Stop <device_name>'s operation.",2
|
||||
vacuum,stop,"Please halt <device_name>'s current task",2
|
||||
vacuum,stop,"Please stop <device_name>",2
|
||||
vacuum,stop,"Can you make <device_name> stop?",2
|
||||
vacuum,stop,"Stop <device_name> from cleaning.",2
|
||||
vacuum,pause,"Freeze <device_name>'s current task.",2
|
||||
vacuum,pause,"Would you mind pausing <device_name> for a moment?",2
|
||||
vacuum,pause,"Hey, can we put <device_name> on pause, please?",2
|
||||
vacuum,pause,"Pause the <device_name> cleaning.",2
|
||||
vacuum,pause,"Pause <device_name>",2
|
||||
vacuum,return_to_base,"Send <device_name> back to its base.",2
|
||||
vacuum,return_to_base,"Please send <device_name> back to its base, if you would.",2
|
||||
vacuum,return_to_base,"Time to head home, <device_name>. Can you call it back?",2
|
||||
vacuum,return_to_base,"Direct <device_name> to dock.",2
|
||||
vacuum,return_to_base,"Return <device_name> to its charging station.",2
|
||||
todo,add_item,"Please add <todo> to my <device_name>.",8
|
||||
todo,add_item,"Can you add <todo> to the <device_name>?",8
|
||||
todo,add_item,"I need <todo> added to my <device_name>.",8
|
||||
todo,add_item,"Go ahead and add <todo> to the <device_name>.",8
|
||||
todo,add_item,"Could you please input <todo> into my <device_name>?",8
|
||||
todo,add_item,"Kindly insert <todo> onto the <device_name>.",8
|
||||
todo,add_item,"May I request that <todo> be included in the <device_name>?",8
|
||||
todo,add_item,"It would be much appreciated if <todo> could be put on the <device_name>.",8
|
||||
todo,add_item,"Shall we append <todo> to my <device_name>?",8
|
||||
todo,add_item,""Let's add <todo> to the <device_name>",8
|
||||
todo,add_item,"Could you place <todo> onto my <device_name>?",8
|
||||
todo,add_item,"Will you be so kind as to incorporate <todo> into the <device_name>?",8
|
||||
todo,add_item,"Is it possible to include <todo> in the <device_name>?",8
|
||||
todo,add_item,"Could we add <todo> to my <device_name>?",8
|
||||
timer,start,"Please set my <device_name> for <duration>.",8
|
||||
timer,start,"Turn on the <device_name> timer for <duration>.",8
|
||||
timer,start,"Set the <device_name> for <duration>.",8
|
||||
timer,start,"Start the <device_name> timer for <duration>.",8
|
||||
timer,start,"Set a <duration> <device_name>.",8
|
||||
timer,cancel,"Cancel the <device_name> timer.",8
|
||||
timer,cancel,"Please stop my <device_name>.",8
|
||||
timer,cancel,"Turn off the <device_name>.",8
|
||||
timer,cancel,"Please shut off the <device_name> timer.",8
|
||||
timer,cancel,"The <device_name> is no longer needed.",8
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 138 and column 17.
|
80
data/piles/pile_of_todo_items.txt
Normal file
80
data/piles/pile_of_todo_items.txt
Normal file
@@ -0,0 +1,80 @@
|
||||
Finalize the monthly budget report
|
||||
Schedule annual medical check-up
|
||||
Organize the garage
|
||||
Update resume and LinkedIn profile
|
||||
Plan the family vacation
|
||||
Research new investment opportunities
|
||||
Start a weekly meal prep routine
|
||||
Take the car for servicing
|
||||
Sign up for a language course
|
||||
Read a book recommended by a friend
|
||||
Clean out the email inbox
|
||||
Plant a vegetable garden
|
||||
Call parents
|
||||
Backup digital photos and documents
|
||||
Donate old clothes and books
|
||||
Create a new workout plan
|
||||
Write a thank-you note to a mentor
|
||||
Purchase birthday gifts for friends
|
||||
Learn a new recipe
|
||||
Set up a home office space
|
||||
Pay utility bills
|
||||
Buy groceries
|
||||
Do the laundry
|
||||
Clean the bathroom
|
||||
Mow the lawn
|
||||
Wash the dishes
|
||||
Take out the trash
|
||||
Vacuum the living room
|
||||
Change bed linens
|
||||
Iron clothes
|
||||
Schedule dentist appointment
|
||||
Replace air filters in the home
|
||||
Return library books
|
||||
Fill up car with gas
|
||||
Pick up dry cleaning
|
||||
Check smoke detector batteries
|
||||
Water indoor plants
|
||||
Restock household supplies
|
||||
Renew vehicle registration
|
||||
Drop off donations at a local charity
|
||||
Update address book
|
||||
Collect mail from the post office
|
||||
Prepare kids' school lunches
|
||||
Organize paperwork and bills
|
||||
Clean out the refrigerator
|
||||
Declutter the closet
|
||||
Schedule pet's vet visit
|
||||
Clean windows
|
||||
Sweep the porch and walkway
|
||||
Pay credit card bill
|
||||
Reorganize the pantry
|
||||
Prepare a household inventory list
|
||||
Buy a birthday card for a friend
|
||||
Sew buttons on a shirt
|
||||
Dust furniture
|
||||
Check and refill prescription medications
|
||||
Call to cancel an unused subscription
|
||||
Oil squeaky door hinges
|
||||
Replace worn-out shoes
|
||||
Shop for a new phone case
|
||||
Learn to juggle three balls
|
||||
Write a letter to a future self
|
||||
Experiment with making homemade pasta
|
||||
Start a blog about a hobby
|
||||
Try a new hairstyle
|
||||
Build a model airplane
|
||||
Watch a documentary about space
|
||||
Create a playlist for working out
|
||||
Volunteer for a local community event
|
||||
Research family genealogy
|
||||
Practice meditation for 10 minutes daily
|
||||
Explore a nearby town you've never visited
|
||||
Organize a board game night
|
||||
Try painting with watercolors
|
||||
Learn to change a tire
|
||||
Bake bread from scratch
|
||||
Start a small balcony herb garden
|
||||
Write a poem or short story
|
||||
Go on a photography walk
|
||||
Learn the basics of a new language
|
||||
28
data/test_prompts/chatml/christmas.txt
Normal file
28
data/test_prompts/chatml/christmas.txt
Normal file
@@ -0,0 +1,28 @@
|
||||
<|im_start|>system
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Respond with a quick sentence to the user followed by a newline and then return one json object for each service call that will fuffill the user's request. The JSON should have the entity_id in the "target_device" field, and the service to be called in the "service_name" field. Other optional arguments are listed in the service list below.
|
||||
Services: cover.close_cover(), cover.open_cover(), cover.stop_cover(), cover.toggle(), fan.decrease_speed(), fan.increase_speed(), fan.toggle(), fan.turn_off(), fan.turn_on(), cover.close_cover(), cover.open_cover(), cover.stop_cover(), cover.toggle(), light.toggle(), light.turn_off(), light.turn_on()
|
||||
Devices:
|
||||
light.back_lounge_warm 'Back Lounge Warm Light' = off
|
||||
fan.indoor_gym 'Indoor Gym Fan' = on
|
||||
fan.dyson_pure 'Dyson Pure Fan' = on
|
||||
fan.nursery 'Nursery Fan' = off
|
||||
light.office_1 'Office Light' = on
|
||||
light.upstairs_lounge_zigbee 'Upstairs Lounge Light' = off
|
||||
light.front_mancave_ge 'Front Man Cave Light' = on
|
||||
light.front_lounge_ge 'Front Lounge Light' = off
|
||||
cover.side_2 'Side garage door' = closed
|
||||
fan.study_2 'Study fan' = off
|
||||
light.christmas_tree_white 'Tree lights (white)' = off
|
||||
light.christmas_tree_colors 'Tree lights (color)' = off
|
||||
cover.hallway_1 'First hallway blinds' = open
|
||||
cover.nursery 'Nursery Blinds' = open
|
||||
light.upstairs_entryway_zwave 'Upstairs Entryway Light' = off
|
||||
cover.shop 'Workshop Garage Door' = closed
|
||||
light.downstairs_entryway_mqtt 'Downstairs Entryway Light' = off
|
||||
cover.somfy_living 'Living Room Blinds' = closed
|
||||
light.kitchen_winecellar_warm 'Kitchen Wine Cellar Warm Light' = off
|
||||
light.driveway 'driveway' = off
|
||||
light.shed 'Shed Light' = on<|im_end|>
|
||||
<|im_start|>user
|
||||
make sure both the lights on the christmas tree are on<|im_end|>
|
||||
<|im_start|>assistant
|
||||
24
data/test_prompts/chatml/ha_demo.txt
Normal file
24
data/test_prompts/chatml/ha_demo.txt
Normal file
@@ -0,0 +1,24 @@
|
||||
<|im_start|>system
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed or answer the following question with the information provided only.
|
||||
Services: cover.open_cover(), cover.close_cover(), cover.set_cover_position(), cover.stop_cover(), cover.toggle(), cover.open_cover_tilt(), cover.close_cover_tilt(), cover.stop_cover_tilt(), cover.set_cover_tilt_position(), cover.toggle_cover_tilt(), media_player.turn_on(), media_player.turn_off(), media_player.toggle(), media_player.volume_up(), media_player.volume_down(), media_player.media_play_pause(), media_player.media_play(), media_player.media_pause(), media_player.media_stop(), media_player.media_next_track(), media_player.media_previous_track(), media_player.clear_playlist(), media_player.volume_set(volume_level), media_player.volume_mute(), media_player.media_seek(), media_player.join(), media_player.select_source(), media_player.select_sound_mode(), media_player.play_media(), media_player.shuffle_set(), media_player.unjoin(), media_player.repeat_set(), climate.turn_on(), climate.turn_off(), climate.set_hvac_mode(), climate.set_preset_mode(), climate.set_aux_heat(), climate.set_temperature(temperature), climate.set_humidity(humidity), climate.set_fan_mode(fan_mode), climate.set_swing_mode(), lock.unlock(), lock.lock(), lock.open(), fan.turn_on(), fan.turn_off(), fan.toggle(), fan.increase_speed(), fan.decrease_speed(), fan.oscillate(), fan.set_direction(), fan.set_percentage(), fan.set_preset_mode(), light.turn_on(rgb_color,brightness), light.turn_off(), light.toggle(rgb_color,brightness)
|
||||
Devices:
|
||||
cover.kitchen_window 'Kitchen Window' = closed
|
||||
cover.hall_window 'Hall Window' = open
|
||||
cover.living_room_window 'Living Room Window' = open
|
||||
cover.garage_door 'Garage Door' = closed
|
||||
fan.living_room_fan 'Living Room Fan' = off
|
||||
fan.ceiling_fan 'Ceiling Fan' = off
|
||||
fan.percentage_full_fan 'Percentage Full Fan' = off
|
||||
fan.percentage_limited_fan 'Percentage Limited Fan' = off
|
||||
lock.front_door 'Front Door' = locked
|
||||
lock.kitchen_door 'Kitchen Door' = unlocked
|
||||
lock.openable_lock 'Openable Lock' = locked
|
||||
light.bed_light 'Bed Light' = off
|
||||
light.ceiling_lights 'Ceiling Lights' = on;20%
|
||||
light.kitchen_lights 'Kitchen Lights' = on
|
||||
light.office_rgbw_lights 'Office RGBW Lights' = on
|
||||
light.living_room_rgbww_lights 'Living Room RGBWW Lights' = on
|
||||
light.entrance_color_white_lights 'Entrance Color + White Lights' = on<|im_end|>
|
||||
<|im_start|>user
|
||||
turn off the kitchen lights<|im_end|>
|
||||
<|im_start|>assistant
|
||||
22
data/test_prompts/chatml/ha_demo2.txt
Normal file
22
data/test_prompts/chatml/ha_demo2.txt
Normal file
@@ -0,0 +1,22 @@
|
||||
<|im_start|>system
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task ask instructed with the information provided only.
|
||||
Services: cover.open_cover(), cover.close_cover(), cover.set_cover_position(), cover.stop_cover(), cover.toggle(), cover.open_cover_tilt(), cover.close_cover_tilt(), cover.stop_cover_tilt(), cover.set_cover_tilt_position(), cover.toggle_cover_tilt(), media_player.turn_on(), media_player.turn_off(), media_player.toggle(), media_player.volume_up(), media_player.volume_down(), media_player.media_play_pause(), media_player.media_play(), media_player.media_pause(), media_player.media_stop(), media_player.media_next_track(), media_player.media_previous_track(), media_player.clear_playlist(), media_player.volume_set(volume_level), media_player.volume_mute(), media_player.media_seek(), media_player.join(), media_player.select_source(), media_player.select_sound_mode(), media_player.play_media(), media_player.shuffle_set(), media_player.unjoin(), media_player.repeat_set(), climate.turn_on(), climate.turn_off(), climate.set_hvac_mode(), climate.set_preset_mode(), climate.set_aux_heat(), climate.set_temperature(temperature), climate.set_humidity(humidity), climate.set_fan_mode(fan_mode), climate.set_swing_mode(), lock.unlock(), lock.lock(), lock.open(), fan.turn_on(), fan.turn_off(), fan.toggle(), fan.increase_speed(), fan.decrease_speed(), fan.oscillate(), fan.set_direction(), fan.set_percentage(), fan.set_preset_mode(), light.turn_on(rgb_color,brightness), light.turn_off(), light.toggle(rgb_color,brightness)
|
||||
Devices:
|
||||
media_player.bedroom 'Bedroom' = playing;Epic sax guy 10 hours;vol=100
|
||||
media_player.kitchen 'Kitchen' = playing;I Wanna Be A Hippy (Flamman & Abraxas Radio Mix);vol=100
|
||||
climate.ecobee 'Ecobee' = heat_cool;Auto Low
|
||||
cover.kitchen_window 'Kitchen Window' = closed
|
||||
cover.hall_window 'Hall Window' = open
|
||||
cover.garage_door 'Garage Door' = closed
|
||||
lock.front_door 'Front Door' = locked
|
||||
lock.kitchen_door 'Kitchen Door' = unlocked
|
||||
fan.living_room_fan 'Living Room Fan' = off
|
||||
fan.ceiling_fan 'Ceiling Fan' = off
|
||||
light.bed_light 'Bed Light' = off
|
||||
light.ceiling_lights 'Ceiling Lights' = on;sandybrown (255, 164, 81);70%
|
||||
light.kitchen_lights 'Kitchen Lights' = off
|
||||
light.office_rgbw_lights 'Office RGBW Lights' = on;salmon (255, 128, 128);70%
|
||||
light.living_room_rgbww_lights 'Living Room RGBWW Lights' = on;salmon (255, 127, 125);70%<|im_end|>
|
||||
<|im_start|>user
|
||||
set the office lights green<|im_end|>
|
||||
<|im_start|>assistant
|
||||
15
data/test_prompts/chatml/rgb_lights.txt
Normal file
15
data/test_prompts/chatml/rgb_lights.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
<|system|>
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed or answer the following question with the information provided only.
|
||||
Services: cover.open_cover(), cover.close_cover(), cover.set_cover_position(), cover.stop_cover(), cover.toggle(), cover.open_cover_tilt(), cover.close_cover_tilt(), cover.stop_cover_tilt(), cover.set_cover_tilt_position(), cover.toggle_cover_tilt(), media_player.turn_on(), media_player.turn_off(), media_player.toggle(), media_player.volume_up(), media_player.volume_down(), media_player.media_play_pause(), media_player.media_play(), media_player.media_pause(), media_player.media_stop(), media_player.media_next_track(), media_player.media_previous_track(), media_player.clear_playlist(), media_player.volume_set(volume_level), media_player.volume_mute(), media_player.media_seek(), media_player.join(), media_player.select_source(), media_player.select_sound_mode(), media_player.play_media(), media_player.shuffle_set(), media_player.unjoin(), media_player.repeat_set(), climate.turn_on(), climate.turn_off(), climate.set_hvac_mode(), climate.set_preset_mode(), climate.set_aux_heat(), climate.set_temperature(temperature), climate.set_humidity(humidity), climate.set_fan_mode(fan_mode), climate.set_swing_mode(), lock.unlock(), lock.lock(), lock.open(), fan.turn_on(), fan.turn_off(), fan.toggle(), fan.increase_speed(), fan.decrease_speed(), fan.oscillate(), fan.set_direction(), fan.set_percentage(), fan.set_preset_mode(), light.turn_on(rgb_color,brightness), light.turn_off(), light.toggle(rgb_color,brightness)
|
||||
Devices:
|
||||
media_player.sony_ps_lx310bt 'Sony Bluetooth Turntable' = off
|
||||
light.back_family_room_warm 'Back Family Room Warm Light' = on;darkcyan (3, 148, 139)
|
||||
switch.sauna_lights 'Sauna Lights Switch' = off
|
||||
switch.garage_workshop_lights 'Garage Workshop Lights Switch' = on
|
||||
media_player.lounge_hi_fi_system 'Lounge Hi-Fi Audio' = off
|
||||
light.upstairs_washroom_zwave 'Upstairs Washroom Light' = on
|
||||
light.kitchen_pantry_cool 'Kitchen Pantry Cool Light' = on;28%
|
||||
light.kitchen_windowseat_warm 'Kitchen Window Seat Warm Light' = on;59%<|endoftext|>
|
||||
<|user|>
|
||||
set back family room warm light to be blue.<|endoftext|>
|
||||
<|assistant|>
|
||||
@@ -22,8 +22,7 @@ light.downstairs_entryway_mqtt 'Downstairs Entryway Light' = off
|
||||
cover.somfy_living 'Living Room Blinds' = closed
|
||||
light.kitchen_winecellar_warm 'Kitchen Wine Cellar Warm Light' = off
|
||||
light.driveway 'driveway' = off
|
||||
light.shed 'Shed Light' = on
|
||||
<|im_end|>
|
||||
light.shed 'Shed Light' = on<|im_end|>
|
||||
<|im_start|>user
|
||||
write a sonnet about the lights in my house. reference specific light names<|im_end|>
|
||||
<|im_start|>assistant
|
||||
@@ -1,15 +0,0 @@
|
||||
<|im_start|>system
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed or answer the following question with the information provided only.
|
||||
Services: light.toggle, light.turn_off, light.turn_on, media_player.media_next_track, media_player.media_pause, media_player.media_play, media_player.media_play_pause, media_player.media_previous_track, media_player.media_stop, media_player.toggle, media_player.turn_off, media_player.turn_on, media_player.volume_down, media_player.volume_mute, media_player.volume_up, switch.toggle, switch.turn_off, switch.turn_on
|
||||
Devices:
|
||||
media_player.sony_ps_lx310bt 'Sony Bluetooth Turntable' = off
|
||||
light.back_family_room_warm 'Back Family Room Warm Light' = on;darkcyan (3, 148, 139)
|
||||
switch.sauna_lights 'Sauna Lights Switch' = off
|
||||
switch.garage_workshop_lights 'Garage Workshop Lights Switch' = on
|
||||
media_player.lounge_hi_fi_system 'Lounge Hi-Fi Audio' = off
|
||||
light.upstairs_washroom_zwave 'Upstairs Washroom Light' = on
|
||||
light.kitchen_pantry_cool 'Kitchen Pantry Cool Light' = on;28%
|
||||
light.kitchen_windowseat_warm 'Kitchen Window Seat Warm Light' = on;59%<|im_end|>
|
||||
<|im_start|>user
|
||||
set back family room warm light to be blue.<|im_end|>
|
||||
<|im_start|>assistant
|
||||
16
data/test_prompts/zephyr/brightness.txt
Normal file
16
data/test_prompts/zephyr/brightness.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
<|system|>
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed or answer the following question with the information provided only.
|
||||
Services: cover.close_cover(), cover.open_cover(), cover.stop_cover(), cover.toggle(), climate.set_fan_mode(fan_mode), climate.set_humidity(humidity), climate.set_hvac_mode(), climate.set_preset_mode(), climate.set_temperature(temperature), climate.toggle(), climate.turn_off(), climate.turn_on(), fan.decrease_speed(), fan.increase_speed(), fan.toggle(), fan.turn_off(), fan.turn_on(), light.toggle(), light.turn_off(), light.turn_on(brightness,rgb_color), lock.lock(), lock.unlock(), media_player.media_next_track(), media_player.media_pause(), media_player.media_play(), media_player.media_play_pause(), media_player.media_previous_track(), media_player.media_stop(), media_player.toggle(), media_player.turn_off(), media_player.turn_on(), media_player.volume_down(), media_player.volume_mute(), media_player.volume_up(), switch.toggle(), switch.turn_off(), switch.turn_on()
|
||||
Devices:
|
||||
climate.kono_thermostat 'Kono Smart Thermostat' = cool;On Low;63F
|
||||
switch.pool_area_lighting 'Pool area lighting control' = off
|
||||
media_player.echo_dot 'Kitchen Echo Dot' = off
|
||||
cover.hallway_2 'Second hallway blinds' = open
|
||||
fan.garage 'Garage Fan' = on
|
||||
media_player.nursery 'Nursery Media Player' = idle;vol=0.62
|
||||
light.kitchen_rack_cool 'Kitchen Rack Cool Light' = off
|
||||
lock.back_door 'Backyard entry lock' = locked
|
||||
light.front_corridor_homekit 'Front Corridor Light' = on;80%<|endoftext|>
|
||||
<|user|>
|
||||
set the front corridor light brightness to 20 percent<|endoftext|>
|
||||
<|assistant|>
|
||||
28
data/test_prompts/zephyr/christmas.txt
Normal file
28
data/test_prompts/zephyr/christmas.txt
Normal file
@@ -0,0 +1,28 @@
|
||||
<|system|>
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed or answer the following question with the information provided only.
|
||||
Services: cover.close_cover(), cover.open_cover(), cover.stop_cover(), cover.toggle(), fan.decrease_speed(), fan.increase_speed(), fan.toggle(), fan.turn_off(), fan.turn_on(), cover.close_cover(), cover.open_cover(), cover.stop_cover(), cover.toggle(), light.toggle(), light.turn_off(), light.turn_on()
|
||||
Devices:
|
||||
light.back_lounge_warm 'Back Lounge Warm Light' = off
|
||||
fan.indoor_gym 'Indoor Gym Fan' = on
|
||||
fan.dyson_pure 'Dyson Pure Fan' = on
|
||||
fan.nursery 'Nursery Fan' = off
|
||||
light.office_1 'Office Light' = on
|
||||
light.upstairs_lounge_zigbee 'Upstairs Lounge Light' = off
|
||||
light.front_mancave_ge 'Front Man Cave Light' = on
|
||||
light.front_lounge_ge 'Front Lounge Light' = off
|
||||
cover.side_2 'Side garage door' = closed
|
||||
fan.study_2 'Study fan' = off
|
||||
light.christmas_tree_white 'Tree lights (white)' = off
|
||||
light.christmas_tree_colors 'Tree lights (color)' = off
|
||||
cover.hallway_1 'First hallway blinds' = open
|
||||
cover.nursery 'Nursery Blinds' = open
|
||||
light.upstairs_entryway_zwave 'Upstairs Entryway Light' = off
|
||||
cover.shop 'Workshop Garage Door' = closed
|
||||
light.downstairs_entryway_mqtt 'Downstairs Entryway Light' = off
|
||||
cover.somfy_living 'Living Room Blinds' = closed
|
||||
light.kitchen_winecellar_warm 'Kitchen Wine Cellar Warm Light' = off
|
||||
light.driveway 'driveway' = off
|
||||
light.shed 'Shed Light' = on<|endoftext|>
|
||||
<|user|>
|
||||
make sure both the lights on the christmas tree are on<|endoftext|>
|
||||
<|assistant|>
|
||||
18
data/test_prompts/zephyr/climate.txt
Normal file
18
data/test_prompts/zephyr/climate.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
<|system|>
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed or answer the following question with the information provided only.
|
||||
Services: climate.set_fan_mode, climate.set_humidity, climate.set_hvac_mode, climate.set_preset_mode, climate.set_temperature, climate.toggle, climate.turn_off, climate.turn_on, light.toggle, light.turn_off, light.turn_on, media_player.media_next_track, media_player.media_pause, media_player.media_play, media_player.media_play_pause, media_player.media_previous_track, media_player.media_stop, media_player.toggle, media_player.turn_off, media_player.turn_on, media_player.volume_down, media_player.volume_mute, media_player.volume_up
|
||||
Devices:
|
||||
media_player.kitchen_radio 'Kitchen Radio Player' = off
|
||||
climate.zen_wifi_thermostat 'Zen Thermostat WiFi Edition' = auto;Auto Low;60F
|
||||
light.kitchen_cupboard_cool 'Kitchen Cupboard Cool Light' = off
|
||||
light.christmas_tree_white 'Tree lights (white)' = off
|
||||
light.christmas_tree_colors 'Tree lights (color)' = off
|
||||
cover.hallway_1 'First hallway blinds' = open
|
||||
cover.nursery 'Nursery Blinds' = open
|
||||
light.upstairs_entryway_zwave 'Upstairs Entryway Light' = off
|
||||
cover.shop 'Workshop Garage Door' = closed
|
||||
light.downstairs_entryway_mqtt 'Downstairs Entryway Light' = off
|
||||
cover.somfy_living 'Living Room Blinds' = closed<|endoftext|>
|
||||
<|user|>
|
||||
set the temperature to 70<|endoftext|>
|
||||
<|assistant|>
|
||||
24
data/test_prompts/zephyr/ha_demo.txt
Normal file
24
data/test_prompts/zephyr/ha_demo.txt
Normal file
@@ -0,0 +1,24 @@
|
||||
<|system|>
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed or answer the following question with the information provided only.
|
||||
Services: cover.open_cover(), cover.close_cover(), cover.set_cover_position(), cover.stop_cover(), cover.toggle(), cover.open_cover_tilt(), cover.close_cover_tilt(), cover.stop_cover_tilt(), cover.set_cover_tilt_position(), cover.toggle_cover_tilt(), media_player.turn_on(), media_player.turn_off(), media_player.toggle(), media_player.volume_up(), media_player.volume_down(), media_player.media_play_pause(), media_player.media_play(), media_player.media_pause(), media_player.media_stop(), media_player.media_next_track(), media_player.media_previous_track(), media_player.clear_playlist(), media_player.volume_set(volume_level), media_player.volume_mute(), media_player.media_seek(), media_player.join(), media_player.select_source(), media_player.select_sound_mode(), media_player.play_media(), media_player.shuffle_set(), media_player.unjoin(), media_player.repeat_set(), climate.turn_on(), climate.turn_off(), climate.set_hvac_mode(), climate.set_preset_mode(), climate.set_aux_heat(), climate.set_temperature(temperature), climate.set_humidity(humidity), climate.set_fan_mode(fan_mode), climate.set_swing_mode(), lock.unlock(), lock.lock(), lock.open(), fan.turn_on(), fan.turn_off(), fan.toggle(), fan.increase_speed(), fan.decrease_speed(), fan.oscillate(), fan.set_direction(), fan.set_percentage(), fan.set_preset_mode(), light.turn_on(rgb_color,brightness), light.turn_off(), light.toggle(rgb_color,brightness)
|
||||
Devices:
|
||||
cover.kitchen_window 'Kitchen Window' = closed
|
||||
cover.hall_window 'Hall Window' = open
|
||||
cover.living_room_window 'Living Room Window' = open
|
||||
cover.garage_door 'Garage Door' = closed
|
||||
fan.living_room_fan 'Living Room Fan' = off
|
||||
fan.ceiling_fan 'Ceiling Fan' = off
|
||||
fan.percentage_full_fan 'Percentage Full Fan' = off
|
||||
fan.percentage_limited_fan 'Percentage Limited Fan' = off
|
||||
lock.front_door 'Front Door' = locked
|
||||
lock.kitchen_door 'Kitchen Door' = unlocked
|
||||
lock.openable_lock 'Openable Lock' = locked
|
||||
light.bed_light 'Bed Light' = off
|
||||
light.ceiling_lights 'Ceiling Lights' = on;20%
|
||||
light.kitchen_lights 'Kitchen Lights' = on
|
||||
light.office_rgbw_lights 'Office RGBW Lights' = on
|
||||
light.living_room_rgbww_lights 'Living Room RGBWW Lights' = on
|
||||
light.entrance_color_white_lights 'Entrance Color + White Lights' = on<|endoftext|>
|
||||
<|user|>
|
||||
turn off the kitchen lights<|endoftext|>
|
||||
<|assistant|>
|
||||
22
data/test_prompts/zephyr/ha_demo2.txt
Normal file
22
data/test_prompts/zephyr/ha_demo2.txt
Normal file
@@ -0,0 +1,22 @@
|
||||
<|system|>
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task ask instructed with the information provided only.
|
||||
Services: cover.open_cover(), cover.close_cover(), cover.set_cover_position(), cover.stop_cover(), cover.toggle(), cover.open_cover_tilt(), cover.close_cover_tilt(), cover.stop_cover_tilt(), cover.set_cover_tilt_position(), cover.toggle_cover_tilt(), media_player.turn_on(), media_player.turn_off(), media_player.toggle(), media_player.volume_up(), media_player.volume_down(), media_player.media_play_pause(), media_player.media_play(), media_player.media_pause(), media_player.media_stop(), media_player.media_next_track(), media_player.media_previous_track(), media_player.clear_playlist(), media_player.volume_set(volume_level), media_player.volume_mute(), media_player.media_seek(), media_player.join(), media_player.select_source(), media_player.select_sound_mode(), media_player.play_media(), media_player.shuffle_set(), media_player.unjoin(), media_player.repeat_set(), climate.turn_on(), climate.turn_off(), climate.set_hvac_mode(), climate.set_preset_mode(), climate.set_aux_heat(), climate.set_temperature(temperature), climate.set_humidity(humidity), climate.set_fan_mode(fan_mode), climate.set_swing_mode(), lock.unlock(), lock.lock(), lock.open(), fan.turn_on(), fan.turn_off(), fan.toggle(), fan.increase_speed(), fan.decrease_speed(), fan.oscillate(), fan.set_direction(), fan.set_percentage(), fan.set_preset_mode(), light.turn_on(rgb_color,brightness), light.turn_off(), light.toggle(rgb_color,brightness)
|
||||
Devices:
|
||||
media_player.bedroom 'Bedroom' = playing;Epic sax guy 10 hours;vol=100
|
||||
media_player.kitchen 'Kitchen' = playing;I Wanna Be A Hippy (Flamman & Abraxas Radio Mix);vol=100
|
||||
climate.ecobee 'Ecobee' = heat_cool;Auto Low
|
||||
cover.kitchen_window 'Kitchen Window' = closed
|
||||
cover.hall_window 'Hall Window' = open
|
||||
cover.garage_door 'Garage Door' = closed
|
||||
lock.front_door 'Front Door' = locked
|
||||
lock.kitchen_door 'Kitchen Door' = unlocked
|
||||
fan.living_room_fan 'Living Room Fan' = off
|
||||
fan.ceiling_fan 'Ceiling Fan' = off
|
||||
light.bed_light 'Bed Light' = off
|
||||
light.ceiling_lights 'Ceiling Lights' = on;sandybrown (255, 164, 81);70%
|
||||
light.kitchen_lights 'Kitchen Lights' = off
|
||||
light.office_rgbw_lights 'Office RGBW Lights' = on;salmon (255, 128, 128);70%
|
||||
light.living_room_rgbww_lights 'Living Room RGBWW Lights' = on;salmon (255, 127, 125);70%<|endoftext|>
|
||||
<|user|>
|
||||
set the office lights green<|endoftext|>
|
||||
<|assistant|>
|
||||
@@ -1,4 +1,4 @@
|
||||
<|im_start|>system
|
||||
<|system|>
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed or answer the following question with the information provided only.
|
||||
Services: light.turn_on, light.turn_off, light.toggle, lock.unlock, lock.lock, lock.open, cover.open_cover, cover.close_cover, cover.set_cover_position, cover.stop_cover, cover.toggle, cover.open_cover_tilt, cover.close_cover_tilt, cover.stop_cover_tilt, cover.set_cover_tilt_position, cover.toggle_cover_tilt, fan.turn_on, fan.turn_off, fan.toggle, fan.increase_speed, fan.decrease_speed, fan.oscillate, fan.set_direction, fan.set_percentage, fan.set_preset_mode
|
||||
Devices:
|
||||
@@ -14,11 +14,11 @@ lock.front_door 'Front Door' = locked
|
||||
lock.kitchen_door 'Kitchen Door' = unlocked
|
||||
lock.openable_lock 'Openable Lock' = locked
|
||||
light.bed_light 'Bed Light' = off
|
||||
light.ceiling_lights 'Ceiling Lights' = on;20%
|
||||
light.ceiling_lights 'Ceiling Lights' = on
|
||||
light.kitchen_lights 'Kitchen Lights' = on
|
||||
light.office_rgbw_lights 'Office RGBW Lights' = on
|
||||
light.living_room_rgbww_lights 'Living Room RGBWW Lights' = on
|
||||
light.entrance_color_white_lights 'Entrance Color + White Lights' = on<|im_end|>
|
||||
<|im_start|>user
|
||||
turn off the kitchen lights<|im_end|>
|
||||
<|im_start|>assistant
|
||||
light.entrance_color_white_lights 'Entrance Color + White Lights' = on<|endoftext|>
|
||||
<|user|>
|
||||
if mary is 7 years old, and I am 3 years older than her. how old am I?<|endoftext|>
|
||||
<|assistant|>
|
||||
15
data/test_prompts/zephyr/rgb_lights.txt
Normal file
15
data/test_prompts/zephyr/rgb_lights.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
<|system|>
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed or answer the following question with the information provided only.
|
||||
Services: cover.open_cover(), cover.close_cover(), cover.set_cover_position(), cover.stop_cover(), cover.toggle(), cover.open_cover_tilt(), cover.close_cover_tilt(), cover.stop_cover_tilt(), cover.set_cover_tilt_position(), cover.toggle_cover_tilt(), media_player.turn_on(), media_player.turn_off(), media_player.toggle(), media_player.volume_up(), media_player.volume_down(), media_player.media_play_pause(), media_player.media_play(), media_player.media_pause(), media_player.media_stop(), media_player.media_next_track(), media_player.media_previous_track(), media_player.clear_playlist(), media_player.volume_set(volume_level), media_player.volume_mute(), media_player.media_seek(), media_player.join(), media_player.select_source(), media_player.select_sound_mode(), media_player.play_media(), media_player.shuffle_set(), media_player.unjoin(), media_player.repeat_set(), climate.turn_on(), climate.turn_off(), climate.set_hvac_mode(), climate.set_preset_mode(), climate.set_aux_heat(), climate.set_temperature(temperature), climate.set_humidity(humidity), climate.set_fan_mode(fan_mode), climate.set_swing_mode(), lock.unlock(), lock.lock(), lock.open(), fan.turn_on(), fan.turn_off(), fan.toggle(), fan.increase_speed(), fan.decrease_speed(), fan.oscillate(), fan.set_direction(), fan.set_percentage(), fan.set_preset_mode(), light.turn_on(rgb_color,brightness), light.turn_off(), light.toggle(rgb_color,brightness)
|
||||
Devices:
|
||||
media_player.sony_ps_lx310bt 'Sony Bluetooth Turntable' = off
|
||||
light.back_family_room_warm 'Back Family Room Warm Light' = on;darkcyan (3, 148, 139)
|
||||
switch.sauna_lights 'Sauna Lights Switch' = off
|
||||
switch.garage_workshop_lights 'Garage Workshop Lights Switch' = on
|
||||
media_player.lounge_hi_fi_system 'Lounge Hi-Fi Audio' = off
|
||||
light.upstairs_washroom_zwave 'Upstairs Washroom Light' = on
|
||||
light.kitchen_pantry_cool 'Kitchen Pantry Cool Light' = on;28%
|
||||
light.kitchen_windowseat_warm 'Kitchen Window Seat Warm Light' = on;59%<|endoftext|>
|
||||
<|user|>
|
||||
set back family room warm light to be blue.<|endoftext|>
|
||||
<|assistant|>
|
||||
@@ -1,4 +1,4 @@
|
||||
<|im_start|>system
|
||||
<|system|>
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed or answer the following question with the information provided only.
|
||||
Services: cover.close_cover, cover.open_cover, cover.stop_cover, cover.toggle, fan.decrease_speed, fan.increase_speed, fan.toggle, fan.turn_off, fan.turn_on, cover.close_cover, cover.open_cover, cover.stop_cover, cover.toggle, light.toggle, light.turn_off, light.turn_on
|
||||
Devices:
|
||||
@@ -22,7 +22,7 @@ light.downstairs_entryway_mqtt 'Downstairs Entryway Light' = off
|
||||
cover.somfy_living 'Living Room Blinds' = closed
|
||||
light.kitchen_winecellar_warm 'Kitchen Wine Cellar Warm Light' = off
|
||||
light.driveway 'driveway' = off
|
||||
light.shed 'Shed Light' = on<|im_end|>
|
||||
<|im_start|>user
|
||||
make sure both the lights on the christmas tree are on<|im_end|>
|
||||
<|im_start|>assistant
|
||||
light.shed 'Shed Light' = on<|endoftext|>
|
||||
<|user|>
|
||||
write a sonnet about the lights in my house. reference specific light names<|endoftext|>
|
||||
<|assistant|>
|
||||
Binary file not shown.
Binary file not shown.
BIN
dist/llama_cpp_python-0.2.50-cp311-cp311-musllinux_1_2_aarch64.whl
vendored
Normal file
BIN
dist/llama_cpp_python-0.2.50-cp311-cp311-musllinux_1_2_aarch64.whl
vendored
Normal file
Binary file not shown.
BIN
dist/llama_cpp_python-0.2.50-cp311-cp311-musllinux_1_2_x86_64.whl
vendored
Normal file
BIN
dist/llama_cpp_python-0.2.50-cp311-cp311-musllinux_1_2_x86_64.whl
vendored
Normal file
Binary file not shown.
BIN
dist/llama_cpp_python-0.2.50-cp312-cp312-musllinux_1_2_aarch64.whl
vendored
Normal file
BIN
dist/llama_cpp_python-0.2.50-cp312-cp312-musllinux_1_2_aarch64.whl
vendored
Normal file
Binary file not shown.
BIN
dist/llama_cpp_python-0.2.50-cp312-cp312-musllinux_1_2_x86_64.whl
vendored
Normal file
BIN
dist/llama_cpp_python-0.2.50-cp312-cp312-musllinux_1_2_x86_64.whl
vendored
Normal file
Binary file not shown.
11
dist/run_docker.sh
vendored
11
dist/run_docker.sh
vendored
@@ -1,6 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
VERSION_TO_BUILD="v0.2.50"
|
||||
|
||||
# make python11 wheels
|
||||
docker run -it --rm \
|
||||
--entrypoint bash \
|
||||
-v $(pwd):/tmp/dist \
|
||||
homeassistant/home-assistant /tmp/dist/make_wheel.sh v0.2.38
|
||||
homeassistant/home-assistant:2023.12.4 /tmp/dist/make_wheel.sh $VERSION_TO_BUILD
|
||||
|
||||
# make python 12 wheels
|
||||
docker run -it --rm \
|
||||
--entrypoint bash \
|
||||
-v $(pwd):/tmp/dist \
|
||||
homeassistant/home-assistant:2024.2.1 /tmp/dist/make_wheel.sh $VERSION_TO_BUILD
|
||||
@@ -5,7 +5,7 @@ This integration allows for full customization of the system prompt using Home A
|
||||
## System Prompt Template
|
||||
The default system prompt is:
|
||||
```
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task ask instructed with the information provided only.
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed with the information provided only.
|
||||
Services: {{ services }}
|
||||
Devices:
|
||||
{{ devices }}
|
||||
@@ -15,6 +15,24 @@ The `services` and `devices` variables are special variables that are provided b
|
||||
- `services` expands into a comma separated list of the services that correlate with the devices that have been exposed to the Voice Assistant.
|
||||
- `devices` expands into a multi-line block where each line is the format `<entity_id> '<friendly_name> = <state>;<extra_attributes_to_expose>`
|
||||
|
||||
### Model "Persona"
|
||||
The model is trained with a few different personas. They can be activated by using their system prompt found below:
|
||||
|
||||
Al the Assistant - Responds politely and concisely
|
||||
```
|
||||
You are 'Al', a helpful AI Assistant that controls the devices in a house. Complete the following task as instructed with the information provided only.
|
||||
```
|
||||
|
||||
Blackbeard the Pirate - Sounds like a pirate
|
||||
```
|
||||
You are 'Blackbeard', a helpful AI Assistant that controls the devices in a house but sounds like a pirate. Complete the following task as instructed or answer the following question with the information provided only. Your response should always sound like you are a pirate.
|
||||
```
|
||||
|
||||
Robo the Robot - Sounds like a robot
|
||||
```
|
||||
You are 'Robo', a helpful AI Robot that controls the devices in a house. Complete the following task as instructed or answer the following question with the information provided only. Your response should be robotic and always begin with 'Beep-Boop'.
|
||||
```
|
||||
|
||||
## Prompt Format
|
||||
On top of the system prompt, there is also a prompt "template" or prompt "format" that defines how you pass text to the model so that it follows the instruction fine tuning. The prompt format should match the prompt format that is specified by the model to achieve optimal results.
|
||||
|
||||
@@ -23,4 +41,4 @@ Currently supported prompt formats are:
|
||||
2. Vicuna
|
||||
3. Alpaca
|
||||
4. Mistral
|
||||
5. None (useful for foundation models)
|
||||
5. None (useful for foundation models)
|
||||
|
||||
36
docs/Performance.md
Normal file
36
docs/Performance.md
Normal file
@@ -0,0 +1,36 @@
|
||||
### Performance of running the model on a Raspberry Pi
|
||||
The RPI4 4GB that I have was sitting right at 1.5 tokens/sec for prompt eval and 1.6 tokens/sec for token generation when running the `Q4_K_M` quant. I was reliably getting responses in 30-60 seconds after the initial prompt processing which took almost 5 minutes. It depends significantly on the number of devices that have been exposed as well as how many states have changed since the last invocation because llama.cpp caches KV values for identical prompt prefixes.
|
||||
|
||||
It is highly recommend to set up text-generation-webui on a separate machine that can take advantage of a GPU.
|
||||
|
||||
# Home 1B V2 GGUF Q4_K_M RPI5
|
||||
|
||||
christmas.txt
|
||||
llama_print_timings: load time = 678.37 ms
|
||||
llama_print_timings: sample time = 16.38 ms / 45 runs ( 0.36 ms per token, 2747.09 tokens per second)
|
||||
llama_print_timings: prompt eval time = 31356.56 ms / 487 tokens ( 64.39 ms per token, 15.53 tokens per second)
|
||||
llama_print_timings: eval time = 4868.37 ms / 44 runs ( 110.64 ms per token, 9.04 tokens per second)
|
||||
llama_print_timings: total time = 36265.33 ms / 531 tokens
|
||||
|
||||
climate.txt
|
||||
llama_print_timings: load time = 613.87 ms
|
||||
llama_print_timings: sample time = 20.62 ms / 55 runs ( 0.37 ms per token, 2667.96 tokens per second)
|
||||
llama_print_timings: prompt eval time = 27324.34 ms / 431 tokens ( 63.40 ms per token, 15.77 tokens per second)
|
||||
llama_print_timings: eval time = 5780.72 ms / 54 runs ( 107.05 ms per token, 9.34 tokens per second)
|
||||
llama_print_timings: total time = 33152.48 ms / 485 tokens
|
||||
|
||||
# Home 3B V2 GGUF Q4_K_M RPI5
|
||||
|
||||
climate.txt
|
||||
llama_print_timings: load time = 1179.64 ms
|
||||
llama_print_timings: sample time = 19.25 ms / 52 runs ( 0.37 ms per token, 2702.00 tokens per second)
|
||||
llama_print_timings: prompt eval time = 52688.82 ms / 431 tokens ( 122.25 ms per token, 8.18 tokens per second)
|
||||
llama_print_timings: eval time = 10206.12 ms / 51 runs ( 200.12 ms per token, 5.00 tokens per second)
|
||||
llama_print_timings: total time = 62942.85 ms / 482 tokens
|
||||
|
||||
sonnet.txt
|
||||
llama_print_timings: load time = 1076.44 ms
|
||||
llama_print_timings: sample time = 1225.34 ms / 236 runs ( 5.19 ms per token, 192.60 tokens per second)
|
||||
llama_print_timings: prompt eval time = 60754.40 ms / 490 tokens ( 123.99 ms per token, 8.07 tokens per second)
|
||||
llama_print_timings: eval time = 44885.82 ms / 213 runs ( 210.73 ms per token, 4.75 tokens per second)
|
||||
llama_print_timings: total time = 107127.16 ms / 703 tokens
|
||||
194
docs/Setup.md
Normal file
194
docs/Setup.md
Normal file
@@ -0,0 +1,194 @@
|
||||
# Setup Instructions
|
||||
|
||||
1. [Home Assistant Component](#home-assistant-component)
|
||||
2. [Configuring the LLM as a Conversation Agent](#configuring-as-a-conversation-agent)
|
||||
3. [Setting up the text-generation-webui Addon](#text-generation-webui-add-on)
|
||||
|
||||
## Home Assistant Component
|
||||
### Requirements
|
||||
|
||||
- A supported version of Home Assistant; `2023.10.0` or newer
|
||||
- SSH or Samba access to your Home Assistant instance
|
||||
|
||||
**Optional:**
|
||||
- [HACs](https://hacs.xyz/docs/setup/download/) (if you want to install it that way)
|
||||
|
||||
### 💾 🚕 Install the Home Assistant Component with HACs
|
||||
|
||||
> 🛑 ✋🏻 Requires HACs
|
||||
>
|
||||
> First make sure you have [HACs installed](https://hacs.xyz/docs/setup/download/)
|
||||
|
||||
Once you have HACs installed, this button will help you add the repository to HACS and open the download page
|
||||
|
||||
[](https://my.home-assistant.io/redirect/hacs_repository/?category=Integration&repository=home-llm&owner=acon96)
|
||||
|
||||
**Remember to restart Home Assistant after installing the component!**
|
||||
|
||||
A "LLaMA Conversation" device should show up in the `Settings > Devices and Services > [Devices]` tab now:
|
||||

|
||||
|
||||
|
||||
### 💾 🔨 Install the Home Assistant Component Manually
|
||||
|
||||
1. Ensure you have either the Samba, SSH, FTP, or another add-on installed that gives you access to the `config` folder
|
||||
2. If there is not already a `custom_components` folder, create one now.
|
||||
3. Copy the `custom_components/llama_conversation` folder from this repo to `config/custom_components/llama_conversation` on your Home Assistant machine.
|
||||
4. Restart Home Assistant: `Developer Tools -> Services -> Run` : `HomeAssistant.restart`
|
||||
|
||||
A "LLaMA Conversation" device should show up in the `Settings > Devices and Services > [Devices]` tab now:
|
||||

|
||||
|
||||
|
||||
### ⚙️ Configuration and Setup
|
||||
You must configure at least one model by configuring the integration.
|
||||
|
||||
1. `Settings > Devices and Services`.
|
||||
2. Click the `Add Integration` button in the bottom right of the screen.
|
||||
3. Filter the list of "brand names" for llama, and "LLaMa Conversation" should remain.
|
||||
4. Choose the backend you will be using to host the model:
|
||||
1. Using builtin llama.cpp with hugging face
|
||||
2. Using builtin llama.cpp with existing model file
|
||||
3. using text-generation-webui api
|
||||
4. using generic openapi compatiable api
|
||||
5. using ollama api
|
||||
|
||||
### llama-cpp-python Wheel Installation
|
||||
|
||||
If you plan on running the model locally on the same hardware as your Home Assistant server, then the recommended way to run the model is to use Llama.cpp. Unfortunately there are not pre-build wheels for this package for the musllinux runtime that Home Assistant Docker images use. To get around this, we provide compatible wheels for x86_x64 and arm64 in the [dist](./dist) folder.
|
||||
|
||||
Download the `*.whl` file that matches your hardware and then copy the `*.whl` file to the `custom_components/llama_conversation/` folder. It will be installed as a configuration step while setting up the Home Assistant component.
|
||||
|
||||
| wheel | platform | home assistant version |
|
||||
| --- | --- | --- |
|
||||
| llama_cpp_python-{version}-cp311-cp311-musllinux_1_2_aarch64.whl | aarch64 (RPi 4 and 5) | `2024.1.4` and older |
|
||||
| llama_cpp_python-{version}-cp311-cp311-musllinux_1_2_x86_64.whl | x86_64 (Intel + AMD) | `2024.1.4` and older |
|
||||
| llama_cpp_python-{version}-cp312-cp312-musllinux_1_2_aarch64.whl | aarch64 (RPi 4 and 5) | `2024.2.0` and newer |
|
||||
| llama_cpp_python-{version}-cp312-cp312-musllinux_1_2_x86_64.whl | x86_64 (Intel + AMD) | `2024.2.0` and newer |
|
||||
|
||||
### Constrained Grammar
|
||||
|
||||
When running the model locally with [Llama.cpp], the component also constrains the model output using a GBNF grammar.
|
||||
This forces the model to provide valid output no matter what since its outputs are constrained to valid JSON every time.
|
||||
This helps the model perform significantly better at lower quantization levels where it would previously generate syntax errors. It is recommended to turn this on when using the component as it will reduce the incorrect output from the model.
|
||||
|
||||
For more information See [output.gbnf](./custom_components/llama_conversation/output.gbnf) for the existing grammar.
|
||||
|
||||
|
||||
### Backend Configuration
|
||||
|
||||

|
||||
|
||||
When setting up the component, there are 5 different "backend" options to choose from:
|
||||
|
||||
a. Llama.cpp with a model from HuggingFace <--- recommended if you are lost
|
||||
b. Llama.cpp with a locally provided model
|
||||
c. A remote instance of text-generation-webui
|
||||
d. A generic OpenAI API compatible interface; *should* be compatible with LocalAI, LM Studio, and all other OpenAI compatible backends
|
||||
e. Ollama api
|
||||
|
||||
See [docs/Backend Configuration.md](/docs/Backend%20Configuration.md) for more info.
|
||||
|
||||
#### Llama.cpp Backend with a model from HuggingFace
|
||||
|
||||
This is option A
|
||||
|
||||
It is recommended to use either `acon96/Home-3B-v3-GGUF` or `acon96/Home-1B-v2-GGUF` as the model for this integration.
|
||||
NOTE: if you are using `acon96/Home-3B-v3-GGUF`, you need to set the prompt template to `Zephyr` after setting up the component by configuring the model after creation.
|
||||
|
||||
You need the following settings to configure the local backend from HuggingFace:
|
||||
1. **Model Name**: the name of the model in the form `repo/model-name`. The repo MUST contain a GGUF quantized model.
|
||||
2. **Model Quantization**: The quantization level to download. Pick from the list. Higher quantizations use more RAM but have higher quality responses.
|
||||
|
||||
#### Llama.cpp Backend with a locally downloaded model
|
||||
|
||||
This is option B
|
||||
|
||||
Please download the model file from HuggingFace and copy it to your Home Assistant device. Recommended models are [acon96/Home-3B-v3-GGUF](https://huggingface.co/acon96/Home-3B-v3-GGUF) or [acon96/Home-1B-v2-GGUF](https://huggingface.co/acon96/Home-1B-v2-GGUF).
|
||||
|
||||
NOTE: if you are using `acon96/Home-3B-v3-GGUF`, you need to set the prompt template to `Zephyr` after setting up the component by configuring the model after creation.
|
||||
|
||||
You need the following settings to configure the local backend from HuggingFace:
|
||||
1. **Model File Name**: the file name where Home Assistant can access the model to load. Most likely a sub-path of `/config` or `/media` or wherever you copied the model file to.
|
||||
|
||||
#### Remote Backends
|
||||
|
||||
This is options C, D and E
|
||||
|
||||
You need the following settings in order to configure the "remote" backend:
|
||||
1. **Hostname**: the host of the machine where text-generation-webui API is hosted. If you are using the provided add-on then the hostname is `local-text-generation-webui` or `f459db47-text-generation-webui` depending on how the addon was installed.
|
||||
2. **Port**: the port for accessing the text-generation-webui API. NOTE: this is not the same as the UI port. (Usually 5000)
|
||||
3. **Name of the Model**: This name must EXACTLY match the name as it appears in `text-generation-webui`
|
||||
|
||||
With the remote text-generation-webui backend, the component will validate that the selected model is available for use and will ensure it is loaded remotely. The Generic OpenAI compatible version does NOT do any validation or model loading.
|
||||
|
||||
**Setting up with LocalAI**:
|
||||
If you are an existing LocalAI user or would like to use LocalAI as your backend, please refer to [this](https://io.midori-ai.xyz/howtos/setup-with-ha/) website which has instructions on how to setup LocalAI to work with Home-LLM including automatic installation of the latest version of the the Home-LLM model. The auto-installer (LocalAI Manager) will automatically download and setup LocalAI and/or the model of your choice and automatically create the necessary template files for the model to work with this integration.
|
||||
|
||||
**Setting up Ollama**:
|
||||
In order to use the GGUF model with Ollama:
|
||||
|
||||
1. Download the desired quantization level of the model from HuggingFace (see above for links)
|
||||
2. Copy the following block into a `Modelfile`:
|
||||
```
|
||||
FROM Home-3B-v3.q4_k_m.gguf
|
||||
PARAMETER num_ctx 2048
|
||||
PARAMETER temperature 0.1
|
||||
PARAMETER top_k 40
|
||||
PARAMETER top_p 0.95
|
||||
PARAMETER stop "<|endoftext|>"
|
||||
PARAMETER stop "<|im_end|>"
|
||||
```
|
||||
|
||||
3. Change the `FROM` line to match the filename of the quantized model that you downloaded
|
||||
4. Create the model with Ollama
|
||||
- `ollama create home-3b-v3:q4_k_m -f Modelfile`
|
||||
5. Start the server
|
||||
- `ollama serve`
|
||||
|
||||
## Configuring as a Conversation Agent
|
||||
|
||||
> 🛑 ✋🏻 Security Warning
|
||||
>
|
||||
> Any devices that you select to be exposed to the model will be added as
|
||||
> context and potentially have their state changed by the model.
|
||||
>
|
||||
> Only expose devices that you want the model modifying the state of.
|
||||
>
|
||||
> The model may occasionally hallucinate and issue commands to the wrong device!
|
||||
>
|
||||
> Use At Your Own Risk
|
||||
|
||||
1. Navigate to `Settings` -> `Voice Assistants`
|
||||
2. Select `+ Add Assistant`
|
||||
3. Name the assistant whatever you want.
|
||||
4. Select the conversation agent that we created previously.
|
||||
5. If using STT or TTS configure these now
|
||||
6. Return to the "Overview" dashboard and select chat icon in the top left.
|
||||
7. From here you can submit queries to the AI agent.
|
||||
|
||||
In order for any entities be available to the agent, you must "expose" them first.
|
||||
|
||||
1. Navigate to "Settings" -> "Voice Assistants" -> "Expose" Tab
|
||||
2. Select "+ Expose Entities" in the bottom right
|
||||
3. Check any entities you would like to be exposed to the conversation agent.
|
||||
|
||||
> Note:
|
||||
> When exposing entities to the model, you are adding tokens to the model's context. If you exceed the context length of the model, then your interactions with the model will fail due to the instructions being dropped out of the context's sliding window.
|
||||
> It is recommended to only expose a maximum of 32 entities to this conversation agent at this time.
|
||||
|
||||
## text-generation-webui add-on
|
||||
You can use this button to automatically download and build the addon for `oobabooga/text-generation-webui`
|
||||
|
||||
[](https://my.home-assistant.io/redirect/supervisor_addon/?addon=f459db47_text-generation-webui&repository_url=https%3A%2F%2Fgithub.com%2Facon96%2Fhome-llm)
|
||||
|
||||
If the automatic installation fails then you can install the addon manually using the following steps:
|
||||
|
||||
1. Ensure you have either the Samba, SSH, FTP, or another add-on installed that gives you access to the `addons` folder
|
||||
2. Copy the `addon` folder from this repo to `addons/text-generation-webui` on your Home Assistant machine.
|
||||
3. Go to the "Add-ons" section in settings and then pick the "Add-on Store" from the bottom right corner.
|
||||
4. Select the 3 dots in the top right and click "Check for Updates" and Refresh the webpage.
|
||||
5. There should now be a "Local Add-ons" section at the top of the "Add-on Store"
|
||||
6. Install the `oobabooga-text-generation-webui` add-on. It will take ~15-20 minutes to build the image on a Raspberry Pi.
|
||||
7. Copy any models you want to use to the `addon_configs/local_text-generation-webui/models` folder or download them using the UI.
|
||||
8. Load up a model to use. NOTE: The timeout for ingress pages is only 60 seconds so if the model takes longer than 60 seconds to load (very likely) then the UI will appear to time out and you will need to navigate to the add-on's logs to see when the model is fully loaded.
|
||||
@@ -341,4 +341,4 @@ OpenOrca Slim Deduped (363k): https://huggingface.co/datasets/Open-Orca/SlimOrca
|
||||
|
||||
### DPO
|
||||
Intel Orca DPO Pairs: https://huggingface.co/datasets/Intel/orca_dpo_pairs
|
||||
Huggingface Ultrachat: https://huggingface.co/datasets/HuggingFaceH4/ultrafeedback_binarized
|
||||
Huggingface Ultrachat: https://huggingface.co/datasets/HuggingFaceH4/ultrafeedback_binarized
|
||||
103
docs/experiment-notes-stablelm.md
Normal file
103
docs/experiment-notes-stablelm.md
Normal file
@@ -0,0 +1,103 @@
|
||||
# StableLM 2 Zephyr 1.6B
|
||||
## rev1
|
||||
- 1 epoch
|
||||
- 2048 train ctx
|
||||
- batch size 8
|
||||
- learning rate 1e-5
|
||||
- weight decay 0.1
|
||||
- gradient clipping 1.0
|
||||
- dataset size: small
|
||||
+ it honestly works not terribly and I was kinda able to get it to respond to german
|
||||
+ evaluation results: 0.7108953613807982
|
||||
|
||||
## rev2
|
||||
- dataset size: large (also rewrote how it works slightly)
|
||||
+ evaluation results:
|
||||
- 600: 0.7826321467098166
|
||||
- 800: 0.8090614886731392
|
||||
- 1000: 0.7669902912621359
|
||||
- 1200: 0.7944983818770227
|
||||
- 1400: 0.8176914778856527
|
||||
- 1600: 0.8268608414239482
|
||||
- 1800: 0.8263214670981661
|
||||
- Final: 0.8274002157497303
|
||||
|
||||
# StableLM Zephyr 3B
|
||||
## rev1
|
||||
- 1 epoch
|
||||
- 2048 train ctx
|
||||
- batch size 8
|
||||
- learning rate 1e-5
|
||||
- weight decay 0.1
|
||||
- gradient clipping 1.0
|
||||
- lora rank: 32, alpha: 64
|
||||
- accidentally forgot to turn off fine tuning of embeddings
|
||||
- dataset size: large
|
||||
+ evaluation results:
|
||||
- 400: 0.8344
|
||||
- 800: 0.9228694714131608
|
||||
- 1200: 0.9401294498381877
|
||||
- 1600: 0.95361380798274
|
||||
- Final (1929): 0.9492988133764833
|
||||
|
||||
# rev2
|
||||
- not fine-tuning the embeddings (no added tokens)
|
||||
- dataset: new version with varied system prompts/responses (small)
|
||||
+ evauluation results:
|
||||
- 400: 0.6748893105629349
|
||||
- 800: 0.7280202403542062
|
||||
- 1200: 0.7685009487666035
|
||||
- 1600: 0.7798861480075902
|
||||
- Final (1967): 0.7849462365591398
|
||||
+ definitely needs more data
|
||||
|
||||
# rev3
|
||||
- lora rank: 64, alpha: 128
|
||||
- dataset size: large
|
||||
+ evaluation results:
|
||||
- 400: 0.8785578747628083
|
||||
- 800: 0.9247311827956989
|
||||
- 1200: 0.9348513598987982
|
||||
- 1600: 0.9222011385199241
|
||||
- 2000: 0.9354838709677419
|
||||
- 2400: 0.9740670461733081
|
||||
- 2800: 0.9595192915876027
|
||||
- 3200: 0.948134092346616
|
||||
- 3600: 0.963314358001265
|
||||
- 4000: 0.9614168247944339
|
||||
- Final (~4200): 0.9538266919671095
|
||||
|
||||
# rev4
|
||||
- lora rank: 64, alpha: 128
|
||||
- dataset size: large (with new device types)
|
||||
+ evaluation results:
|
||||
- 400: 0.867914979757085
|
||||
- 800: 0.9316801619433198
|
||||
- 1200: 0.9215587044534413
|
||||
- 1600: 0.9686234817813765
|
||||
- 2000: 0.9772267206477733
|
||||
- 2400: 0.9752024291497976
|
||||
- 2800: 0.9802631578947368
|
||||
- 3200: 0.9777327935222672
|
||||
- 3600: 0.9812753036437247
|
||||
- 4000: 0.979251012145749
|
||||
- 4400: 0.978744939271255
|
||||
- 4800: 0.9777327935222672
|
||||
- Final (5234): 0.9782388663967612
|
||||
+ overfit
|
||||
|
||||
# rev5
|
||||
- lora rank: 64, alpha: 128
|
||||
- dataset size: medium (with new device types)
|
||||
+ evaluation results:
|
||||
- 400: 0.8709514170040485
|
||||
- 800: 0.9316801619433198
|
||||
- 1200: 0.9544534412955465
|
||||
- 1600: 0.9559716599190283
|
||||
- 2000: 0.9671052631578947
|
||||
- 2400: 0.9671052631578947
|
||||
- 2800: 0.9701417004048583
|
||||
- 3200: 0.9696356275303644
|
||||
- 3600: 0.9736842105263158
|
||||
- 4000: 0.9706477732793523
|
||||
- Final: 0.9711538461538461
|
||||
31
docs/perf.md
Normal file
31
docs/perf.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# Home 1B V2 GGUF Q4_K_M RPI5
|
||||
|
||||
christmas.txt
|
||||
llama_print_timings: load time = 678.37 ms
|
||||
llama_print_timings: sample time = 16.38 ms / 45 runs ( 0.36 ms per token, 2747.09 tokens per second)
|
||||
llama_print_timings: prompt eval time = 31356.56 ms / 487 tokens ( 64.39 ms per token, 15.53 tokens per second)
|
||||
llama_print_timings: eval time = 4868.37 ms / 44 runs ( 110.64 ms per token, 9.04 tokens per second)
|
||||
llama_print_timings: total time = 36265.33 ms / 531 tokens
|
||||
|
||||
climate.txt
|
||||
llama_print_timings: load time = 613.87 ms
|
||||
llama_print_timings: sample time = 20.62 ms / 55 runs ( 0.37 ms per token, 2667.96 tokens per second)
|
||||
llama_print_timings: prompt eval time = 27324.34 ms / 431 tokens ( 63.40 ms per token, 15.77 tokens per second)
|
||||
llama_print_timings: eval time = 5780.72 ms / 54 runs ( 107.05 ms per token, 9.34 tokens per second)
|
||||
llama_print_timings: total time = 33152.48 ms / 485 tokens
|
||||
|
||||
# Home 3B V2 GGUF Q4_K_M RPI5
|
||||
|
||||
climate.txt
|
||||
llama_print_timings: load time = 1179.64 ms
|
||||
llama_print_timings: sample time = 19.25 ms / 52 runs ( 0.37 ms per token, 2702.00 tokens per second)
|
||||
llama_print_timings: prompt eval time = 52688.82 ms / 431 tokens ( 122.25 ms per token, 8.18 tokens per second)
|
||||
llama_print_timings: eval time = 10206.12 ms / 51 runs ( 200.12 ms per token, 5.00 tokens per second)
|
||||
llama_print_timings: total time = 62942.85 ms / 482 tokens
|
||||
|
||||
sonnet.txt
|
||||
llama_print_timings: load time = 1076.44 ms
|
||||
llama_print_timings: sample time = 1225.34 ms / 236 runs ( 5.19 ms per token, 192.60 tokens per second)
|
||||
llama_print_timings: prompt eval time = 60754.40 ms / 490 tokens ( 123.99 ms per token, 8.07 tokens per second)
|
||||
llama_print_timings: eval time = 44885.82 ms / 213 runs ( 210.73 ms per token, 4.75 tokens per second)
|
||||
llama_print_timings: total time = 107127.16 ms / 703 tokens
|
||||
90
evaluate.py
90
evaluate.py
@@ -4,15 +4,30 @@ import argparse, os, re, json
|
||||
import torch
|
||||
from datasets import load_dataset
|
||||
from transformers import AutoModelForCausalLM, AutoTokenizer, GenerationConfig
|
||||
from peft import PeftConfig, PeftModel
|
||||
from tqdm import tqdm
|
||||
|
||||
CTX_SIZE = 2048
|
||||
|
||||
"""
|
||||
python3 evaluate.py stablehome-3b-rev1/checkpoint-400 --batch-size 4 --lora && \
|
||||
python3 evaluate.py stablehome-3b-rev1/checkpoint-800 --batch-size 4 --lora && \
|
||||
python3 evaluate.py stablehome-3b-rev1/checkpoint-1200 --batch-size 4 --lora && \
|
||||
python3 evaluate.py stablehome-3b-rev1/checkpoint-1600 --batch-size 4 --lora && \
|
||||
python3 evaluate.py stablehome-3b-rev1/checkpoint-2000 --batch-size 4 --lora && \
|
||||
python3 evaluate.py stablehome-3b-rev1/checkpoint-2400 --batch-size 4 --lora && \
|
||||
python3 evaluate.py stablehome-3b-rev1/checkpoint-2800 --batch-size 4 --lora && \
|
||||
python3 evaluate.py stablehome-3b-rev1/checkpoint-3200 --batch-size 4 --lora && \
|
||||
python3 evaluate.py stablehome-3b-rev1/checkpoint-3600 --batch-size 4 --lora && \
|
||||
python3 evaluate.py stablehome-3b-rev1/checkpoint-4000 --batch-size 4 --lora && \
|
||||
python3 evaluate.py stablehome-3b-rev1 --batch-size 4 --lora
|
||||
"""
|
||||
|
||||
def tokenize(tokenizer, prompt):
|
||||
return tokenizer(prompt, return_tensors="pt", padding=True, truncation=True, max_length=CTX_SIZE)
|
||||
|
||||
def generate(model, tokenizer, prompt):
|
||||
inputs = tokenize(tokenizer, prompt)
|
||||
def generate(model, tokenizer, prompts):
|
||||
inputs = tokenize(tokenizer, prompts)
|
||||
with torch.no_grad():
|
||||
outputs = model.generate(**inputs)
|
||||
text = tokenizer.batch_decode(outputs)
|
||||
@@ -21,25 +36,52 @@ def generate(model, tokenizer, prompt):
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Evaluate the function calling for a model")
|
||||
parser.add_argument("model")
|
||||
parser.add_argument("--dataset_file", default="./data/home_assistant_test.json")
|
||||
parser.add_argument("--split", default="<|im_start|>assistant")
|
||||
parser.add_argument("--dataset_file", default="./data/home_assistant_test.jsonl")
|
||||
parser.add_argument("--batch-size", default=8)
|
||||
parser.add_argument("--lora", default=False,action='store_const', const=True)
|
||||
|
||||
args = parser.parse_args()
|
||||
lora_folder = f"./loras/{args.model}"
|
||||
model_folder = f"./models/{args.model}"
|
||||
split = args.split
|
||||
|
||||
dataset = load_dataset("json", data_files={ "train": args.dataset_file })["train"]
|
||||
|
||||
print(f"Got {len(dataset)} examples to test")
|
||||
|
||||
# filter out examples that are status requests
|
||||
dataset = dataset.filter(lambda example: "```homeassistant" in example["text"])
|
||||
if "text" in dataset:
|
||||
dataset = dataset.filter(lambda example: "```homeassistant" in example["text"])
|
||||
else:
|
||||
dataset = dataset.filter(lambda example: "```homeassistant" in example["conversations"][2]["value"])
|
||||
|
||||
service_call_regex = re.compile(r"```homeassistant\n([\S \t\n]*?)```")
|
||||
|
||||
torch.set_default_device("cuda")
|
||||
print(f"Loading model from {model_folder}...")
|
||||
trained_model = AutoModelForCausalLM.from_pretrained(model_folder, trust_remote_code=True, torch_dtype=torch.bfloat16) #, code_revision="834565c23f9b28b96ccbeabe614dd906b6db551a")
|
||||
trained_tokenizer = AutoTokenizer.from_pretrained(model_folder, trust_remote_code=True, padding_side='left')
|
||||
|
||||
if args.lora:
|
||||
adapter_config = PeftConfig.from_pretrained(lora_folder)
|
||||
base_model_name = adapter_config.base_model_name_or_path
|
||||
print(f"Loading lora from {lora_folder} ({base_model_name})...")
|
||||
|
||||
base_model = AutoModelForCausalLM.from_pretrained(
|
||||
base_model_name,
|
||||
trust_remote_code=True,
|
||||
torch_dtype=torch.bfloat16,
|
||||
)
|
||||
trained_tokenizer = AutoTokenizer.from_pretrained(base_model_name, trust_remote_code=True, padding_side='left')
|
||||
|
||||
trained_model = PeftModel.from_pretrained(base_model, lora_folder, trust_remote_code=True, torch_dtype=torch.bfloat16)
|
||||
|
||||
output_folder = lora_folder
|
||||
else:
|
||||
print(f"Loading model from {model_folder}...")
|
||||
trained_model = AutoModelForCausalLM.from_pretrained(
|
||||
model_folder,
|
||||
trust_remote_code=True,
|
||||
torch_dtype=torch.bfloat16,
|
||||
)
|
||||
trained_tokenizer = AutoTokenizer.from_pretrained(model_folder, trust_remote_code=True, padding_side='left')
|
||||
output_folder = model_folder
|
||||
|
||||
trained_model.generation_config = GenerationConfig(
|
||||
max_new_tokens=128,
|
||||
@@ -50,21 +92,43 @@ def main():
|
||||
top_p=1.0,
|
||||
repetition_penalty=1.15,
|
||||
eos_token_id=trained_model.config.eos_token_id,
|
||||
pad_token_id=trained_model.config.pad_token_id,
|
||||
pad_token_id=trained_model.config.pad_token_id if trained_model.config.pad_token_id else trained_model.config.eos_token_id,
|
||||
)
|
||||
|
||||
split = trained_tokenizer.apply_chat_template(conversation=[{"role": "assistant", "content": r"%%%%%%%%%%%%%%%%"}], tokenize=False).split( r"%%%%%%%%%%%%%%%%")[0]
|
||||
|
||||
print("Evaluating...")
|
||||
batch_size = int(args.batch_size)
|
||||
correct_answers = 0
|
||||
total_answers = 0
|
||||
color_mismatches = 0
|
||||
|
||||
# pre-allocate cuda buffers
|
||||
inputs = trained_tokenizer([""] * batch_size, return_tensors="pt", max_length=CTX_SIZE, padding="max_length", truncation=True)
|
||||
inputs = {k: v.to(trained_model.device) for k, v in inputs.items()}
|
||||
with torch.no_grad():
|
||||
outputs = trained_model(**inputs)
|
||||
|
||||
failed_examples = []
|
||||
with tqdm(total=len(dataset), desc="Accuracy") as pbar:
|
||||
for batch_start in range(0, len(dataset), batch_size):
|
||||
batch = dataset[batch_start:batch_start + batch_size]
|
||||
prompts = [ example.split(split)[0] + split for example in batch["text"] ]
|
||||
expected_responses = [ example.split(split)[1] for example in batch["text"] ]
|
||||
if "text" in batch:
|
||||
prompts = [ example.split(split)[0] + split for example in batch["text"] ]
|
||||
expected_responses = [ example.split(split)[1] for example in batch["text"] ]
|
||||
else:
|
||||
prompts = []
|
||||
expected_responses = []
|
||||
for example in batch["conversations"]:
|
||||
conversation = [ { "role": x["from"], "content": x["value"] } for x in example if x["from"] != "assistant"]
|
||||
prompts.append(trained_tokenizer.apply_chat_template(
|
||||
conversation=conversation,
|
||||
max_length=CTX_SIZE,
|
||||
truncation=True,
|
||||
tokenize=False,
|
||||
add_generation_prompt=True,
|
||||
))
|
||||
expected_responses.append([x["value"] for x in example if x["from"] == "assistant"][0])
|
||||
output = generate(trained_model, trained_tokenizer, prompts)
|
||||
|
||||
for model_output, expected_response in zip(output, expected_responses):
|
||||
@@ -115,7 +179,7 @@ def main():
|
||||
print(f"Final Accuracy Rating: {accuracy*100:.2f}%")
|
||||
print(f"Color Mismatches: {color_mismatches}")
|
||||
|
||||
with open(os.path.join(model_folder, "eval_results.json"), "w") as f:
|
||||
with open(os.path.join(output_folder, "eval_results.json"), "w") as f:
|
||||
json.dump({
|
||||
"possible_answers": total_answers,
|
||||
"correct_answers": correct_answers,
|
||||
|
||||
@@ -4,3 +4,6 @@ datasets
|
||||
peft
|
||||
bitsandbytes
|
||||
webcolors
|
||||
pandas
|
||||
# flash-attn
|
||||
sentencepiece
|
||||
159
train.py
159
train.py
@@ -3,16 +3,25 @@
|
||||
import math
|
||||
import copy
|
||||
import torch
|
||||
import numpy as np
|
||||
import os
|
||||
import random
|
||||
from torch.utils.data import SequentialSampler, Subset, RandomSampler
|
||||
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer, \
|
||||
PreTrainedTokenizerFast, HfArgumentParser, GPTQConfig, AutoConfig
|
||||
from transformers.trainer_utils import EvalPrediction
|
||||
from datasets import load_dataset
|
||||
from datasets import load_dataset, Dataset
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Dict, Optional, Sequence
|
||||
from typing import Dict, Optional, Sequence, Sized, Iterator
|
||||
|
||||
"""
|
||||
Phi Modules: fc1,fc2,q_proj,v_proj,k_proj,dense,embed_tokens,lm_head
|
||||
Phi Modules:
|
||||
- MLP: fc1,fc2
|
||||
- MHA: q_proj,v_proj,k_proj,dense
|
||||
- Embeddings: embed_tokens (input) lm_head (output)
|
||||
StableLM Modules:
|
||||
- MLP: up_proj,down_proj,gate_proj
|
||||
- MHA: q_proj,v_proj,k_proj,o_proj
|
||||
- Embeddings: embed_tokens (input) lm_head (output)
|
||||
"""
|
||||
|
||||
"""
|
||||
@@ -22,7 +31,7 @@ python3 train.py \
|
||||
--add_pad_token \
|
||||
--add_chatml_tokens \
|
||||
--bf16 \
|
||||
--train_dataset data/home_assistant_train.json \
|
||||
--train_dataset data/home_assistant_train.jsonl \
|
||||
--learning_rate 1e-5 \
|
||||
--save_steps 1000 \
|
||||
--micro_batch_size 2 --gradient_checkpointing \
|
||||
@@ -37,19 +46,45 @@ python3 train.py \
|
||||
--add_pad_token \
|
||||
--add_chatml_tokens \
|
||||
--bf16 \
|
||||
--train_dataset data/home_assistant_train.json \
|
||||
--test_dataset data/home_assistant_test.json \
|
||||
--train_dataset data/home_assistant_train.jsonl \
|
||||
--test_dataset data/home_assistant_test.jsonl \
|
||||
--learning_rate 1e-5 \
|
||||
--micro_batch_size 4 --gradient_checkpointing \
|
||||
--ctx_size 2048 --save_steps 200
|
||||
"""
|
||||
|
||||
"""
|
||||
python3 train.py \
|
||||
--run_name stablehome-1_6b-rev2 \
|
||||
--base_model stabilityai/stablelm-2-zephyr-1_6b \
|
||||
--bf16 \
|
||||
--train_dataset data/home_assistant_train.jsonl \
|
||||
--test_dataset data/home_assistant_test.jsonl \
|
||||
--learning_rate 1e-5 \
|
||||
--micro_batch_size 2 --gradient_checkpointing \
|
||||
--ctx_size 2048 --save_steps 200 --save_total_limit 6
|
||||
"""
|
||||
|
||||
"""
|
||||
python3 train.py \
|
||||
--run_name stablehome-3b-rev5 \
|
||||
--base_model stabilityai/stablelm-zephyr-3b \
|
||||
--bf16 \
|
||||
--train_dataset data/home_assistant_train.jsonl \
|
||||
--test_dataset data/home_assistant_test.jsonl \
|
||||
--learning_rate 1e-5 \
|
||||
--micro_batch_size 4 --gradient_checkpointing \
|
||||
--ctx_size 2048 \
|
||||
--save_steps 400 --save_total_limit 20 \
|
||||
--use_lora --lora_rank 64 --lora_alpha 128 --lora_modules up_proj,down_proj,q_proj,v_proj,o_proj --lora_merge
|
||||
"""
|
||||
|
||||
"""
|
||||
python3 train.py \
|
||||
--run_name home-7b-rev2 \
|
||||
--base_model TheBloke/Llama-2-7B-GPTQ \
|
||||
--train_dataset data/home_assistant_train.json \
|
||||
--test_dataset data/home_assistant_test.json \
|
||||
--train_dataset data/home_assistant_train.jsonl \
|
||||
--test_dataset data/home_assistant_test.jsonl \
|
||||
--load_as_gptq --use_lora --gradient_checkpointing \
|
||||
--add_pad_token --bf16 --micro_batch_size 4 --learning_rate 2e-5
|
||||
"""
|
||||
@@ -75,6 +110,7 @@ class TrainingRunArguments:
|
||||
save_steps: int = field(default=-1, metadata={"help": "The number of steps in between model checkpoints; set to -1 to save every epoch"})
|
||||
save_total_limit: int = field(default=1, metadata={"help": "The number of recent checkpoints of the model to save (not including the final model)"})
|
||||
group_by_length: bool = field(default=False, metadata={"help": "If enabled, the training data will be grouped by length to optimize use of padding"})
|
||||
pre_allocate_cuda_buffers: bool = field(default=True, metadata={"help": "If enabled, runs a forward and backward pass on the model before training to force pytorch to allocate the correct size CUDA buffers up front"})
|
||||
|
||||
# Quantization
|
||||
load_in_8bit: bool = field(default=False, metadata={"help": "Set to load the base model in 8-bit mode using bitsandbytes"})
|
||||
@@ -92,6 +128,7 @@ class TrainingRunArguments:
|
||||
|
||||
add_pad_token: bool = field(default=False, metadata={"help": "If set, a pad token will be added to the tokenizer's vocabulary"})
|
||||
add_chatml_tokens: bool = field(default=False, metadata={"help": "If set, tokens for the ChatML format will be added specifically"})
|
||||
add_chatml_prompt_template: bool = field(default=False, metadata={"help": "If set, the ChatML prompt template will be set as the model's Jinja2 template"})
|
||||
gradient_checkpointing: bool = field(default=False, metadata={"help": "Enables gradient checkpointing which saves quite a lot of VRAM"})
|
||||
|
||||
run_tensorboard: bool = field(default=False, metadata={"help": "If set, will tensorboard in the background to monitor training progress"})
|
||||
@@ -120,6 +157,7 @@ else:
|
||||
|
||||
# model_kwargs["resid_pdrop"] = 0.0
|
||||
# model_kwargs["revision"] = "accfee56d8988cae60915486310362db5831b1bd"
|
||||
model_kwargs["use_cache"] = False
|
||||
|
||||
def find_max_vram(min_buffer_mib=800):
|
||||
total_mem = (torch.cuda.get_device_properties(0).total_memory / (1024 * 1024))
|
||||
@@ -153,7 +191,15 @@ if training_run_args.add_chatml_tokens:
|
||||
model.config.bos_token_id = tokenizer.bos_token_id
|
||||
model.config.eos_token_id = tokenizer.eos_token_id
|
||||
|
||||
# TODO: add chatml template to tokenizer for auto-formatting
|
||||
if training_run_args.add_chatml_prompt_template:
|
||||
tokenizer.chat_template = (
|
||||
"{% for message in messages %}"
|
||||
"{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}"
|
||||
"{% endfor %}"
|
||||
"{% if add_generation_prompt %}"
|
||||
"{{ '<|im_start|>assistant\n' }}"
|
||||
"{% endif %}"
|
||||
)
|
||||
|
||||
embeddings_len = math.ceil(len(tokenizer) / 32) * 32
|
||||
if model.get_input_embeddings().num_embeddings < embeddings_len:
|
||||
@@ -161,6 +207,8 @@ if model.get_input_embeddings().num_embeddings < embeddings_len:
|
||||
else:
|
||||
model.tie_weights()
|
||||
|
||||
# model.tie_weights()
|
||||
|
||||
if training_run_args.use_lora:
|
||||
from peft import LoraConfig, TaskType, get_peft_model, prepare_model_for_kbit_training
|
||||
print("Creating LoRA for model...")
|
||||
@@ -217,6 +265,7 @@ training_args = TrainingArguments(
|
||||
log_level="info",
|
||||
bf16=training_run_args.bf16,
|
||||
group_by_length=training_run_args.group_by_length,
|
||||
skip_memory_metrics=True,
|
||||
**training_kwargs,
|
||||
# include_inputs_for_metrics=True,
|
||||
)
|
||||
@@ -231,16 +280,12 @@ class DataCollatorForSupervisedFineTuning(object):
|
||||
prefix_ids: list[int]
|
||||
suffix_ids: list[int]
|
||||
|
||||
def __init__(self,
|
||||
*,
|
||||
tokenizer: AutoTokenizer,
|
||||
response_prefix: str = "<|im_start|>assistant",
|
||||
response_suffix: str = "<|im_end|>",
|
||||
):
|
||||
def __init__(self, *, tokenizer: AutoTokenizer):
|
||||
|
||||
self.tokenizer = tokenizer
|
||||
self.response_prefix = response_prefix
|
||||
self.response_suffix = response_suffix
|
||||
assistant_prompt = tokenizer.apply_chat_template(conversation=[{"role": "assistant", "content": r"%%%%%%%%%%%%%%%%"}], tokenize=False).split( r"%%%%%%%%%%%%%%%%")
|
||||
self.response_prefix = assistant_prompt[0]
|
||||
self.response_suffix = assistant_prompt[1]
|
||||
|
||||
self.prefix_ids = self.tokenizer(self.response_prefix, add_special_tokens=False)["input_ids"]
|
||||
self.suffix_ids = self.tokenizer(self.response_suffix, add_special_tokens=False)["input_ids"]
|
||||
@@ -331,28 +376,51 @@ if training_run_args.test_dataset:
|
||||
data_files["test"] = training_run_args.test_dataset
|
||||
datasets = load_dataset("json", data_files=data_files)
|
||||
|
||||
def tokenize(example):
|
||||
def tokenize_raw_example(batch):
|
||||
return tokenizer(
|
||||
text=example["text"],
|
||||
text=batch["text"],
|
||||
max_length=training_run_args.ctx_size,
|
||||
truncation=True,
|
||||
add_special_tokens=False,
|
||||
)
|
||||
|
||||
print("Tokenizing datasets...")
|
||||
tokenized_test_dataset = None
|
||||
tokenized_train_dataset = datasets["train"].map(tokenize, batched=True).remove_columns(["text"])
|
||||
if training_run_args.test_dataset:
|
||||
tokenized_test_dataset = datasets["test"].map(tokenize, batched=True).remove_columns(["text"])
|
||||
def tokenize_sharegpt_example(batch):
|
||||
# TODO: figure out how to properly batch this
|
||||
result = []
|
||||
for example in batch["conversations"]:
|
||||
conversation = [ { "role": x["from"], "content": x["value"] } for x in example ]
|
||||
result.append(tokenizer.apply_chat_template(
|
||||
conversation=conversation,
|
||||
max_length=training_run_args.ctx_size,
|
||||
truncation=True,
|
||||
))
|
||||
|
||||
tokens_in_train_set = sum(len(example) for example in tokenized_train_dataset["input_ids"])
|
||||
print(f"Train dataset has {int(tokens_in_train_set / 1000000)}M tokens")
|
||||
return {"input_ids": result}
|
||||
|
||||
print("Tokenizing datasets...")
|
||||
|
||||
if "text" in datasets["train"].column_names:
|
||||
tokenize_function = tokenize_raw_example
|
||||
columns_to_remove = ["text"]
|
||||
elif "conversations" in datasets["train"].column_names:
|
||||
tokenize_function = tokenize_sharegpt_example
|
||||
columns_to_remove = ["conversations"]
|
||||
else:
|
||||
raise Exception("Unknown dataset input format (not raw corpus or sharegpt)")
|
||||
|
||||
tokenized_test_dataset = None
|
||||
tokenized_train_dataset = datasets["train"].map(tokenize_function, batched=True).remove_columns(columns_to_remove)
|
||||
if training_run_args.test_dataset:
|
||||
tokenized_test_dataset = datasets["test"].map(tokenize_function, batched=True).remove_columns(columns_to_remove)
|
||||
|
||||
example_lengths = [ len(example) for example in tokenized_train_dataset["input_ids"] ]
|
||||
tokens_in_train_set, longest_example = sum(example_lengths), max(example_lengths)
|
||||
print(f"Train dataset has {int(tokens_in_train_set / 1000000)}M tokens. Longest Example: {longest_example} tokens")
|
||||
|
||||
data_collator = DataCollatorForSupervisedFineTuning(tokenizer=tokenizer)
|
||||
|
||||
import random
|
||||
from torch.utils.data import SequentialSampler, Subset, RandomSampler
|
||||
class RandomEvalSubsetTrainer(Trainer):
|
||||
class CustomTrainer(Trainer):
|
||||
"""Implement different training tweaks"""
|
||||
def __init__(self, random_eval_sample_pct=0.1, learning_rate_overshoot=1.15, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.random_eval_sample_pct = random_eval_sample_pct
|
||||
@@ -386,27 +454,13 @@ class RandomEvalSubsetTrainer(Trainer):
|
||||
Should speed up training by skipping the final fine tuning part that doesn't affect accuracy much
|
||||
"""
|
||||
return super().create_scheduler(int(num_training_steps * self.learning_rate_overshoot), optimizer=optimizer)
|
||||
|
||||
def compute_metrics(pred: EvalPrediction):
|
||||
inputs = pred.inputs
|
||||
label_ids = pred.label_ids
|
||||
logits = pred.predictions
|
||||
|
||||
return {"accuracy": 1.0 }
|
||||
|
||||
def preprocess_logits_for_metrics(logits, labels):
|
||||
"""https://discuss.huggingface.co/t/cuda-out-of-memory-when-using-trainer-with-compute-metrics/2941/22"""
|
||||
pred_ids = torch.argmax(logits, dim=-1)
|
||||
return pred_ids, labels
|
||||
|
||||
trainer = RandomEvalSubsetTrainer(
|
||||
trainer = CustomTrainer(
|
||||
model=model,
|
||||
args=training_args,
|
||||
train_dataset=tokenized_train_dataset,
|
||||
eval_dataset=tokenized_test_dataset,
|
||||
data_collator=data_collator,
|
||||
# compute_metrics=compute_metrics,
|
||||
# preprocess_logits_for_metrics=preprocess_logits_for_metrics,
|
||||
)
|
||||
|
||||
tensorboard_process = None
|
||||
@@ -418,6 +472,18 @@ if training_run_args.run_tensorboard:
|
||||
tensorboard_process = subprocess.Popen(["tensorboard", "--logdir", model_dir])
|
||||
atexit.register(kill_tensorboard)
|
||||
|
||||
# pre-allocate cuda buffers by running a forwards and backwards pass with the largest possible example length
|
||||
# the trainer dumps the cuda buffers before we start... need to figure out how to disable that
|
||||
# if training_run_args.pre_allocate_cuda_buffers:
|
||||
# print("Allocating CUDA buffers...")
|
||||
# inputs = tokenizer([""] * training_args.per_device_train_batch_size, return_tensors="pt", max_length=longest_example, padding="max_length", truncation=True)
|
||||
# inputs = {k: v.to(model.device) for k, v in inputs.items()}
|
||||
# inputs["labels"] = inputs["input_ids"]
|
||||
# outputs = model(**inputs)
|
||||
# loss = outputs.loss if isinstance(outputs, dict) else outputs[0]
|
||||
# loss.backward()
|
||||
# model.zero_grad()
|
||||
|
||||
try:
|
||||
checkpoint = training_run_args.resume_from_checkpoint
|
||||
if checkpoint:
|
||||
@@ -425,7 +491,8 @@ try:
|
||||
else:
|
||||
trainer.train()
|
||||
|
||||
# trainer.evaluate_all()
|
||||
if training_run_args.train_dataset:
|
||||
trainer.evaluate_all()
|
||||
|
||||
if training_run_args.use_lora and training_run_args.lora_merge:
|
||||
trainer.save_model() # save lora
|
||||
|
||||
Reference in New Issue
Block a user