okami.mom/albedo
git clone https://git.nkp.pet/okami.mom/albedo
5f9679f
main
1//// Authenticated fixed endpoints cannot use the E2E loopback provider. Scripted 2//// HTTP responses and real files catch refresh ordering, retention, and failures. 3 4import albedo/harness/extensions/codex/catalog 5import gleam/bit_array 6import gleam/dynamic/decode 7import gleam/json 8import gleam/list 9import gleam/option .{ None , Some } 10import gleam/string 11 12@external ( erlang , "albedo_codex_catalog_test_support" , "temporary_home" ) 13fn temporary_home () -> String 14 15@external ( erlang , "albedo_codex_catalog_test_support" , "cleanup" ) 16fn cleanup ( home : String ) -> Nil 17 18@external ( erlang , "albedo_codex_catalog_test_support" , "seed" ) 19fn seed ( home : String , text : String ) -> Nil 20 21@external ( erlang , "albedo_codex_catalog_test_support" , "read" ) 22fn read ( home : String ) -> BitArray 23 24@external ( erlang , "albedo_codex_catalog_test_support" , "block_cache" ) 25fn block_cache ( home : String ) -> Nil 26 27@external ( erlang , "albedo_codex_catalog_test_support" , "permissions" ) 28fn permissions ( home : String ) -> Int 29 30@external ( erlang , "albedo_codex_catalog_test_support" , "script" ) 31fn script ( responses : List ( Result ( catalog . Response , Nil ))) -> Nil 32 33@external ( erlang , "albedo_codex_catalog_test_support" , "get" ) 34fn get ( 35url : String , 36headers : List (#( String , String )), 37) -> Result ( catalog . Response , Nil ) 38 39@external ( erlang , "albedo_codex_catalog_test_support" , "calls" ) 40fn calls () -> List (#( String , List (#( String , String )))) 41 42fn response ( status : Int , body : String ) -> Result ( catalog . Response , Nil ) { 43Ok ( catalog . Response ( status , [#( "etag" , "one" )], bit_array . from_string ( body ))) 44} 45 46const upstream = 47"{\"models\":[{\"slug\":\"reasoner\",\"display_name\":\"Reasoner\",\"context_window\":200000,\"max_context_window\":400000,\"input_modalities\":[\"text\",false,\"image\"],\"supported_reasoning_levels\":[{\"effort\":\"high\"},{\"effort\":4},{\"effort\":\"low\"}],\"priority\":7},{\"slug\":\"\"},{\"slug\":false},{\"slug\":\"reasoner\",\"display_name\":\"\",\"context_window\":-4,\"max_context_window\":\"wrong\",\"input_modalities\":{},\"visibility\":null,\"priority\":\"wrong\"}]}" 48 49pub fn upstream_rows_keep_valid_duplicates_and_independent_facts_test () -> Bool { 50let assert Ok ( rows ) = 51json . parse ( upstream , { 52use rows <- decode . field ( "models" , decode . list ( decode . dynamic )) 53decode . success ( rows ) 54}) 55let assert [ first , duplicate ] = catalog . normalize ( rows ) 56let assert Some ( 200_000 ) = first . context 57let assert Some ( 400_000 ) = first . max_context 58let assert [ "text" , "image" ] = first . input 59let assert [ "high" , "low" ] = first . efforts 60let assert 7 = first . priority 61let assert "reasoner" = duplicate . name 62let assert None = duplicate . context 63let assert None = duplicate . max_context 64let assert [] = duplicate . input 65let assert False = duplicate . visible 66} 67 68pub fn refresh_orders_version_freshness_and_conditional_requests_test () -> Nil { 69let home = temporary_home () 70script ([ response ( 200 , "{\"version\":\"1.2.3\"}" ), response ( 200 , upstream )]) 71let assert Ok ( Nil ) = 72catalog . refresh_at ( home , "access" , "account" , 1000 , 10_000 , get ) 73let assert [ "reasoner" ] = catalog . listed ( home ) 74let assert Some ( info ) = catalog . lookup ( home , "endpoint" , "reasoner" ) 75let assert Some ( 200_000 ) = info . context_tokens 76let assert 384 = permissions ( home ) 77let before = read ( home ) 78script ([]) 79let assert Ok ( Nil ) = 80catalog . refresh_at ( home , "access" , "account" , 1000 , 10_001 , get ) 81let assert [] = calls () 82let assert True = read ( home ) == before 83script ([ response ( 200 , "{\"version\":\"1.2.3\"}" ), response ( 304 , "" )]) 84let assert Ok ( Nil ) = 85catalog . refresh_at ( home , "access" , "account" , 0 , 10_002 , get ) 86let assert [ _ , #( _ , headers )] = calls () 87let assert True = list . contains ( headers , #( "if-none-match" , "one" )) 88let assert [ "reasoner" ] = catalog . listed ( home ) 89script ([ response ( 200 , "{\"version\":\"2.0.0\"}" ), response ( 304 , "" )]) 90let assert Ok ( Nil ) = 91catalog . refresh_at ( home , "access" , "account" , 1000 , 11_002 , get ) 92let assert [ _ , #( url , headers )] = calls () 93let assert True = string . ends_with ( url , "client_version=2.0.0" ) 94let assert False = 95list . any ( headers , fn ( header ) { header . 0 == "if-none-match" }) 96cleanup ( home ) 97} 98 99pub fn untouched_malformed_accounts_survive_and_presentation_stays_strict_test () -> Nil { 100let home = temporary_home () 101seed ( 102home , 103"{\"accounts\":{\"broken\":{\"models\":[{\"slug\":42}]},\"account\":{\"models\":[{\"slug\":\"old\"}]}}}" , 104) 105script ([ response ( 200 , "{\"version\":\"1.2.3\"}" ), response ( 200 , upstream )]) 106let assert Ok ( Nil ) = 107catalog . refresh_at ( home , "access" , "account" , 0 , 10_000 , get ) 108let assert [] = catalog . listed ( home ) 109let assert Ok ([ 42 ]) = 110json . parse_bits ( 111read ( home ), 112decode . at ( 113[ "accounts" , "broken" , "models" ], 114decode . list ({ 115use slug <- decode . field ( "slug" , decode . int ) 116decode . success ( slug ) 117}), 118), 119) 120cleanup ( home ) 121} 122 123pub fn failed_models_save_version_but_preserve_models_and_error_precedence_test () -> Nil { 124let home = temporary_home () 125seed ( 126home , 127"{\"accounts\":{\"account\":{\"models\":[{\"slug\":\"old\"}],\"clientVersion\":\"1.0.0\",\"etag\":\"old-tag\"}},\"clientVersion\":\"1.0.0\"}" , 128) 129script ([ response ( 200 , "{\"version\":\"2.0.0\"}" ), response ( 503 , "" )]) 130let assert Error ( "Codex model list returned HTTP 503" ) = 131catalog . refresh_at ( home , "access" , "account" , 0 , 10_000 , get ) 132let assert [ "old" ] = catalog . listed ( home ) 133let assert Ok ( "2.0.0" ) = 134json . parse_bits ( read ( home ), decode . at ([ "clientVersion" ], decode . string )) 135script ([ Error ( Nil ), response ( 304 , "" )]) 136let assert Ok ( Nil ) = 137catalog . refresh_at ( home , "access" , "account" , 0 , 10_001 , get ) 138let assert [ _ , #( url , _ )] = calls () 139let assert True = string . ends_with ( url , "client_version=2.0.0" ) 140script ([ response ( 200 , "{\"version\":\"3.0.0\"}" ), response ( 200 , "{" )]) 141let assert Error ( "Codex model list is not valid" ) = 142catalog . refresh_at ( home , "access" , "account" , 0 , 10_002 , get ) 143let assert [ "old" ] = catalog . listed ( home ) 144let assert Ok ( "3.0.0" ) = 145json . parse_bits ( read ( home ), decode . at ([ "clientVersion" ], decode . string )) 146cleanup ( home ) 147let blocked = temporary_home () 148block_cache ( blocked ) 149script ([ Error ( Nil ), response ( 200 , upstream )]) 150let assert Error ( "Codex model cache could not be written" ) = 151catalog . refresh_at ( blocked , "access" , "account" , 0 , 10_000 , get ) 152let assert [ _ , #( url , _ )] = calls () 153let assert True = string . ends_with ( url , "client_version=0.157.1" ) 154script ([ Error ( Nil ), Error ( Nil )]) 155let assert Error ( "Codex model list request failed" ) = 156catalog . refresh_at ( blocked , "access" , "account" , 0 , 10_000 , get ) 157cleanup ( blocked ) 158} 159 160pub fn version_check_precedes_fresh_entry_and_same_version_returns_without_write_test () -> Nil { 161let home = temporary_home () 162seed ( 163home , 164"{\"clientVersion\":\"1.0.0\",\"versionCheckedAt\":1000,\"accounts\":{\"account\":{\"fetchedAt\":1999,\"clientVersion\":\"1.0.0\",\"etag\":\"old\",\"models\":[{\"slug\":\"old\"}]}}}" , 165) 166let before = read ( home ) 167script ([ response ( 200 , "{\"version\":\"1.0.0\"}" )]) 168let assert Ok ( Nil ) = 169catalog . refresh_at ( home , "access" , "account" , 1000 , 2000 , get ) 170let assert [ _ ] = calls () 171let assert True = before == read ( home ) 172script ([ 173response ( 200 , "{\"version\":\"2.0.0\"}" ), 174response ( 200 , "{\"models\":[]}" ), 175]) 176let assert Ok ( Nil ) = 177catalog . refresh_at ( home , "access" , "account" , 1000 , 2000 , get ) 178let assert [ _ , #( _ , headers )] = calls () 179let assert False = list . contains ( headers , #( "if-none-match" , "old" )) 180let assert [] = catalog . listed ( home ) 181cleanup ( home ) 182} 183 184pub fn not_modified_retains_models_and_updates_metadata_before_replacement_test () -> Nil { 185let home = temporary_home () 186seed ( 187home , 188"{\"clientVersion\":\"1.0.0\",\"versionCheckedAt\":1000,\"accounts\":{\"account\":{\"fetchedAt\":1000,\"clientVersion\":\"1.0.0\",\"etag\":\"old\",\"models\":[{\"slug\":\"hidden\",\"visible\":false}]}}}" , 189) 190script ([ response ( 200 , "{\"version\":\"1.0.0\"}" ), response ( 304 , "" )]) 191let assert Ok ( Nil ) = 192catalog . refresh_at ( home , "access" , "account" , 0 , 2000 , get ) 193let assert Ok ( 2000 ) = 194json . parse_bits ( 195read ( home ), 196decode . at ([ "accounts" , "account" , "fetchedAt" ], decode . int ), 197) 198let assert Ok ( "1.0.0" ) = 199json . parse_bits ( 200read ( home ), 201decode . at ([ "accounts" , "account" , "clientVersion" ], decode . string ), 202) 203let assert [] = catalog . listed ( home ) 204let assert Some ( info ) = catalog . lookup ( home , "endpoint" , "hidden" ) 205let assert "hidden" = info . model 206script ([ response ( 200 , "{\"version\":\"2.0.0\"}" ), response ( 200 , upstream )]) 207let assert Ok ( Nil ) = 208catalog . refresh_at ( home , "access" , "account" , 0 , 2001 , get ) 209let assert Ok ( 2001 ) = 210json . parse_bits ( 211read ( home ), 212decode . at ([ "accounts" , "account" , "fetchedAt" ], decode . int ), 213) 214let assert Ok ( "2.0.0" ) = 215json . parse_bits ( 216read ( home ), 217decode . at ([ "accounts" , "account" , "clientVersion" ], decode . string ), 218) 219cleanup ( home ) 220}