"""Synthetic Chinese full-duplex policy acceptance, frozen before results. Labels are expectations under this explicit product policy, not universal truth. """ POLICY = '''你负责全双工语音对话的输入接纳。根据状态、最近对话和这次语音转写选择一项。规则:助手正在播报时,用户明确要求停止/取消、立即纠正当前内容、要求立即改做别的事,或报告紧急危险,选 interrupt。无须回应的附和、感谢、已确认的助手回声、非对助手说话、空白噪声选 discard。其余有意义的新请求、问题、补充信息或对助手问题的回答选 enqueue,稍后处理;助手空闲时也以 enqueue 接纳有效输入。仅说“继续”而助手已在播报无需处理;助手已暂停时要求继续则接纳。只有停止指令且助手空闲无任务时无需处理。不要因输入短而丢弃有效回答。''' QUESTION = dict(type='choice',instructions=POLICY,criteria={ 'interrupt':'立即打断当前播报,将当前有效意图交给对话控制器', 'discard':'丢弃本次输入,不触发新的对话处理', 'enqueue':'保留本次输入,进入等待队列按顺序处理', }) # id, speaking, preceding assistant text, transcript, expected, input provenance ROWS = [ ('stop_01',True,'下面介绍三个步骤。','停一下。','interrupt','user'), ('stop_02',True,'第一点是打开设置。','别说了。','interrupt','user'), ('stop_03',True,'正在介绍北京的天气。','取消刚才的问题。','interrupt','user'), ('stop_04',True,'这段内容比较长。','先暂停,我有事。','interrupt','user'), ('correct_01',True,'我会把会议设在今天下午。','不对,是明天下午。','interrupt','user'), ('correct_02',True,'你希望寄到上海。','你听错了,是北京。','interrupt','user'), ('correct_03',True,'总金额是三百元。','不是三百,是三十。','interrupt','user'), ('switch_01',True,'现在开始讲解历史。','别讲这个了,现在告诉我几点。','interrupt','user'), ('urgent_01',True,'接下来讨论周末计划。','小心!马上停下,前面有人!','interrupt','user'), ('ack_01',True,'第一步打开设置。','嗯。','discard','user'), ('ack_02',True,'第二步选择网络。','哦,知道了。','discard','user'), ('ack_03',True,'还剩最后一个步骤。','好的好的。','discard','user'), ('ack_04',True,'下面继续介绍。','谢谢。','discard','user'), ('continue_01',True,'继续讲解下一部分。','继续说。','discard','user'), ('negation_01',True,'正在讲解步骤。','不用停,你继续。','discard','user'), ('negation_02',True,'正在介绍风景。','我不是让你停下来。','discard','user'), ('noise_01',True,'正在介绍天气。','[咳嗽声]','discard','non_speech'), ('noise_02',False,'','[背景音乐]','discard','non_speech'), ('echo_01',True,'第一步打开设置。','第一步打开设置。','discard','confirmed_assistant_echo'), ('other_01',True,'正在讲解交通路线。','小王,把门关上。','discard','not_addressed_to_assistant'), ('queue_01',True,'正在介绍北京的景点。','讲完以后再说说上海。','enqueue','user'), ('queue_02',True,'正在讲解太阳系。','等你说完,再解释一下黑洞。','enqueue','user'), ('queue_03',True,'正在介绍路线。','另外也查一下明天的天气。','enqueue','user'), ('queue_04',True,'正在介绍一本书。','顺便推荐同类型的小说。','enqueue','user'), ('queue_05',True,'正在总结新闻。','一会儿帮我设置一个八点的闹钟。','enqueue','user'), ('queue_06',True,'正在介绍旅行建议。','谢谢,再补充一下预算。','enqueue','user'), ('queue_07',True,'正在解释网络协议。','API是什么意思?','enqueue','user'), ('idle_01',False,'你好,有什么需要?','帮我拍张照片。','enqueue','user'), ('idle_02',False,'','现在几点?','enqueue','user'), ('idle_03',False,'你想去哪里?','北京。','enqueue','user'), ('idle_04',False,'是否保存文件?','嗯。','enqueue','user'), ('idle_05',False,'是否删除草稿?','不要。','enqueue','user'), ('idle_06',False,'已暂停讲解。','继续说。','enqueue','user'), ('idle_07',False,'空闲,没有执行中的任务。','停一下。','discard','user'), ('idle_08',False,'今天的讲解结束了。','谢谢。','discard','user'), ('answer_01',False,'选择红色还是蓝色?','红色。','enqueue','user'), ('answer_02',False,'你希望几点出发?','八点,不是九点。','enqueue','user'), ('answer_03',False,'需要我继续吗?','不用了。','enqueue','user'), ('question_stop',True,'正在介绍设备功能。','讲完后告诉我停止按钮在哪里。','enqueue','user'), ('quoted_stop',True,'正在讲解英语词汇。','一会儿解释一下“stop”这个单词。','enqueue','user'), ('mid_ack_request',True,'现在讲第二部分。','嗯,我还想知道第三部分的细节。','enqueue','user'), ('immediate_01',True,'正在播放旅游介绍。','先别说,听我说。','interrupt','user'), ('wait_01',True,'继续介绍安装流程。','等一下,我还没跟上。','interrupt','user'), ('wait_02',True,'继续介绍安装流程。','等一下讲完再发给我。','enqueue','user'), ('blank_01',True,'正在说话。',' ','discard','non_speech'), ('idle_correction',False,'已收到:今天下午三点。','改成明天下午三点。','enqueue','user'), ('queue_constraint',True,'正在介绍旅行计划。','补充一下,我只坐高铁。','enqueue','user'), ('late_request',True,'正在总结说明。','你先说完,不用打断,之后再查天气。','enqueue','user'), ] CASES=[] for ident,speaking,previous,text,expected,origin in ROWS: state={'assistant_speaking':speaking,'last_assistant_utterance':previous,'asr_final':True,'input_origin':origin,'user_transcript':text} CASES.append(dict(id='duplex_'+ident,state=state,question=QUESTION,expected=expected,suite='full_duplex'))