okami.mom/albedo
git clone https://git.nkp.pet/okami.mom/albedo
61c43ca
main
1//// Payload decode counts are a performance invariant invisible to HTTP E2E. 2//// A long archived prefix must not be decoded by an ordinary preparation. 3 4import albedo/daemon/conversation 5import albedo/daemon/family 6import albedo/daemon/store 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/runtime 12import albedo/openai_api/types 13import gleam/erlang/process 14import gleam/list 15import gleam/option .{ None , Some } 16import gleam/string 17import gleeunit/should 18 19@external ( erlang , "albedo_lcm_preparation_test_support" , "count_decodes" ) 20fn count_decodes ( owner : process . Pid , run : fn () -> a) -> #( a, Int ) 21 22pub fn below_trigger_and_stored_prior_do_not_decode_archived_payloads_test () -> Nil { 23let installed = [ 24memory . extension (), 25lcm . configured_extension ( lcm . Config ( Some ( 2000 ), 90 , 1 )), 26] 27let assert Ok ( host ) = 28runtime . start_with_config ( 29":memory:" , 30extensions . Config ( installed , [ "lcm-memory" , "lcm" ]), 31) 32let ledger = runtime . ledger ( host ) 33let assert Ok ( _ ) = conversation . initialise ( ledger ) 34let assert Ok ( _ ) = family . initialise ( ledger ) 35let assert Ok ( _ ) = 36conversation . create ( 37ledger , 38conversation . Info ( 39"preparation" , 40"test" , 41"/tmp" , 42"provider" , 43"model" , 44types . Responses , 45conversation . Idle , 46None , 47None , 48), 49) 50let archived = 51list . repeat ( Nil , 400 ) 52|> list . flat_map ( fn ( _ ) { 53[ types . User ( "archived user" ), types . Assistant ( "archived answer" )] 54}) 55let inputs = 56list . append ( archived , [ types . User ( "latest" ), types . Assistant ( "tail" )]) 57let assert Ok ( _ ) = 58conversation . commit_from ( 59ledger , 60"preparation" , 61inputs , 62conversation . Idle , 63Some ( "provider" ), 64) 65let assert Ok ( rows ) = conversation . load_sources ( ledger , "preparation" ) 66let assert [ first , ..] = rows 67let assert Ok ( last ) = list . last ( list . take ( rows , 800 )) 68let assert Ok ( _ ) = 69graph . save_leaves ( ledger , "preparation" , [ 70graph . Leaf ( first . source . seq , last . source . seq , "archived prefix" ), 71]) 72let #( control , positive_decodes ) = 73count_decodes ( store . owner ( ledger ), fn () { 74conversation . load_sources ( ledger , "preparation" ) 75}) 76let assert Ok ( _ ) = control 77should . be_true ( positive_decodes >= 802 ) 78let assert Ok ( session ) = runtime . open_session ( host , "preparation" , "/tmp" ) 79let #( prepared , decodes ) = 80count_decodes ( store . owner ( ledger ), fn () { 81runtime . prepare_history_with ( 82host , 83session , 84"model" , 85"" , 86fn ( _ ) { panic as "below-trigger preparation must not summarize" }, 87inputs , 88) 89}) 90let assert Ok ([ 91types . User ( summary ), 92types . User ( "latest" ), 93types . Assistant ( "tail" ), 94]) = prepared 95should . be_true ( string . contains ( summary , "archived prefix" )) 96decodes |> should . equal ( 0 ) 97let #( prior , decodes ) = 98count_decodes ( store . owner ( ledger ), fn () { 99lcm . stored_prior ( ledger , "preparation" , inputs ) 100}) 101let assert Ok ( _ ) = prior 102decodes |> should . equal ( 0 ) 103let assert Ok ( _ ) = 104conversation . commit_from ( 105ledger , 106"preparation" , 107[ types . User ( "next" )], 108conversation . Idle , 109Some ( "provider" ), 110) 111let next = list . append ( inputs , [ types . User ( "next" )]) 112let #( failed , decodes ) = 113count_decodes ( store . owner ( ledger ), fn () { 114runtime . compact_history_scoped ( 115host , 116session , 117"model" , 118"model" , 119None , 120"" , 121fn ( _ ) { Error ( "summary unavailable" ) }, 122next , 123) 124}) 125failed |> should . equal ( Error ( "compaction lcm: summary unavailable" )) 126decodes |> should . equal ( 2 ) 127graph . last_seq ( ledger , "preparation" ) |> should . equal ( Ok ( last . source . seq )) 128let #( compacted , decodes ) = 129count_decodes ( store . owner ( ledger ), fn () { 130runtime . compact_history_scoped ( 131host , 132session , 133"model" , 134"model" , 135None , 136"" , 137fn ( _ ) { Ok ( "short" ) }, 138next , 139) 140}) 141let assert Ok ( _ ) = compacted 142decodes |> should . equal ( 2 ) 143graph . last_seq ( ledger , "preparation" ) |> should . equal ( Ok ( last . source . seq + 2 )) 144runtime . stop ( host ) 145}