okami.mom/albedo
git clone https://git.nkp.pet/okami.mom/albedo
eaef427
main
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 ) { 18let installed = [ 19memory . extension (), 20lcm . configured_extension ( lcm . Config ( Some ( capacity ), 90 , 25 )), 21rolling . configured_extension ( rolling . Config ( Some ( capacity ), 90 , 25 )), 22] 23let assert Ok ( host ) = 24runtime . start_with_config ( 25":memory:" , 26extensions . Config ( installed , [ "lcm-memory" , "lcm" ]), 27) 28let ledger = runtime . ledger ( host ) 29let assert Ok ( _ ) = conversation . initialise ( ledger ) 30let assert Ok ( _ ) = family . initialise ( ledger ) 31let assert Ok ( _ ) = 32conversation . create ( 33ledger , 34conversation . Info ( 35"lcm-test" , 36"new session" , 37"/tmp" , 38"provider" , 39"model" , 40types . Responses , 41conversation . Idle , 42None , 43None , 44), 45) 46let 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 { 51let assert Ok ( _ ) = 52conversation . commit_from ( 53runtime . ledger ( host ), 54"lcm-test" , 55inputs , 56conversation . Idle , 57Some ( "provider" ), 58) 59Nil 60} 61 62pub fn lcm_fork_inside_summary_reuses_only_complete_child_nodes_test () -> Nil { 63let #( host , _ ) = host ( 2000 ) 64let ledger = runtime . ledger ( host ) 65let original = [ 66types . User ( "first" ), 67types . Assistant ( "one" ), 68types . User ( "second" ), 69types . Assistant ( "two" ), 70types . User ( "third" ), 71types . Assistant ( "three" ), 72] 73save ( host , original ) 74let assert Ok ([ first , second , third , fourth , fifth , sixth ]) = 75conversation . load_sources ( ledger , "lcm-test" ) 76let assert Ok ( _ ) = 77graph . save_leaves ( ledger , "lcm-test" , [ 78graph . Leaf ( first . source . seq , second . source . seq , "first unit" ), 79graph . Leaf ( third . source . seq , fourth . source . seq , "second unit" ), 80graph . Leaf ( fifth . source . seq , sixth . source . seq , "third unit" ), 81]) 82let assert Ok ([ one , two , three ]) = graph . frontier ( ledger , "lcm-test" ) 83let assert Ok ( _ ) = 84graph . save_parent ( ledger , "lcm-test" , [ one , two , three ], "all three units" ) 85 86let assert Ok ( _ ) = 87history . fork ( ledger , "lcm-test" , "partial" , fourth . source . seq ) 88let assert Ok ([ branch_one , branch_two ]) = graph . frontier ( ledger , "partial" ) 89branch_one . summary |> should . equal ( "first unit" ) 90branch_two . summary |> should . equal ( "second unit" ) 91let assert Ok ([ _ , _ , _ , branch_fourth ]) = 92conversation . load_sources ( ledger , "partial" ) 93graph . last_seq ( ledger , "partial" ) 94|> should . equal ( Ok ( branch_fourth . source . seq )) 95 96let assert Ok ( _ ) = 97history . fork ( ledger , "lcm-test" , "mid-leaf" , third . source . seq ) 98let assert Ok ([ only_complete ]) = graph . frontier ( ledger , "mid-leaf" ) 99only_complete . summary |> should . equal ( "first unit" ) 100let assert Ok ([ _ , middle_second , _ ]) = 101conversation . load_sources ( ledger , "mid-leaf" ) 102graph . last_seq ( ledger , "mid-leaf" ) 103|> should . equal ( Ok ( middle_second . source . seq )) 104runtime . stop ( host ) 105}