okami.mom/albedo
git clone https://git.nkp.pet/okami.mom/albedo
f65a648
main
1"""The newest end of a long transcript is what a client sees first.""" 2 3import json 4import unittest 5 6from harness import Albedo ,Provider ,python ,text 7 8ROUNDS = 8 9 10 11class TranscriptTailTests (unittest .TestCase ): 12def setUp (self ): 13def script (request ): 14results = [m for m in request ["messages" ]if m .get ("role" )== "tool" ] 15if len (results )< ROUNDS : 16return python (f" { len ( results ) } " ,reasoning = f"step { len ( results ) } " ) 17return text ("all rounds done" ) 18 19self .provider = Provider (script ) 20self .addCleanup (self .provider .close ) 21self .app = Albedo (self .provider ) 22self .app .__enter__ () 23self .addCleanup (self .app .__exit__ ,None ,None ,None ) 24 25def read (self ,path ): 26return json .loads (self .app .api (path ).read ()) 27 28def test_a_short_tail_ends_at_the_newest_entry_and_pages_back_whole (self ): 29session = self .app .session () 30self .app .prompt (session ,"run the rounds" ).close () 31self .app .idle (session ) 32everything = self .read (f"/sessions/ { session } /history?limit=200" ) 33self .assertIsNone (everything ["older" ]) 34full = [entry ["id" ]for entry in everything ["items" ]] 35 36# a thought and its tool call share a row, so ten rows hold more 37# than ten entries; the page keeps the newest ones 38tail = self .read (f"/sessions/ { session } ?tail=10" )["history" ] 39shown = [entry ["id" ]for entry in tail ["items" ]] 40self .assertTrue (shown and len (shown )<= 10 ,shown ) 41self .assertEqual (shown ,full [- len (shown ) :]) 42self .assertIsNone (tail ["newer" ]) 43 44# older pages continue from there without gaps or repeats 45seen = shown 46older = tail ["older" ] 47while older is not None : 48page = self .read (f"/sessions/ { session } /history?limit=10&next= { older } " ) 49seen = [entry ["id" ]for entry in page ["items" ]]+ seen 50older = page ["older" ] 51self .assertEqual (seen ,full ) 52 53 54if __name__ == "__main__" : 55unittest .main ()