okami.mom/albedo

git clone https://git.nkp.pet/okami.mom/albedo

Aly Raffaufrefactor(tests): share fixtures and move workspace checks to E2Eeaef427

main
3.4 KiB105 linesraw
1//// Forks inside condensed nodes must retain only complete child summaries.
2//// Fixed graph ranges force fork boundaries that provider compaction cannot pin.
3
4import albedo/daemon/conversation
5import albedo/daemon/family
6import albedo/daemon/history
7import albedo/harness/extensions
8import albedo/harness/extensions/lcm/extension as lcm
9import albedo/harness/extensions/lcm/graph
10import albedo/harness/extensions/lcm/memory
11import albedo/harness/extensions/rolling/extension as rolling
12import albedo/harness/runtime
13import albedo/openai_api/types
14import gleam/option.{None, Some}
15import gleeunit/should
16
17fn host(capacity: Int) -> #(runtime.Runtime, runtime.Session) {
18  let installed = [
19    memory.extension(),
20    lcm.configured_extension(lcm.Config(Some(capacity), 90, 25)),
21    rolling.configured_extension(rolling.Config(Some(capacity), 90, 25)),
22  ]
23  let assert Ok(host) =
24    runtime.start_with_config(
25      ":memory:",
26      extensions.Config(installed, ["lcm-memory", "lcm"]),
27    )
28  let ledger = runtime.ledger(host)
29  let assert Ok(_) = conversation.initialise(ledger)
30  let assert Ok(_) = family.initialise(ledger)
31  let assert Ok(_) =
32    conversation.create(
33      ledger,
34      conversation.Info(
35        "lcm-test",
36        "new session",
37        "/tmp",
38        "provider",
39        "model",
40        types.Responses,
41        conversation.Idle,
42        None,
43        None,
44      ),
45    )
46  let assert Ok(session) = runtime.open_session(host, "lcm-test", "/tmp")
47  #(host, session)
48}
49
50fn save(host: runtime.Runtime, inputs: List(types.Input)) -> Nil {
51  let assert Ok(_) =
52    conversation.commit_from(
53      runtime.ledger(host),
54      "lcm-test",
55      inputs,
56      conversation.Idle,
57      Some("provider"),
58    )
59  Nil
60}
61
62pub fn lcm_fork_inside_summary_reuses_only_complete_child_nodes_test() -> Nil {
63  let #(host, _) = host(2000)
64  let ledger = runtime.ledger(host)
65  let original = [
66    types.User("first"),
67    types.Assistant("one"),
68    types.User("second"),
69    types.Assistant("two"),
70    types.User("third"),
71    types.Assistant("three"),
72  ]
73  save(host, original)
74  let assert Ok([first, second, third, fourth, fifth, sixth]) =
75    conversation.load_sources(ledger, "lcm-test")
76  let assert Ok(_) =
77    graph.save_leaves(ledger, "lcm-test", [
78      graph.Leaf(first.source.seq, second.source.seq, "first unit"),
79      graph.Leaf(third.source.seq, fourth.source.seq, "second unit"),
80      graph.Leaf(fifth.source.seq, sixth.source.seq, "third unit"),
81    ])
82  let assert Ok([one, two, three]) = graph.frontier(ledger, "lcm-test")
83  let assert Ok(_) =
84    graph.save_parent(ledger, "lcm-test", [one, two, three], "all three units")
85
86  let assert Ok(_) =
87    history.fork(ledger, "lcm-test", "partial", fourth.source.seq)
88  let assert Ok([branch_one, branch_two]) = graph.frontier(ledger, "partial")
89  branch_one.summary |> should.equal("first unit")
90  branch_two.summary |> should.equal("second unit")
91  let assert Ok([_, _, _, branch_fourth]) =
92    conversation.load_sources(ledger, "partial")
93  graph.last_seq(ledger, "partial")
94  |> should.equal(Ok(branch_fourth.source.seq))
95
96  let assert Ok(_) =
97    history.fork(ledger, "lcm-test", "mid-leaf", third.source.seq)
98  let assert Ok([only_complete]) = graph.frontier(ledger, "mid-leaf")
99  only_complete.summary |> should.equal("first unit")
100  let assert Ok([_, middle_second, _]) =
101    conversation.load_sources(ledger, "mid-leaf")
102  graph.last_seq(ledger, "mid-leaf")
103  |> should.equal(Ok(middle_second.source.seq))
104  runtime.stop(host)
105}