d32eae8aac
The gesture was web-only, so the sample was skewing to the turns he happens to type. Voice is where the hard cases are. Half of it already existed: the repair rung has read "нет, это была заметка" since V-455. It taught the classifier and wrote no durable label, so the two paths disagreed about what a correction is. It now writes both. Two sinks and not one on purpose: the classifier seed makes the next turn better today, and the label is what a fitted head trains on after the transcript expires. The trace id is stamped onto the remembered turn after the fact, because the trace is written when the turn ends and recordTurn runs in the middle of it. New: the untargeted half. "нет, не так" writes the negative and redoes nothing, because there is no target to redo it as. Voice needs this more than the web does — naming an intent aloud means saying "заметка" or "факт", which is her vocabulary and not his. repair_negatives is a new closed lexicon set matched against the WHOLE utterance, never as a substring. That is what keeps it apart from repair_markers, where "это не" is a fragment that needs an intent word after it. A member that could appear inside an ordinary sentence does not belong in the set.
162 lines
6.8 KiB
JSON
162 lines
6.8 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"name": "russian act and smart-home replies v1",
|
|
"notes": [
|
|
"What she says when a capability ran, refused, or could not be reached. Edit the wording here, no Go changes needed.",
|
|
"Rules: she is feminine about herself, he is a man addressed as ты. Never вы/вас/ваш, never он/его about him. No pet names.",
|
|
"\"it ran\", \"it was refused\", \"a service is down\" and \"I could not work out what you meant\" are four different truths. They keep four entries, because one variant set would let a failure report itself as a success.",
|
|
"She says what he would say. No schema words out loud: not «сущность», not «экосистема», not a capability id, not a config key. She is talking about a lamp or a server.",
|
|
"A service that is down or refusing is named. \"не отвечает\" with no subject tells him nothing he can act on, and Nexus, Praxis and Hexis fail independently.",
|
|
"Placeholders: {name} an entity or capability the caller resolved, {name_entity} the entity an act runs against when {name} is already the capability, {out} the command's own output, {items} a joined list, {count} a number, {word} the counted noun in the form {count} needs. Entity names and capability ids are interpolated Go-side.",
|
|
"A count never carries a hardcoded noun. Russian inflects it — 1 устройство, 2 устройства, 5 устройств — so the number goes in {count} and the noun comes from the Go helper through {word}.",
|
|
"An entry that only exists to read a list back must never be reached with an empty list. The caller routes an empty list to the matching _none entry, because a single-variant placeholder-only line has no shorter wording to fall back to.",
|
|
"fixed: true means exactly one variant and no picking. Used where the wording carries an instruction he has to act on — a confirmation, a pointer at /tools — and for the lines that report an act as done, because a success report that reworded itself is harder to trust and harder to test."
|
|
],
|
|
"entries": {
|
|
"act_done": {
|
|
"fixed": true,
|
|
"variants": ["готово."]
|
|
},
|
|
"act_done_out": {
|
|
"variants": ["готово: {out}", "сделала: {out}"]
|
|
},
|
|
"act_done_entity": {
|
|
"fixed": true,
|
|
"variants": ["готово: {name}."]
|
|
},
|
|
"act_confirm": {
|
|
"fixed": true,
|
|
"variants": ["выполнить «{name}»? да или нет."]
|
|
},
|
|
"act_confirm_entity": {
|
|
"fixed": true,
|
|
"variants": ["выполнить «{name}» для {name_entity}? да или нет."]
|
|
},
|
|
"act_which": {
|
|
"fixed": true,
|
|
"variants": ["какую команду для {name}: {items}?"]
|
|
},
|
|
"act_fail": {
|
|
"fixed": true,
|
|
"variants": ["не получилось выполнить команду."]
|
|
},
|
|
"act_fail_out": {
|
|
"fixed": true,
|
|
"variants": ["не получилось выполнить команду: {out}"]
|
|
},
|
|
"act_fail_entity": {
|
|
"fixed": true,
|
|
"variants": ["не получилось выполнить команду для {name}."]
|
|
},
|
|
"act_server_down": {
|
|
"fixed": true,
|
|
"variants": ["инструмент есть, но сервер не подключён."]
|
|
},
|
|
"act_withdrawn": {
|
|
"fixed": true,
|
|
"variants": ["сервер больше не отдаёт этот инструмент — сняла его с разрешённых, посмотри /tools."]
|
|
},
|
|
"act_needs_args": {
|
|
"fixed": true,
|
|
"variants": ["тут нужны аргументы, из голоса не соберу. угадывать не буду."]
|
|
},
|
|
"repair_noted": {
|
|
"fixed": true,
|
|
"variants": ["поняла, отметила, что ответила не так."]
|
|
},
|
|
"act_unknown_target": {
|
|
"fixed": true,
|
|
"variants": ["«{name}» — не знаю такой цели. назови её как в системе."]
|
|
},
|
|
"act_needs_authed_surface": {
|
|
"fixed": true,
|
|
"variants": ["это из голоса не выполню — после него ничего не вернуть. запусти сам."]
|
|
},
|
|
"eco_denied": {
|
|
"fixed": true,
|
|
"variants": ["{name} отклоняет доступ, проверь токен."]
|
|
},
|
|
"eco_down": {
|
|
"fixed": true,
|
|
"variants": ["{name} не отвечает, попробуй ещё раз."]
|
|
},
|
|
"eco_ambiguous": {
|
|
"fixed": true,
|
|
"variants": ["что именно: {items}?"]
|
|
},
|
|
"eco_unknown_entity": {
|
|
"variants": ["не знаю, что это.", "такого у меня нет."]
|
|
},
|
|
"eco_no_nexus": {
|
|
"fixed": true,
|
|
"variants": ["не с чем связать — Nexus не настроен."]
|
|
},
|
|
"eco_about_what": {
|
|
"fixed": true,
|
|
"variants": ["про что именно?"]
|
|
},
|
|
"eco_recall": {
|
|
"fixed": true,
|
|
"variants": ["я помню: {items}"]
|
|
},
|
|
"attention_none": {
|
|
"fixed": true,
|
|
"variants": ["ничего не требует внимания."]
|
|
},
|
|
"attention_list": {
|
|
"fixed": true,
|
|
"variants": ["требует внимания: {items}"]
|
|
},
|
|
"attention_fail": {
|
|
"fixed": true,
|
|
"variants": ["не могу сейчас узнать, что требует внимания."]
|
|
},
|
|
"attention_none_entity": {
|
|
"variants": ["по «{name}» ничего нет.", "по «{name}» пока пусто."]
|
|
},
|
|
"attention_list_entity": {
|
|
"fixed": true,
|
|
"variants": ["по «{name}»: {items}"]
|
|
},
|
|
"attention_fail_entity": {
|
|
"fixed": true,
|
|
"variants": ["не могу сейчас узнать, что требует внимания по «{name}»."]
|
|
},
|
|
"attention_degraded": {
|
|
"fixed": true,
|
|
"variants": ["за всё не отвечу — источники молчат: {items}."]
|
|
},
|
|
"attention_no_sources": {
|
|
"fixed": true,
|
|
"variants": ["мне пока нечего смотреть — у Praxis нет источников."]
|
|
},
|
|
"changes_none": {
|
|
"fixed": true,
|
|
"variants": ["изменений нет."]
|
|
},
|
|
"changes_list": {
|
|
"fixed": true,
|
|
"variants": ["изменения: {items}"]
|
|
},
|
|
"changes_fail": {
|
|
"fixed": true,
|
|
"variants": ["не могу сейчас узнать об изменениях."]
|
|
},
|
|
"home_unreachable": {
|
|
"variants": ["дом не отвечает.", "не достучалась до дома."]
|
|
},
|
|
"home_empty": {
|
|
"fixed": true,
|
|
"variants": ["дом ничего не отдаёт."]
|
|
},
|
|
"home_on": {
|
|
"fixed": true,
|
|
"variants": ["включено: {items}"]
|
|
},
|
|
"home_dark": {
|
|
"fixed": true,
|
|
"variants": ["не отвечают: {count} {word}."]
|
|
}
|
|
}
|
|
}
|