new RPG system

This commit is contained in:
2026-06-05 14:57:15 +03:00
parent 6189a5fb74
commit 01b16dbeaa
29 changed files with 2395 additions and 311 deletions
+31
View File
@@ -1,10 +1,14 @@
from services.rpg_facts import (
FACTS_COMPRESS_SYSTEM,
merge_facts,
parse_facts_list,
facts_to_prompt,
facts_list_to_json,
dedupe_facts_fuzzy,
facts_are_similar,
is_likely_narrative_event,
filter_durable_facts,
validate_compressed_against_source,
)
@@ -34,6 +38,33 @@ def test_dedupe_collapses_duplicates():
assert len(out) == 2
def test_facts_compress_system_format_escapes_json_braces():
system = FACTS_COMPRESS_SYSTEM.format(target=22)
assert "Target at most 22 facts" in system
assert '{"text":' in system
def test_narrative_event_facts_filtered():
assert is_likely_narrative_event("Сара и Григо отправились через портал")
assert not is_likely_narrative_event("Сара носит красный спортивный костюм")
facts = filter_durable_facts([
{"text": "Сара любит шоколад", "rp_day": "день 1"},
{"text": "Сара и Григо решили вызвать СОДП", "rp_day": "день 2"},
])
assert len(facts) == 1
def test_validate_compressed_rejects_hallucinations():
original = [{"text": "Сара любит шоколад", "rp_day": "день 1"}]
compressed = [
{"text": "Сара любит шоколад", "rp_day": "день 1"},
{"text": "Сара — королева галактики", "rp_day": "день 9"},
]
out = validate_compressed_against_source(original, compressed)
assert len(out) == 1
assert "шоколад" in out[0]["text"]
def test_merge_with_rp_day():
existing = facts_list_to_json([{"text": "A", "rp_day": "день 1"}])
merged = parse_facts_list(