64e5f3bdc1
The nudge fixture only covered nudges. The shared persona block now goes into five prompts, and the three conversational ones were unmeasured — those are the long free-form replies where a persona break is most likely. Adds talk_v1.json (27 Russian cases, 9 per path) and ScoreTalk, reporting per-path as well as per-check so a chat regression can be told apart from a knowledge one. Reuses the persona checks; the nudge-only ones (length, mood, no questions) are left out, since a chat reply is allowed 1-3 sentences and a follow-up question. The LLM run is opt-in on MAVEN_LLM_URL as before. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CGeSZxh1DCtRxmFVSYVGvJ
227 lines
11 KiB
JSON
227 lines
11 KiB
JSON
{
|
|
"schema_version": 1,
|
|
"name": "ru-talk-v1",
|
|
"notes": [
|
|
"Scores the three conversational phrasing paths: chat (PhraseChat), query (PhraseQuery with notes) and knowledge (PhraseQuery with no notes). The nudge fixture does not cover any of them.",
|
|
"Nine cases per path, not five. The nudge fixture is 15 sampled cases and cannot resolve a change smaller than ~3 cases; a per-path score off five cases would be worse still. More cases per path is the point of this fixture.",
|
|
"The owner is a man, addressed informally as ty, living alone with a home server. Every utterance is written the way he actually talks to her.",
|
|
"chat-formality-bait and chat-about-me exist to provoke the two persona breaks the nudge eval caught: the formal vy/vas plural, and talking about him in the third person.",
|
|
"want_any fragments are stems so Russian declension does not defeat the on-topic check. They are lowercased before comparison.",
|
|
"Notes are written as the store would have them: short, first person, no punctuation discipline."
|
|
],
|
|
"cases": [
|
|
{
|
|
"id": "chat-how-are-you",
|
|
"path": "chat",
|
|
"utterance": "привет, как дела?",
|
|
"want_any": ["норм", "хорош", "порядк", "тут", "работ"],
|
|
"tags": ["greeting"],
|
|
"note": "The plainest chat turn there is. If the persona breaks anywhere it breaks here first."
|
|
},
|
|
{
|
|
"id": "chat-formality-bait",
|
|
"path": "chat",
|
|
"utterance": "не могли бы вы подсказать, чем вы сейчас занимаетесь?",
|
|
"want_any": ["сейчас", "ничем", "ничего", "жду", "тут"],
|
|
"tags": ["persona-bait", "address"],
|
|
"note": "Deliberately polite and plural. A small model mirrors the register and answers with vy/vas — the exact break the address check was written for."
|
|
},
|
|
{
|
|
"id": "chat-about-me",
|
|
"path": "chat",
|
|
"utterance": "расскажи обо мне",
|
|
"want_any": ["ты", "тебя", "теб"],
|
|
"tags": ["persona-bait", "third-person"],
|
|
"note": "Baits the third person: she should say 'ты живёшь один', not 'он живёт один', as if reporting to somebody else."
|
|
},
|
|
{
|
|
"id": "chat-bored-evening",
|
|
"path": "chat",
|
|
"utterance": "скучно что-то вечером, посоветуй чем заняться",
|
|
"want_any": ["можеш", "попробу", "почита", "прогул", "фильм", "серв"],
|
|
"tags": ["open-ended"]
|
|
},
|
|
{
|
|
"id": "chat-followup-server",
|
|
"path": "chat",
|
|
"utterance": "а стоит его вообще перезагружать?",
|
|
"history": ["сервер опять шумит как самолёт", "похоже вентилятор"],
|
|
"want_any": ["серв", "перезагру", "вентил", "шум"],
|
|
"tags": ["history", "anaphora"],
|
|
"note": "The pronoun 'его' only resolves through history. Also the one case where 'он' about the server is legitimate."
|
|
},
|
|
{
|
|
"id": "chat-tired",
|
|
"path": "chat",
|
|
"utterance": "устал я сегодня, весь день за компом",
|
|
"want_any": ["отдохн", "устал", "перерыв", "спат", "день"],
|
|
"tags": ["tone"],
|
|
"note": "Invites the fake-concern and emotional-support drift; the reply should stay plain."
|
|
},
|
|
{
|
|
"id": "chat-thanks",
|
|
"path": "chat",
|
|
"utterance": "спасибо, выручила",
|
|
"want_any": ["пожалуйст", "не за что", "рада", "обращ"],
|
|
"tags": ["persona", "feminine"],
|
|
"note": "Feminine self-reference is unavoidable in an answer to thanks: 'рада', not 'рад'."
|
|
},
|
|
{
|
|
"id": "chat-what-can-you-do",
|
|
"path": "chat",
|
|
"utterance": "что ты вообще умеешь?",
|
|
"want_any": ["напомн", "замет", "запис", "могу", "умею"],
|
|
"tags": ["self-description", "feminine"]
|
|
},
|
|
{
|
|
"id": "chat-joke",
|
|
"path": "chat",
|
|
"utterance": "расскажи что-нибудь смешное",
|
|
"want_any": ["анекдот", "шутк", "смешн", "истори"],
|
|
"tags": ["open-ended"],
|
|
"note": "Longest free-form generation in the chat set — the most likely place for a truncated reply."
|
|
},
|
|
{
|
|
"id": "query-router-password",
|
|
"path": "query",
|
|
"utterance": "что я записывал про пароль от роутера?",
|
|
"notes": ["пароль от роутера admin/xxK9tp — на наклейке снизу", "роутер висит в коридоре"],
|
|
"want_any": ["парол", "роутер", "наклейк"],
|
|
"tags": ["notes", "recall"]
|
|
},
|
|
{
|
|
"id": "query-bedtime-yesterday",
|
|
"path": "query",
|
|
"utterance": "напомни, во сколько я вчера лёг?",
|
|
"notes": ["лёг спать в 02:40", "сегодня встал в 9"],
|
|
"want_any": ["02:40", "2:40", "полтрет", "ноч"],
|
|
"tags": ["notes", "time"]
|
|
},
|
|
{
|
|
"id": "query-doctor-name",
|
|
"path": "query",
|
|
"utterance": "как звали того стоматолога, которого мне советовали?",
|
|
"notes": ["стоматолог Игорь Валерьевич, клиника на Ленина, советовал Дима"],
|
|
"want_any": ["игор", "валерьев", "стоматолог"],
|
|
"tags": ["notes", "recall"]
|
|
},
|
|
{
|
|
"id": "query-disk-plan",
|
|
"path": "query",
|
|
"utterance": "я что-то планировал с диском на сервере, что именно?",
|
|
"notes": ["купить второй hdd на 4тб под бэкапы", "перенести медиатеку с системного диска"],
|
|
"want_any": ["hdd", "бэкап", "диск", "4тб", "медиатек"],
|
|
"tags": ["notes", "homeserver"]
|
|
},
|
|
{
|
|
"id": "query-notes-do-not-answer",
|
|
"path": "query",
|
|
"utterance": "сколько я заплатил за домен?",
|
|
"notes": ["домен продлевается в марте", "хостинг оплачен на год вперёд"],
|
|
"want_any": ["домен", "не зна", "не указ", "нет"],
|
|
"tags": ["notes", "negative"],
|
|
"note": "The notes do not contain the price. The prompt tells her to say so; a made-up number is the failure being watched for."
|
|
},
|
|
{
|
|
"id": "query-single-note",
|
|
"path": "query",
|
|
"utterance": "где лежит запасной ключ?",
|
|
"notes": ["запасной ключ у соседа с четвёртого этажа"],
|
|
"want_any": ["ключ", "сосед", "четверт"],
|
|
"tags": ["notes", "single"],
|
|
"note": "One note only — PhraseQuery has a separate branch for len(notes) == 1."
|
|
},
|
|
{
|
|
"id": "query-polite-form",
|
|
"path": "query",
|
|
"utterance": "подскажите, пожалуйста, что у меня записано по машине?",
|
|
"notes": ["замена масла на 92 тысячах", "страховка до 14 сентября"],
|
|
"want_any": ["масл", "страховк", "92", "сентябр"],
|
|
"tags": ["notes", "persona-bait", "address"],
|
|
"note": "Polite plural in the question. The answer must still be ty."
|
|
},
|
|
{
|
|
"id": "query-shopping",
|
|
"path": "query",
|
|
"utterance": "что мне надо было купить?",
|
|
"notes": ["купить кофе и фильтры", "закончилась паста"],
|
|
"want_any": ["кофе", "фильтр", "паст"],
|
|
"tags": ["notes", "list"]
|
|
},
|
|
{
|
|
"id": "query-wifi-guest",
|
|
"path": "query",
|
|
"utterance": "я записывал гостевой вайфай?",
|
|
"notes": ["гостевая сеть maven-guest, пароль 12345678 меняю раз в месяц"],
|
|
"want_any": ["guest", "гостев", "12345678", "парол"],
|
|
"tags": ["notes", "recall"]
|
|
},
|
|
{
|
|
"id": "know-sky-blue",
|
|
"path": "knowledge",
|
|
"utterance": "почему небо синее?",
|
|
"want_any": ["све", "рассеи", "атмосфер", "син", "волн"],
|
|
"tags": ["general"]
|
|
},
|
|
{
|
|
"id": "know-boil-egg",
|
|
"path": "knowledge",
|
|
"utterance": "сколько варить яйцо вкрутую?",
|
|
"want_any": ["минут", "8", "9", "10", "варит"],
|
|
"tags": ["general", "practical"]
|
|
},
|
|
{
|
|
"id": "know-ssd-vs-hdd",
|
|
"path": "knowledge",
|
|
"utterance": "чем ssd отличается от hdd?",
|
|
"want_any": ["ssd", "hdd", "быстр", "диск", "механич"],
|
|
"tags": ["general", "tech"]
|
|
},
|
|
{
|
|
"id": "know-cat-purr",
|
|
"path": "knowledge",
|
|
"utterance": "почему кошки мурчат?",
|
|
"want_any": ["кош", "мурч", "вибра", "успока"],
|
|
"tags": ["general"]
|
|
},
|
|
{
|
|
"id": "know-hiccups",
|
|
"path": "knowledge",
|
|
"utterance": "как быстро избавиться от икоты?",
|
|
"want_any": ["икот", "дыха", "вод", "задерж"],
|
|
"tags": ["general", "practical"]
|
|
},
|
|
{
|
|
"id": "know-polite-form",
|
|
"path": "knowledge",
|
|
"utterance": "не могли бы вы объяснить, что такое vpn?",
|
|
"want_any": ["vpn", "туннел", "трафик", "сет", "шифр"],
|
|
"tags": ["general", "persona-bait", "address"],
|
|
"note": "Polite plural bait on the knowledge prompt, which is a different system prompt from chat and must hold the same line."
|
|
},
|
|
{
|
|
"id": "know-dont-know",
|
|
"path": "knowledge",
|
|
"utterance": "как зовут моего соседа снизу?",
|
|
"want_any": ["не зна", "не мог", "нет"],
|
|
"tags": ["general", "negative"],
|
|
"note": "Unanswerable without notes. Admitting it beats inventing a name; watching for the invention."
|
|
},
|
|
{
|
|
"id": "know-water-per-day",
|
|
"path": "knowledge",
|
|
"utterance": "сколько воды в день надо пить?",
|
|
"want_any": ["вод", "литр", "стакан", "пит"],
|
|
"tags": ["general", "health"],
|
|
"note": "Overlaps a nudge rule on purpose: the knowledge answer must not turn into a nudge."
|
|
},
|
|
{
|
|
"id": "know-thunder-delay",
|
|
"path": "knowledge",
|
|
"utterance": "почему гром слышно позже молнии?",
|
|
"want_any": ["звук", "све", "быстр", "гром", "молни"],
|
|
"tags": ["general"]
|
|
}
|
|
]
|
|
}
|