@@ -859,6 +859,109 @@ describe("OpenAiNativeHandler", () => {
859859 expect ( secondCallBody . previous_response_id ) . toBe ( "resp_789" )
860860 } )
861861
862+ it ( "should respect openAiNativeStatelessMode configuration" , async ( ) => {
863+ // Test with stateless mode enabled
864+ const statelessHandler = new OpenAiNativeHandler ( {
865+ ...mockOptions ,
866+ openAiNativeStatelessMode : true ,
867+ } )
868+
869+ // Mock fetch for Responses API
870+ const mockFetch = vitest . fn ( ) . mockResolvedValue ( {
871+ ok : true ,
872+ body : new ReadableStream ( {
873+ start ( controller ) {
874+ controller . enqueue (
875+ new TextEncoder ( ) . encode ( 'data: {"type":"response.text.delta","delta":"Test"}\n\n' ) ,
876+ )
877+ controller . enqueue ( new TextEncoder ( ) . encode ( "data: [DONE]\n\n" ) )
878+ controller . close ( )
879+ } ,
880+ } ) ,
881+ } )
882+ global . fetch = mockFetch as any
883+
884+ // Mock SDK to fail
885+ mockResponsesCreate . mockRejectedValue ( new Error ( "SDK not available" ) )
886+
887+ const stream = statelessHandler . createMessage ( systemPrompt , messages , { taskId : "test-task" } )
888+ const chunks = [ ]
889+ for await ( const chunk of stream ) {
890+ chunks . push ( chunk )
891+ }
892+
893+ // Verify that store is set to false when stateless mode is enabled
894+ const requestBody = JSON . parse ( mockFetch . mock . calls [ 0 ] [ 1 ] . body )
895+ expect ( requestBody . store ) . toBe ( false )
896+ } )
897+
898+ it ( "should use metadata.store when stateless mode is disabled" , async ( ) => {
899+ // Test with stateless mode disabled (default)
900+ const handler = new OpenAiNativeHandler ( mockOptions )
901+
902+ // Mock fetch for Responses API
903+ const mockFetch = vitest . fn ( ) . mockResolvedValue ( {
904+ ok : true ,
905+ body : new ReadableStream ( {
906+ start ( controller ) {
907+ controller . enqueue (
908+ new TextEncoder ( ) . encode ( 'data: {"type":"response.text.delta","delta":"Test"}\n\n' ) ,
909+ )
910+ controller . enqueue ( new TextEncoder ( ) . encode ( "data: [DONE]\n\n" ) )
911+ controller . close ( )
912+ } ,
913+ } ) ,
914+ } )
915+ global . fetch = mockFetch as any
916+
917+ // Mock SDK to fail
918+ mockResponsesCreate . mockRejectedValue ( new Error ( "SDK not available" ) )
919+
920+ // Test with metadata.store = false
921+ const stream = handler . createMessage ( systemPrompt , messages , { taskId : "test-task" , store : false } )
922+ const chunks = [ ]
923+ for await ( const chunk of stream ) {
924+ chunks . push ( chunk )
925+ }
926+
927+ // Verify that store is set to false when metadata.store is false
928+ const requestBody = JSON . parse ( mockFetch . mock . calls [ 0 ] [ 1 ] . body )
929+ expect ( requestBody . store ) . toBe ( false )
930+ } )
931+
932+ it ( "should default to store:true when stateless mode is disabled and metadata.store is not set" , async ( ) => {
933+ // Test with stateless mode disabled and no metadata.store
934+ const handler = new OpenAiNativeHandler ( mockOptions )
935+
936+ // Mock fetch for Responses API
937+ const mockFetch = vitest . fn ( ) . mockResolvedValue ( {
938+ ok : true ,
939+ body : new ReadableStream ( {
940+ start ( controller ) {
941+ controller . enqueue (
942+ new TextEncoder ( ) . encode ( 'data: {"type":"response.text.delta","delta":"Test"}\n\n' ) ,
943+ )
944+ controller . enqueue ( new TextEncoder ( ) . encode ( "data: [DONE]\n\n" ) )
945+ controller . close ( )
946+ } ,
947+ } ) ,
948+ } )
949+ global . fetch = mockFetch as any
950+
951+ // Mock SDK to fail
952+ mockResponsesCreate . mockRejectedValue ( new Error ( "SDK not available" ) )
953+
954+ const stream = handler . createMessage ( systemPrompt , messages , { taskId : "test-task" } )
955+ const chunks = [ ]
956+ for await ( const chunk of stream ) {
957+ chunks . push ( chunk )
958+ }
959+
960+ // Verify that store defaults to true
961+ const requestBody = JSON . parse ( mockFetch . mock . calls [ 0 ] [ 1 ] . body )
962+ expect ( requestBody . store ) . toBe ( true )
963+ } )
964+
862965 it ( "should retry with full conversation when previous_response_id fails" , async ( ) => {
863966 // This test verifies the fix for context loss bug when previous_response_id becomes invalid
864967 const mockFetch = vitest
0 commit comments