70 lines
2.5 KiB
Python
70 lines
2.5 KiB
Python
from __future__ import annotations
|
|
|
|
import numpy as np
|
|
|
|
from generate.dialogue import (
|
|
blade_alignment,
|
|
classify_dialogue_blade,
|
|
propose_dialogue,
|
|
)
|
|
from generate.proposition import FrameRegistry
|
|
from language_packs.compiler import load_mounted_packs
|
|
from session.context import SessionContext
|
|
|
|
|
|
def _dialogue_proposition(tokens: list[str], registry: FrameRegistry, vocab, reference=None):
|
|
session = SessionContext(vocab=vocab)
|
|
session.ingest(tokens)
|
|
generated = session.respond(max_tokens=3)
|
|
return propose_dialogue(generated.final_state, None, vocab, registry, reference)
|
|
|
|
|
|
def test_relation_blade_classifies_parallel_as_elaboration():
|
|
vocab = load_mounted_packs(
|
|
("en_minimal_v1", "he_logos_micro_v1", "grc_logos_micro_v1")
|
|
)
|
|
registry = FrameRegistry.from_pack("grc", vocab)
|
|
|
|
first = _dialogue_proposition(["light", "φῶς"], registry, vocab)
|
|
second = _dialogue_proposition(["φῶς", "אוֹר"], registry, vocab, first.relation)
|
|
|
|
assert classify_dialogue_blade(second.relation, first.relation) in {"elaborate", "question"}
|
|
assert blade_alignment(second.relation, first.relation) > 0.1
|
|
assert second.surface != first.surface
|
|
|
|
|
|
def test_two_turn_light_exchange_tracks_parallel_dialogue_trajectory():
|
|
vocab = load_mounted_packs(
|
|
("en_minimal_v1", "he_logos_micro_v1", "grc_logos_micro_v1")
|
|
)
|
|
registry = FrameRegistry.from_pack("grc", vocab)
|
|
session = SessionContext(vocab=vocab)
|
|
|
|
session.ingest(["light", "φῶς"])
|
|
first_generated = session.respond(max_tokens=3)
|
|
first = propose_dialogue(first_generated.final_state, None, vocab, registry)
|
|
first_turn = session.record_dialogue(first)
|
|
|
|
session.ingest(["light", "truth"])
|
|
second_generated = session.respond(max_tokens=3)
|
|
second = propose_dialogue(
|
|
second_generated.final_state,
|
|
None,
|
|
vocab,
|
|
registry,
|
|
session.last_dialogue_blade,
|
|
)
|
|
second_turn = session.record_dialogue(second)
|
|
|
|
random_turn = _dialogue_proposition(["truth", "λόγος"], registry, vocab)
|
|
second_alignment = blade_alignment(
|
|
second_turn.outer_product_blade,
|
|
first_turn.outer_product_blade,
|
|
)
|
|
random_alignment = blade_alignment(random_turn.relation, first_turn.outer_product_blade)
|
|
|
|
assert second.surface != first.surface
|
|
assert second_alignment > random_alignment
|
|
assert len(session.dialogue_history) == 2
|
|
assert session.running_dialogue_blade is not None
|
|
assert np.linalg.norm(session.running_dialogue_blade) > 0.0
|