okami.mom/albedo
git clone https://git.nkp.pet/okami.mom/albedo
2f6697a
main
1// Dynamic choices and tool arguments must preserve integers beyond float precision. 2// A controlled peer advertises exact numeric values across these client surfaces. 3package daemon 4 5import ( 6"encoding/json" 7"fmt" 8"net/http" 9"testing" 10) 11 12func TestDynamicIntegerChoicesAndToolArgumentsRemainExact (t * testing.T ) { 13var field FormField 14if err := json .Unmarshal ([]byte (`{"name":"version","label":"Version","type":"choice","required":true,"default":9007199254740993,"choices":[{"label":"Lower","value":9007199254740992},{"label":"Upper","value":9007199254740993}]}` ),& field );err != nil { 15t .Fatal (err ) 16 } 17if selected := FormChoiceDefault (field );selected != 1 { 18t .Fatalf ("adjacent integer defaults collapsed into choice %d" ,selected ) 19 } 20if err := validateFormValue (field ,json .RawMessage (`9007199254740994` ));err == nil { 21t .Fatal ("an undeclared adjacent integer choice was accepted" ) 22 } 23conn := controlledConnection (t ,func (w http.ResponseWriter ,r * http.Request ) { 24w .Header ().Set ("Content-Type" ,"text/event-stream" ) 25writeInitialStream (w ,"chat" ) 26fmt .Fprintf (w ,`data: {"generation":%q,"cursor":2,"events":[{"type":"tool","sequence":2,"data":{"tool_call_id":"call-1","progress_call_id":"progress-1","name":"python","arguments":{"version":9007199254740993},"result":"ok","trace":null,"content_complete":true,"reference":null}}]}` + "\n\n" ,generationA ) 27 }) 28var version any 29if err := NewChatClient (conn ,"test" ).Stream (t .Context (),0 ,func (event StreamEvent )error { 30if event .Type == EventTool { 31version = event .ToolArgs ["version" ] 32 } 33return nil 34 });err != nil { 35t .Fatal (err ) 36 } 37if version != json .Number ("9007199254740993" ) { 38t .Fatalf ("tool argument integer changed: %#v" ,version ) 39 } 40}