router/semantic: corpus format and v1 dataset (slice 12)

136 examples with provenance from ru_routing_v1.json, tagged
fast_path_resolved vs residual. RouteExample carries source, source_id,
split_group for traceability. Split-by-family prevents paraphrase
leakage across train/eval.
This commit is contained in:
2026-09-07 01:42:22 +04:00
parent b6a21c17eb
commit 5865699a5a
2 changed files with 237 additions and 0 deletions
+76
View File
@@ -0,0 +1,76 @@
package semantic
import (
_ "embed"
"encoding/json"
"fmt"
"sort"
)
//go:embed corpus_v1.json
var corpusV1JSON []byte
// RouteExample — one labeled utterance in the coarse-route experiment corpus.
// Every row carries provenance so no row can masquerade as independent when
// related paraphrases exist.
type RouteExample struct {
Text string `json:"text"`
Route SemanticRoute `json:"route"`
Source string `json:"source"` // where this row came from
SourceID string `json:"source_id"` // case ID in the source corpus
SplitGroup string `json:"split_group"` // family/seed ID for split discipline
Tags []string `json:"tags,omitempty"`
// FastPathResolved is true when a stage-0 grammar already handles this
// utterance. The learned router should not be measured on these unless
// explicitly desired; they are tagged, not removed.
FastPathResolved bool `json:"fast_path_resolved"`
}
// CorpusEnvelope — the versioned JSON envelope.
type CorpusEnvelope struct {
SchemaVersion int `json:"schema_version"`
Name string `json:"name"`
Notes []string `json:"notes"`
Examples []RouteExample `json:"examples"`
}
// SchemaVersionV1 is the version this package understands.
const SchemaVersionV1 = 1
// LoadCorpus returns the embedded corpus, rejecting unknown schema versions.
func LoadCorpus() ([]RouteExample, error) {
var env CorpusEnvelope
if err := json.Unmarshal(corpusV1JSON, &env); err != nil {
return nil, fmt.Errorf("semantic corpus: parse: %w", err)
}
if env.SchemaVersion != SchemaVersionV1 {
return nil, fmt.Errorf("semantic corpus: schema_version %d, want %d",
env.SchemaVersion, SchemaVersionV1)
}
return env.Examples, nil
}
// ByRoute groups examples by their semantic route, for per-route inspection.
func ByRoute(exs []RouteExample) map[SemanticRoute][]RouteExample {
m := make(map[SemanticRoute][]RouteExample)
for _, e := range exs {
m[e.Route] = append(m[e.Route], e)
}
for k := range m {
sort.Slice(m[k], func(i, j int) bool { return m[k][i].Text < m[k][j].Text })
}
return m
}
// SplitCounts returns the number of fast-path-resolved vs
// general-route-required examples.
func SplitCounts(exs []RouteExample) (fastPath, residual int) {
for _, e := range exs {
if e.FastPathResolved {
fastPath++
} else {
residual++
}
}
return
}
+161
View File
@@ -0,0 +1,161 @@
{
"schema_version": 1,
"name": "semantic_coarse_route_v1",
"notes": [
"Coarse semantic route corpus for the learned-router experiment. Rows derive from trusted existing fixtures and deterministic contrastive transformations — no LLM-generated labels.",
"Every row carries provenance (source + source_id) and a split_group that binds paraphrases to the same split.",
"fast_path_resolved tags cases handled by stage-0 grammars. The learned router should not be measured on these unless explicitly desired.",
"Contrastive pairs derive from action-route base seeds via deterministic transforms (negation, question, reported speech, quotation, hypothetical, capability question).",
"Labels come from explicit mapping rules, not model output. uncertain is used when current semantics do not give a defensible coarse label."
],
"examples": [
{"text": "сколько воды я выпил с утра", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-001", "split_group": "ru-query-001", "tags": ["aggregate"]},
{"text": "я сегодня вообще пил воду", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-002", "split_group": "ru-query-002", "tags": ["hard", "fact-shaped"]},
{"text": "во сколько я лёг вчера", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-003", "split_group": "ru-query-003", "tags": ["temporal"]},
{"text": "давно я не тренировался", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-004", "split_group": "ru-query-004", "tags": ["hard", "no-question-word"]},
{"text": "напоминания на завтра есть", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-005", "split_group": "ru-query-005", "tags": ["hard", "reminder-shaped"]},
{"text": "что я записывал про кота", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-006", "split_group": "ru-query-006", "tags": ["recall"]},
{"text": "сколько раз я ел вчера", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-007", "split_group": "ru-query-007", "tags": ["aggregate", "hard"]},
{"text": "мой вес за последний месяц", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-008", "split_group": "ru-query-008", "tags": ["no-verb"]},
{"text": "когда я в последний раз принимал витамины", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-009", "split_group": "ru-query-009", "tags": ["temporal"]},
{"text": "есть новости по бэкапу базы", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-010", "split_group": "ru-query-010", "tags": ["homelab"]},
{"text": "почему сервер тормозит", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-011", "split_group": "ru-query-011", "tags": ["homelab", "hard"]},
{"text": "какие заметки я оставил про полив", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-012", "split_group": "ru-query-012", "tags": ["recall"]},
{"text": "во сколько у меня встреча", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-013", "split_group": "ru-query-013", "tags": ["calendar"]},
{"text": "что у меня стоит в календаре на послезавтра", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-019", "split_group": "ru-query-019", "tags": ["calendar", "hard"]},
{"text": "какие планы на завтра?", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-022", "split_group": "ru-query-022", "tags": ["calendar"]},
{"text": "когда планёрка?", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-023", "split_group": "ru-query-023", "tags": ["calendar", "hard"]},
{"text": "что дальше?", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-024", "split_group": "ru-query-024", "tags": ["calendar", "no-question-word"]},
{"text": "расскажи про битву при Ватерлоо", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-025", "split_group": "ru-query-025", "tags": ["world", "no-question-word"]},
{"text": "я успеваю до дедлайна", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-014", "split_group": "ru-query-014", "tags": ["hard", "no-question-word"]},
{"text": "сколько я прошёл шагов", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-015", "split_group": "ru-query-015", "tags": ["aggregate"]},
{"text": "покажи давление за неделю", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-016", "split_group": "ru-query-016", "tags": ["hard", "imperative"]},
{"text": "чем я занимался в среду", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-017", "split_group": "ru-query-017", "tags": ["hard", "chat-shaped"]},
{"text": "хватает ли места под новые бэкапы", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-018", "split_group": "ru-query-018", "tags": ["homelab"]},
{"text": "что дальше?", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-020", "split_group": "ru-query-020", "tags": ["agenda", "hard"]},
{"text": "расскажи про битву при Ватерлоо", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-021", "split_group": "ru-query-021", "tags": ["world", "hard"]},
{"text": "did I take my vitamins today", "route": "knowledge", "source": "ru_routing_v1", "source_id": "en-query-001", "split_group": "en-query-001", "tags": ["fact-shaped"]},
{"text": "how long since the last backup finished", "route": "knowledge", "source": "ru_routing_v1", "source_id": "en-query-002", "split_group": "en-query-002", "tags": ["temporal"]},
{"text": "show me this week's weight", "route": "knowledge", "source": "ru_routing_v1", "source_id": "en-query-003", "split_group": "en-query-003", "tags": ["imperative"]},
{"text": "что такое TCP?", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-026", "split_group": "ru-query-026", "tags": ["world", "regression"], "fast_path_resolved": true},
{"text": "сколько будет 17 на 23?", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-027", "split_group": "ru-query-027", "tags": ["world", "arithmetic", "regression"], "fast_path_resolved": true},
{"text": "какой у меня любимый язык?", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-028", "split_group": "ru-query-028", "tags": ["recall", "possessive", "regression"]},
{"text": "кто такой Линус Торвальдс?", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-029", "split_group": "ru-query-029", "tags": ["world", "person", "regression"]},
{"text": "что там с бэкапами?", "route": "knowledge", "source": "ru_routing_v1", "source_id": "ru-query-030", "split_group": "ru-query-030", "tags": ["homelab", "regression"]},
{"text": "только что выпил кружку воды", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-fact-001", "split_group": "ru-fact-001"},
{"text": "воды попил наконец", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-fact-002", "split_group": "ru-fact-002", "tags": ["inverted"]},
{"text": "поужинал", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-fact-003", "split_group": "ru-fact-003", "tags": ["single-word"]},
{"text": "отметь что я позавтракал овсянкой", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-fact-004", "split_group": "ru-fact-004"},
{"text": "поспал часов пять", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-fact-005", "split_group": "ru-fact-005"},
{"text": "сходил в душ", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-fact-006", "split_group": "ru-fact-006"},
{"text": "отдохнул минут двадцать", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-fact-007", "split_group": "ru-fact-007"},
{"text": "запиши вес 74 килограмма", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-fact-008", "split_group": "ru-fact-008", "tags": ["unparsed-key"]},
{"text": "отметь что я выпил таблетки утром", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-fact-009", "split_group": "ru-fact-009", "tags": ["unparsed-key"]},
{"text": "сделал зарядку двадцать минут", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-fact-010", "split_group": "ru-fact-010", "tags": ["unparsed-key"]},
{"text": "just drank a glass of water", "route": "memory_write", "source": "ru_routing_v1", "source_id": "en-fact-001", "split_group": "en-fact-001"},
{"text": "slept about seven hours", "route": "memory_write", "source": "ru_routing_v1", "source_id": "en-fact-002", "split_group": "en-fact-002"},
{"text": "напомни через сорок минут выключить свет", "route": "action", "source": "ru_routing_v1", "source_id": "ru-rem-001", "split_group": "ru-rem-001", "fast_path_resolved": true},
{"text": "напомни завтра в 7 позвонить в клинику", "route": "action", "source": "ru_routing_v1", "source_id": "ru-rem-002", "split_group": "ru-rem-002", "fast_path_resolved": true},
{"text": "не забудь напомнить мне про счёт за свет", "route": "action", "source": "ru_routing_v1", "source_id": "ru-rem-003", "split_group": "ru-rem-003", "tags": ["no-time"], "fast_path_resolved": true},
{"text": "поставь напоминание через полчаса", "route": "action", "source": "ru_routing_v1", "source_id": "ru-rem-004", "split_group": "ru-rem-004", "fast_path_resolved": true},
{"text": "разбуди меня в 6:30", "route": "action", "source": "ru_routing_v1", "source_id": "ru-rem-005", "split_group": "ru-rem-005", "tags": ["hard"], "fast_path_resolved": true},
{"text": "напомни послезавтра в 12 забрать заказ", "route": "action", "source": "ru_routing_v1", "source_id": "ru-rem-006", "split_group": "ru-rem-006", "fast_path_resolved": true},
{"text": "через два часа напомни проверить бэкап", "route": "action", "source": "ru_routing_v1", "source_id": "ru-rem-007", "split_group": "ru-rem-007", "tags": ["inverted"], "fast_path_resolved": true},
{"text": "напомни в половине восьмого выпить таблетку", "route": "action", "source": "ru_routing_v1", "source_id": "ru-rem-008", "split_group": "ru-rem-008", "tags": ["hard"], "fast_path_resolved": true},
{"text": "разбуди меня полвосьмого", "route": "action", "source": "ru_routing_v1", "source_id": "ru-rem-009", "split_group": "ru-rem-009", "tags": ["hard"], "fast_path_resolved": true},
{"text": "напомни без четверти восемь выходить", "route": "action", "source": "ru_routing_v1", "source_id": "ru-rem-010", "split_group": "ru-rem-010", "tags": ["hard"], "fast_path_resolved": true},
{"text": "remind me in 45 minutes to stretch", "route": "action", "source": "ru_routing_v1", "source_id": "en-rem-001", "split_group": "en-rem-001", "fast_path_resolved": true},
{"text": "wake me at 6:15", "route": "action", "source": "ru_routing_v1", "source_id": "en-rem-002", "split_group": "en-rem-002", "tags": ["hard"], "fast_path_resolved": true},
{"text": "перезапусти докер", "route": "action", "source": "ru_routing_v1", "source_id": "ru-act-001", "split_group": "ru-act-001", "tags": ["homelab", "destructive"]},
{"text": "выключи свет в спальне", "route": "action", "source": "ru_routing_v1", "source_id": "ru-act-002", "split_group": "ru-act-002"},
{"text": "maven, останови бэкап", "route": "action", "source": "ru_routing_v1", "source_id": "ru-act-003", "split_group": "ru-act-003", "tags": ["wake-token"], "fast_path_resolved": true},
{"text": "включи вытяжку", "route": "action", "source": "ru_routing_v1", "source_id": "ru-act-004", "split_group": "ru-act-004"},
{"text": "запусти бэкап сейчас", "route": "action", "source": "ru_routing_v1", "source_id": "ru-act-005", "split_group": "ru-act-005"},
{"text": "закрой жалюзи", "route": "action", "source": "ru_routing_v1", "source_id": "ru-act-006", "split_group": "ru-act-006"},
{"text": "закрой задачу купить молоко", "route": "action", "source": "ru_routing_v1", "source_id": "ru-act-020", "split_group": "ru-act-020", "tags": ["task", "status"], "fast_path_resolved": true},
{"text": "убери из задач оплатить интернет", "route": "action", "source": "ru_routing_v1", "source_id": "ru-act-021", "split_group": "ru-act-021", "tags": ["task", "status"], "fast_path_resolved": true},
{"text": "maven, restart the media server", "route": "action", "source": "ru_routing_v1", "source_id": "en-act-001", "split_group": "en-act-001", "tags": ["wake-token"], "fast_path_resolved": true},
{"text": "turn off the kitchen light", "route": "action", "source": "ru_routing_v1", "source_id": "en-act-002", "split_group": "en-act-002"},
{"text": "заметка: продлить домен в августе", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-note-001", "split_group": "ru-note-001"},
{"text": "запиши что кран на кухне снова капает", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-note-002", "split_group": "ru-note-002"},
{"text": "заметка про настройку vlan на свитче", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-note-003", "split_group": "ru-note-003", "tags": ["homelab"]},
{"text": "запиши идею: гидропоника на балконе", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-note-004", "split_group": "ru-note-004"},
{"text": "запиши что сосед просил номер электрика", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-note-005", "split_group": "ru-note-005"},
{"text": "добавь в задачи купить молоко", "route": "memory_write", "source": "ru_routing_v1", "source_id": "ru-note-006", "split_group": "ru-note-006", "tags": ["capture"], "fast_path_resolved": true},
{"text": "note: rotate the kuma api key", "route": "memory_write", "source": "ru_routing_v1", "source_id": "en-note-001", "split_group": "en-note-001", "tags": ["homelab"]},
{"text": "сколько сейчас времени в киеве", "route": "system", "source": "ru_routing_v1", "source_id": "ru-sys-001", "split_group": "ru-sys-001", "tags": ["time"], "fast_path_resolved": true},
{"text": "какое число завтра", "route": "system", "source": "ru_routing_v1", "source_id": "ru-sys-002", "split_group": "ru-sys-002", "tags": ["date"], "fast_path_resolved": true},
{"text": "переходи в тихий режим", "route": "system", "source": "ru_routing_v1", "source_id": "ru-sys-003", "split_group": "ru-sys-003", "tags": ["quiet"]},
{"text": "хватит тихого режима", "route": "system", "source": "ru_routing_v1", "source_id": "ru-sys-004", "split_group": "ru-sys-004", "tags": ["quiet", "hard"]},
{"text": "какой день недели послезавтра", "route": "system", "source": "ru_routing_v1", "source_id": "ru-sys-005", "split_group": "ru-sys-005", "tags": ["date"], "fast_path_resolved": true},
{"text": "what time is it now", "route": "system", "source": "ru_routing_v1", "source_id": "en-sys-001", "split_group": "en-sys-001", "tags": ["time"], "fast_path_resolved": true},
{"text": "turn quiet mode back on", "route": "system", "source": "ru_routing_v1", "source_id": "en-sys-002", "split_group": "en-sys-002", "tags": ["quiet"]},
{"text": "мне немного грустно сегодня", "route": "conversation", "source": "ru_routing_v1", "source_id": "ru-chat-001", "split_group": "ru-chat-001"},
{"text": "что думаешь про переезд на другую квартиру", "route": "conversation", "source": "ru_routing_v1", "source_id": "ru-chat-002", "split_group": "ru-chat-002"},
{"text": "расскажи анекдот про программистов", "route": "conversation", "source": "ru_routing_v1", "source_id": "ru-chat-003", "split_group": "ru-chat-003"},
{"text": "доброе утро", "route": "conversation", "source": "ru_routing_v1", "source_id": "ru-chat-004", "split_group": "ru-chat-004", "tags": ["greeting"]},
{"text": "спасибо тебе", "route": "conversation", "source": "ru_routing_v1", "source_id": "ru-chat-005", "split_group": "ru-chat-005"},
{"text": "good morning", "route": "conversation", "source": "ru_routing_v1", "source_id": "en-chat-001", "split_group": "en-chat-001", "tags": ["greeting"]},
{"text": "i had a rough day", "route": "conversation", "source": "ru_routing_v1", "source_id": "en-chat-002", "split_group": "en-chat-002"},
{"text": "вода", "route": "uncertain", "source": "ru_routing_v1", "source_id": "amb-001", "split_group": "amb-001", "tags": ["ambiguous"]},
{"text": "бэкап", "route": "uncertain", "source": "ru_routing_v1", "source_id": "amb-002", "split_group": "amb-002", "tags": ["ambiguous"]},
{"text": "ну это", "route": "uncertain", "source": "ru_routing_v1", "source_id": "amb-003", "split_group": "amb-003", "tags": ["ambiguous", "filler"]},
{"text": "сделай это", "route": "uncertain", "source": "ru_routing_v1", "source_id": "amb-004", "split_group": "amb-004", "tags": ["ambiguous", "anaphora"]},
{"text": "потом", "route": "uncertain", "source": "ru_routing_v1", "source_id": "amb-005", "split_group": "amb-005", "tags": ["ambiguous", "filler"]},
{"text": "the thing from earlier", "route": "uncertain", "source": "ru_routing_v1", "source_id": "amb-006", "split_group": "amb-006", "tags": ["ambiguous", "anaphora"]},
{"text": "напомни", "route": "uncertain", "source": "ru_routing_v1", "source_id": "amb-007", "split_group": "amb-007", "tags": ["ambiguous", "reminder"]},
{"text": "ну напомни же", "route": "uncertain", "source": "ru_routing_v1", "source_id": "amb-008", "split_group": "amb-008", "tags": ["ambiguous", "reminder", "filler"]},
{"text": "не выключай свет в спальне", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["negation", "safety"]},
{"text": "ни выключай свет в спальне", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["negation", "safety"]},
{"text": "ты выключила свет в спальне?", "route": "knowledge", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["question", "safety"]},
{"text": "ты выключила свет в спальне, верно?", "route": "knowledge", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["question", "safety"]},
{"text": "он сказал: выключи свет в спальне", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["reported_speech", "safety"]},
{"text": "она сказала: выключи свет в спальне", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["reported_speech", "safety"]},
{"text": "он сказал «выключи свет в спальне»", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["reported_speech", "safety"]},
{"text": "фраза «выключи свет в спальне»", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["quotation", "safety"]},
{"text": "«выключи свет в спальне»", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["quotation", "safety"]},
{"text": "цитата: \"выключи свет в спальне\"", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["quotation", "safety"]},
{"text": "если выключить свет в спальне...", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["hypothetical", "safety"]},
{"text": "когда выключить свет в спальне, будет проще", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["hypothetical", "safety"]},
{"text": "если бы я сказал: выключи свет в спальне, что бы ты сделала?", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["hypothetical", "safety"]},
{"text": "ты можешь выключить свет в спальне?", "route": "knowledge", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["capability_question", "safety"]},
{"text": "умеешь ли выключить свет в спальне?", "route": "knowledge", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["capability_question", "safety"]},
{"text": "способен ли ты выключить свет в спальне?", "route": "knowledge", "source": "contrastive", "source_id": "ru-act-002", "split_group": "ru-act-002", "tags": ["capability_question", "safety"]},
{"text": "не перезапусти докер", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-001", "split_group": "ru-act-001", "tags": ["negation", "safety"]},
{"text": "ты перезапустила докер?", "route": "knowledge", "source": "contrastive", "source_id": "ru-act-001", "split_group": "ru-act-001", "tags": ["question", "safety"]},
{"text": "он сказал перезапусти докер", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-001", "split_group": "ru-act-001", "tags": ["reported_speech", "safety"]},
{"text": "фраза «перезапусти докер»", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-001", "split_group": "ru-act-001", "tags": ["quotation", "safety"]},
{"text": "если перезапустить докер...", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-001", "split_group": "ru-act-001", "tags": ["hypothetical", "safety"]},
{"text": "ты можешь перезапустить докер?", "route": "knowledge", "source": "contrastive", "source_id": "ru-act-001", "split_group": "ru-act-001", "tags": ["capability_question", "safety"]},
{"text": "не включи вытяжку", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-004", "split_group": "ru-act-004", "tags": ["negation", "safety"]},
{"text": "ты включила вытяжку?", "route": "knowledge", "source": "contrastive", "source_id": "ru-act-004", "split_group": "ru-act-004", "tags": ["question", "safety"]},
{"text": "он сказал включи вытяжку", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-004", "split_group": "ru-act-004", "tags": ["reported_speech", "safety"]},
{"text": "фраза «включи вытяжку»", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-004", "split_group": "ru-act-004", "tags": ["quotation", "safety"]},
{"text": "если включить вытяжку...", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-004", "split_group": "ru-act-004", "tags": ["hypothetical", "safety"]},
{"text": "ты можешь включить вытяжку?", "route": "knowledge", "source": "contrastive", "source_id": "ru-act-004", "split_group": "ru-act-004", "tags": ["capability_question", "safety"]},
{"text": "не закрывай жалюзи", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-006", "split_group": "ru-act-006", "tags": ["negation", "safety"]},
{"text": "ты закрыла жалюзи?", "route": "knowledge", "source": "contrastive", "source_id": "ru-act-006", "split_group": "ru-act-006", "tags": ["question", "safety"]},
{"text": "он сказал закрой жалюзи", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-006", "split_group": "ru-act-006", "tags": ["reported_speech", "safety"]},
{"text": "фраза «закрой жалюзи»", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-006", "split_group": "ru-act-006", "tags": ["quotation", "safety"]},
{"text": "если закрыть жалюзи...", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-006", "split_group": "ru-act-006", "tags": ["hypothetical", "safety"]},
{"text": "ты можешь закрыть жалюзи?", "route": "knowledge", "source": "contrastive", "source_id": "ru-act-006", "split_group": "ru-act-006", "tags": ["capability_question", "safety"]},
{"text": "не запускай бэкап сейчас", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-005", "split_group": "ru-act-005", "tags": ["negation", "safety"]},
{"text": "ты запустила бэкап?", "route": "knowledge", "source": "contrastive", "source_id": "ru-act-005", "split_group": "ru-act-005", "tags": ["question", "safety"]},
{"text": "он сказал запусти бэкап сейчас", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-005", "split_group": "ru-act-005", "tags": ["reported_speech", "safety"]},
{"text": "фраза «запусти бэкап сейчас»", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-005", "split_group": "ru-act-005", "tags": ["quotation", "safety"]},
{"text": "если запустить бэкап сейчас...", "route": "uncertain", "source": "contrastive", "source_id": "ru-act-005", "split_group": "ru-act-005", "tags": ["hypothetical", "safety"]},
{"text": "ты можешь запустить бэкап сейчас?", "route": "knowledge", "source": "contrastive", "source_id": "ru-act-005", "split_group": "ru-act-005", "tags": ["capability_question", "safety"]}
]
}