sraivante commited on
Commit
73a8477
·
verified ·
1 Parent(s): 2b2e71d

Add verified Raspberry Pi 5 edge performance measurements

Browse files

Record actual 16 GB Pi 5 latency, RAM and correctness with frozen evaluation inputs, raw per-call measurements, runtime hashes and reproducible settings. Preserve weights and existing training data.

.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ edge_benchmarks/rpi5-2026-09-26/temperature_latency.png filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,287 +1,305 @@
1
- ---
2
- license: apache-2.0
3
- language:
4
- - en
5
- - hi
6
- pipeline_tag: text-generation
7
- tags:
8
- - text-to-json
9
- - home-automation
10
- - robotics
11
- - hinglish
12
- - tiny-model
13
- - from-scratch
14
- - edge-ai
15
- - numpy
16
- - raspberry-pi
17
- - conditional-rules
18
- - experimental
19
- datasets:
20
- - sraivante/home-commands-json-v3
21
- metrics:
22
- - exact_match
23
- model-index:
24
- - name: superfast-tiny-home-robotics-json-1m-v3
25
- results:
26
- - task:
27
- type: text-generation
28
- name: instruction to JSON device command
29
- dataset:
30
- type: sraivante/home-commands-json-v3
31
- name: home-commands-json-v3 (1,500 held-out rows, greedy decode)
32
- metrics:
33
- - type: exact_match
34
- value: 96.73
35
- name: exact match (all)
36
- verified: false
37
- - type: exact_match
38
- value: 96.89
39
- name: exact match (plain commands, n=900)
40
- verified: false
41
- - type: exact_match
42
- value: 96.50
43
- name: exact match (conditional rules, n=600)
44
- verified: false
45
- ---
46
-
47
- # Superfast Tiny Home Robotics JSON 1M v3
48
-
49
- A **1,143,328-parameter character-level transformer, trained from scratch**, that
50
- turns an English or Hinglish sentence into one JSON device command, including
51
- **conditional rules** ("if temperature goes above 42...", "roz shaam 7 baje...").
52
- Weights are **2.1 MB (fp16)**. Inference is **numpy only**: no PyTorch, no
53
- tokenizer library, no internet, no GPU.
54
-
55
- ```text
56
- "bhai bedroom ka pankha high pe chala do"
57
- -> {"activity":"air","subject":"bedroom_ceiling_fan","action":"HIGH"}
58
-
59
- "agar room ka temperature 42 se upar jaye to bedroom ka heater band kar do"
60
- -> {"activity":"heating","subject":"bedroom_room_heater","action":"OFF",
61
- "when":{"metric":"temperature","op":">","value":42}}
62
-
63
- "roz shaam 7 baje garden ki batti chala do"
64
- -> {"activity":"light","subject":"garden_light","action":"ON",
65
- "when":{"metric":"time","op":"==","value":"19:00"}}
66
-
67
- "when soil moisture drops below 20 start the garden sprinkler"
68
- -> {"activity":"garden","subject":"garden_sprinkler","action":"ON",
69
- "when":{"metric":"soil_moisture","op":"<","value":20}}
70
- ```
71
-
72
- This is the v3 of the series. Compared with
73
- [v1](https://huggingface.co/sraivante/superfast-tiny-home-robotics-json-1m-v1)
74
- (30 commands, 10 device types, transformers runtime) it covers **1,004 devices,
75
- 12 actions, 7 sensor metrics for rules**, and ships with a numpy engine plus a
76
- web UI and Docker image.
77
-
78
- | Release | Value |
79
- | --- | --- |
80
- | Publisher | sraivante |
81
- | Release date | 2026-09-26 |
82
- | Version | v3.0.0 |
83
- | Training data | [home-commands-json-v3](https://huggingface.co/datasets/sraivante/home-commands-json-v3) (synthetic, templated) |
84
- | Architecture | GPT-style causal decoder, char-level vocab (78 symbols), d=160, 4 layers, 4 heads, FFN 512, context 360 |
85
- | Parameters | 1,143,328 |
86
- | Weights | `model/model_v3_fp16.npz`, 2,146,783 bytes |
87
- | Runtime deps | `numpy` (plus `flask` for the optional server) |
88
- | License | Apache-2.0 |
89
-
90
- ## Why a tiny model and not an LLM
91
-
92
- A home robot or a Raspberry Pi behind a microphone does not need to know the
93
- capital of France. It needs to turn "pankha tez kar do" into a command in a few
94
- milliseconds, offline, on a CPU that is also doing wake-word detection. This
95
- model is that one component: the **parser** between speech-to-text and the
96
- actuator. Everything else (safety, permissions, device state) stays in
97
- deterministic code you control.
98
-
99
- Measured on this release, single request, Python 3.13, numpy 2.3, Intel
100
- Core i7-1360P, default threads:
101
-
102
- | Input | Latency |
103
- | --- | ---: |
104
- | plain command (about 30 chars) | 70 to 90 ms |
105
- | conditional rule (about 70 chars) | 130 to 150 ms |
106
- | process RSS, engine loaded + warm (Python + numpy included) | 73 MB |
107
-
108
- Latency is dominated by Python overhead per generated character, not by
109
- FLOPs. Raspberry Pi 5 and Jetson Orin Nano numbers are not yet measured;
110
- treat the table as desktop numbers.
111
-
112
- ## Quick start
113
-
114
- ```bash
115
- pip install numpy
116
- git clone https://huggingface.co/sraivante/superfast-tiny-home-robotics-json-1m-v3
117
- cd superfast-tiny-home-robotics-json-1m-v3
118
- python engine.py "kitchen ki light band kar do"
119
- # {"activity":"light","subject":"kitchen_light","action":"OFF"}
120
- ```
121
-
122
- In Python:
123
-
124
- ```python
125
- import engine
126
- engine.init("model") # loads the npz once
127
- raw, confidence = engine.parse_scored("turn off the porch light")
128
- # raw -> '{"activity":"light","subject":"porch_light","action":"OFF"}'
129
- # confidence -> avg log-prob per generated char; near 0.0 = in-domain
130
- ```
131
-
132
- Web UI + REST API (Docker, no GPU):
133
-
134
- ```bash
135
- docker compose up --build # open http://localhost:8080
136
- curl -s localhost:8080/api/parse -H 'Content-Type: application/json' \
137
- -d '{"text":"if aqi goes above 250 set the bedroom air purifier on high"}'
138
- ```
139
-
140
- The API returns the command, `valid_json`, catalog `issues`, `confidence`,
141
- `latency_ms` and a single `ok` flag. **Act only on `ok: true`.**
142
-
143
- ## How it is meant to be used (examples/)
144
-
145
- The model is a parser. `model/devices-catalog.json` is the law. Every example
146
- below runs the output through catalog validation before anything moves.
147
-
148
- | Example | What it shows |
149
- | --- | --- |
150
- | `examples/quickstart.py` | text in, validated command out, off-domain input rejected |
151
- | `examples/rule_engine.py` | what to do with the `when` clause: store it, watch sensors, fire once per crossing |
152
- | `examples/mqtt_bridge.py` | publish to `home/<subject>/set` for ESP32 / Tasmota / Zigbee2MQTT devices |
153
- | `examples/home_assistant.py` | map subjects to Home Assistant entities and call services locally |
154
-
155
- Run any of them from the repo root, all have a `--dry-run` or simulated mode:
156
-
157
- ```bash
158
- python examples/quickstart.py
159
- python examples/rule_engine.py
160
- python examples/mqtt_bridge.py --dry-run "bedroom ka pankha high pe chala do"
161
- python examples/home_assistant.py --dry-run "garden ki light band kar do"
162
- ```
163
-
164
- ### The pipeline this slots into
165
-
166
- ```text
167
- mic -> wake word -> Whisper/Vosk (Hindi+English) -> THIS MODEL -> catalog check -> actuator
168
- ~100 ms ~0 ms GPIO / MQTT / ROS
169
- ```
170
-
171
- Plain commands (no `when`) go straight to the actuator. Conditional commands are
172
- stored as rules and evaluated on every sensor tick. `rule_engine.py` output on a
173
- simulated day:
174
-
175
- ```text
176
- "agar temperature 35 se upar jaye to bedroom ka ac high kar do"
177
- RULE stored: bedroom_ac -> HIGH when temperature > 35
178
- "roz subah 6 baje garden sprinkler chalu kar do"
179
- RULE stored: garden_sprinkler -> ON when time == 06:00
180
-
181
- [sensor] temperature = 36
182
- ACTUATE bedroom_ac HIGH (temperature=36 > 35)
183
- [sensor] time = 06:00
184
- ACTUATE garden_sprinkler ON (time=06:00 == 06:00)
185
- ```
186
-
187
- ### Robotics use
188
-
189
- For a mobile robot or a robotic arm the same pattern applies: swap the device
190
- catalog for your robot's capabilities (`arm_gripper: OPEN/CLOSE`,
191
- `base_motor: START/STOP/LOW/MEDIUM/HIGH`, `head_camera: ON/OFF/STATUS`),
192
- regenerate the data with the scripts in the dataset repo, retrain for about an
193
- hour on two CPU cores, and you have a command parser that fits in the L2 cache.
194
- The `when` clause maps directly to sensor-gated behaviours
195
- ("agar battery 15 se neeche jaye to charging dock pe jao").
196
-
197
- ## Output schema
198
-
199
- ```json
200
- {"activity": "...", "subject": "...", "action": "...",
201
- "when": {"metric": "...", "op": ">|<|==", "value": 42}}
202
- ```
203
-
204
- - **1,004 subjects** in `model/devices-catalog.json`, each with its `activity`
205
- (18 of them: light, power, air, access, security, air_quality, cooling,
206
- heating, entertainment, music, garden, kitchen, office, network, water,
207
- laundry, cleaning, aquarium) and its allowed actions.
208
- - **12 actions**: ON, OFF, START, STOP, LOW, MEDIUM, HIGH, OPEN, CLOSE, LOCK,
209
- UNLOCK, STATUS.
210
- - **7 metrics** for `when`: temperature, humidity, aqi, battery, water_level,
211
- soil_moisture, time (value `"HH:MM"`, op `==`).
212
- - `when` is optional. Rules in the training data are sensible by construction:
213
- high temperature turns cooling ON or heating OFF, never the reverse.
214
-
215
- ## Confidence guard
216
-
217
- `parse_scored` returns the mean log-probability of the generated characters.
218
- In-domain commands decode at about 0.0; gibberish or off-domain sentences
219
- score clearly lower and the server flags them (default threshold -0.006, env
220
- `HCAI_CONF_THRESHOLD`). Example: "what is the capital of france" scores -0.022
221
- and is rejected. This is a useful guard, not a guarantee: command-shaped
222
- off-domain input can still slip through.
223
-
224
- ## Evaluation
225
-
226
- 1,500 held-out rows from the same generator (900 plain, 600 conditional),
227
- greedy decode, exact string match on the JSON:
228
-
229
- | Metric | Value |
230
- | --- | ---: |
231
- | exact match, all | 96.73 % |
232
- | exact match, plain | 96.89 % |
233
- | exact match, conditional | 96.50 % |
234
- | valid JSON | 100 % |
235
-
236
- Full numbers and 12 sample failures are in `model/metrics_v3.json`. The
237
- held-out rows themselves were not preserved in this release; the dataset repo
238
- ships the generators and the deterministic `prep_mix.py` (seed 108) that
239
- produced the train/eval split.
240
-
241
- ## Honest limitations
242
-
243
- - **Synthetic, templated training data.** The accuracy above measures
244
- interpolation inside the template space, not the wild. Novel or indirect
245
- phrasing ("andhera kar do", "thoda tez") fails.
246
- - **Observed misses that pass validation.** "kitchen ki chimney high pe karo"
247
- returned `STATUS` in our tests, and that is an allowed action for the
248
- chimney, so the catalog check passed it. Treat STATUS on an imperative
249
- sentence with suspicion in your own guard.
250
- - **Char-level spelling errors** in subjects happen (see sample failures);
251
- the catalog check exists exactly for that. Reject anything with issues.
252
- - **No negation, no reject class.** "fan mat chalao" can become `ON`.
253
- - **One instruction, one command.** No multi-intent, no context or pronouns.
254
- - Time rules are one-shot `==` triggers; recurrence ("roz") is not encoded
255
- separately, your scheduler decides that.
256
- - Romanised Hindi only. Devanagari input is not in the vocabulary and is
257
- silently dropped by the tokenizer.
258
-
259
- ## Adapting to your devices
260
-
261
- 1. Edit the device tables in `generators/generate_dataset_v2.py` and the rule
262
- tables in `generators/generate_dataset_v3_conditional.py` (dataset repo).
263
- 2. Regenerate and mix: `python generate_dataset_v2.py && python generate_dataset_v3_conditional.py && python prep_mix.py`
264
- 3. Retrain (needs torch; about 80 minutes on two CPU cores, minutes on a GPU):
265
- `python training/train_v3.py train --seconds 4200 && python training/train_v3.py export`
266
- 4. Drop `model_v3_fp16.npz`, `model_v3_config.json` and the new
267
- `devices-catalog.json` into `model/`.
268
-
269
- ## Files
270
-
271
- | Path | What |
272
- | --- | --- |
273
- | `model/model_v3_fp16.npz` | weights, fp16, 2.1 MB |
274
- | `model/model_v3_config.json` | vocab (`itos`) + architecture config |
275
- | `model/devices-catalog.json` | the 1,004 subjects with allowed actions |
276
- | `model/metrics_v3.json` | eval numbers and sample failures |
277
- | `engine.py` | numpy inference, kv-cached greedy decode |
278
- | `server.py`, `static/index.html` | Flask API + offline web UI |
279
- | `examples/` | quickstart, rule engine, MQTT bridge, Home Assistant bridge |
280
- | `training/train_v3.py` | full PyTorch training and export source |
281
- | `Dockerfile`, `docker-compose.yml` | 150 MB image, healthcheck included |
282
-
283
- ## License
284
-
285
- Apache-2.0 for the weights, code and catalog. The training data is fully
286
- synthetic and released under the same license in the dataset repo. No
287
- warranty: this model suggests commands, your code decides whether to obey.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ language:
4
+ - en
5
+ - hi
6
+ pipeline_tag: text-generation
7
+ tags:
8
+ - text-to-json
9
+ - home-automation
10
+ - robotics
11
+ - hinglish
12
+ - tiny-model
13
+ - from-scratch
14
+ - edge-ai
15
+ - numpy
16
+ - raspberry-pi
17
+ - conditional-rules
18
+ - experimental
19
+ datasets:
20
+ - sraivante/home-commands-json-v3
21
+ metrics:
22
+ - exact_match
23
+ model-index:
24
+ - name: superfast-tiny-home-robotics-json-1m-v3
25
+ results:
26
+ - task:
27
+ type: text-generation
28
+ name: instruction to JSON device command
29
+ dataset:
30
+ type: sraivante/home-commands-json-v3
31
+ name: home-commands-json-v3 (1,500 held-out rows, greedy decode)
32
+ metrics:
33
+ - type: exact_match
34
+ value: 96.73
35
+ name: exact match (all)
36
+ verified: false
37
+ - type: exact_match
38
+ value: 96.89
39
+ name: exact match (plain commands, n=900)
40
+ verified: false
41
+ - type: exact_match
42
+ value: 96.50
43
+ name: exact match (conditional rules, n=600)
44
+ verified: false
45
+ ---
46
+
47
+ # Superfast Tiny Home Robotics JSON 1M v3
48
+
49
+ A **1,143,328-parameter character-level transformer, trained from scratch**, that
50
+ turns an English or Hinglish sentence into one JSON device command, including
51
+ **conditional rules** ("if temperature goes above 42...", "roz shaam 7 baje...").
52
+ Weights are **2.1 MB (fp16)**. Inference is **numpy only**: no PyTorch, no
53
+ tokenizer library, no internet, no GPU.
54
+
55
+ ```text
56
+ "bhai bedroom ka pankha high pe chala do"
57
+ -> {"activity":"air","subject":"bedroom_ceiling_fan","action":"HIGH"}
58
+
59
+ "agar room ka temperature 42 se upar jaye to bedroom ka heater band kar do"
60
+ -> {"activity":"heating","subject":"bedroom_room_heater","action":"OFF",
61
+ "when":{"metric":"temperature","op":">","value":42}}
62
+
63
+ "roz shaam 7 baje garden ki batti chala do"
64
+ -> {"activity":"light","subject":"garden_light","action":"ON",
65
+ "when":{"metric":"time","op":"==","value":"19:00"}}
66
+
67
+ "when soil moisture drops below 20 start the garden sprinkler"
68
+ -> {"activity":"garden","subject":"garden_sprinkler","action":"ON",
69
+ "when":{"metric":"soil_moisture","op":"<","value":20}}
70
+ ```
71
+
72
+ This is the v3 of the series. Compared with
73
+ [v1](https://huggingface.co/sraivante/superfast-tiny-home-robotics-json-1m-v1)
74
+ (30 commands, 10 device types, transformers runtime) it covers **1,004 devices,
75
+ 12 actions, 7 sensor metrics for rules**, and ships with a numpy engine plus a
76
+ web UI and Docker image.
77
+
78
+ | Release | Value |
79
+ | --- | --- |
80
+ | Publisher | sraivante |
81
+ | Release date | 2026-09-26 |
82
+ | Version | v3.0.0 |
83
+ | Training data | [home-commands-json-v3](https://huggingface.co/datasets/sraivante/home-commands-json-v3) (synthetic, templated) |
84
+ | Architecture | GPT-style causal decoder, char-level vocab (78 symbols), d=160, 4 layers, 4 heads, FFN 512, context 360 |
85
+ | Parameters | 1,143,328 |
86
+ | Weights | `model/model_v3_fp16.npz`, 2,146,783 bytes |
87
+ | Runtime deps | `numpy` (plus `flask` for the optional server) |
88
+ | License | Apache-2.0 |
89
+
90
+ <!-- rpi5-measurements -->
91
+ ## Raspberry Pi 5 edge-device performance
92
+
93
+ Measured **2026-09-26** on a **Raspberry Pi 5 Model B, 16 GB RAM**, Debian 13.2/aarch64, Python 3.13.5. Measurement update: `edge-rpi5-20260926`; weights and training data are unchanged.
94
+
95
+ | Threads | Median ms | p95 ms | p99 ms | Serial requests/s | Process RSS MiB | CPU °C min–mean–max | Timed correct |
96
+ | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
97
+ | 1 | 410.38 | 553.20 | 558.65 | 2.53 | 43.77 | 59.0–60.9–63.4 | 500/500 |
98
+ | 4 | 393.10 | 550.26 | 553.48 | 2.55 | 44.67 | 60.0–62.0–64.5 | 500/500 |
99
+
100
+ Batch 1; 20 warmups and 500 timed calls per row, cycling over 10 frozen model-specific inputs. **Each timed reading has a matching CPU-temperature sample**, captured immediately afterward outside the latency timer; the table shows min–mean–max temperature. RSS includes Python/runtime overhead. Timings include local text-to-output inference and exclude loading, SSH/HTTP, speech recognition and actuation. Throughput is serial reciprocal mean. Runs used one and four CPU/BLAS threads sequentially. These synthetic workloads do not establish cross-model superiority or robot-control reliability.
101
+
102
+ On-device quality check: **192/200** on training-set diagnostic, NOT held-out accuracy. For v3 this is explicitly a training-set diagnostic, not held-out accuracy; the earlier 96.73% result was not rerun.
103
+
104
+ [Full Pi methodology, temperature plot and reproduction](edge_benchmarks/rpi5-2026-09-26/REPORT.md) · [Every latency/temperature reading](edge_benchmarks/rpi5-2026-09-26/readings.csv) · [Raw measurements](edge_benchmarks/rpi5-2026-09-26/results) · [Versioned evaluation data](https://huggingface.co/datasets/sraivante/home-commands-json-v3/tree/edge-rpi5-20260926/edge_benchmarks/rpi5-2026-09-26).
105
+ <!-- /rpi5-measurements -->
106
+
107
+ ## Why a tiny model and not an LLM
108
+
109
+ A home robot or a Raspberry Pi behind a microphone does not need to know the
110
+ capital of France. It needs to turn "pankha tez kar do" into a command in a few
111
+ milliseconds, offline, on a CPU that is also doing wake-word detection. This
112
+ model is that one component: the **parser** between speech-to-text and the
113
+ actuator. Everything else (safety, permissions, device state) stays in
114
+ deterministic code you control.
115
+
116
+ Measured on this release, single request, Python 3.13, numpy 2.3, Intel
117
+ Core i7-1360P, default threads:
118
+
119
+ | Input | Latency |
120
+ | --- | ---: |
121
+ | plain command (about 30 chars) | 70 to 90 ms |
122
+ | conditional rule (about 70 chars) | 130 to 150 ms |
123
+ | process RSS, engine loaded + warm (Python + numpy included) | 73 MB |
124
+
125
+ Latency is dominated by Python overhead per generated character, not by
126
+ FLOPs. Raspberry Pi 5 measurements are now recorded above; Jetson Orin Nano remains unmeasured. The table here retains the earlier desktop measurements.
127
+
128
+ ## Quick start
129
+
130
+ ```bash
131
+ pip install numpy
132
+ git clone https://huggingface.co/sraivante/superfast-tiny-home-robotics-json-1m-v3
133
+ cd superfast-tiny-home-robotics-json-1m-v3
134
+ python engine.py "kitchen ki light band kar do"
135
+ # {"activity":"light","subject":"kitchen_light","action":"OFF"}
136
+ ```
137
+
138
+ In Python:
139
+
140
+ ```python
141
+ import engine
142
+ engine.init("model") # loads the npz once
143
+ raw, confidence = engine.parse_scored("turn off the porch light")
144
+ # raw -> '{"activity":"light","subject":"porch_light","action":"OFF"}'
145
+ # confidence -> avg log-prob per generated char; near 0.0 = in-domain
146
+ ```
147
+
148
+ Web UI + REST API (Docker, no GPU):
149
+
150
+ ```bash
151
+ docker compose up --build # open http://localhost:8080
152
+ curl -s localhost:8080/api/parse -H 'Content-Type: application/json' \
153
+ -d '{"text":"if aqi goes above 250 set the bedroom air purifier on high"}'
154
+ ```
155
+
156
+ The API returns the command, `valid_json`, catalog `issues`, `confidence`,
157
+ `latency_ms` and a single `ok` flag. **Act only on `ok: true`.**
158
+
159
+ ## How it is meant to be used (examples/)
160
+
161
+ The model is a parser. `model/devices-catalog.json` is the law. Every example
162
+ below runs the output through catalog validation before anything moves.
163
+
164
+ | Example | What it shows |
165
+ | --- | --- |
166
+ | `examples/quickstart.py` | text in, validated command out, off-domain input rejected |
167
+ | `examples/rule_engine.py` | what to do with the `when` clause: store it, watch sensors, fire once per crossing |
168
+ | `examples/mqtt_bridge.py` | publish to `home/<subject>/set` for ESP32 / Tasmota / Zigbee2MQTT devices |
169
+ | `examples/home_assistant.py` | map subjects to Home Assistant entities and call services locally |
170
+
171
+ Run any of them from the repo root, all have a `--dry-run` or simulated mode:
172
+
173
+ ```bash
174
+ python examples/quickstart.py
175
+ python examples/rule_engine.py
176
+ python examples/mqtt_bridge.py --dry-run "bedroom ka pankha high pe chala do"
177
+ python examples/home_assistant.py --dry-run "garden ki light band kar do"
178
+ ```
179
+
180
+ ### The pipeline this slots into
181
+
182
+ ```text
183
+ mic -> wake word -> Whisper/Vosk (Hindi+English) -> THIS MODEL -> catalog check -> actuator
184
+ ~100 ms ~0 ms GPIO / MQTT / ROS
185
+ ```
186
+
187
+ Plain commands (no `when`) go straight to the actuator. Conditional commands are
188
+ stored as rules and evaluated on every sensor tick. `rule_engine.py` output on a
189
+ simulated day:
190
+
191
+ ```text
192
+ "agar temperature 35 se upar jaye to bedroom ka ac high kar do"
193
+ RULE stored: bedroom_ac -> HIGH when temperature > 35
194
+ "roz subah 6 baje garden sprinkler chalu kar do"
195
+ RULE stored: garden_sprinkler -> ON when time == 06:00
196
+
197
+ [sensor] temperature = 36
198
+ ACTUATE bedroom_ac HIGH (temperature=36 > 35)
199
+ [sensor] time = 06:00
200
+ ACTUATE garden_sprinkler ON (time=06:00 == 06:00)
201
+ ```
202
+
203
+ ### Robotics use
204
+
205
+ For a mobile robot or a robotic arm the same pattern applies: swap the device
206
+ catalog for your robot's capabilities (`arm_gripper: OPEN/CLOSE`,
207
+ `base_motor: START/STOP/LOW/MEDIUM/HIGH`, `head_camera: ON/OFF/STATUS`),
208
+ regenerate the data with the scripts in the dataset repo, retrain for about an
209
+ hour on two CPU cores, and you have a command parser that fits in the L2 cache.
210
+ The `when` clause maps directly to sensor-gated behaviours
211
+ ("agar battery 15 se neeche jaye to charging dock pe jao").
212
+
213
+ ## Output schema
214
+
215
+ ```json
216
+ {"activity": "...", "subject": "...", "action": "...",
217
+ "when": {"metric": "...", "op": ">|<|==", "value": 42}}
218
+ ```
219
+
220
+ - **1,004 subjects** in `model/devices-catalog.json`, each with its `activity`
221
+ (18 of them: light, power, air, access, security, air_quality, cooling,
222
+ heating, entertainment, music, garden, kitchen, office, network, water,
223
+ laundry, cleaning, aquarium) and its allowed actions.
224
+ - **12 actions**: ON, OFF, START, STOP, LOW, MEDIUM, HIGH, OPEN, CLOSE, LOCK,
225
+ UNLOCK, STATUS.
226
+ - **7 metrics** for `when`: temperature, humidity, aqi, battery, water_level,
227
+ soil_moisture, time (value `"HH:MM"`, op `==`).
228
+ - `when` is optional. Rules in the training data are sensible by construction:
229
+ high temperature turns cooling ON or heating OFF, never the reverse.
230
+
231
+ ## Confidence guard
232
+
233
+ `parse_scored` returns the mean log-probability of the generated characters.
234
+ In-domain commands decode at about 0.0; gibberish or off-domain sentences
235
+ score clearly lower and the server flags them (default threshold -0.006, env
236
+ `HCAI_CONF_THRESHOLD`). Example: "what is the capital of france" scores -0.022
237
+ and is rejected. This is a useful guard, not a guarantee: command-shaped
238
+ off-domain input can still slip through.
239
+
240
+ ## Evaluation
241
+
242
+ 1,500 held-out rows from the same generator (900 plain, 600 conditional),
243
+ greedy decode, exact string match on the JSON:
244
+
245
+ | Metric | Value |
246
+ | --- | ---: |
247
+ | exact match, all | 96.73 % |
248
+ | exact match, plain | 96.89 % |
249
+ | exact match, conditional | 96.50 % |
250
+ | valid JSON | 100 % |
251
+
252
+ Full numbers and 12 sample failures are in `model/metrics_v3.json`. The
253
+ held-out rows themselves were not preserved in this release; the dataset repo
254
+ ships the generators and the deterministic `prep_mix.py` (seed 108) that
255
+ describes the train/eval construction. The preserved 340,000-row training mix differs from the shipped script's configured counts; exact reconstruction of the missing historical evaluation split is unverified. The new Pi diagnostic uses a frozen sample from the preserved training mix and does not re-estimate the historical held-out score.
256
+
257
+ ## Honest limitations
258
+
259
+ - **Synthetic, templated training data.** The accuracy above measures
260
+ interpolation inside the template space, not the wild. Novel or indirect
261
+ phrasing ("andhera kar do", "thoda tez") fails.
262
+ - **Observed misses that pass validation.** "kitchen ki chimney high pe karo"
263
+ returned `STATUS` in our tests, and that is an allowed action for the
264
+ chimney, so the catalog check passed it. Treat STATUS on an imperative
265
+ sentence with suspicion in your own guard.
266
+ - **Char-level spelling errors** in subjects happen (see sample failures);
267
+ the catalog check exists exactly for that. Reject anything with issues.
268
+ - **No negation, no reject class.** "fan mat chalao" can become `ON`.
269
+ - **One instruction, one command.** No multi-intent, no context or pronouns.
270
+ - Time rules are one-shot `==` triggers; recurrence ("roz") is not encoded
271
+ separately, your scheduler decides that.
272
+ - Romanised Hindi only. Devanagari input is not in the vocabulary and is
273
+ silently dropped by the tokenizer.
274
+
275
+ ## Adapting to your devices
276
+
277
+ 1. Edit the device tables in `generators/generate_dataset_v2.py` and the rule
278
+ tables in `generators/generate_dataset_v3_conditional.py` (dataset repo).
279
+ 2. Regenerate and mix: `python generate_dataset_v2.py && python generate_dataset_v3_conditional.py && python prep_mix.py`
280
+ 3. Retrain (needs torch; about 80 minutes on two CPU cores, minutes on a GPU):
281
+ `python training/train_v3.py train --seconds 4200 && python training/train_v3.py export`
282
+ 4. Drop `model_v3_fp16.npz`, `model_v3_config.json` and the new
283
+ `devices-catalog.json` into `model/`.
284
+
285
+ ## Files
286
+
287
+ | Path | What |
288
+ | --- | --- |
289
+ | `model/model_v3_fp16.npz` | weights, fp16, 2.1 MB |
290
+ | `model/model_v3_config.json` | vocab (`itos`) + architecture config |
291
+ | `model/devices-catalog.json` | the 1,004 subjects with allowed actions |
292
+ | `model/metrics_v3.json` | eval numbers and sample failures |
293
+ | `engine.py` | numpy inference, kv-cached greedy decode |
294
+ | `server.py`, `static/index.html` | Flask API + offline web UI |
295
+ | `examples/` | quickstart, rule engine, MQTT bridge, Home Assistant bridge |
296
+ | `training/train_v3.py` | full PyTorch training and export source |
297
+ | `Dockerfile`, `docker-compose.yml` | 150 MB image, healthcheck included |
298
+
299
+ ## License
300
+
301
+ Apache-2.0 for the weights, code and catalog. The training data is fully
302
+ synthetic and released under the same license in the dataset repo. No
303
+ warranty: this model suggests commands, your code decides whether to obey.
304
+
305
+ Copyright (c) 2026 sraivante applies only to original material and selection/arrangement contributed by the user; third-party ownership and licenses remain unchanged.
edge_benchmarks/rpi5-2026-09-26/REPORT.md ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Raspberry Pi 5 measurements — Tiny Home Robotics JSON 1M v3
2
+
3
+ Measured on 2026-09-26; measurement revision `edge-rpi5-20260926`. The model weights and training data were not changed.
4
+
5
+ Hardware: **Raspberry Pi 5 Model B Rev 1.1**, 15.84 GiB OS-visible RAM (16 GB model), four CPU cores, aarch64, Debian 13.2, kernel `6.12.47+rpt-rpi-2712`. Python 3.13.5. The device's governor and library versions are recorded in each JSON result. Cooling and power-supply model were not inspected.
6
+
7
+ ## Measured performance
8
+
9
+ | Threads | Median ms | p95 ms | p99 ms | Serial requests/s | Process RSS MiB | CPU °C min–mean–max | Timed correct |
10
+ | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
11
+ | 1 | 410.38 | 553.20 | 558.65 | 2.53 | 43.77 | 59.0–60.9–63.4 | 500/500 |
12
+ | 4 | 393.10 | 550.26 | 553.48 | 2.55 | 44.67 | 60.0–62.0–64.5 | 500/500 |
13
+
14
+ Each row is a separate sequential process: batch 1, 20 warmups, 500 timed requests cycling over 10 frozen synthetic inputs. Timing covers the adapter's complete local text-to-output call; it excludes model loading, SSH/network transfer, HTTP/UI, speech recognition, and actuation. RSS includes Python and runtime overhead. Peak RSS is Linux VmHWM sampled after the timed loop and includes imports/initialization. Serial requests/s is 1000 divided by mean latency; it is not concurrent-serving throughput. These model-specific input sets do not establish a controlled cross-model speed ranking.
15
+
16
+ Runtime: FP16 NPZ storage expanded to FP32 NumPy; KV-cached greedy character generation, max_new=170; JSON parsing included, catalog validation excluded.
17
+
18
+ Thread counts set PyTorch/BLAS intra-op limits; PyTorch inter-op is one. No CPU affinity or power mode was changed. Actual loaded thread-pool metadata is in the raw results.
19
+
20
+ The benchmark runs left existing host services running. CPU temperature is read immediately after **every timed inference**, outside the latency timer, with per-call UTC timestamps. Sensor reads add a small gap between requests. The table reports the minimum, mean and maximum of those 500 matched temperature readings per row. The sensor types are recorded in each JSON. Thread configurations ran one then four without a controlled cooldown; temperatures depend on run order and background load. Start/end snapshots ranged from 60.0 to 64.5 °C; observed firmware flags: `throttled=0x0`. This short run is not a power or long-duration stability measurement.
21
+
22
+ ![Latency and CPU temperature for each reading](temperature_latency.png)
23
+
24
+ [Download all matched latency/temperature readings](readings.csv). Mean latency, import/load times and peak RSS are in the raw result JSON.
25
+
26
+ ## Command correctness on this device
27
+
28
+ | Diagnostic group | Correct / cases |
29
+ | --- | ---: |
30
+ | training_plain | 95/100 |
31
+ | training_conditional | 97/100 |
32
+
33
+ training-set diagnostic, NOT held-out accuracy. Historical 1500-row evaluation file is absent locally and from the published dataset. This diagnostic does not reproduce or replace the historical 96.73% result. The shipped prep_mix.py has different training-count settings from the published 340000-row snapshot.
34
+
35
+ Timed-correct counts above describe the repeated ten-input latency set, not an independent accuracy estimate. Recorded inference errors: 0 across the timed runs. No model retraining, output correction, host action or device actuation was performed.
36
+
37
+ ## Artifact and dataset identity
38
+
39
+ - Published model tested: [`sraivante/superfast-tiny-home-robotics-json-1m-v3@2b2e71d37ea9fa0fe6ab247b6a74e8db774fb6f2`](https://huggingface.co/sraivante/superfast-tiny-home-robotics-json-1m-v3/tree/2b2e71d37ea9fa0fe6ab247b6a74e8db774fb6f2). All tested runtime assets were checked against this revision.
40
+ - Learned weight SHA-256: `fc749ecd89c1ae30a159d6d701036298b5583645b7fbf114311e006929c8778b` (2,146,783 bytes).
41
+ - Associated preserved training dataset: [`sraivante/home-commands-json-v3@da10aca352a34cb2834a049867f6f2e9fcc30e3e`](https://huggingface.co/datasets/sraivante/home-commands-json-v3/tree/da10aca352a34cb2834a049867f6f2e9fcc30e3e). Existing source/split hashes and historical provenance remain in that snapshot. No fine-tuning was performed for this measurement update.
42
+ - The [versioned evaluation inputs and Pi predictions](https://huggingface.co/datasets/sraivante/home-commands-json-v3/tree/edge-rpi5-20260926/edge_benchmarks/rpi5-2026-09-26) record the new diagnostic snapshot. `provenance.json` records its hashes, counts, source revisions, and historical identity limitations.
43
+ - [Runtime identity check](runtime_identity.json); [raw per-call records](results); [exact environment](environment.lock.txt).
44
+
45
+ ## Reproduce
46
+
47
+ Use a 64-bit Raspberry Pi in an isolated environment. Download this model repository at `edge-rpi5-20260926`, then run:
48
+
49
+ ```bash
50
+ python3 -m venv .venv
51
+ . .venv/bin/activate
52
+ python -m pip install -r edge_benchmarks/rpi5-2026-09-26/environment.lock.txt
53
+ python edge_benchmarks/rpi5-2026-09-26/reproduce.py --threads 1
54
+ python edge_benchmarks/rpi5-2026-09-26/reproduce.py --threads 4
55
+ ```
56
+
57
+ The helper downloads the pinned runtime files above, checks SHA-256, stages the exact case files, and invokes the included `benchmark.py`. It refuses to report a non-Pi host as a Pi result. Downloading requires network access; timed inference runs offline. The original run's full bundle hash differs from the per-model reproduction manifest; the original hash is retained inside each result.
58
+
59
+ ## License and limitations
60
+
61
+ Copyright (c) 2026 sraivante for original benchmark code, evaluation material and selection/arrangement, under Apache License 2.0. Third-party ownership and licenses remain unchanged. Synthetic/regression diagnostics do not establish real-user or robot-control reliability. Existing model-specific limitations still apply; latency is not a safety or end-to-end performance guarantee.
edge_benchmarks/rpi5-2026-09-26/benchmark.py ADDED
@@ -0,0 +1,268 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Batch-one inference benchmark for five frozen workspace projects.
2
+
3
+ No executor, host adapter, server, MQTT, or GPIO code is imported or called.
4
+ Copyright (c) 2026 sraivante. Licensed under Apache License 2.0.
5
+ """
6
+ from __future__ import annotations
7
+
8
+ import argparse
9
+ from collections import defaultdict
10
+ from datetime import datetime, timezone
11
+ import hashlib
12
+ import importlib.metadata
13
+ import json
14
+ import os
15
+ from pathlib import Path
16
+ import platform
17
+ import statistics
18
+ import subprocess
19
+ import sys
20
+ import time
21
+
22
+ HERE = Path(__file__).resolve().parent
23
+
24
+
25
+ def digest(path):
26
+ with Path(path).open("rb") as stream:
27
+ return hashlib.file_digest(stream, "sha256").hexdigest()
28
+
29
+
30
+ def read_text(path):
31
+ try:
32
+ return Path(path).read_text().strip("\x00\n")
33
+ except OSError:
34
+ return None
35
+
36
+
37
+ def host_state():
38
+ import psutil
39
+ throttled = None
40
+ try:
41
+ throttled = subprocess.check_output(["vcgencmd", "get_throttled"], text=True, timeout=5).strip()
42
+ except (OSError, subprocess.SubprocessError):
43
+ pass
44
+ return {
45
+ "load_average": list(os.getloadavg()) if hasattr(os, "getloadavg") else None,
46
+ "available_ram_bytes": psutil.virtual_memory().available,
47
+ "temperature_c": {p.parent.name: float(p.read_text()) / 1000
48
+ for p in Path("/sys/class/thermal").glob("thermal_zone*/temp")},
49
+ "cpu_frequency_khz": {p.parent.parent.name: int(p.read_text())
50
+ for p in Path("/sys/devices/system/cpu").glob("cpu*/cpufreq/scaling_cur_freq")},
51
+ "throttled": throttled,
52
+ }
53
+
54
+
55
+ def hardware():
56
+ import psutil
57
+ return {"raspberry_pi_model": read_text("/proc/device-tree/model"),
58
+ "system": platform.system(), "kernel": platform.release(),
59
+ "architecture": platform.machine(), "os_release": read_text("/etc/os-release"),
60
+ "logical_cpus": psutil.cpu_count(), "physical_cpus": psutil.cpu_count(logical=False),
61
+ "ram_bytes": psutil.virtual_memory().total,
62
+ "temperature_sensor_types": {p.parent.name: p.read_text().strip()
63
+ for p in Path("/sys/class/thermal").glob("thermal_zone*/type")},
64
+ "governors": {p.parent.parent.name: p.read_text().strip()
65
+ for p in Path("/sys/devices/system/cpu").glob("cpu*/cpufreq/scaling_governor")}}
66
+
67
+
68
+ def memory():
69
+ import psutil
70
+ info = psutil.Process().memory_info()._asdict()
71
+ status = read_text("/proc/self/status") or ""
72
+ for line in status.splitlines():
73
+ if line.startswith("VmHWM:"):
74
+ info["peak_rss"] = int(line.split()[1]) * 1024
75
+ return info
76
+
77
+
78
+ def temperature():
79
+ return {p.parent.name: float(p.read_text()) / 1000
80
+ for p in Path("/sys/class/thermal").glob("thermal_zone*/temp")}
81
+
82
+
83
+ def summary(values):
84
+ ordered = sorted(values)
85
+ def quantile(q):
86
+ rank = (len(ordered) - 1) * q
87
+ lo = int(rank)
88
+ hi = min(lo + 1, len(ordered) - 1)
89
+ return ordered[lo] + (ordered[hi] - ordered[lo]) * (rank - lo)
90
+ return {"n": len(values), "mean": statistics.mean(values), "p50": quantile(.5),
91
+ "p95": quantile(.95), "p99": quantile(.99), "min": min(values), "max": max(values)}
92
+
93
+
94
+ def load_adapter(key, root, threads):
95
+ start = time.perf_counter()
96
+ if key == "poc1":
97
+ sys.path.insert(0, str(root))
98
+ import torch
99
+ from tiny_json_llm.infer import JsonCommandModel
100
+ torch.set_num_threads(threads)
101
+ torch.set_num_interop_threads(1)
102
+ imports = time.perf_counter() - start
103
+ start = time.perf_counter()
104
+ model = JsonCommandModel(root / "best_model", device="cpu")
105
+ predict = lambda row: model.predict(row["text"])
106
+ params = sum(p.numel() for p in model.model.parameters())
107
+ mode = "FP32 PyTorch; greedy generation constrained to the 30 training-observed JSON commands"
108
+ elif key == "poc2":
109
+ sys.path.insert(0, str(root))
110
+ import engine
111
+ imports = time.perf_counter() - start
112
+ start = time.perf_counter()
113
+ engine.init(str(root / "model"))
114
+ predict = lambda row: json.loads(engine.parse_scored(row["text"])[0])
115
+ params = sum(p.size for p in engine._W.values())
116
+ mode = "FP16 NPZ storage expanded to FP32 NumPy; KV-cached greedy character generation, max_new=170; JSON parsing included, catalog validation excluded"
117
+ elif key == "poc3":
118
+ sys.path.insert(0, str(root))
119
+ from edge_command import Interpreter
120
+ imports = time.perf_counter() - start
121
+ start = time.perf_counter()
122
+ model = Interpreter(str(root))
123
+ predict = lambda row: model.parse(row["text"])
124
+ params = None
125
+ mode = "Standard-library action classifier with rules and read-only SQLite catalog; not an autoregressive LLM"
126
+ elif key == "agent_claude":
127
+ sys.path.insert(0, str(root / "model"))
128
+ from runtime import CommandModel
129
+ imports = time.perf_counter() - start
130
+ start = time.perf_counter()
131
+ model = CommandModel(str(root / "artifacts/final"))
132
+ def predict(row):
133
+ value = model.predict(row["text"])
134
+ return {k: v for k, v in value.items() if k != "_meta"}
135
+ params = sum(p.size for p in model.W.values())
136
+ mode = "NumPy encoder/decoder transformer with grammar constraints; FP32 runtime; includes normalization and JSON conversion"
137
+ elif key == "agent_codex":
138
+ sys.path.insert(0, str(root / "app"))
139
+ from inference import local_model, predict as infer
140
+ imports = time.perf_counter() - start
141
+ start = time.perf_counter()
142
+ local_model()
143
+ predict = lambda row: infer(row["text"], platform=row.get("platform", "pi"), engine="local")
144
+ params = None
145
+ mode = "scikit-learn intent classifier with policy and argument parsing; not an autoregressive LLM; no host execution"
146
+ else:
147
+ raise ValueError(key)
148
+ return predict, params, mode, imports, time.perf_counter() - start
149
+
150
+
151
+ def outcome(row, value, error):
152
+ if row.get("match") == "rejection":
153
+ return bool(error or (isinstance(value, dict) and ("error" in value or value.get("action") in {"unknown", "REJECT", "NOOP", "CLARIFY", "ABSTAIN"})))
154
+ if error:
155
+ return False
156
+ if row.get("match") == "subset":
157
+ return isinstance(value, dict) and all(value.get(k) == v for k, v in row["expected"].items())
158
+ return value == row["expected"]
159
+
160
+
161
+ def call(predict, row):
162
+ started = time.perf_counter_ns()
163
+ try:
164
+ value, error = predict(row), None
165
+ except (ValueError, KeyError, IndexError) as exc:
166
+ value, error = None, f"{type(exc).__name__}: {exc}"
167
+ elapsed = (time.perf_counter_ns() - started) / 1e6
168
+ return value, error, elapsed
169
+
170
+
171
+ def main():
172
+ parser = argparse.ArgumentParser(description=__doc__)
173
+ parser.add_argument("--model", required=True)
174
+ parser.add_argument("--threads", type=int, default=1, choices=(1, 4))
175
+ parser.add_argument("--repeats", type=int, default=500)
176
+ parser.add_argument("--warmup", type=int, default=20)
177
+ parser.add_argument("--quality", action="store_true")
178
+ parser.add_argument("--allow-nonpi", action="store_true", help="Development checks only, recorded as non-Pi")
179
+ parser.add_argument("--out", type=Path, required=True)
180
+ args = parser.parse_args()
181
+ assert args.repeats >= 20 and args.warmup >= 0
182
+ for name in ("OMP_NUM_THREADS", "OPENBLAS_NUM_THREADS", "MKL_NUM_THREADS", "BLIS_NUM_THREADS", "VECLIB_MAXIMUM_THREADS", "NUMEXPR_NUM_THREADS"):
183
+ os.environ[name] = str(args.threads)
184
+ os.environ["TOKENIZERS_PARALLELISM"] = "false"
185
+ os.environ["HF_HUB_OFFLINE"] = "1"
186
+ host = hardware()
187
+ is_pi = bool(host["raspberry_pi_model"] and "Raspberry Pi" in host["raspberry_pi_model"])
188
+ assert is_pi or args.allow_nonpi, "This run must execute on real Raspberry Pi hardware"
189
+ manifest = json.loads((HERE / "bundle_manifest.json").read_text())
190
+ spec = manifest["models"][args.model]
191
+ # Verify the full runtime and evaluation input before importing any model code.
192
+ for rel, entry in spec["files"].items():
193
+ assert digest(HERE / rel) == entry["sha256"], f"Frozen input differs: {rel}"
194
+ latency_cases = json.loads((HERE / "cases" / f"{args.model}_latency.json").read_text())
195
+ before = host_state()
196
+ memory_before = memory()
197
+ predict, params, mode, import_s, load_s = load_adapter(args.model, HERE / "projects" / args.model, args.threads)
198
+ memory_loaded = memory()
199
+ for i in range(args.warmup):
200
+ call(predict, latency_cases[i % len(latency_cases)])
201
+ samples = []
202
+ for i in range(args.repeats):
203
+ row = latency_cases[i % len(latency_cases)]
204
+ started_utc = datetime.now(timezone.utc).isoformat()
205
+ value, error, elapsed = call(predict, row)
206
+ samples.append({"case_id": row["id"], "elapsed_ms": elapsed,
207
+ "started_utc": started_utc, "temperature_c": temperature(),
208
+ "temperature_sampled_utc": datetime.now(timezone.utc).isoformat(),
209
+ "correct": outcome(row, value, error), "output": value, "error": error})
210
+ if (i + 1) % 100 == 0:
211
+ print(f"{args.model} threads={args.threads}: latency {i + 1}/{args.repeats}", flush=True)
212
+ memory_after_latency, after_latency = memory(), host_state()
213
+ lat = summary([s["elapsed_ms"] for s in samples])
214
+ result = {"created_utc": datetime.now(timezone.utc).isoformat(), "model": args.model,
215
+ "is_raspberry_pi": is_pi, "hardware": host, "environment_before": before,
216
+ "environment_after_latency": after_latency,
217
+ "bundle_manifest_sha256": digest(HERE / "bundle_manifest.json"),
218
+ "benchmark_script_sha256": digest(Path(__file__)), "model_spec": spec,
219
+ "settings": {"threads_requested": args.threads, "batch_size": 1,
220
+ "warmup_requests": args.warmup, "timed_requests": args.repeats,
221
+ "unique_latency_cases": len(latency_cases), "mode": mode,
222
+ "cpu_pinning": False, "power_mode_changed": False},
223
+ "parameters": params, "import_seconds": import_s, "load_seconds_after_import": load_s,
224
+ "latency_ms": lat, "serial_requests_per_second": 1000 / lat["mean"],
225
+ "timed_correct": sum(s["correct"] for s in samples),
226
+ "timed_errors": sum(s["error"] is not None for s in samples),
227
+ "memory_bytes": {"before_runtime_import": memory_before, "after_model_load": memory_loaded,
228
+ "after_latency": memory_after_latency},
229
+ "latency_samples": samples,
230
+ "temperature_measurement": "Linux thermal-zone CPU temperature read immediately after every timed inference, outside the latency timer; start and temperature-read UTC timestamps are retained per call. Sensor reads add a small gap between requests. These samples do not establish power consumption or a long-duration thermal limit.",
231
+ "measurement_scope": "Warm local Python process, full text-to-structured-output call through the specified adapter, serial batch one. Timing excludes SSH, HTTP/UI, model loading, speech recognition, actuation and per-call correctness checks. Small repeated synthetic input set with warm OS/model caches; throughput is reciprocal mean, not concurrent serving. Other host services were left running. No power meter or sustained thermal test; cooling and power-supply model were not inspected."}
232
+ result["software"] = {"python": platform.python_version(), "sqlite": __import__("sqlite3").sqlite_version}
233
+ for package in ("torch", "transformers", "tokenizers", "safetensors", "numpy", "scipy", "scikit-learn", "joblib", "threadpoolctl", "psutil"):
234
+ try:
235
+ result["software"][package] = importlib.metadata.version(package)
236
+ except importlib.metadata.PackageNotFoundError:
237
+ pass
238
+ try:
239
+ from threadpoolctl import threadpool_info
240
+ result["thread_pools"] = [{k: v for k, v in p.items() if k != "filepath"} for p in threadpool_info()]
241
+ except ImportError:
242
+ result["thread_pools"] = []
243
+ if args.quality:
244
+ rows = json.loads((HERE / "cases" / f"{args.model}_quality.json").read_text())
245
+ predictions, groups = [], defaultdict(list)
246
+ for i, row in enumerate(rows):
247
+ value, error, elapsed = call(predict, row)
248
+ ok = outcome(row, value, error)
249
+ predictions.append({**row, "output": value, "error": error, "correct": ok, "elapsed_ms": elapsed,
250
+ "temperature_c": temperature(), "temperature_sampled_utc": datetime.now(timezone.utc).isoformat()})
251
+ groups[row["category"]].append(ok)
252
+ if (i + 1) % 100 == 0:
253
+ print(f"{args.model}: quality {i + 1}/{len(rows)}", flush=True)
254
+ result["quality"] = {"cases": len(rows), "correct": sum(p["correct"] for p in predictions),
255
+ "by_category": {k: {"n": len(v), "correct": sum(v)} for k, v in groups.items()},
256
+ "provenance": spec["quality_provenance"], "predictions": predictions}
257
+ result["environment_after_quality"] = host_state()
258
+ args.out.parent.mkdir(parents=True, exist_ok=True)
259
+ temporary = args.out.with_suffix(".partial.json")
260
+ temporary.write_text(json.dumps(result, indent=2, ensure_ascii=False) + "\n", encoding="utf-8")
261
+ temporary.replace(args.out)
262
+ print(json.dumps({"model": args.model, "threads": args.threads, "latency_ms": lat,
263
+ "rss_mib": memory_after_latency["rss"] / 1024**2,
264
+ "timed_correct": result["timed_correct"], "result": str(args.out)}), flush=True)
265
+
266
+
267
+ if __name__ == "__main__":
268
+ main()
edge_benchmarks/rpi5-2026-09-26/bundle_manifest.json ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "models": {
3
+ "poc2": {
4
+ "workspace_project": "POC-2-claude/home-command-ai",
5
+ "weight_sha256": "fc749ecd89c1ae30a159d6d701036298b5583645b7fbf114311e006929c8778b",
6
+ "weight_bytes": 2146783,
7
+ "files": {
8
+ "projects/poc2/engine.py": {
9
+ "bytes": 3775,
10
+ "sha256": "bbc051221dae5c7238e7a76dae4872584c03f3db366a78980f0ea0cf5caaa18e",
11
+ "workspace_source": "POC-2-claude/home-command-ai/engine.py"
12
+ },
13
+ "projects/poc2/model/devices-catalog.json": {
14
+ "bytes": 136537,
15
+ "sha256": "473e5850e6f9d05abf4a7806121bb42464f760fed2de589fa58accebeef72af4",
16
+ "workspace_source": "POC-2-claude/home-command-ai/model/devices-catalog.json"
17
+ },
18
+ "projects/poc2/model/metrics_v3.json": {
19
+ "bytes": 2587,
20
+ "sha256": "884ba39090267af42bd6b4d4092ef3905b2674aa1f6f540b7e77e731d951ce8b",
21
+ "workspace_source": "POC-2-claude/home-command-ai/model/metrics_v3.json"
22
+ },
23
+ "projects/poc2/model/model_v3_config.json": {
24
+ "bytes": 520,
25
+ "sha256": "11b221bcf0e5b8c512ead8df19b9d4db6ee5fa2182efd6f66a9c1729eabad004",
26
+ "workspace_source": "POC-2-claude/home-command-ai/model/model_v3_config.json"
27
+ },
28
+ "projects/poc2/model/model_v3_fp16.npz": {
29
+ "bytes": 2146783,
30
+ "sha256": "fc749ecd89c1ae30a159d6d701036298b5583645b7fbf114311e006929c8778b",
31
+ "workspace_source": "POC-2-claude/home-command-ai/model/model_v3_fp16.npz"
32
+ },
33
+ "cases/poc2_quality.json": {
34
+ "bytes": 76322,
35
+ "sha256": "e61640a601ca3e354a74be3dcb6506ba24171a343c290b96fa53f7deee899232"
36
+ },
37
+ "cases/poc2_latency.json": {
38
+ "bytes": 3852,
39
+ "sha256": "77930a99ff035b3774bf65b261a302b7a5bff7608c5a4ae99241847164be2cff"
40
+ }
41
+ },
42
+ "quality_provenance": {
43
+ "kind": "training-set diagnostic, NOT held-out accuracy",
44
+ "source": "POC-2-claude\\home-command-ai\\data\\train_mix.jsonl.xz",
45
+ "sha256": "c8851122dc01787e9674532c5cfb1cf7260212c52c9800e37622b28167bb9838",
46
+ "sampling": "stratified reservoir, 100 plain + 100 conditional; seed 20260926",
47
+ "source_counts": {
48
+ "plain": 140000,
49
+ "conditional": 200000
50
+ },
51
+ "notes": "Historical 1500-row evaluation file is absent locally and from the published dataset. This diagnostic does not reproduce or replace the historical 96.73% result. The shipped prep_mix.py has different training-count settings from the published 340000-row snapshot."
52
+ },
53
+ "hf": {
54
+ "model": "sraivante/superfast-tiny-home-robotics-json-1m-v3",
55
+ "dataset": "sraivante/home-commands-json-v3",
56
+ "local_weight": "POC-2-claude/home-command-ai/model/model_v3_fp16.npz",
57
+ "weight_name": "model_v3_fp16.npz",
58
+ "repositories": {
59
+ "model": {
60
+ "repo_id": "sraivante/superfast-tiny-home-robotics-json-1m-v3",
61
+ "commit": "2b2e71d37ea9fa0fe6ab247b6a74e8db774fb6f2",
62
+ "files": [
63
+ {
64
+ "path": ".gitattributes",
65
+ "bytes": 1519,
66
+ "sha256": null
67
+ },
68
+ {
69
+ "path": "Dockerfile",
70
+ "bytes": 441,
71
+ "sha256": null
72
+ },
73
+ {
74
+ "path": "LICENSE",
75
+ "bytes": 11358,
76
+ "sha256": null
77
+ },
78
+ {
79
+ "path": "README.md",
80
+ "bytes": 11417,
81
+ "sha256": null
82
+ },
83
+ {
84
+ "path": "docker-compose.yml",
85
+ "bytes": 329,
86
+ "sha256": null
87
+ },
88
+ {
89
+ "path": "engine.py",
90
+ "bytes": 3775,
91
+ "sha256": null
92
+ },
93
+ {
94
+ "path": "examples/hcai_client.py",
95
+ "bytes": 3249,
96
+ "sha256": null
97
+ },
98
+ {
99
+ "path": "examples/home_assistant.py",
100
+ "bytes": 3442,
101
+ "sha256": null
102
+ },
103
+ {
104
+ "path": "examples/mqtt_bridge.py",
105
+ "bytes": 1459,
106
+ "sha256": null
107
+ },
108
+ {
109
+ "path": "examples/quickstart.py",
110
+ "bytes": 937,
111
+ "sha256": null
112
+ },
113
+ {
114
+ "path": "examples/rule_engine.py",
115
+ "bytes": 2832,
116
+ "sha256": null
117
+ },
118
+ {
119
+ "path": "model/devices-catalog.json",
120
+ "bytes": 136537,
121
+ "sha256": null
122
+ },
123
+ {
124
+ "path": "model/metrics_v3.json",
125
+ "bytes": 2587,
126
+ "sha256": null
127
+ },
128
+ {
129
+ "path": "model/model_v3_config.json",
130
+ "bytes": 520,
131
+ "sha256": null
132
+ },
133
+ {
134
+ "path": "model/model_v3_fp16.npz",
135
+ "bytes": 2146783,
136
+ "sha256": "fc749ecd89c1ae30a159d6d701036298b5583645b7fbf114311e006929c8778b"
137
+ },
138
+ {
139
+ "path": "requirements.txt",
140
+ "bytes": 23,
141
+ "sha256": null
142
+ },
143
+ {
144
+ "path": "server.py",
145
+ "bytes": 3786,
146
+ "sha256": null
147
+ },
148
+ {
149
+ "path": "static/index.html",
150
+ "bytes": 9594,
151
+ "sha256": null
152
+ },
153
+ {
154
+ "path": "training/train_v3.py",
155
+ "bytes": 11519,
156
+ "sha256": null
157
+ }
158
+ ]
159
+ },
160
+ "dataset": {
161
+ "repo_id": "sraivante/home-commands-json-v3",
162
+ "commit": "da10aca352a34cb2834a049867f6f2e9fcc30e3e",
163
+ "files": [
164
+ {
165
+ "path": ".gitattributes",
166
+ "bytes": 2504,
167
+ "sha256": null
168
+ },
169
+ {
170
+ "path": "LICENSE",
171
+ "bytes": 11358,
172
+ "sha256": null
173
+ },
174
+ {
175
+ "path": "README.md",
176
+ "bytes": 5926,
177
+ "sha256": null
178
+ },
179
+ {
180
+ "path": "data/conditional_source.jsonl.gz",
181
+ "bytes": 6279490,
182
+ "sha256": "d5b6739202a0caa73b8a12452387651fa844566d47565e3876c5a3ce7ad6193e"
183
+ },
184
+ {
185
+ "path": "data/train.jsonl.gz",
186
+ "bytes": 13302264,
187
+ "sha256": "d8afeacfed666784b446cef68f1e8aeb12d9ebbe4032424dec2c0db9f664e79b"
188
+ },
189
+ {
190
+ "path": "generators/generate_dataset_v2.py",
191
+ "bytes": 29188,
192
+ "sha256": null
193
+ },
194
+ {
195
+ "path": "generators/generate_dataset_v3_conditional.py",
196
+ "bytes": 10612,
197
+ "sha256": null
198
+ },
199
+ {
200
+ "path": "generators/prep_mix.py",
201
+ "bytes": 1278,
202
+ "sha256": null
203
+ },
204
+ {
205
+ "path": "metadata/devices-catalog.json",
206
+ "bytes": 136537,
207
+ "sha256": null
208
+ },
209
+ {
210
+ "path": "source/dataset_v3_conditional.jsonl.xz",
211
+ "bytes": 4245312,
212
+ "sha256": "f5b997f808688c535cf0abd195390a8ba20deb6cfe3a4b8b2262624242552b86"
213
+ },
214
+ {
215
+ "path": "source/train_mix.jsonl.xz",
216
+ "bytes": 4951908,
217
+ "sha256": "c8851122dc01787e9674532c5cfb1cf7260212c52c9800e37622b28167bb9838"
218
+ }
219
+ ]
220
+ }
221
+ },
222
+ "remote_weight_path": "model/model_v3_fp16.npz",
223
+ "verified_weight_sha256": "fc749ecd89c1ae30a159d6d701036298b5583645b7fbf114311e006929c8778b"
224
+ },
225
+ "publication": "existing model and dataset repositories"
226
+ }
227
+ },
228
+ "scope": "Per-model reproduction projection; the original run manifest hash is preserved in raw results."
229
+ }
edge_benchmarks/rpi5-2026-09-26/cases/poc2_latency.json ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "id": "poc2-0000",
4
+ "text": "quickly open drawing room windows quickly",
5
+ "expected": {
6
+ "activity": "access",
7
+ "subject": "drawing_room_window",
8
+ "action": "OPEN"
9
+ },
10
+ "match": "exact",
11
+ "category": "training_plain",
12
+ "source_row_zero_based": 82695
13
+ },
14
+ {
15
+ "id": "poc2-0001",
16
+ "text": "SWITCH ON THE FIRST FLOOR KITCHEN TUBE LIGHT RIGHT NOW PLEASE!",
17
+ "expected": {
18
+ "activity": "light",
19
+ "subject": "first_floor_kitchen_tube_light",
20
+ "action": "ON"
21
+ },
22
+ "match": "exact",
23
+ "category": "training_plain",
24
+ "source_row_zero_based": 132876
25
+ },
26
+ {
27
+ "id": "poc2-0002",
28
+ "text": "start dining room switch!",
29
+ "expected": {
30
+ "activity": "power",
31
+ "subject": "dining_room_smart_switch",
32
+ "action": "ON"
33
+ },
34
+ "match": "exact",
35
+ "category": "training_plain",
36
+ "source_row_zero_based": 242353
37
+ },
38
+ {
39
+ "id": "poc2-0003",
40
+ "text": "Hey, the exhaust in the washroom status?",
41
+ "expected": {
42
+ "activity": "air",
43
+ "subject": "washroom_exhaust_fan",
44
+ "action": "STATUS"
45
+ },
46
+ "match": "exact",
47
+ "category": "training_plain",
48
+ "source_row_zero_based": 27043
49
+ },
50
+ {
51
+ "id": "poc2-0004",
52
+ "text": "hi, power off the second floor balcony light please.",
53
+ "expected": {
54
+ "activity": "light",
55
+ "subject": "second_floor_balcony_light",
56
+ "action": "OFF"
57
+ },
58
+ "match": "exact",
59
+ "category": "training_plain",
60
+ "source_row_zero_based": 160596
61
+ },
62
+ {
63
+ "id": "poc2-0100",
64
+ "text": "run the ceiling fan in the helper's room on max when room temperature goes over 37",
65
+ "expected": {
66
+ "activity": "air",
67
+ "subject": "servant_room_ceiling_fan",
68
+ "action": "HIGH",
69
+ "when": {
70
+ "metric": "temperature",
71
+ "op": ">",
72
+ "value": 37
73
+ }
74
+ },
75
+ "match": "exact",
76
+ "category": "training_conditional",
77
+ "source_row_zero_based": 172928
78
+ },
79
+ {
80
+ "id": "poc2-0101",
81
+ "text": "POWER OFF THE FIRST FLOOR GUEST ROOM CEILING FAN WHEN ROOM TEMPERATURE IS LESS THAN 37.",
82
+ "expected": {
83
+ "activity": "air",
84
+ "subject": "first_floor_guest_room_ceiling_fan",
85
+ "action": "OFF",
86
+ "when": {
87
+ "metric": "temperature",
88
+ "op": "<",
89
+ "value": 37
90
+ }
91
+ },
92
+ "match": "exact",
93
+ "category": "training_conditional",
94
+ "source_row_zero_based": 322745
95
+ },
96
+ {
97
+ "id": "poc2-0102",
98
+ "text": "yaar roz savere 8:30 baje master bedroom wala cooler start karo.",
99
+ "expected": {
100
+ "activity": "cooling",
101
+ "subject": "master_bedroom_cooler",
102
+ "action": "ON",
103
+ "when": {
104
+ "metric": "time",
105
+ "op": "==",
106
+ "value": "08:30"
107
+ }
108
+ },
109
+ "match": "exact",
110
+ "category": "training_conditional",
111
+ "source_row_zero_based": 104438
112
+ },
113
+ {
114
+ "id": "poc2-0103",
115
+ "text": "yaar temp 35 se kam ho to first floor kitchen ka ceiling fan rok do!",
116
+ "expected": {
117
+ "activity": "air",
118
+ "subject": "first_floor_kitchen_ceiling_fan",
119
+ "action": "OFF",
120
+ "when": {
121
+ "metric": "temperature",
122
+ "op": "<",
123
+ "value": 35
124
+ }
125
+ },
126
+ "match": "exact",
127
+ "category": "training_conditional",
128
+ "source_row_zero_based": 266202
129
+ },
130
+ {
131
+ "id": "poc2-0104",
132
+ "text": "suno ground floor kitchen ki tube light off karo savere 10 baje",
133
+ "expected": {
134
+ "activity": "light",
135
+ "subject": "ground_floor_kitchen_tube_light",
136
+ "action": "OFF",
137
+ "when": {
138
+ "metric": "time",
139
+ "op": "==",
140
+ "value": "10:00"
141
+ }
142
+ },
143
+ "match": "exact",
144
+ "category": "training_conditional",
145
+ "source_row_zero_based": 128504
146
+ }
147
+ ]
edge_benchmarks/rpi5-2026-09-26/cases/poc2_quality.json ADDED
@@ -0,0 +1,2902 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "id": "poc2-0000",
4
+ "text": "quickly open drawing room windows quickly",
5
+ "expected": {
6
+ "activity": "access",
7
+ "subject": "drawing_room_window",
8
+ "action": "OPEN"
9
+ },
10
+ "match": "exact",
11
+ "category": "training_plain",
12
+ "source_row_zero_based": 82695
13
+ },
14
+ {
15
+ "id": "poc2-0001",
16
+ "text": "SWITCH ON THE FIRST FLOOR KITCHEN TUBE LIGHT RIGHT NOW PLEASE!",
17
+ "expected": {
18
+ "activity": "light",
19
+ "subject": "first_floor_kitchen_tube_light",
20
+ "action": "ON"
21
+ },
22
+ "match": "exact",
23
+ "category": "training_plain",
24
+ "source_row_zero_based": 132876
25
+ },
26
+ {
27
+ "id": "poc2-0002",
28
+ "text": "start dining room switch!",
29
+ "expected": {
30
+ "activity": "power",
31
+ "subject": "dining_room_smart_switch",
32
+ "action": "ON"
33
+ },
34
+ "match": "exact",
35
+ "category": "training_plain",
36
+ "source_row_zero_based": 242353
37
+ },
38
+ {
39
+ "id": "poc2-0003",
40
+ "text": "Hey, the exhaust in the washroom status?",
41
+ "expected": {
42
+ "activity": "air",
43
+ "subject": "washroom_exhaust_fan",
44
+ "action": "STATUS"
45
+ },
46
+ "match": "exact",
47
+ "category": "training_plain",
48
+ "source_row_zero_based": 27043
49
+ },
50
+ {
51
+ "id": "poc2-0004",
52
+ "text": "hi, power off the second floor balcony light please.",
53
+ "expected": {
54
+ "activity": "light",
55
+ "subject": "second_floor_balcony_light",
56
+ "action": "OFF"
57
+ },
58
+ "match": "exact",
59
+ "category": "training_plain",
60
+ "source_row_zero_based": 160596
61
+ },
62
+ {
63
+ "id": "poc2-0005",
64
+ "text": "please corridor wali tube light chalu karo please",
65
+ "expected": {
66
+ "activity": "light",
67
+ "subject": "corridor_tube_light",
68
+ "action": "ON"
69
+ },
70
+ "match": "exact",
71
+ "category": "training_plain",
72
+ "source_row_zero_based": 338212
73
+ },
74
+ {
75
+ "id": "poc2-0006",
76
+ "text": "yaar mummy papa ke kamre ka speaker band hai kya?",
77
+ "expected": {
78
+ "activity": "music",
79
+ "subject": "parents_room_speaker",
80
+ "action": "STATUS"
81
+ },
82
+ "match": "exact",
83
+ "category": "training_plain",
84
+ "source_row_zero_based": 12413
85
+ },
86
+ {
87
+ "id": "poc2-0007",
88
+ "text": "bhai pooja ghar wala socket chala do fatafat na!",
89
+ "expected": {
90
+ "activity": "power",
91
+ "subject": "pooja_room_socket",
92
+ "action": "ON"
93
+ },
94
+ "match": "exact",
95
+ "category": "training_plain",
96
+ "source_row_zero_based": 71659
97
+ },
98
+ {
99
+ "id": "poc2-0008",
100
+ "text": "could you please stop the first floor store room tube light now please!",
101
+ "expected": {
102
+ "activity": "light",
103
+ "subject": "first_floor_store_room_tube_light",
104
+ "action": "OFF"
105
+ },
106
+ "match": "exact",
107
+ "category": "training_plain",
108
+ "source_row_zero_based": 201839
109
+ },
110
+ {
111
+ "id": "poc2-0009",
112
+ "text": "Ek kaam karo, first floor lobby wala ceiling fan off kar do abhi",
113
+ "expected": {
114
+ "activity": "air",
115
+ "subject": "first_floor_lobby_ceiling_fan",
116
+ "action": "OFF"
117
+ },
118
+ "match": "exact",
119
+ "category": "training_plain",
120
+ "source_row_zero_based": 96564
121
+ },
122
+ {
123
+ "id": "poc2-0010",
124
+ "text": "hi, power on living room humidifier for me",
125
+ "expected": {
126
+ "activity": "air_quality",
127
+ "subject": "living_room_humidifier",
128
+ "action": "ON"
129
+ },
130
+ "match": "exact",
131
+ "category": "training_plain",
132
+ "source_row_zero_based": 131870
133
+ },
134
+ {
135
+ "id": "poc2-0011",
136
+ "text": "can you turn the fan in the first floor guest room to low asap please",
137
+ "expected": {
138
+ "activity": "air",
139
+ "subject": "first_floor_guest_room_ceiling_fan",
140
+ "action": "LOW"
141
+ },
142
+ "match": "exact",
143
+ "category": "training_plain",
144
+ "source_row_zero_based": 116821
145
+ },
146
+ {
147
+ "id": "poc2-0012",
148
+ "text": "zara balcony wala smart bulb on karo turant please!",
149
+ "expected": {
150
+ "activity": "light",
151
+ "subject": "balcony_smart_bulb",
152
+ "action": "ON"
153
+ },
154
+ "match": "exact",
155
+ "category": "training_plain",
156
+ "source_row_zero_based": 264094
157
+ },
158
+ {
159
+ "id": "poc2-0013",
160
+ "text": "Quickly check second floor bedroom air conditioner",
161
+ "expected": {
162
+ "activity": "cooling",
163
+ "subject": "second_floor_bedroom_ac",
164
+ "action": "STATUS"
165
+ },
166
+ "match": "exact",
167
+ "category": "training_plain",
168
+ "source_row_zero_based": 318314
169
+ },
170
+ {
171
+ "id": "poc2-0014",
172
+ "text": "sun, hall wala blower band kardo please!",
173
+ "expected": {
174
+ "activity": "heating",
175
+ "subject": "hall_blower",
176
+ "action": "OFF"
177
+ },
178
+ "match": "exact",
179
+ "category": "training_plain",
180
+ "source_row_zero_based": 54294
181
+ },
182
+ {
183
+ "id": "poc2-0015",
184
+ "text": "acha first floor study room ka plug ka status batao?",
185
+ "expected": {
186
+ "activity": "power",
187
+ "subject": "first_floor_study_room_smart_plug",
188
+ "action": "STATUS"
189
+ },
190
+ "match": "exact",
191
+ "category": "training_plain",
192
+ "source_row_zero_based": 187127
193
+ },
194
+ {
195
+ "id": "poc2-0016",
196
+ "text": "Sun, living room wali wall light off kar do turant na.",
197
+ "expected": {
198
+ "activity": "light",
199
+ "subject": "living_room_wall_light",
200
+ "action": "OFF"
201
+ },
202
+ "match": "exact",
203
+ "category": "training_plain",
204
+ "source_row_zero_based": 87051
205
+ },
206
+ {
207
+ "id": "poc2-0017",
208
+ "text": "Listen, shut off lobby ceiling fan right now!",
209
+ "expected": {
210
+ "activity": "air",
211
+ "subject": "lobby_ceiling_fan",
212
+ "action": "OFF"
213
+ },
214
+ "match": "exact",
215
+ "category": "training_plain",
216
+ "source_row_zero_based": 70056
217
+ },
218
+ {
219
+ "id": "poc2-0018",
220
+ "text": "GO AHEAD AND SHUT OFF THE AROMA DIFFUSER IN THE HALL RIGHT AWAY",
221
+ "expected": {
222
+ "activity": "air_quality",
223
+ "subject": "hall_diffuser",
224
+ "action": "OFF"
225
+ },
226
+ "match": "exact",
227
+ "category": "training_plain",
228
+ "source_row_zero_based": 168698
229
+ },
230
+ {
231
+ "id": "poc2-0019",
232
+ "text": "kindly put on basement tube light for me please.",
233
+ "expected": {
234
+ "activity": "light",
235
+ "subject": "basement_tube_light",
236
+ "action": "ON"
237
+ },
238
+ "match": "exact",
239
+ "category": "training_plain",
240
+ "source_row_zero_based": 63250
241
+ },
242
+ {
243
+ "id": "poc2-0020",
244
+ "text": "Listen, shut down the hall sound bar quickly",
245
+ "expected": {
246
+ "activity": "music",
247
+ "subject": "hall_soundbar",
248
+ "action": "OFF"
249
+ },
250
+ "match": "exact",
251
+ "category": "training_plain",
252
+ "source_row_zero_based": 138461
253
+ },
254
+ {
255
+ "id": "poc2-0021",
256
+ "text": "Set the first floor children's room air conditioner to slow now please!",
257
+ "expected": {
258
+ "activity": "cooling",
259
+ "subject": "first_floor_kids_room_ac",
260
+ "action": "LOW"
261
+ },
262
+ "match": "exact",
263
+ "category": "training_plain",
264
+ "source_row_zero_based": 90265
265
+ },
266
+ {
267
+ "id": "poc2-0022",
268
+ "text": "Acha kya baramde ka cooler chal raha hai?",
269
+ "expected": {
270
+ "activity": "cooling",
271
+ "subject": "veranda_cooler",
272
+ "action": "STATUS"
273
+ },
274
+ "match": "exact",
275
+ "category": "training_plain",
276
+ "source_row_zero_based": 157939
277
+ },
278
+ {
279
+ "id": "poc2-0023",
280
+ "text": "EK KAAM KARO, MUMMY PAPA KE KAMRE WALA SMART BULB CHALA DO FATAFAT NA!",
281
+ "expected": {
282
+ "activity": "light",
283
+ "subject": "parents_room_smart_bulb",
284
+ "action": "ON"
285
+ },
286
+ "match": "exact",
287
+ "category": "training_plain",
288
+ "source_row_zero_based": 244138
289
+ },
290
+ {
291
+ "id": "poc2-0024",
292
+ "text": "ARRE LIVING ROOM WALA TABLE FAN CHALU KARO YAAR NA",
293
+ "expected": {
294
+ "activity": "air",
295
+ "subject": "living_room_table_fan",
296
+ "action": "ON"
297
+ },
298
+ "match": "exact",
299
+ "category": "training_plain",
300
+ "source_row_zero_based": 275747
301
+ },
302
+ {
303
+ "id": "poc2-0025",
304
+ "text": "bhai drawing room wali window close kar do zara",
305
+ "expected": {
306
+ "activity": "access",
307
+ "subject": "drawing_room_window",
308
+ "action": "CLOSE"
309
+ },
310
+ "match": "exact",
311
+ "category": "training_plain",
312
+ "source_row_zero_based": 214734
313
+ },
314
+ {
315
+ "id": "poc2-0026",
316
+ "text": "hey set the pedestal fan in the parents' room to slow immediately please.",
317
+ "expected": {
318
+ "activity": "air",
319
+ "subject": "parents_room_pedestal_fan",
320
+ "action": "LOW"
321
+ },
322
+ "match": "exact",
323
+ "category": "training_plain",
324
+ "source_row_zero_based": 27902
325
+ },
326
+ {
327
+ "id": "poc2-0027",
328
+ "text": "jara living room ka speaker full mode pe daal do",
329
+ "expected": {
330
+ "activity": "music",
331
+ "subject": "living_room_speaker",
332
+ "action": "HIGH"
333
+ },
334
+ "match": "exact",
335
+ "category": "training_plain",
336
+ "source_row_zero_based": 299173
337
+ },
338
+ {
339
+ "id": "poc2-0028",
340
+ "text": "ground floor lobby wali tube light chala do abhi na.",
341
+ "expected": {
342
+ "activity": "light",
343
+ "subject": "ground_floor_lobby_tube_light",
344
+ "action": "ON"
345
+ },
346
+ "match": "exact",
347
+ "category": "training_plain",
348
+ "source_row_zero_based": 15448
349
+ },
350
+ {
351
+ "id": "poc2-0029",
352
+ "text": "Are borewell bandh kar do zara!",
353
+ "expected": {
354
+ "activity": "water",
355
+ "subject": "borewell_pump",
356
+ "action": "STOP"
357
+ },
358
+ "match": "exact",
359
+ "category": "training_plain",
360
+ "source_row_zero_based": 218617
361
+ },
362
+ {
363
+ "id": "poc2-0030",
364
+ "text": "tell me is the speaker in the study on",
365
+ "expected": {
366
+ "activity": "music",
367
+ "subject": "study_room_speaker",
368
+ "action": "STATUS"
369
+ },
370
+ "match": "exact",
371
+ "category": "training_plain",
372
+ "source_row_zero_based": 159774
373
+ },
374
+ {
375
+ "id": "poc2-0031",
376
+ "text": "Can you turn off the ceiling fan in the children's room right away!",
377
+ "expected": {
378
+ "activity": "air",
379
+ "subject": "kids_room_ceiling_fan",
380
+ "action": "OFF"
381
+ },
382
+ "match": "exact",
383
+ "category": "training_plain",
384
+ "source_row_zero_based": 116230
385
+ },
386
+ {
387
+ "id": "poc2-0032",
388
+ "text": "Second floor store room wali tube light start karo turant!",
389
+ "expected": {
390
+ "activity": "light",
391
+ "subject": "second_floor_store_room_tube_light",
392
+ "action": "ON"
393
+ },
394
+ "match": "exact",
395
+ "category": "training_plain",
396
+ "source_row_zero_based": 318502
397
+ },
398
+ {
399
+ "id": "poc2-0033",
400
+ "text": "Yaar office room wala bulb start kar do turant na!",
401
+ "expected": {
402
+ "activity": "light",
403
+ "subject": "home_office_bulb",
404
+ "action": "ON"
405
+ },
406
+ "match": "exact",
407
+ "category": "training_plain",
408
+ "source_row_zero_based": 119866
409
+ },
410
+ {
411
+ "id": "poc2-0034",
412
+ "text": "hi, power on the servant room water heater immediately",
413
+ "expected": {
414
+ "activity": "heating",
415
+ "subject": "servant_room_geyser",
416
+ "action": "ON"
417
+ },
418
+ "match": "exact",
419
+ "category": "training_plain",
420
+ "source_row_zero_based": 6325
421
+ },
422
+ {
423
+ "id": "poc2-0035",
424
+ "text": "CAN YOU SECOND FLOOR KITCHEN WINDOWS STATUS",
425
+ "expected": {
426
+ "activity": "access",
427
+ "subject": "second_floor_kitchen_window",
428
+ "action": "STATUS"
429
+ },
430
+ "match": "exact",
431
+ "category": "training_plain",
432
+ "source_row_zero_based": 276690
433
+ },
434
+ {
435
+ "id": "poc2-0036",
436
+ "text": "listen, turn off pantry power socket right now!",
437
+ "expected": {
438
+ "activity": "power",
439
+ "subject": "pantry_socket",
440
+ "action": "OFF"
441
+ },
442
+ "match": "exact",
443
+ "category": "training_plain",
444
+ "source_row_zero_based": 90822
445
+ },
446
+ {
447
+ "id": "poc2-0037",
448
+ "text": "Could you run the purifier in the home office at medium speed immediately please!",
449
+ "expected": {
450
+ "activity": "air_quality",
451
+ "subject": "home_office_air_purifier",
452
+ "action": "MEDIUM"
453
+ },
454
+ "match": "exact",
455
+ "category": "training_plain",
456
+ "source_row_zero_based": 284863
457
+ },
458
+ {
459
+ "id": "poc2-0038",
460
+ "text": "SECOND FLOOR KIDS ROOM KA CEILING FAN SHURU KARO PLEASE!",
461
+ "expected": {
462
+ "activity": "air",
463
+ "subject": "second_floor_kids_room_ceiling_fan",
464
+ "action": "ON"
465
+ },
466
+ "match": "exact",
467
+ "category": "training_plain",
468
+ "source_row_zero_based": 165290
469
+ },
470
+ {
471
+ "id": "poc2-0039",
472
+ "text": "ek kaam karo, second floor hall ka ac ko medium pe rakho fatafat na",
473
+ "expected": {
474
+ "activity": "cooling",
475
+ "subject": "second_floor_hall_ac",
476
+ "action": "MEDIUM"
477
+ },
478
+ "match": "exact",
479
+ "category": "training_plain",
480
+ "source_row_zero_based": 118219
481
+ },
482
+ {
483
+ "id": "poc2-0040",
484
+ "text": "Jara master bedroom ka smart bulb chalu kar do turant please!",
485
+ "expected": {
486
+ "activity": "light",
487
+ "subject": "master_bedroom_smart_bulb",
488
+ "action": "ON"
489
+ },
490
+ "match": "exact",
491
+ "category": "training_plain",
492
+ "source_row_zero_based": 52755
493
+ },
494
+ {
495
+ "id": "poc2-0041",
496
+ "text": "can you please put the bedroom dehumidifier on low now please!",
497
+ "expected": {
498
+ "activity": "air_quality",
499
+ "subject": "bedroom_dehumidifier",
500
+ "action": "LOW"
501
+ },
502
+ "match": "exact",
503
+ "category": "training_plain",
504
+ "source_row_zero_based": 262549
505
+ },
506
+ {
507
+ "id": "poc2-0042",
508
+ "text": "Could you stop bedroom air purifier right now",
509
+ "expected": {
510
+ "activity": "air_quality",
511
+ "subject": "bedroom_air_purifier",
512
+ "action": "OFF"
513
+ },
514
+ "match": "exact",
515
+ "category": "training_plain",
516
+ "source_row_zero_based": 254346
517
+ },
518
+ {
519
+ "id": "poc2-0043",
520
+ "text": "bhai aangan wala fountain start karo abhi please!",
521
+ "expected": {
522
+ "activity": "garden",
523
+ "subject": "courtyard_fountain",
524
+ "action": "ON"
525
+ },
526
+ "match": "exact",
527
+ "category": "training_plain",
528
+ "source_row_zero_based": 36308
529
+ },
530
+ {
531
+ "id": "poc2-0044",
532
+ "text": "please close first floor balcony curtain right now",
533
+ "expected": {
534
+ "activity": "access",
535
+ "subject": "first_floor_balcony_curtains",
536
+ "action": "CLOSE"
537
+ },
538
+ "match": "exact",
539
+ "category": "training_plain",
540
+ "source_row_zero_based": 121956
541
+ },
542
+ {
543
+ "id": "poc2-0045",
544
+ "text": "can you what's the status of the power socket in the first floor kids room?",
545
+ "expected": {
546
+ "activity": "power",
547
+ "subject": "first_floor_kids_room_socket",
548
+ "action": "STATUS"
549
+ },
550
+ "match": "exact",
551
+ "category": "training_plain",
552
+ "source_row_zero_based": 203594
553
+ },
554
+ {
555
+ "id": "poc2-0046",
556
+ "text": "please master bedroom ka curtains open kar do",
557
+ "expected": {
558
+ "activity": "access",
559
+ "subject": "master_bedroom_curtains",
560
+ "action": "OPEN"
561
+ },
562
+ "match": "exact",
563
+ "category": "training_plain",
564
+ "source_row_zero_based": 202426
565
+ },
566
+ {
567
+ "id": "poc2-0047",
568
+ "text": "Kindly start the cctv camera in the stairs please!",
569
+ "expected": {
570
+ "activity": "security",
571
+ "subject": "staircase_camera",
572
+ "action": "ON"
573
+ },
574
+ "match": "exact",
575
+ "category": "training_plain",
576
+ "source_row_zero_based": 250657
577
+ },
578
+ {
579
+ "id": "poc2-0048",
580
+ "text": "Suno bathroom wala smart bulb band karo fatafat na!",
581
+ "expected": {
582
+ "activity": "light",
583
+ "subject": "bathroom_smart_bulb",
584
+ "action": "OFF"
585
+ },
586
+ "match": "exact",
587
+ "category": "training_plain",
588
+ "source_row_zero_based": 80993
589
+ },
590
+ {
591
+ "id": "poc2-0049",
592
+ "text": "bhaiya second floor study room ka socket start karo yaar",
593
+ "expected": {
594
+ "activity": "power",
595
+ "subject": "second_floor_study_room_socket",
596
+ "action": "ON"
597
+ },
598
+ "match": "exact",
599
+ "category": "training_plain",
600
+ "source_row_zero_based": 113767
601
+ },
602
+ {
603
+ "id": "poc2-0050",
604
+ "text": "COULD YOU PLEASE SHUT OFF THE LIVING ROOM SOUNDBAR RIGHT AWAY!",
605
+ "expected": {
606
+ "activity": "music",
607
+ "subject": "living_room_soundbar",
608
+ "action": "OFF"
609
+ },
610
+ "match": "exact",
611
+ "category": "training_plain",
612
+ "source_row_zero_based": 193126
613
+ },
614
+ {
615
+ "id": "poc2-0051",
616
+ "text": "can you start the camera in the roof now please",
617
+ "expected": {
618
+ "activity": "security",
619
+ "subject": "roof_camera",
620
+ "action": "ON"
621
+ },
622
+ "match": "exact",
623
+ "category": "training_plain",
624
+ "source_row_zero_based": 229583
625
+ },
626
+ {
627
+ "id": "poc2-0052",
628
+ "text": "Would you switch on the printer quickly!",
629
+ "expected": {
630
+ "activity": "office",
631
+ "subject": "printer",
632
+ "action": "ON"
633
+ },
634
+ "match": "exact",
635
+ "category": "training_plain",
636
+ "source_row_zero_based": 20988
637
+ },
638
+ {
639
+ "id": "poc2-0053",
640
+ "text": "Plug number 1 chalao turant please!",
641
+ "expected": {
642
+ "activity": "power",
643
+ "subject": "smart_plug_1",
644
+ "action": "ON"
645
+ },
646
+ "match": "exact",
647
+ "category": "training_plain",
648
+ "source_row_zero_based": 319663
649
+ },
650
+ {
651
+ "id": "poc2-0054",
652
+ "text": "hey slide open the first floor kitchen window right now!",
653
+ "expected": {
654
+ "activity": "access",
655
+ "subject": "first_floor_kitchen_window",
656
+ "action": "OPEN"
657
+ },
658
+ "match": "exact",
659
+ "category": "training_plain",
660
+ "source_row_zero_based": 140862
661
+ },
662
+ {
663
+ "id": "poc2-0055",
664
+ "text": "hey run parents room air conditioner on high now please.",
665
+ "expected": {
666
+ "activity": "cooling",
667
+ "subject": "parents_room_ac",
668
+ "action": "HIGH"
669
+ },
670
+ "match": "exact",
671
+ "category": "training_plain",
672
+ "source_row_zero_based": 231629
673
+ },
674
+ {
675
+ "id": "poc2-0056",
676
+ "text": "Zara first floor study room wala switch on hai kya",
677
+ "expected": {
678
+ "activity": "power",
679
+ "subject": "first_floor_study_room_smart_switch",
680
+ "action": "STATUS"
681
+ },
682
+ "match": "exact",
683
+ "category": "training_plain",
684
+ "source_row_zero_based": 25845
685
+ },
686
+ {
687
+ "id": "poc2-0057",
688
+ "text": "hey switch off ground floor bedroom light for me!",
689
+ "expected": {
690
+ "activity": "light",
691
+ "subject": "ground_floor_bedroom_light",
692
+ "action": "OFF"
693
+ },
694
+ "match": "exact",
695
+ "category": "training_plain",
696
+ "source_row_zero_based": 224303
697
+ },
698
+ {
699
+ "id": "poc2-0058",
700
+ "text": "please ground floor lobby ka CCTV shuru kar do yaar na.",
701
+ "expected": {
702
+ "activity": "security",
703
+ "subject": "ground_floor_lobby_camera",
704
+ "action": "ON"
705
+ },
706
+ "match": "exact",
707
+ "category": "training_plain",
708
+ "source_row_zero_based": 160516
709
+ },
710
+ {
711
+ "id": "poc2-0059",
712
+ "text": "ACHA COURTYARD KA BULB BANDH KAR DO FATAFAT PLEASE",
713
+ "expected": {
714
+ "activity": "light",
715
+ "subject": "courtyard_bulb",
716
+ "action": "OFF"
717
+ },
718
+ "match": "exact",
719
+ "category": "training_plain",
720
+ "source_row_zero_based": 309166
721
+ },
722
+ {
723
+ "id": "poc2-0060",
724
+ "text": "just check is the garden water sprinkler running",
725
+ "expected": {
726
+ "activity": "garden",
727
+ "subject": "garden_sprinkler",
728
+ "action": "STATUS"
729
+ },
730
+ "match": "exact",
731
+ "category": "training_plain",
732
+ "source_row_zero_based": 130828
733
+ },
734
+ {
735
+ "id": "poc2-0061",
736
+ "text": "Boss ground floor washroom wali batti band kardo abhi please!",
737
+ "expected": {
738
+ "activity": "light",
739
+ "subject": "ground_floor_washroom_light",
740
+ "action": "OFF"
741
+ },
742
+ "match": "exact",
743
+ "category": "training_plain",
744
+ "source_row_zero_based": 245314
745
+ },
746
+ {
747
+ "id": "poc2-0062",
748
+ "text": "COULD YOU SET FIRST FLOOR KITCHEN FAN TO LOW SPEED QUICKLY.",
749
+ "expected": {
750
+ "activity": "air",
751
+ "subject": "first_floor_kitchen_ceiling_fan",
752
+ "action": "LOW"
753
+ },
754
+ "match": "exact",
755
+ "category": "training_plain",
756
+ "source_row_zero_based": 145385
757
+ },
758
+ {
759
+ "id": "poc2-0063",
760
+ "text": "Hey, put on the camera 8 quickly!",
761
+ "expected": {
762
+ "activity": "security",
763
+ "subject": "camera_8",
764
+ "action": "ON"
765
+ },
766
+ "match": "exact",
767
+ "category": "training_plain",
768
+ "source_row_zero_based": 114642
769
+ },
770
+ {
771
+ "id": "poc2-0064",
772
+ "text": "could you please run the lobby fan on max asap",
773
+ "expected": {
774
+ "activity": "air",
775
+ "subject": "lobby_ceiling_fan",
776
+ "action": "HIGH"
777
+ },
778
+ "match": "exact",
779
+ "category": "training_plain",
780
+ "source_row_zero_based": 310560
781
+ },
782
+ {
783
+ "id": "poc2-0065",
784
+ "text": "Please dining room ki tv chalao fatafat please.",
785
+ "expected": {
786
+ "activity": "entertainment",
787
+ "subject": "dining_room_tv",
788
+ "action": "ON"
789
+ },
790
+ "match": "exact",
791
+ "category": "training_plain",
792
+ "source_row_zero_based": 218850
793
+ },
794
+ {
795
+ "id": "poc2-0066",
796
+ "text": "could you switch on bedroom light quickly please.",
797
+ "expected": {
798
+ "activity": "light",
799
+ "subject": "bedroom_light",
800
+ "action": "ON"
801
+ },
802
+ "match": "exact",
803
+ "category": "training_plain",
804
+ "source_row_zero_based": 294477
805
+ },
806
+ {
807
+ "id": "poc2-0067",
808
+ "text": "could you please turn on the rice cooker for me please!",
809
+ "expected": {
810
+ "activity": "kitchen",
811
+ "subject": "rice_cooker",
812
+ "action": "START"
813
+ },
814
+ "match": "exact",
815
+ "category": "training_plain",
816
+ "source_row_zero_based": 236296
817
+ },
818
+ {
819
+ "id": "poc2-0068",
820
+ "text": "quickly start second floor bedroom power socket immediately please",
821
+ "expected": {
822
+ "activity": "power",
823
+ "subject": "second_floor_bedroom_socket",
824
+ "action": "ON"
825
+ },
826
+ "match": "exact",
827
+ "category": "training_plain",
828
+ "source_row_zero_based": 134805
829
+ },
830
+ {
831
+ "id": "poc2-0069",
832
+ "text": "would you turn off the bulb in the second floor lobby for me please.",
833
+ "expected": {
834
+ "activity": "light",
835
+ "subject": "second_floor_lobby_bulb",
836
+ "action": "OFF"
837
+ },
838
+ "match": "exact",
839
+ "category": "training_plain",
840
+ "source_row_zero_based": 163037
841
+ },
842
+ {
843
+ "id": "poc2-0070",
844
+ "text": "please second floor corridor wala bulb bandh kar do fatafat",
845
+ "expected": {
846
+ "activity": "light",
847
+ "subject": "second_floor_corridor_bulb",
848
+ "action": "OFF"
849
+ },
850
+ "match": "exact",
851
+ "category": "training_plain",
852
+ "source_row_zero_based": 213537
853
+ },
854
+ {
855
+ "id": "poc2-0071",
856
+ "text": "jara bedroom ka speaker band kar do jaldi please",
857
+ "expected": {
858
+ "activity": "music",
859
+ "subject": "bedroom_speaker",
860
+ "action": "OFF"
861
+ },
862
+ "match": "exact",
863
+ "category": "training_plain",
864
+ "source_row_zero_based": 81674
865
+ },
866
+ {
867
+ "id": "poc2-0072",
868
+ "text": "Is office room range extender running",
869
+ "expected": {
870
+ "activity": "network",
871
+ "subject": "home_office_wifi_extender",
872
+ "action": "STATUS"
873
+ },
874
+ "match": "exact",
875
+ "category": "training_plain",
876
+ "source_row_zero_based": 101767
877
+ },
878
+ {
879
+ "id": "poc2-0073",
880
+ "text": "could you set the master bedroom dehumidifier to max please.",
881
+ "expected": {
882
+ "activity": "air_quality",
883
+ "subject": "master_bedroom_dehumidifier",
884
+ "action": "HIGH"
885
+ },
886
+ "match": "exact",
887
+ "category": "training_plain",
888
+ "source_row_zero_based": 296645
889
+ },
890
+ {
891
+ "id": "poc2-0074",
892
+ "text": "Please hall wala smart plug band kardo yaar!",
893
+ "expected": {
894
+ "activity": "power",
895
+ "subject": "hall_smart_plug",
896
+ "action": "OFF"
897
+ },
898
+ "match": "exact",
899
+ "category": "training_plain",
900
+ "source_row_zero_based": 143453
901
+ },
902
+ {
903
+ "id": "poc2-0075",
904
+ "text": "arre master bedroom wali machhar wali machine bandh kar do abhi na.",
905
+ "expected": {
906
+ "activity": "air_quality",
907
+ "subject": "master_bedroom_mosquito_machine",
908
+ "action": "OFF"
909
+ },
910
+ "match": "exact",
911
+ "category": "training_plain",
912
+ "source_row_zero_based": 89607
913
+ },
914
+ {
915
+ "id": "poc2-0076",
916
+ "text": "Would you shut off the smart plug 7 right away please",
917
+ "expected": {
918
+ "activity": "power",
919
+ "subject": "smart_plug_7",
920
+ "action": "OFF"
921
+ },
922
+ "match": "exact",
923
+ "category": "training_plain",
924
+ "source_row_zero_based": 82662
925
+ },
926
+ {
927
+ "id": "poc2-0077",
928
+ "text": "WOULD YOU START LIVING ROOM HUMIDIFIER RIGHT NOW!",
929
+ "expected": {
930
+ "activity": "air_quality",
931
+ "subject": "living_room_humidifier",
932
+ "action": "ON"
933
+ },
934
+ "match": "exact",
935
+ "category": "training_plain",
936
+ "source_row_zero_based": 309872
937
+ },
938
+ {
939
+ "id": "poc2-0078",
940
+ "text": "YAAR GUEST ROOM WALA SPEAKER ON KAR DO FATAFAT.",
941
+ "expected": {
942
+ "activity": "music",
943
+ "subject": "guest_room_speaker",
944
+ "action": "ON"
945
+ },
946
+ "match": "exact",
947
+ "category": "training_plain",
948
+ "source_row_zero_based": 139923
949
+ },
950
+ {
951
+ "id": "poc2-0079",
952
+ "text": "just check the lobby light status?",
953
+ "expected": {
954
+ "activity": "light",
955
+ "subject": "lobby_light",
956
+ "action": "STATUS"
957
+ },
958
+ "match": "exact",
959
+ "category": "training_plain",
960
+ "source_row_zero_based": 316062
961
+ },
962
+ {
963
+ "id": "poc2-0080",
964
+ "text": "Hey run the cupboard light in the master bedroom asap",
965
+ "expected": {
966
+ "activity": "light",
967
+ "subject": "master_bedroom_cabinet_light",
968
+ "action": "ON"
969
+ },
970
+ "match": "exact",
971
+ "category": "training_plain",
972
+ "source_row_zero_based": 132607
973
+ },
974
+ {
975
+ "id": "poc2-0081",
976
+ "text": "power on the air conditioner in the office room for me",
977
+ "expected": {
978
+ "activity": "cooling",
979
+ "subject": "home_office_ac",
980
+ "action": "ON"
981
+ },
982
+ "match": "exact",
983
+ "category": "training_plain",
984
+ "source_row_zero_based": 236821
985
+ },
986
+ {
987
+ "id": "poc2-0082",
988
+ "text": "hey, shut down the air purifier in the kids room asap please!",
989
+ "expected": {
990
+ "activity": "air_quality",
991
+ "subject": "kids_room_air_purifier",
992
+ "action": "OFF"
993
+ },
994
+ "match": "exact",
995
+ "category": "training_plain",
996
+ "source_row_zero_based": 136530
997
+ },
998
+ {
999
+ "id": "poc2-0083",
1000
+ "text": "COURTYARD KA CAMERA ROK DO YAAR PLEASE",
1001
+ "expected": {
1002
+ "activity": "security",
1003
+ "subject": "courtyard_camera",
1004
+ "action": "OFF"
1005
+ },
1006
+ "match": "exact",
1007
+ "category": "training_plain",
1008
+ "source_row_zero_based": 260005
1009
+ },
1010
+ {
1011
+ "id": "poc2-0084",
1012
+ "text": "hey, switch off the led strip in the dining room right away please.",
1013
+ "expected": {
1014
+ "activity": "light",
1015
+ "subject": "dining_room_led_strip",
1016
+ "action": "OFF"
1017
+ },
1018
+ "match": "exact",
1019
+ "category": "training_plain",
1020
+ "source_row_zero_based": 286393
1021
+ },
1022
+ {
1023
+ "id": "poc2-0085",
1024
+ "text": "Switch on the tube light in the second floor guest room asap.",
1025
+ "expected": {
1026
+ "activity": "light",
1027
+ "subject": "second_floor_guest_room_tube_light",
1028
+ "action": "ON"
1029
+ },
1030
+ "match": "exact",
1031
+ "category": "training_plain",
1032
+ "source_row_zero_based": 267039
1033
+ },
1034
+ {
1035
+ "id": "poc2-0086",
1036
+ "text": "Study room ka switch laga do jaldi.",
1037
+ "expected": {
1038
+ "activity": "power",
1039
+ "subject": "study_room_smart_switch",
1040
+ "action": "ON"
1041
+ },
1042
+ "match": "exact",
1043
+ "category": "training_plain",
1044
+ "source_row_zero_based": 128979
1045
+ },
1046
+ {
1047
+ "id": "poc2-0087",
1048
+ "text": "would you power on the spot light in the veranda immediately",
1049
+ "expected": {
1050
+ "activity": "light",
1051
+ "subject": "veranda_spotlight",
1052
+ "action": "ON"
1053
+ },
1054
+ "match": "exact",
1055
+ "category": "training_plain",
1056
+ "source_row_zero_based": 266723
1057
+ },
1058
+ {
1059
+ "id": "poc2-0088",
1060
+ "text": "WOULD YOU SWITCH OFF GROUND FLOOR HALL CEILING FAN FOR ME.",
1061
+ "expected": {
1062
+ "activity": "air",
1063
+ "subject": "ground_floor_hall_ceiling_fan",
1064
+ "action": "OFF"
1065
+ },
1066
+ "match": "exact",
1067
+ "category": "training_plain",
1068
+ "source_row_zero_based": 227590
1069
+ },
1070
+ {
1071
+ "id": "poc2-0089",
1072
+ "text": "boss pull open the curtains in the guest room now",
1073
+ "expected": {
1074
+ "activity": "access",
1075
+ "subject": "guest_room_curtains",
1076
+ "action": "OPEN"
1077
+ },
1078
+ "match": "exact",
1079
+ "category": "training_plain",
1080
+ "source_row_zero_based": 107485
1081
+ },
1082
+ {
1083
+ "id": "poc2-0090",
1084
+ "text": "could you switch on the bathroom exhaust fan immediately please.",
1085
+ "expected": {
1086
+ "activity": "air",
1087
+ "subject": "bathroom_exhaust_fan",
1088
+ "action": "ON"
1089
+ },
1090
+ "match": "exact",
1091
+ "category": "training_plain",
1092
+ "source_row_zero_based": 208947
1093
+ },
1094
+ {
1095
+ "id": "poc2-0091",
1096
+ "text": "Go ahead and put on first floor washroom socket immediately.",
1097
+ "expected": {
1098
+ "activity": "power",
1099
+ "subject": "first_floor_washroom_socket",
1100
+ "action": "ON"
1101
+ },
1102
+ "match": "exact",
1103
+ "category": "training_plain",
1104
+ "source_row_zero_based": 280596
1105
+ },
1106
+ {
1107
+ "id": "poc2-0092",
1108
+ "text": "yaar backyard wali drip irrigation off karo turant.",
1109
+ "expected": {
1110
+ "activity": "garden",
1111
+ "subject": "backyard_drip_irrigation",
1112
+ "action": "OFF"
1113
+ },
1114
+ "match": "exact",
1115
+ "category": "training_plain",
1116
+ "source_row_zero_based": 41290
1117
+ },
1118
+ {
1119
+ "id": "poc2-0093",
1120
+ "text": "hey run the switch in the ground floor bedroom asap please!",
1121
+ "expected": {
1122
+ "activity": "power",
1123
+ "subject": "ground_floor_bedroom_smart_switch",
1124
+ "action": "ON"
1125
+ },
1126
+ "match": "exact",
1127
+ "category": "training_plain",
1128
+ "source_row_zero_based": 234919
1129
+ },
1130
+ {
1131
+ "id": "poc2-0094",
1132
+ "text": "Bhai aangan wala smart plug band hai kya?",
1133
+ "expected": {
1134
+ "activity": "power",
1135
+ "subject": "courtyard_smart_plug",
1136
+ "action": "STATUS"
1137
+ },
1138
+ "match": "exact",
1139
+ "category": "training_plain",
1140
+ "source_row_zero_based": 89094
1141
+ },
1142
+ {
1143
+ "id": "poc2-0095",
1144
+ "text": "hey, is the tower fan in the hall running?",
1145
+ "expected": {
1146
+ "activity": "air",
1147
+ "subject": "hall_tower_fan",
1148
+ "action": "STATUS"
1149
+ },
1150
+ "match": "exact",
1151
+ "category": "training_plain",
1152
+ "source_row_zero_based": 133485
1153
+ },
1154
+ {
1155
+ "id": "poc2-0096",
1156
+ "text": "Hey put on the pedestal fan in the living room quickly",
1157
+ "expected": {
1158
+ "activity": "air",
1159
+ "subject": "living_room_pedestal_fan",
1160
+ "action": "ON"
1161
+ },
1162
+ "match": "exact",
1163
+ "category": "training_plain",
1164
+ "source_row_zero_based": 184768
1165
+ },
1166
+ {
1167
+ "id": "poc2-0097",
1168
+ "text": "ek kaam karo, pooja room ka purifier bandh kar do!",
1169
+ "expected": {
1170
+ "activity": "air_quality",
1171
+ "subject": "pooja_room_air_purifier",
1172
+ "action": "OFF"
1173
+ },
1174
+ "match": "exact",
1175
+ "category": "training_plain",
1176
+ "source_row_zero_based": 38327
1177
+ },
1178
+ {
1179
+ "id": "poc2-0098",
1180
+ "text": "Boss put on parents room night lamp.",
1181
+ "expected": {
1182
+ "activity": "light",
1183
+ "subject": "parents_room_night_lamp",
1184
+ "action": "ON"
1185
+ },
1186
+ "match": "exact",
1187
+ "category": "training_plain",
1188
+ "source_row_zero_based": 224847
1189
+ },
1190
+ {
1191
+ "id": "poc2-0099",
1192
+ "text": "bhai ground floor balcony ki tube light ka status batao?",
1193
+ "expected": {
1194
+ "activity": "light",
1195
+ "subject": "ground_floor_balcony_tube_light",
1196
+ "action": "STATUS"
1197
+ },
1198
+ "match": "exact",
1199
+ "category": "training_plain",
1200
+ "source_row_zero_based": 330450
1201
+ },
1202
+ {
1203
+ "id": "poc2-0100",
1204
+ "text": "run the ceiling fan in the helper's room on max when room temperature goes over 37",
1205
+ "expected": {
1206
+ "activity": "air",
1207
+ "subject": "servant_room_ceiling_fan",
1208
+ "action": "HIGH",
1209
+ "when": {
1210
+ "metric": "temperature",
1211
+ "op": ">",
1212
+ "value": 37
1213
+ }
1214
+ },
1215
+ "match": "exact",
1216
+ "category": "training_conditional",
1217
+ "source_row_zero_based": 172928
1218
+ },
1219
+ {
1220
+ "id": "poc2-0101",
1221
+ "text": "POWER OFF THE FIRST FLOOR GUEST ROOM CEILING FAN WHEN ROOM TEMPERATURE IS LESS THAN 37.",
1222
+ "expected": {
1223
+ "activity": "air",
1224
+ "subject": "first_floor_guest_room_ceiling_fan",
1225
+ "action": "OFF",
1226
+ "when": {
1227
+ "metric": "temperature",
1228
+ "op": "<",
1229
+ "value": 37
1230
+ }
1231
+ },
1232
+ "match": "exact",
1233
+ "category": "training_conditional",
1234
+ "source_row_zero_based": 322745
1235
+ },
1236
+ {
1237
+ "id": "poc2-0102",
1238
+ "text": "yaar roz savere 8:30 baje master bedroom wala cooler start karo.",
1239
+ "expected": {
1240
+ "activity": "cooling",
1241
+ "subject": "master_bedroom_cooler",
1242
+ "action": "ON",
1243
+ "when": {
1244
+ "metric": "time",
1245
+ "op": "==",
1246
+ "value": "08:30"
1247
+ }
1248
+ },
1249
+ "match": "exact",
1250
+ "category": "training_conditional",
1251
+ "source_row_zero_based": 104438
1252
+ },
1253
+ {
1254
+ "id": "poc2-0103",
1255
+ "text": "yaar temp 35 se kam ho to first floor kitchen ka ceiling fan rok do!",
1256
+ "expected": {
1257
+ "activity": "air",
1258
+ "subject": "first_floor_kitchen_ceiling_fan",
1259
+ "action": "OFF",
1260
+ "when": {
1261
+ "metric": "temperature",
1262
+ "op": "<",
1263
+ "value": 35
1264
+ }
1265
+ },
1266
+ "match": "exact",
1267
+ "category": "training_conditional",
1268
+ "source_row_zero_based": 266202
1269
+ },
1270
+ {
1271
+ "id": "poc2-0104",
1272
+ "text": "suno ground floor kitchen ki tube light off karo savere 10 baje",
1273
+ "expected": {
1274
+ "activity": "light",
1275
+ "subject": "ground_floor_kitchen_tube_light",
1276
+ "action": "OFF",
1277
+ "when": {
1278
+ "metric": "time",
1279
+ "op": "==",
1280
+ "value": "10:00"
1281
+ }
1282
+ },
1283
+ "match": "exact",
1284
+ "category": "training_conditional",
1285
+ "source_row_zero_based": 128504
1286
+ },
1287
+ {
1288
+ "id": "poc2-0105",
1289
+ "text": "bathroom ki batti off karo roz dopahar ko 1 baje",
1290
+ "expected": {
1291
+ "activity": "light",
1292
+ "subject": "bathroom_light",
1293
+ "action": "OFF",
1294
+ "when": {
1295
+ "metric": "time",
1296
+ "op": "==",
1297
+ "value": "13:00"
1298
+ }
1299
+ },
1300
+ "match": "exact",
1301
+ "category": "training_conditional",
1302
+ "source_row_zero_based": 82666
1303
+ },
1304
+ {
1305
+ "id": "poc2-0106",
1306
+ "text": "yaar zone 6 ka sprinkler chalao savere 5 baje",
1307
+ "expected": {
1308
+ "activity": "garden",
1309
+ "subject": "sprinkler_zone_6",
1310
+ "action": "ON",
1311
+ "when": {
1312
+ "metric": "time",
1313
+ "op": "==",
1314
+ "value": "05:00"
1315
+ }
1316
+ },
1317
+ "match": "exact",
1318
+ "category": "training_conditional",
1319
+ "source_row_zero_based": 21380
1320
+ },
1321
+ {
1322
+ "id": "poc2-0107",
1323
+ "text": "every day at 1 pm switch off bedroom mirror light!",
1324
+ "expected": {
1325
+ "activity": "light",
1326
+ "subject": "bedroom_mirror_light",
1327
+ "action": "OFF",
1328
+ "when": {
1329
+ "metric": "time",
1330
+ "op": "==",
1331
+ "value": "13:00"
1332
+ }
1333
+ },
1334
+ "match": "exact",
1335
+ "category": "training_conditional",
1336
+ "source_row_zero_based": 219654
1337
+ },
1338
+ {
1339
+ "id": "poc2-0108",
1340
+ "text": "yaar roof ka smart bulb off karo har roz raat ko 9 baje",
1341
+ "expected": {
1342
+ "activity": "light",
1343
+ "subject": "roof_smart_bulb",
1344
+ "action": "OFF",
1345
+ "when": {
1346
+ "metric": "time",
1347
+ "op": "==",
1348
+ "value": "21:00"
1349
+ }
1350
+ },
1351
+ "match": "exact",
1352
+ "category": "training_conditional",
1353
+ "source_row_zero_based": 111680
1354
+ },
1355
+ {
1356
+ "id": "poc2-0109",
1357
+ "text": "Suno roz subah 6 baje hall ka air purifier off kar do.",
1358
+ "expected": {
1359
+ "activity": "air_quality",
1360
+ "subject": "hall_air_purifier",
1361
+ "action": "OFF",
1362
+ "when": {
1363
+ "metric": "time",
1364
+ "op": "==",
1365
+ "value": "06:00"
1366
+ }
1367
+ },
1368
+ "match": "exact",
1369
+ "category": "training_conditional",
1370
+ "source_row_zero_based": 81840
1371
+ },
1372
+ {
1373
+ "id": "poc2-0110",
1374
+ "text": "yaar savere 9 baje first floor balcony wala parde khol do!",
1375
+ "expected": {
1376
+ "activity": "access",
1377
+ "subject": "first_floor_balcony_curtains",
1378
+ "action": "OPEN",
1379
+ "when": {
1380
+ "metric": "time",
1381
+ "op": "==",
1382
+ "value": "09:00"
1383
+ }
1384
+ },
1385
+ "match": "exact",
1386
+ "category": "training_conditional",
1387
+ "source_row_zero_based": 26360
1388
+ },
1389
+ {
1390
+ "id": "poc2-0111",
1391
+ "text": "shut down the air conditioner in the ground floor bedroom when room temperature gets under 29!",
1392
+ "expected": {
1393
+ "activity": "cooling",
1394
+ "subject": "ground_floor_bedroom_ac",
1395
+ "action": "OFF",
1396
+ "when": {
1397
+ "metric": "temperature",
1398
+ "op": "<",
1399
+ "value": 29
1400
+ }
1401
+ },
1402
+ "match": "exact",
1403
+ "category": "training_conditional",
1404
+ "source_row_zero_based": 322325
1405
+ },
1406
+ {
1407
+ "id": "poc2-0112",
1408
+ "text": "acha store room wali cabinet light chalu karo har roz subah 5 baje.",
1409
+ "expected": {
1410
+ "activity": "light",
1411
+ "subject": "store_room_cabinet_light",
1412
+ "action": "ON",
1413
+ "when": {
1414
+ "metric": "time",
1415
+ "op": "==",
1416
+ "value": "05:00"
1417
+ }
1418
+ },
1419
+ "match": "exact",
1420
+ "category": "training_conditional",
1421
+ "source_row_zero_based": 151114
1422
+ },
1423
+ {
1424
+ "id": "poc2-0113",
1425
+ "text": "at 11:30 am run drawing room wall fan!",
1426
+ "expected": {
1427
+ "activity": "air",
1428
+ "subject": "drawing_room_wall_fan",
1429
+ "action": "ON",
1430
+ "when": {
1431
+ "metric": "time",
1432
+ "op": "==",
1433
+ "value": "11:30"
1434
+ }
1435
+ },
1436
+ "match": "exact",
1437
+ "category": "training_conditional",
1438
+ "source_row_zero_based": 161810
1439
+ },
1440
+ {
1441
+ "id": "poc2-0114",
1442
+ "text": "at 4:30 pm sharp run the ceiling fan in the kids room.",
1443
+ "expected": {
1444
+ "activity": "air",
1445
+ "subject": "kids_room_ceiling_fan",
1446
+ "action": "ON",
1447
+ "when": {
1448
+ "metric": "time",
1449
+ "op": "==",
1450
+ "value": "16:30"
1451
+ }
1452
+ },
1453
+ "match": "exact",
1454
+ "category": "training_conditional",
1455
+ "source_row_zero_based": 144159
1456
+ },
1457
+ {
1458
+ "id": "poc2-0115",
1459
+ "text": "bhai jab humidity 40 se niche chala jaye tab guest room ka dehumidifier slow pe karo",
1460
+ "expected": {
1461
+ "activity": "air_quality",
1462
+ "subject": "guest_room_dehumidifier",
1463
+ "action": "LOW",
1464
+ "when": {
1465
+ "metric": "humidity",
1466
+ "op": "<",
1467
+ "value": 40
1468
+ }
1469
+ },
1470
+ "match": "exact",
1471
+ "category": "training_conditional",
1472
+ "source_row_zero_based": 30875
1473
+ },
1474
+ {
1475
+ "id": "poc2-0116",
1476
+ "text": "bhai first floor balcony wala bulb on karo subah 11 baje",
1477
+ "expected": {
1478
+ "activity": "light",
1479
+ "subject": "first_floor_balcony_bulb",
1480
+ "action": "ON",
1481
+ "when": {
1482
+ "metric": "time",
1483
+ "op": "==",
1484
+ "value": "11:00"
1485
+ }
1486
+ },
1487
+ "match": "exact",
1488
+ "category": "training_conditional",
1489
+ "source_row_zero_based": 290671
1490
+ },
1491
+ {
1492
+ "id": "poc2-0117",
1493
+ "text": "acha roz dopahar 2 baje second floor study room wali light off kar do.",
1494
+ "expected": {
1495
+ "activity": "light",
1496
+ "subject": "second_floor_study_room_light",
1497
+ "action": "OFF",
1498
+ "when": {
1499
+ "metric": "time",
1500
+ "op": "==",
1501
+ "value": "14:00"
1502
+ }
1503
+ },
1504
+ "match": "exact",
1505
+ "category": "training_conditional",
1506
+ "source_row_zero_based": 8389
1507
+ },
1508
+ {
1509
+ "id": "poc2-0118",
1510
+ "text": "at 12:30 pm run the store room cabinet light",
1511
+ "expected": {
1512
+ "activity": "light",
1513
+ "subject": "store_room_cabinet_light",
1514
+ "action": "ON",
1515
+ "when": {
1516
+ "metric": "time",
1517
+ "op": "==",
1518
+ "value": "12:30"
1519
+ }
1520
+ },
1521
+ "match": "exact",
1522
+ "category": "training_conditional",
1523
+ "source_row_zero_based": 69859
1524
+ },
1525
+ {
1526
+ "id": "poc2-0119",
1527
+ "text": "yaar car charger band karo agar battery 70 cross kare.",
1528
+ "expected": {
1529
+ "activity": "power",
1530
+ "subject": "ev_charger",
1531
+ "action": "OFF",
1532
+ "when": {
1533
+ "metric": "battery",
1534
+ "op": ">",
1535
+ "value": 70
1536
+ }
1537
+ },
1538
+ "match": "exact",
1539
+ "category": "training_conditional",
1540
+ "source_row_zero_based": 191073
1541
+ },
1542
+ {
1543
+ "id": "poc2-0120",
1544
+ "text": "please run the water heater in the ground floor washroom whenever temperature falls below 17",
1545
+ "expected": {
1546
+ "activity": "heating",
1547
+ "subject": "ground_floor_washroom_geyser",
1548
+ "action": "ON",
1549
+ "when": {
1550
+ "metric": "temperature",
1551
+ "op": "<",
1552
+ "value": 17
1553
+ }
1554
+ },
1555
+ "match": "exact",
1556
+ "category": "training_conditional",
1557
+ "source_row_zero_based": 299999
1558
+ },
1559
+ {
1560
+ "id": "poc2-0121",
1561
+ "text": "please mitti ki nami 10 se niche chala jaye to entrance wala fountain start kar do",
1562
+ "expected": {
1563
+ "activity": "garden",
1564
+ "subject": "entrance_fountain",
1565
+ "action": "ON",
1566
+ "when": {
1567
+ "metric": "soil_moisture",
1568
+ "op": "<",
1569
+ "value": 10
1570
+ }
1571
+ },
1572
+ "match": "exact",
1573
+ "category": "training_conditional",
1574
+ "source_row_zero_based": 242917
1575
+ },
1576
+ {
1577
+ "id": "poc2-0122",
1578
+ "text": "PLEASE BARAMDE KA FAN KI SPEED TEZ KARO AGAR ROOM KA TEMPERATURE 38 CROSS KARE",
1579
+ "expected": {
1580
+ "activity": "air",
1581
+ "subject": "veranda_ceiling_fan",
1582
+ "action": "HIGH",
1583
+ "when": {
1584
+ "metric": "temperature",
1585
+ "op": ">",
1586
+ "value": 38
1587
+ }
1588
+ },
1589
+ "match": "exact",
1590
+ "category": "training_conditional",
1591
+ "source_row_zero_based": 482
1592
+ },
1593
+ {
1594
+ "id": "poc2-0123",
1595
+ "text": "acha har roz shaam 5 baje drawing room ki ceiling light laga do",
1596
+ "expected": {
1597
+ "activity": "light",
1598
+ "subject": "drawing_room_ceiling_light",
1599
+ "action": "ON",
1600
+ "when": {
1601
+ "metric": "time",
1602
+ "op": "==",
1603
+ "value": "17:00"
1604
+ }
1605
+ },
1606
+ "match": "exact",
1607
+ "category": "training_conditional",
1608
+ "source_row_zero_based": 231627
1609
+ },
1610
+ {
1611
+ "id": "poc2-0124",
1612
+ "text": "Yaar veranda wali spotlight rok do roz savere 8:30 baje",
1613
+ "expected": {
1614
+ "activity": "light",
1615
+ "subject": "veranda_spotlight",
1616
+ "action": "OFF",
1617
+ "when": {
1618
+ "metric": "time",
1619
+ "op": "==",
1620
+ "value": "08:30"
1621
+ }
1622
+ },
1623
+ "match": "exact",
1624
+ "category": "training_conditional",
1625
+ "source_row_zero_based": 206922
1626
+ },
1627
+ {
1628
+ "id": "poc2-0125",
1629
+ "text": "Switch off lobby tube light daily at 1:30 pm.",
1630
+ "expected": {
1631
+ "activity": "light",
1632
+ "subject": "lobby_tube_light",
1633
+ "action": "OFF",
1634
+ "when": {
1635
+ "metric": "time",
1636
+ "op": "==",
1637
+ "value": "13:30"
1638
+ }
1639
+ },
1640
+ "match": "exact",
1641
+ "category": "training_conditional",
1642
+ "source_row_zero_based": 187000
1643
+ },
1644
+ {
1645
+ "id": "poc2-0126",
1646
+ "text": "BHAI TANKI KA PUMP LAGA DO JAB TANKI KA LEVEL 55 SE NICHE CHALA JAYE",
1647
+ "expected": {
1648
+ "activity": "water",
1649
+ "subject": "water_motor",
1650
+ "action": "ON",
1651
+ "when": {
1652
+ "metric": "water_level",
1653
+ "op": "<",
1654
+ "value": 55
1655
+ }
1656
+ },
1657
+ "match": "exact",
1658
+ "category": "training_conditional",
1659
+ "source_row_zero_based": 274032
1660
+ },
1661
+ {
1662
+ "id": "poc2-0127",
1663
+ "text": "Second floor kitchen ka pankha max mode pe daal do jab kamre ka temperature 19 cross kare",
1664
+ "expected": {
1665
+ "activity": "air",
1666
+ "subject": "second_floor_kitchen_ceiling_fan",
1667
+ "action": "HIGH",
1668
+ "when": {
1669
+ "metric": "temperature",
1670
+ "op": ">",
1671
+ "value": 19
1672
+ }
1673
+ },
1674
+ "match": "exact",
1675
+ "category": "training_conditional",
1676
+ "source_row_zero_based": 210389
1677
+ },
1678
+ {
1679
+ "id": "poc2-0128",
1680
+ "text": "Turn off balcony tubelight daily at 4 pm!",
1681
+ "expected": {
1682
+ "activity": "light",
1683
+ "subject": "balcony_tube_light",
1684
+ "action": "OFF",
1685
+ "when": {
1686
+ "metric": "time",
1687
+ "op": "==",
1688
+ "value": "16:00"
1689
+ }
1690
+ },
1691
+ "match": "exact",
1692
+ "category": "training_conditional",
1693
+ "source_row_zero_based": 263773
1694
+ },
1695
+ {
1696
+ "id": "poc2-0129",
1697
+ "text": "Hey switch off the first floor hall air conditioner whenever temperature is less than 37.",
1698
+ "expected": {
1699
+ "activity": "cooling",
1700
+ "subject": "first_floor_hall_ac",
1701
+ "action": "OFF",
1702
+ "when": {
1703
+ "metric": "temperature",
1704
+ "op": "<",
1705
+ "value": 37
1706
+ }
1707
+ },
1708
+ "match": "exact",
1709
+ "category": "training_conditional",
1710
+ "source_row_zero_based": 210724
1711
+ },
1712
+ {
1713
+ "id": "poc2-0130",
1714
+ "text": "YAAR BEDROOM WALA AIR PURIFIER SLOW MODE PE DAAL DO JAB AIR QUALITY 125 SE NEECHE JAYE.",
1715
+ "expected": {
1716
+ "activity": "air_quality",
1717
+ "subject": "bedroom_air_purifier",
1718
+ "action": "LOW",
1719
+ "when": {
1720
+ "metric": "aqi",
1721
+ "op": "<",
1722
+ "value": 125
1723
+ }
1724
+ },
1725
+ "match": "exact",
1726
+ "category": "training_conditional",
1727
+ "source_row_zero_based": 161714
1728
+ },
1729
+ {
1730
+ "id": "poc2-0131",
1731
+ "text": "please jaise hi kamre ka temperature 19 se neeche jaye to first floor kitchen ka geyser shuru kar do",
1732
+ "expected": {
1733
+ "activity": "heating",
1734
+ "subject": "first_floor_kitchen_geyser",
1735
+ "action": "ON",
1736
+ "when": {
1737
+ "metric": "temperature",
1738
+ "op": "<",
1739
+ "value": 19
1740
+ }
1741
+ },
1742
+ "match": "exact",
1743
+ "category": "training_conditional",
1744
+ "source_row_zero_based": 277932
1745
+ },
1746
+ {
1747
+ "id": "poc2-0132",
1748
+ "text": "Yaar har roz shaam 6:30 baje ground floor balcony wala curtains bandh kar do!",
1749
+ "expected": {
1750
+ "activity": "access",
1751
+ "subject": "ground_floor_balcony_curtains",
1752
+ "action": "CLOSE",
1753
+ "when": {
1754
+ "metric": "time",
1755
+ "op": "==",
1756
+ "value": "18:30"
1757
+ }
1758
+ },
1759
+ "match": "exact",
1760
+ "category": "training_conditional",
1761
+ "source_row_zero_based": 299610
1762
+ },
1763
+ {
1764
+ "id": "poc2-0133",
1765
+ "text": "pull open the first floor bathroom window daily at 11 am",
1766
+ "expected": {
1767
+ "activity": "access",
1768
+ "subject": "first_floor_bathroom_window",
1769
+ "action": "OPEN",
1770
+ "when": {
1771
+ "metric": "time",
1772
+ "op": "==",
1773
+ "value": "11:00"
1774
+ }
1775
+ },
1776
+ "match": "exact",
1777
+ "category": "training_conditional",
1778
+ "source_row_zero_based": 76101
1779
+ },
1780
+ {
1781
+ "id": "poc2-0134",
1782
+ "text": "yaar har roz raat ko 8 baje first floor washroom wala socket off karo",
1783
+ "expected": {
1784
+ "activity": "power",
1785
+ "subject": "first_floor_washroom_socket",
1786
+ "action": "OFF",
1787
+ "when": {
1788
+ "metric": "time",
1789
+ "op": "==",
1790
+ "value": "20:00"
1791
+ }
1792
+ },
1793
+ "match": "exact",
1794
+ "category": "training_conditional",
1795
+ "source_row_zero_based": 223338
1796
+ },
1797
+ {
1798
+ "id": "poc2-0135",
1799
+ "text": "In case room temperature gets under 35, turn off the ceiling fan in the kitchen!",
1800
+ "expected": {
1801
+ "activity": "air",
1802
+ "subject": "kitchen_ceiling_fan",
1803
+ "action": "OFF",
1804
+ "when": {
1805
+ "metric": "temperature",
1806
+ "op": "<",
1807
+ "value": 35
1808
+ }
1809
+ },
1810
+ "match": "exact",
1811
+ "category": "training_conditional",
1812
+ "source_row_zero_based": 332510
1813
+ },
1814
+ {
1815
+ "id": "poc2-0136",
1816
+ "text": "Please courtyard ki fairy lights shuru karo roz savere 9 baje.",
1817
+ "expected": {
1818
+ "activity": "light",
1819
+ "subject": "courtyard_fairy_lights",
1820
+ "action": "ON",
1821
+ "when": {
1822
+ "metric": "time",
1823
+ "op": "==",
1824
+ "value": "09:00"
1825
+ }
1826
+ },
1827
+ "match": "exact",
1828
+ "category": "training_conditional",
1829
+ "source_row_zero_based": 22443
1830
+ },
1831
+ {
1832
+ "id": "poc2-0137",
1833
+ "text": "switch kitchen table fan to high whenever temperature is more than 43.",
1834
+ "expected": {
1835
+ "activity": "air",
1836
+ "subject": "kitchen_table_fan",
1837
+ "action": "HIGH",
1838
+ "when": {
1839
+ "metric": "temperature",
1840
+ "op": ">",
1841
+ "value": 43
1842
+ }
1843
+ },
1844
+ "match": "exact",
1845
+ "category": "training_conditional",
1846
+ "source_row_zero_based": 71589
1847
+ },
1848
+ {
1849
+ "id": "poc2-0138",
1850
+ "text": "shut off the first floor kitchen fan once temp drops below 26",
1851
+ "expected": {
1852
+ "activity": "air",
1853
+ "subject": "first_floor_kitchen_ceiling_fan",
1854
+ "action": "OFF",
1855
+ "when": {
1856
+ "metric": "temperature",
1857
+ "op": "<",
1858
+ "value": 26
1859
+ }
1860
+ },
1861
+ "match": "exact",
1862
+ "category": "training_conditional",
1863
+ "source_row_zero_based": 123420
1864
+ },
1865
+ {
1866
+ "id": "poc2-0139",
1867
+ "text": "please roz shaam 7 baje first floor kitchen wala bulb bandh kar do.",
1868
+ "expected": {
1869
+ "activity": "light",
1870
+ "subject": "first_floor_kitchen_bulb",
1871
+ "action": "OFF",
1872
+ "when": {
1873
+ "metric": "time",
1874
+ "op": "==",
1875
+ "value": "19:00"
1876
+ }
1877
+ },
1878
+ "match": "exact",
1879
+ "category": "training_conditional",
1880
+ "source_row_zero_based": 166128
1881
+ },
1882
+ {
1883
+ "id": "poc2-0140",
1884
+ "text": "STOP THE SECOND FLOOR BATHROOM WATER HEATER IF TEMP IS MORE THAN 41.",
1885
+ "expected": {
1886
+ "activity": "heating",
1887
+ "subject": "second_floor_bathroom_geyser",
1888
+ "action": "OFF",
1889
+ "when": {
1890
+ "metric": "temperature",
1891
+ "op": ">",
1892
+ "value": 41
1893
+ }
1894
+ },
1895
+ "match": "exact",
1896
+ "category": "training_conditional",
1897
+ "source_row_zero_based": 69771
1898
+ },
1899
+ {
1900
+ "id": "poc2-0141",
1901
+ "text": "yaar jab hawa me nami 70 cross kare tab workshop ka exhaust chalao",
1902
+ "expected": {
1903
+ "activity": "air",
1904
+ "subject": "workshop_exhaust_fan",
1905
+ "action": "ON",
1906
+ "when": {
1907
+ "metric": "humidity",
1908
+ "op": ">",
1909
+ "value": 70
1910
+ }
1911
+ },
1912
+ "match": "exact",
1913
+ "category": "training_conditional",
1914
+ "source_row_zero_based": 23503
1915
+ },
1916
+ {
1917
+ "id": "poc2-0142",
1918
+ "text": "start balcony smart bulb daily at 8 pm",
1919
+ "expected": {
1920
+ "activity": "light",
1921
+ "subject": "balcony_smart_bulb",
1922
+ "action": "ON",
1923
+ "when": {
1924
+ "metric": "time",
1925
+ "op": "==",
1926
+ "value": "20:00"
1927
+ }
1928
+ },
1929
+ "match": "exact",
1930
+ "category": "training_conditional",
1931
+ "source_row_zero_based": 134514
1932
+ },
1933
+ {
1934
+ "id": "poc2-0143",
1935
+ "text": "yaar first floor corridor wala bulb laga do roz raat 8:30 baje",
1936
+ "expected": {
1937
+ "activity": "light",
1938
+ "subject": "first_floor_corridor_bulb",
1939
+ "action": "ON",
1940
+ "when": {
1941
+ "metric": "time",
1942
+ "op": "==",
1943
+ "value": "20:30"
1944
+ }
1945
+ },
1946
+ "match": "exact",
1947
+ "category": "training_conditional",
1948
+ "source_row_zero_based": 31359
1949
+ },
1950
+ {
1951
+ "id": "poc2-0144",
1952
+ "text": "if room temperature falls below 18 then power off kids room wall fan.",
1953
+ "expected": {
1954
+ "activity": "air",
1955
+ "subject": "kids_room_wall_fan",
1956
+ "action": "OFF",
1957
+ "when": {
1958
+ "metric": "temperature",
1959
+ "op": "<",
1960
+ "value": 18
1961
+ }
1962
+ },
1963
+ "match": "exact",
1964
+ "category": "training_conditional",
1965
+ "source_row_zero_based": 1604
1966
+ },
1967
+ {
1968
+ "id": "poc2-0145",
1969
+ "text": "Shut down the blower in the bedroom when room temperature is more than 21!",
1970
+ "expected": {
1971
+ "activity": "heating",
1972
+ "subject": "bedroom_blower",
1973
+ "action": "OFF",
1974
+ "when": {
1975
+ "metric": "temperature",
1976
+ "op": ">",
1977
+ "value": 21
1978
+ }
1979
+ },
1980
+ "match": "exact",
1981
+ "category": "training_conditional",
1982
+ "source_row_zero_based": 258885
1983
+ },
1984
+ {
1985
+ "id": "poc2-0146",
1986
+ "text": "start the fan in the first floor study room if room temperature rises above 48.",
1987
+ "expected": {
1988
+ "activity": "air",
1989
+ "subject": "first_floor_study_room_ceiling_fan",
1990
+ "action": "ON",
1991
+ "when": {
1992
+ "metric": "temperature",
1993
+ "op": ">",
1994
+ "value": 48
1995
+ }
1996
+ },
1997
+ "match": "exact",
1998
+ "category": "training_conditional",
1999
+ "source_row_zero_based": 35393
2000
+ },
2001
+ {
2002
+ "id": "poc2-0147",
2003
+ "text": "if room temperature falls below 31 then turn off ground floor kitchen fan",
2004
+ "expected": {
2005
+ "activity": "air",
2006
+ "subject": "ground_floor_kitchen_ceiling_fan",
2007
+ "action": "OFF",
2008
+ "when": {
2009
+ "metric": "temperature",
2010
+ "op": "<",
2011
+ "value": 31
2012
+ }
2013
+ },
2014
+ "match": "exact",
2015
+ "category": "training_conditional",
2016
+ "source_row_zero_based": 36984
2017
+ },
2018
+ {
2019
+ "id": "poc2-0148",
2020
+ "text": "in case room temperature goes over 34 then stop the parents room room heater!",
2021
+ "expected": {
2022
+ "activity": "heating",
2023
+ "subject": "parents_room_room_heater",
2024
+ "action": "OFF",
2025
+ "when": {
2026
+ "metric": "temperature",
2027
+ "op": ">",
2028
+ "value": 34
2029
+ }
2030
+ },
2031
+ "match": "exact",
2032
+ "category": "training_conditional",
2033
+ "source_row_zero_based": 29243
2034
+ },
2035
+ {
2036
+ "id": "poc2-0149",
2037
+ "text": "backyard ki batti on karo roz shaam 5:30 baje!",
2038
+ "expected": {
2039
+ "activity": "light",
2040
+ "subject": "backyard_light",
2041
+ "action": "ON",
2042
+ "when": {
2043
+ "metric": "time",
2044
+ "op": "==",
2045
+ "value": "17:30"
2046
+ }
2047
+ },
2048
+ "match": "exact",
2049
+ "category": "training_conditional",
2050
+ "source_row_zero_based": 187166
2051
+ },
2052
+ {
2053
+ "id": "poc2-0150",
2054
+ "text": "at 3 pm sharp turn off camera 3",
2055
+ "expected": {
2056
+ "activity": "security",
2057
+ "subject": "camera_3",
2058
+ "action": "OFF",
2059
+ "when": {
2060
+ "metric": "time",
2061
+ "op": "==",
2062
+ "value": "15:00"
2063
+ }
2064
+ },
2065
+ "match": "exact",
2066
+ "category": "training_conditional",
2067
+ "source_row_zero_based": 247516
2068
+ },
2069
+ {
2070
+ "id": "poc2-0151",
2071
+ "text": "BHAI AGAR TEMP 39 KE UPAR CHALA JAYE TAB SECOND FLOOR GUEST ROOM WALA AIR CONDITIONER KO TEZ PE RAKHO",
2072
+ "expected": {
2073
+ "activity": "cooling",
2074
+ "subject": "second_floor_guest_room_ac",
2075
+ "action": "HIGH",
2076
+ "when": {
2077
+ "metric": "temperature",
2078
+ "op": ">",
2079
+ "value": 39
2080
+ }
2081
+ },
2082
+ "match": "exact",
2083
+ "category": "training_conditional",
2084
+ "source_row_zero_based": 245084
2085
+ },
2086
+ {
2087
+ "id": "poc2-0152",
2088
+ "text": "yaar humidity 80 se neeche jaye to master bedroom ka humidifier chala do",
2089
+ "expected": {
2090
+ "activity": "air_quality",
2091
+ "subject": "master_bedroom_humidifier",
2092
+ "action": "ON",
2093
+ "when": {
2094
+ "metric": "humidity",
2095
+ "op": "<",
2096
+ "value": 80
2097
+ }
2098
+ },
2099
+ "match": "exact",
2100
+ "category": "training_conditional",
2101
+ "source_row_zero_based": 69761
2102
+ },
2103
+ {
2104
+ "id": "poc2-0153",
2105
+ "text": "please temperature 20 paar kare to washroom wala geyser off kardo",
2106
+ "expected": {
2107
+ "activity": "heating",
2108
+ "subject": "washroom_geyser",
2109
+ "action": "OFF",
2110
+ "when": {
2111
+ "metric": "temperature",
2112
+ "op": ">",
2113
+ "value": 20
2114
+ }
2115
+ },
2116
+ "match": "exact",
2117
+ "category": "training_conditional",
2118
+ "source_row_zero_based": 171102
2119
+ },
2120
+ {
2121
+ "id": "poc2-0154",
2122
+ "text": "at 6 pm sharp power on the hall table fan!",
2123
+ "expected": {
2124
+ "activity": "air",
2125
+ "subject": "hall_table_fan",
2126
+ "action": "ON",
2127
+ "when": {
2128
+ "metric": "time",
2129
+ "op": "==",
2130
+ "value": "18:00"
2131
+ }
2132
+ },
2133
+ "match": "exact",
2134
+ "category": "training_conditional",
2135
+ "source_row_zero_based": 33339
2136
+ },
2137
+ {
2138
+ "id": "poc2-0155",
2139
+ "text": "ACHA HAR ROZ RAAT 10 BAJE SECOND FLOOR GUEST ROOM KA SMART SWITCH BANDH KAR DO!",
2140
+ "expected": {
2141
+ "activity": "power",
2142
+ "subject": "second_floor_guest_room_smart_switch",
2143
+ "action": "OFF",
2144
+ "when": {
2145
+ "metric": "time",
2146
+ "op": "==",
2147
+ "value": "22:00"
2148
+ }
2149
+ },
2150
+ "match": "exact",
2151
+ "category": "training_conditional",
2152
+ "source_row_zero_based": 319545
2153
+ },
2154
+ {
2155
+ "id": "poc2-0156",
2156
+ "text": "IN CASE TEMP RISES ABOVE 44 SET THE MASTER BEDROOM PEDESTAL FAN TO HIGH.",
2157
+ "expected": {
2158
+ "activity": "air",
2159
+ "subject": "master_bedroom_pedestal_fan",
2160
+ "action": "HIGH",
2161
+ "when": {
2162
+ "metric": "temperature",
2163
+ "op": ">",
2164
+ "value": 44
2165
+ }
2166
+ },
2167
+ "match": "exact",
2168
+ "category": "training_conditional",
2169
+ "source_row_zero_based": 282553
2170
+ },
2171
+ {
2172
+ "id": "poc2-0157",
2173
+ "text": "please set the first floor kitchen fan on high whenever room temperature crosses 22",
2174
+ "expected": {
2175
+ "activity": "air",
2176
+ "subject": "first_floor_kitchen_ceiling_fan",
2177
+ "action": "HIGH",
2178
+ "when": {
2179
+ "metric": "temperature",
2180
+ "op": ">",
2181
+ "value": 22
2182
+ }
2183
+ },
2184
+ "match": "exact",
2185
+ "category": "training_conditional",
2186
+ "source_row_zero_based": 110183
2187
+ },
2188
+ {
2189
+ "id": "poc2-0158",
2190
+ "text": "Start up office room heater whenever temperature goes below 43",
2191
+ "expected": {
2192
+ "activity": "heating",
2193
+ "subject": "home_office_room_heater",
2194
+ "action": "ON",
2195
+ "when": {
2196
+ "metric": "temperature",
2197
+ "op": "<",
2198
+ "value": 43
2199
+ }
2200
+ },
2201
+ "match": "exact",
2202
+ "category": "training_conditional",
2203
+ "source_row_zero_based": 50998
2204
+ },
2205
+ {
2206
+ "id": "poc2-0159",
2207
+ "text": "in case temp drops below 16 put on the geyser in the washroom!",
2208
+ "expected": {
2209
+ "activity": "heating",
2210
+ "subject": "washroom_geyser",
2211
+ "action": "ON",
2212
+ "when": {
2213
+ "metric": "temperature",
2214
+ "op": "<",
2215
+ "value": 16
2216
+ }
2217
+ },
2218
+ "match": "exact",
2219
+ "category": "training_conditional",
2220
+ "source_row_zero_based": 151474
2221
+ },
2222
+ {
2223
+ "id": "poc2-0160",
2224
+ "text": "suno study room wala speaker band karo har roz subah 7 baje.",
2225
+ "expected": {
2226
+ "activity": "music",
2227
+ "subject": "study_room_speaker",
2228
+ "action": "OFF",
2229
+ "when": {
2230
+ "metric": "time",
2231
+ "op": "==",
2232
+ "value": "07:00"
2233
+ }
2234
+ },
2235
+ "match": "exact",
2236
+ "category": "training_conditional",
2237
+ "source_row_zero_based": 124876
2238
+ },
2239
+ {
2240
+ "id": "poc2-0161",
2241
+ "text": "at 2 pm sharp power off coffee maker",
2242
+ "expected": {
2243
+ "activity": "kitchen",
2244
+ "subject": "coffee_machine",
2245
+ "action": "STOP",
2246
+ "when": {
2247
+ "metric": "time",
2248
+ "op": "==",
2249
+ "value": "14:00"
2250
+ }
2251
+ },
2252
+ "match": "exact",
2253
+ "category": "training_conditional",
2254
+ "source_row_zero_based": 307435
2255
+ },
2256
+ {
2257
+ "id": "poc2-0162",
2258
+ "text": "once temp falls below 24, power off the second floor lobby fan",
2259
+ "expected": {
2260
+ "activity": "air",
2261
+ "subject": "second_floor_lobby_ceiling_fan",
2262
+ "action": "OFF",
2263
+ "when": {
2264
+ "metric": "temperature",
2265
+ "op": "<",
2266
+ "value": 24
2267
+ }
2268
+ },
2269
+ "match": "exact",
2270
+ "category": "training_conditional",
2271
+ "source_row_zero_based": 219831
2272
+ },
2273
+ {
2274
+ "id": "poc2-0163",
2275
+ "text": "POWER ON KIDS ROOM MIRROR LIGHT AT 4 PM",
2276
+ "expected": {
2277
+ "activity": "light",
2278
+ "subject": "kids_room_mirror_light",
2279
+ "action": "ON",
2280
+ "when": {
2281
+ "metric": "time",
2282
+ "op": "==",
2283
+ "value": "16:00"
2284
+ }
2285
+ },
2286
+ "match": "exact",
2287
+ "category": "training_conditional",
2288
+ "source_row_zero_based": 232118
2289
+ },
2290
+ {
2291
+ "id": "poc2-0164",
2292
+ "text": "SUNO JAISE HI TEMP 25 CROSS KARE TOH FIRST FLOOR STUDY ROOM WALA CEILING FAN START KARO",
2293
+ "expected": {
2294
+ "activity": "air",
2295
+ "subject": "first_floor_study_room_ceiling_fan",
2296
+ "action": "ON",
2297
+ "when": {
2298
+ "metric": "temperature",
2299
+ "op": ">",
2300
+ "value": 25
2301
+ }
2302
+ },
2303
+ "match": "exact",
2304
+ "category": "training_conditional",
2305
+ "source_row_zero_based": 64948
2306
+ },
2307
+ {
2308
+ "id": "poc2-0165",
2309
+ "text": "yaar har roz raat 11 baje study room wala dehumidifier chala do!",
2310
+ "expected": {
2311
+ "activity": "air_quality",
2312
+ "subject": "study_room_dehumidifier",
2313
+ "action": "ON",
2314
+ "when": {
2315
+ "metric": "time",
2316
+ "op": "==",
2317
+ "value": "23:00"
2318
+ }
2319
+ },
2320
+ "match": "exact",
2321
+ "category": "training_conditional",
2322
+ "source_row_zero_based": 45370
2323
+ },
2324
+ {
2325
+ "id": "poc2-0166",
2326
+ "text": "set the home office purifier on low when air quality index falls below 100",
2327
+ "expected": {
2328
+ "activity": "air_quality",
2329
+ "subject": "home_office_air_purifier",
2330
+ "action": "LOW",
2331
+ "when": {
2332
+ "metric": "aqi",
2333
+ "op": "<",
2334
+ "value": 100
2335
+ }
2336
+ },
2337
+ "match": "exact",
2338
+ "category": "training_conditional",
2339
+ "source_row_zero_based": 113425
2340
+ },
2341
+ {
2342
+ "id": "poc2-0167",
2343
+ "text": "yaar agar kamre ka temperature 41 se zyada ho jaye toh drawing room wala table fan chalao",
2344
+ "expected": {
2345
+ "activity": "air",
2346
+ "subject": "drawing_room_table_fan",
2347
+ "action": "ON",
2348
+ "when": {
2349
+ "metric": "temperature",
2350
+ "op": ">",
2351
+ "value": 41
2352
+ }
2353
+ },
2354
+ "match": "exact",
2355
+ "category": "training_conditional",
2356
+ "source_row_zero_based": 201542
2357
+ },
2358
+ {
2359
+ "id": "poc2-0168",
2360
+ "text": "PLEASE ROZ SAVERE 8 BAJE PARENTS ROOM KI MACHHAR WALI MACHINE START KARO.",
2361
+ "expected": {
2362
+ "activity": "air_quality",
2363
+ "subject": "parents_room_mosquito_machine",
2364
+ "action": "ON",
2365
+ "when": {
2366
+ "metric": "time",
2367
+ "op": "==",
2368
+ "value": "08:00"
2369
+ }
2370
+ },
2371
+ "match": "exact",
2372
+ "category": "training_conditional",
2373
+ "source_row_zero_based": 158053
2374
+ },
2375
+ {
2376
+ "id": "poc2-0169",
2377
+ "text": "bhai living room ka wall fan rok do jab room ka temperature 23 se niche chala jaye.",
2378
+ "expected": {
2379
+ "activity": "air",
2380
+ "subject": "living_room_wall_fan",
2381
+ "action": "OFF",
2382
+ "when": {
2383
+ "metric": "temperature",
2384
+ "op": "<",
2385
+ "value": 23
2386
+ }
2387
+ },
2388
+ "match": "exact",
2389
+ "category": "training_conditional",
2390
+ "source_row_zero_based": 150640
2391
+ },
2392
+ {
2393
+ "id": "poc2-0170",
2394
+ "text": "yaar temp 39 paar kare to home office wala table fan tez pe chalao.",
2395
+ "expected": {
2396
+ "activity": "air",
2397
+ "subject": "home_office_table_fan",
2398
+ "action": "HIGH",
2399
+ "when": {
2400
+ "metric": "temperature",
2401
+ "op": ">",
2402
+ "value": 39
2403
+ }
2404
+ },
2405
+ "match": "exact",
2406
+ "category": "training_conditional",
2407
+ "source_row_zero_based": 305390
2408
+ },
2409
+ {
2410
+ "id": "poc2-0171",
2411
+ "text": "yaar first floor lobby wala bulb off karo har roz shaam 7 baje!",
2412
+ "expected": {
2413
+ "activity": "light",
2414
+ "subject": "first_floor_lobby_bulb",
2415
+ "action": "OFF",
2416
+ "when": {
2417
+ "metric": "time",
2418
+ "op": "==",
2419
+ "value": "19:00"
2420
+ }
2421
+ },
2422
+ "match": "exact",
2423
+ "category": "training_conditional",
2424
+ "source_row_zero_based": 148959
2425
+ },
2426
+ {
2427
+ "id": "poc2-0172",
2428
+ "text": "put on the heat blower in the hall at 7 am",
2429
+ "expected": {
2430
+ "activity": "heating",
2431
+ "subject": "hall_blower",
2432
+ "action": "ON",
2433
+ "when": {
2434
+ "metric": "time",
2435
+ "op": "==",
2436
+ "value": "07:00"
2437
+ }
2438
+ },
2439
+ "match": "exact",
2440
+ "category": "training_conditional",
2441
+ "source_row_zero_based": 297582
2442
+ },
2443
+ {
2444
+ "id": "poc2-0173",
2445
+ "text": "yaar living room wala purifier chalu karo agar aqi 300 paar kare.",
2446
+ "expected": {
2447
+ "activity": "air_quality",
2448
+ "subject": "living_room_air_purifier",
2449
+ "action": "ON",
2450
+ "when": {
2451
+ "metric": "aqi",
2452
+ "op": ">",
2453
+ "value": 300
2454
+ }
2455
+ },
2456
+ "match": "exact",
2457
+ "category": "training_conditional",
2458
+ "source_row_zero_based": 301156
2459
+ },
2460
+ {
2461
+ "id": "poc2-0174",
2462
+ "text": "YAAR BASEMENT KA DEHUMIDIFIER OFF KARDO AGAR HAWA ME NAMI 75 SE NEECHE JAYE.",
2463
+ "expected": {
2464
+ "activity": "air_quality",
2465
+ "subject": "basement_dehumidifier",
2466
+ "action": "OFF",
2467
+ "when": {
2468
+ "metric": "humidity",
2469
+ "op": "<",
2470
+ "value": 75
2471
+ }
2472
+ },
2473
+ "match": "exact",
2474
+ "category": "training_conditional",
2475
+ "source_row_zero_based": 203287
2476
+ },
2477
+ {
2478
+ "id": "poc2-0175",
2479
+ "text": "power off the kitchen ceiling light daily at 8 am!",
2480
+ "expected": {
2481
+ "activity": "light",
2482
+ "subject": "kitchen_ceiling_light",
2483
+ "action": "OFF",
2484
+ "when": {
2485
+ "metric": "time",
2486
+ "op": "==",
2487
+ "value": "08:00"
2488
+ }
2489
+ },
2490
+ "match": "exact",
2491
+ "category": "training_conditional",
2492
+ "source_row_zero_based": 153280
2493
+ },
2494
+ {
2495
+ "id": "poc2-0176",
2496
+ "text": "acha basement ka exhaust band karo raat ko 9 baje",
2497
+ "expected": {
2498
+ "activity": "air",
2499
+ "subject": "basement_exhaust_fan",
2500
+ "action": "OFF",
2501
+ "when": {
2502
+ "metric": "time",
2503
+ "op": "==",
2504
+ "value": "21:00"
2505
+ }
2506
+ },
2507
+ "match": "exact",
2508
+ "category": "training_conditional",
2509
+ "source_row_zero_based": 201599
2510
+ },
2511
+ {
2512
+ "id": "poc2-0177",
2513
+ "text": "when temperature is more than 23 run the tower fan in the master bedroom!",
2514
+ "expected": {
2515
+ "activity": "air",
2516
+ "subject": "master_bedroom_tower_fan",
2517
+ "action": "ON",
2518
+ "when": {
2519
+ "metric": "temperature",
2520
+ "op": ">",
2521
+ "value": 23
2522
+ }
2523
+ },
2524
+ "match": "exact",
2525
+ "category": "training_conditional",
2526
+ "source_row_zero_based": 67846
2527
+ },
2528
+ {
2529
+ "id": "poc2-0178",
2530
+ "text": "please bachchon ke kamre wala wall fan laga do agar kamre ka temperature 16 se upar jaye",
2531
+ "expected": {
2532
+ "activity": "air",
2533
+ "subject": "kids_room_wall_fan",
2534
+ "action": "ON",
2535
+ "when": {
2536
+ "metric": "temperature",
2537
+ "op": ">",
2538
+ "value": 16
2539
+ }
2540
+ },
2541
+ "match": "exact",
2542
+ "category": "training_conditional",
2543
+ "source_row_zero_based": 259643
2544
+ },
2545
+ {
2546
+ "id": "poc2-0179",
2547
+ "text": "drawing room wala socket off karo roz savere 8 baje",
2548
+ "expected": {
2549
+ "activity": "power",
2550
+ "subject": "drawing_room_socket",
2551
+ "action": "OFF",
2552
+ "when": {
2553
+ "metric": "time",
2554
+ "op": "==",
2555
+ "value": "08:00"
2556
+ }
2557
+ },
2558
+ "match": "exact",
2559
+ "category": "training_conditional",
2560
+ "source_row_zero_based": 185234
2561
+ },
2562
+ {
2563
+ "id": "poc2-0180",
2564
+ "text": "bhai ground floor bathroom ka geyser on kar do agar kamre ka temperature 26 se niche chala jaye.",
2565
+ "expected": {
2566
+ "activity": "heating",
2567
+ "subject": "ground_floor_bathroom_geyser",
2568
+ "action": "ON",
2569
+ "when": {
2570
+ "metric": "temperature",
2571
+ "op": "<",
2572
+ "value": 26
2573
+ }
2574
+ },
2575
+ "match": "exact",
2576
+ "category": "training_conditional",
2577
+ "source_row_zero_based": 7943
2578
+ },
2579
+ {
2580
+ "id": "poc2-0181",
2581
+ "text": "in case temperature drops below 23 turn off the dining room wall mounted fan",
2582
+ "expected": {
2583
+ "activity": "air",
2584
+ "subject": "dining_room_wall_fan",
2585
+ "action": "OFF",
2586
+ "when": {
2587
+ "metric": "temperature",
2588
+ "op": "<",
2589
+ "value": 23
2590
+ }
2591
+ },
2592
+ "match": "exact",
2593
+ "category": "training_conditional",
2594
+ "source_row_zero_based": 310605
2595
+ },
2596
+ {
2597
+ "id": "poc2-0182",
2598
+ "text": "Every day at 9 am switch off the night lamp in the bedroom",
2599
+ "expected": {
2600
+ "activity": "light",
2601
+ "subject": "bedroom_night_lamp",
2602
+ "action": "OFF",
2603
+ "when": {
2604
+ "metric": "time",
2605
+ "op": "==",
2606
+ "value": "09:00"
2607
+ }
2608
+ },
2609
+ "match": "exact",
2610
+ "category": "training_conditional",
2611
+ "source_row_zero_based": 3053
2612
+ },
2613
+ {
2614
+ "id": "poc2-0183",
2615
+ "text": "acha roz raat ko 9:30 baje dining ka curtains band kar do!",
2616
+ "expected": {
2617
+ "activity": "access",
2618
+ "subject": "dining_room_curtains",
2619
+ "action": "CLOSE",
2620
+ "when": {
2621
+ "metric": "time",
2622
+ "op": "==",
2623
+ "value": "21:30"
2624
+ }
2625
+ },
2626
+ "match": "exact",
2627
+ "category": "training_conditional",
2628
+ "source_row_zero_based": 135294
2629
+ },
2630
+ {
2631
+ "id": "poc2-0184",
2632
+ "text": "at 7 pm sharp switch off the second floor bedroom smart plug!",
2633
+ "expected": {
2634
+ "activity": "power",
2635
+ "subject": "second_floor_bedroom_smart_plug",
2636
+ "action": "OFF",
2637
+ "when": {
2638
+ "metric": "time",
2639
+ "op": "==",
2640
+ "value": "19:00"
2641
+ }
2642
+ },
2643
+ "match": "exact",
2644
+ "category": "training_conditional",
2645
+ "source_row_zero_based": 30600
2646
+ },
2647
+ {
2648
+ "id": "poc2-0185",
2649
+ "text": "daily at 6 am power off second floor balcony bulb",
2650
+ "expected": {
2651
+ "activity": "light",
2652
+ "subject": "second_floor_balcony_bulb",
2653
+ "action": "OFF",
2654
+ "when": {
2655
+ "metric": "time",
2656
+ "op": "==",
2657
+ "value": "06:00"
2658
+ }
2659
+ },
2660
+ "match": "exact",
2661
+ "category": "training_conditional",
2662
+ "source_row_zero_based": 126919
2663
+ },
2664
+ {
2665
+ "id": "poc2-0186",
2666
+ "text": "if moisture in the air exceeds 45 power on the bedroom dehumidifier",
2667
+ "expected": {
2668
+ "activity": "air_quality",
2669
+ "subject": "bedroom_dehumidifier",
2670
+ "action": "ON",
2671
+ "when": {
2672
+ "metric": "humidity",
2673
+ "op": ">",
2674
+ "value": 45
2675
+ }
2676
+ },
2677
+ "match": "exact",
2678
+ "category": "training_conditional",
2679
+ "source_row_zero_based": 277615
2680
+ },
2681
+ {
2682
+ "id": "poc2-0187",
2683
+ "text": "acha living room ka projector band karo har roz savere 11 baje!",
2684
+ "expected": {
2685
+ "activity": "entertainment",
2686
+ "subject": "living_room_projector",
2687
+ "action": "OFF",
2688
+ "when": {
2689
+ "metric": "time",
2690
+ "op": "==",
2691
+ "value": "11:00"
2692
+ }
2693
+ },
2694
+ "match": "exact",
2695
+ "category": "training_conditional",
2696
+ "source_row_zero_based": 339612
2697
+ },
2698
+ {
2699
+ "id": "poc2-0188",
2700
+ "text": "at 10 am sharp turn off the plug 5",
2701
+ "expected": {
2702
+ "activity": "power",
2703
+ "subject": "smart_plug_5",
2704
+ "action": "OFF",
2705
+ "when": {
2706
+ "metric": "time",
2707
+ "op": "==",
2708
+ "value": "10:00"
2709
+ }
2710
+ },
2711
+ "match": "exact",
2712
+ "category": "training_conditional",
2713
+ "source_row_zero_based": 226145
2714
+ },
2715
+ {
2716
+ "id": "poc2-0189",
2717
+ "text": "Daily at 9 am switch on the ground floor study bulb",
2718
+ "expected": {
2719
+ "activity": "light",
2720
+ "subject": "ground_floor_study_room_bulb",
2721
+ "action": "ON",
2722
+ "when": {
2723
+ "metric": "time",
2724
+ "op": "==",
2725
+ "value": "09:00"
2726
+ }
2727
+ },
2728
+ "match": "exact",
2729
+ "category": "training_conditional",
2730
+ "source_row_zero_based": 116081
2731
+ },
2732
+ {
2733
+ "id": "poc2-0190",
2734
+ "text": "please mummy papa ke kamre wala wall fan rok do jab kamre ka temperature 41 se neeche jaye",
2735
+ "expected": {
2736
+ "activity": "air",
2737
+ "subject": "parents_room_wall_fan",
2738
+ "action": "OFF",
2739
+ "when": {
2740
+ "metric": "temperature",
2741
+ "op": "<",
2742
+ "value": 41
2743
+ }
2744
+ },
2745
+ "match": "exact",
2746
+ "category": "training_conditional",
2747
+ "source_row_zero_based": 83638
2748
+ },
2749
+ {
2750
+ "id": "poc2-0191",
2751
+ "text": "bhai roz dopahar ko 4:30 baje bathroom ka bulb start karo!",
2752
+ "expected": {
2753
+ "activity": "light",
2754
+ "subject": "bathroom_bulb",
2755
+ "action": "ON",
2756
+ "when": {
2757
+ "metric": "time",
2758
+ "op": "==",
2759
+ "value": "16:30"
2760
+ }
2761
+ },
2762
+ "match": "exact",
2763
+ "category": "training_conditional",
2764
+ "source_row_zero_based": 336818
2765
+ },
2766
+ {
2767
+ "id": "poc2-0192",
2768
+ "text": "Acha shaam 5 baje servant room ka bulb off kar do.",
2769
+ "expected": {
2770
+ "activity": "light",
2771
+ "subject": "servant_room_bulb",
2772
+ "action": "OFF",
2773
+ "when": {
2774
+ "metric": "time",
2775
+ "op": "==",
2776
+ "value": "17:00"
2777
+ }
2778
+ },
2779
+ "match": "exact",
2780
+ "category": "training_conditional",
2781
+ "source_row_zero_based": 337602
2782
+ },
2783
+ {
2784
+ "id": "poc2-0193",
2785
+ "text": "at 7 pm sharp stop the switch in the children's room",
2786
+ "expected": {
2787
+ "activity": "power",
2788
+ "subject": "kids_room_smart_switch",
2789
+ "action": "OFF",
2790
+ "when": {
2791
+ "metric": "time",
2792
+ "op": "==",
2793
+ "value": "19:00"
2794
+ }
2795
+ },
2796
+ "match": "exact",
2797
+ "category": "training_conditional",
2798
+ "source_row_zero_based": 100558
2799
+ },
2800
+ {
2801
+ "id": "poc2-0194",
2802
+ "text": "suno jab temp 39 se kam ho toh veranda ka wall fan rok do!",
2803
+ "expected": {
2804
+ "activity": "air",
2805
+ "subject": "veranda_wall_fan",
2806
+ "action": "OFF",
2807
+ "when": {
2808
+ "metric": "temperature",
2809
+ "op": "<",
2810
+ "value": 39
2811
+ }
2812
+ },
2813
+ "match": "exact",
2814
+ "category": "training_conditional",
2815
+ "source_row_zero_based": 202552
2816
+ },
2817
+ {
2818
+ "id": "poc2-0195",
2819
+ "text": "If room temperature gets under 42 then stop the second floor study air conditioner",
2820
+ "expected": {
2821
+ "activity": "cooling",
2822
+ "subject": "second_floor_study_room_ac",
2823
+ "action": "OFF",
2824
+ "when": {
2825
+ "metric": "temperature",
2826
+ "op": "<",
2827
+ "value": 42
2828
+ }
2829
+ },
2830
+ "match": "exact",
2831
+ "category": "training_conditional",
2832
+ "source_row_zero_based": 230321
2833
+ },
2834
+ {
2835
+ "id": "poc2-0196",
2836
+ "text": "Please mixie band karo har roz raat ko 9 baje.",
2837
+ "expected": {
2838
+ "activity": "kitchen",
2839
+ "subject": "mixer_grinder",
2840
+ "action": "STOP",
2841
+ "when": {
2842
+ "metric": "time",
2843
+ "op": "==",
2844
+ "value": "21:00"
2845
+ }
2846
+ },
2847
+ "match": "exact",
2848
+ "category": "training_conditional",
2849
+ "source_row_zero_based": 203416
2850
+ },
2851
+ {
2852
+ "id": "poc2-0197",
2853
+ "text": "When moisture in the air rises above 35 then start the store room exhaust fan.",
2854
+ "expected": {
2855
+ "activity": "air",
2856
+ "subject": "store_room_exhaust_fan",
2857
+ "action": "ON",
2858
+ "when": {
2859
+ "metric": "humidity",
2860
+ "op": ">",
2861
+ "value": 35
2862
+ }
2863
+ },
2864
+ "match": "exact",
2865
+ "category": "training_conditional",
2866
+ "source_row_zero_based": 32686
2867
+ },
2868
+ {
2869
+ "id": "poc2-0198",
2870
+ "text": "suno har roz savere 6 baje first floor kitchen wali tube light rok do!",
2871
+ "expected": {
2872
+ "activity": "light",
2873
+ "subject": "first_floor_kitchen_tube_light",
2874
+ "action": "OFF",
2875
+ "when": {
2876
+ "metric": "time",
2877
+ "op": "==",
2878
+ "value": "06:00"
2879
+ }
2880
+ },
2881
+ "match": "exact",
2882
+ "category": "training_conditional",
2883
+ "source_row_zero_based": 145141
2884
+ },
2885
+ {
2886
+ "id": "poc2-0199",
2887
+ "text": "acha har roz raat ko 9 baje second floor kitchen ka fan shuru kar do",
2888
+ "expected": {
2889
+ "activity": "air",
2890
+ "subject": "second_floor_kitchen_ceiling_fan",
2891
+ "action": "ON",
2892
+ "when": {
2893
+ "metric": "time",
2894
+ "op": "==",
2895
+ "value": "21:00"
2896
+ }
2897
+ },
2898
+ "match": "exact",
2899
+ "category": "training_conditional",
2900
+ "source_row_zero_based": 224924
2901
+ }
2902
+ ]
edge_benchmarks/rpi5-2026-09-26/environment.lock.txt ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ certifi==2026.7.22
2
+ charset-normalizer==3.5.1
3
+ filelock==4.0.3
4
+ fsspec==2026.9.0
5
+ hf-xet==1.6.0
6
+ huggingface_hub==0.36.2
7
+ idna==3.20
8
+ Jinja2==3.1.6
9
+ joblib==1.5.3
10
+ MarkupSafe==3.0.3
11
+ mpmath==1.3.0
12
+ networkx==3.7
13
+ numpy==2.3.5
14
+ packaging==26.3
15
+ psutil==7.2.2
16
+ PyYAML==6.0.3
17
+ regex==2026.9.10
18
+ requests==2.34.2
19
+ safetensors==0.8.0
20
+ scikit-learn==1.8.0
21
+ scipy==1.17.0
22
+ setuptools==84.0.0
23
+ sympy==1.14.0
24
+ threadpoolctl==3.7.0
25
+ tokenizers==0.22.1
26
+ torch==2.8.0
27
+ tqdm==4.70.1
28
+ transformers==4.56.2
29
+ typing_extensions==4.16.0
30
+ urllib3==2.8.0
edge_benchmarks/rpi5-2026-09-26/provenance.json ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "measurement_revision": "edge-rpi5-20260926",
3
+ "model": {
4
+ "repo_id": "sraivante/superfast-tiny-home-robotics-json-1m-v3",
5
+ "revision": "2b2e71d37ea9fa0fe6ab247b6a74e8db774fb6f2",
6
+ "files": [
7
+ {
8
+ "bundle_path": "projects/poc2/engine.py",
9
+ "repo_path": "engine.py",
10
+ "sha256": "bbc051221dae5c7238e7a76dae4872584c03f3db366a78980f0ea0cf5caaa18e",
11
+ "bytes": 3775,
12
+ "workspace_source": "rpi_measurements/bundle/projects/poc2/engine.py"
13
+ },
14
+ {
15
+ "bundle_path": "projects/poc2/model/devices-catalog.json",
16
+ "repo_path": "model/devices-catalog.json",
17
+ "sha256": "473e5850e6f9d05abf4a7806121bb42464f760fed2de589fa58accebeef72af4",
18
+ "bytes": 136537,
19
+ "workspace_source": "rpi_measurements/bundle/projects/poc2/model/devices-catalog.json"
20
+ },
21
+ {
22
+ "bundle_path": "projects/poc2/model/metrics_v3.json",
23
+ "repo_path": "model/metrics_v3.json",
24
+ "sha256": "884ba39090267af42bd6b4d4092ef3905b2674aa1f6f540b7e77e731d951ce8b",
25
+ "bytes": 2587,
26
+ "workspace_source": "rpi_measurements/bundle/projects/poc2/model/metrics_v3.json"
27
+ },
28
+ {
29
+ "bundle_path": "projects/poc2/model/model_v3_config.json",
30
+ "repo_path": "model/model_v3_config.json",
31
+ "sha256": "11b221bcf0e5b8c512ead8df19b9d4db6ee5fa2182efd6f66a9c1729eabad004",
32
+ "bytes": 520,
33
+ "workspace_source": "rpi_measurements/bundle/projects/poc2/model/model_v3_config.json"
34
+ },
35
+ {
36
+ "bundle_path": "projects/poc2/model/model_v3_fp16.npz",
37
+ "repo_path": "model/model_v3_fp16.npz",
38
+ "sha256": "fc749ecd89c1ae30a159d6d701036298b5583645b7fbf114311e006929c8778b",
39
+ "bytes": 2146783,
40
+ "workspace_source": "rpi_measurements/bundle/projects/poc2/model/model_v3_fp16.npz"
41
+ }
42
+ ],
43
+ "all_match": true
44
+ },
45
+ "training_dataset_snapshot": {
46
+ "repo_id": "sraivante/home-commands-json-v3",
47
+ "commit": "da10aca352a34cb2834a049867f6f2e9fcc30e3e",
48
+ "files": [
49
+ {
50
+ "path": ".gitattributes",
51
+ "bytes": 2504,
52
+ "sha256": null
53
+ },
54
+ {
55
+ "path": "LICENSE",
56
+ "bytes": 11358,
57
+ "sha256": null
58
+ },
59
+ {
60
+ "path": "README.md",
61
+ "bytes": 5926,
62
+ "sha256": null
63
+ },
64
+ {
65
+ "path": "data/conditional_source.jsonl.gz",
66
+ "bytes": 6279490,
67
+ "sha256": "d5b6739202a0caa73b8a12452387651fa844566d47565e3876c5a3ce7ad6193e"
68
+ },
69
+ {
70
+ "path": "data/train.jsonl.gz",
71
+ "bytes": 13302264,
72
+ "sha256": "d8afeacfed666784b446cef68f1e8aeb12d9ebbe4032424dec2c0db9f664e79b"
73
+ },
74
+ {
75
+ "path": "generators/generate_dataset_v2.py",
76
+ "bytes": 29188,
77
+ "sha256": null
78
+ },
79
+ {
80
+ "path": "generators/generate_dataset_v3_conditional.py",
81
+ "bytes": 10612,
82
+ "sha256": null
83
+ },
84
+ {
85
+ "path": "generators/prep_mix.py",
86
+ "bytes": 1278,
87
+ "sha256": null
88
+ },
89
+ {
90
+ "path": "metadata/devices-catalog.json",
91
+ "bytes": 136537,
92
+ "sha256": null
93
+ },
94
+ {
95
+ "path": "source/dataset_v3_conditional.jsonl.xz",
96
+ "bytes": 4245312,
97
+ "sha256": "f5b997f808688c535cf0abd195390a8ba20deb6cfe3a4b8b2262624242552b86"
98
+ },
99
+ {
100
+ "path": "source/train_mix.jsonl.xz",
101
+ "bytes": 4951908,
102
+ "sha256": "c8851122dc01787e9674532c5cfb1cf7260212c52c9800e37622b28167bb9838"
103
+ }
104
+ ]
105
+ },
106
+ "evaluation": {
107
+ "kind": "training-set diagnostic, NOT held-out accuracy",
108
+ "source": "POC-2-claude\\home-command-ai\\data\\train_mix.jsonl.xz",
109
+ "sha256": "c8851122dc01787e9674532c5cfb1cf7260212c52c9800e37622b28167bb9838",
110
+ "sampling": "stratified reservoir, 100 plain + 100 conditional; seed 20260926",
111
+ "source_counts": {
112
+ "plain": 140000,
113
+ "conditional": 200000
114
+ },
115
+ "notes": "Historical 1500-row evaluation file is absent locally and from the published dataset. This diagnostic does not reproduce or replace the historical 96.73% result. The shipped prep_mix.py has different training-count settings from the published 340000-row snapshot."
116
+ },
117
+ "quality_case_count": 200,
118
+ "latency_case_count": 10,
119
+ "case_file_sha256": {
120
+ "poc2_latency.json": "77930a99ff035b3774bf65b261a302b7a5bff7608c5a4ae99241847164be2cff",
121
+ "poc2_quality.json": "e61640a601ca3e354a74be3dcb6506ba24171a343c290b96fa53f7deee899232"
122
+ },
123
+ "no_training_or_fine_tuning": true,
124
+ "copyright": "Copyright (c) 2026 sraivante for original material and selection/arrangement only; Apache License 2.0; third-party terms unchanged."
125
+ }
edge_benchmarks/rpi5-2026-09-26/readings.csv ADDED
The diff for this file is too large to render. See raw diff
 
edge_benchmarks/rpi5-2026-09-26/reproduce.py ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Reproduce this pinned model's Pi benchmark without changing model weights."""
2
+ import argparse, hashlib, json, shutil, subprocess, sys
3
+ from pathlib import Path
4
+ from huggingface_hub import hf_hub_download
5
+ HERE=Path(__file__).resolve().parent
6
+ ap=argparse.ArgumentParser(); ap.add_argument('--threads',type=int,choices=(1,4),default=1); args=ap.parse_args()
7
+ identity=json.loads((HERE/'runtime_identity.json').read_text())
8
+ manifest=json.loads((HERE/'bundle_manifest.json').read_text()); key=next(iter(manifest['models']))
9
+ if key=='poc3' and args.threads!=1: ap.error('This interpreter is single-threaded')
10
+ target=Path.cwd()/('rpi-reproduction-'+key); target.mkdir(exist_ok=True)
11
+ for item in identity['files']:
12
+ source=Path(hf_hub_download(identity['repo_id'],item['repo_path'],revision=identity['revision']))
13
+ assert hashlib.sha256(source.read_bytes()).hexdigest()==item['sha256']
14
+ dest=target/item['bundle_path']; dest.parent.mkdir(parents=True,exist_ok=True); shutil.copyfile(source,dest)
15
+ for name in ('benchmark.py','bundle_manifest.json'):
16
+ shutil.copyfile(HERE/name,target/name)
17
+ for source in (HERE/'cases').glob('*.json'):
18
+ dest=target/'cases'/source.name; dest.parent.mkdir(exist_ok=True); shutil.copyfile(source,dest)
19
+ command=[sys.executable,'-u',str(target/'benchmark.py'),'--model',key,'--threads',str(args.threads),'--out',str(target/('result_t'+str(args.threads)+'.json'))]
20
+ if args.threads==1: command.append('--quality')
21
+ subprocess.run(command,check=True)
edge_benchmarks/rpi5-2026-09-26/results/poc2_t1.json ADDED
The diff for this file is too large to render. See raw diff
 
edge_benchmarks/rpi5-2026-09-26/results/poc2_t4.json ADDED
The diff for this file is too large to render. See raw diff
 
edge_benchmarks/rpi5-2026-09-26/runtime_identity.json ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "repo_id": "sraivante/superfast-tiny-home-robotics-json-1m-v3",
3
+ "revision": "2b2e71d37ea9fa0fe6ab247b6a74e8db774fb6f2",
4
+ "files": [
5
+ {
6
+ "bundle_path": "projects/poc2/engine.py",
7
+ "repo_path": "engine.py",
8
+ "sha256": "bbc051221dae5c7238e7a76dae4872584c03f3db366a78980f0ea0cf5caaa18e",
9
+ "bytes": 3775,
10
+ "workspace_source": "rpi_measurements/bundle/projects/poc2/engine.py"
11
+ },
12
+ {
13
+ "bundle_path": "projects/poc2/model/devices-catalog.json",
14
+ "repo_path": "model/devices-catalog.json",
15
+ "sha256": "473e5850e6f9d05abf4a7806121bb42464f760fed2de589fa58accebeef72af4",
16
+ "bytes": 136537,
17
+ "workspace_source": "rpi_measurements/bundle/projects/poc2/model/devices-catalog.json"
18
+ },
19
+ {
20
+ "bundle_path": "projects/poc2/model/metrics_v3.json",
21
+ "repo_path": "model/metrics_v3.json",
22
+ "sha256": "884ba39090267af42bd6b4d4092ef3905b2674aa1f6f540b7e77e731d951ce8b",
23
+ "bytes": 2587,
24
+ "workspace_source": "rpi_measurements/bundle/projects/poc2/model/metrics_v3.json"
25
+ },
26
+ {
27
+ "bundle_path": "projects/poc2/model/model_v3_config.json",
28
+ "repo_path": "model/model_v3_config.json",
29
+ "sha256": "11b221bcf0e5b8c512ead8df19b9d4db6ee5fa2182efd6f66a9c1729eabad004",
30
+ "bytes": 520,
31
+ "workspace_source": "rpi_measurements/bundle/projects/poc2/model/model_v3_config.json"
32
+ },
33
+ {
34
+ "bundle_path": "projects/poc2/model/model_v3_fp16.npz",
35
+ "repo_path": "model/model_v3_fp16.npz",
36
+ "sha256": "fc749ecd89c1ae30a159d6d701036298b5583645b7fbf114311e006929c8778b",
37
+ "bytes": 2146783,
38
+ "workspace_source": "rpi_measurements/bundle/projects/poc2/model/model_v3_fp16.npz"
39
+ }
40
+ ],
41
+ "all_match": true
42
+ }
edge_benchmarks/rpi5-2026-09-26/temperature_latency.png ADDED

Git LFS Details

  • SHA256: 6c648e7c75e0169c590e66773b8035db40247742230c4ba9074d0244654d27b8
  • Pointer size: 131 Bytes
  • Size of remote file: 235 kB