build_pack.py 產生對白索引(放在使用者資料目錄);render_skill.py 把人格卡渲染成 角色 skill 並檢查精選對白逐字來自索引;插件改成執行期從資料目錄讀索引。 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5.5
parent
352ce7dcad
commit
697ed6a0b9
@@ -0,0 +1,54 @@
|
||||
import unittest
|
||||
|
||||
import build_pack
|
||||
|
||||
|
||||
def rec(i, speaker="asuna", text="今天也請多指教喔", conf="high", fn="greet", vol=1, ch=1, **kw):
|
||||
base = {"id": i, "volume": vol, "chapter": ch, "text": text, "before": "", "after": "", "prev_par": "", "next_par": "",
|
||||
"final_speaker": speaker, "suspect_duplicate": False,
|
||||
"label": {"confidence": conf, "function": fn, "emotion": "neutral"}}
|
||||
base.update(kw)
|
||||
return base
|
||||
|
||||
|
||||
class Usable(unittest.TestCase):
|
||||
def test_keeps_high_confidence_of_the_speaker(self):
|
||||
self.assertTrue(build_pack.usable(rec("a"), "asuna"))
|
||||
|
||||
def test_rejects_other_speaker_low_confidence_duplicates_and_bad_length(self):
|
||||
self.assertFalse(build_pack.usable(rec("a", speaker="kirito"), "asuna"))
|
||||
self.assertFalse(build_pack.usable(rec("a", conf="medium"), "asuna"))
|
||||
self.assertFalse(build_pack.usable(rec("a", suspect_duplicate=True), "asuna"))
|
||||
self.assertFalse(build_pack.usable(rec("a", text="嗯"), "asuna"))
|
||||
self.assertFalse(build_pack.usable(rec("a", text="字" * 81), "asuna"))
|
||||
|
||||
def test_short_other_is_dropped(self):
|
||||
self.assertFalse(build_pack.usable(rec("a", text="咦咦咦咦", fn="other"), "asuna"))
|
||||
|
||||
|
||||
class Modes(unittest.TestCase):
|
||||
def test_asuna_modes(self):
|
||||
self.assertEqual(build_pack.mode_asuna(rec("a", vol=1)), "ingame")
|
||||
self.assertEqual(build_pack.mode_asuna(rec("a", vol=4)), "reunion")
|
||||
self.assertEqual(build_pack.mode_asuna(rec("a", vol=4, before="明日奈露出笑容")), "real")
|
||||
self.assertEqual(build_pack.mode_asuna(rec("a", vol=4, prev_par="須鄉冷笑著")), "captive")
|
||||
|
||||
def test_suguha_modes(self):
|
||||
self.assertEqual(build_pack.mode_suguha(rec("a", before="莉法拔出劍")), "leafa")
|
||||
self.assertEqual(build_pack.mode_suguha(rec("a", before="直葉看著和人")), "real")
|
||||
self.assertIsNone(build_pack.mode_suguha(rec("a")))
|
||||
|
||||
|
||||
class Build(unittest.TestCase):
|
||||
def test_dedupes_by_text_and_fills_mode_from_chapter_majority(self):
|
||||
rows = build_pack.build([
|
||||
rec("a", speaker="suguha", text="我一定會贏的喔", before="莉法握緊劍", vol=3, ch=2),
|
||||
rec("b", speaker="suguha", text="我一定會贏的喔", vol=3, ch=2),
|
||||
rec("c", speaker="suguha", text="那我們走吧", vol=3, ch=2),
|
||||
], "suguha")
|
||||
self.assertEqual([r["id"] for r in rows], ["a", "c"])
|
||||
self.assertEqual(rows[1]["mode"], "leafa")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user