@@ -387,10 +387,25 @@ const DEEP_RESEARCH_POLL_INTERVAL_MS = 10_000
387387const DEEP_RESEARCH_MAX_DURATION_MS = 60 * 60 * 1000
388388
389389/**
390- * Sleeps for the specified number of milliseconds
390+ * Sleeps for the specified number of milliseconds, respecting an optional abort signal.
391391 */
392- function sleep ( ms : number ) : Promise < void > {
393- return new Promise ( ( resolve ) => setTimeout ( resolve , ms ) )
392+ function sleep ( ms : number , signal ?: AbortSignal ) : Promise < void > {
393+ if ( signal ?. aborted ) {
394+ return Promise . reject (
395+ signal . reason ?? new DOMException ( 'The operation was aborted.' , 'AbortError' )
396+ )
397+ }
398+ return new Promise ( ( resolve , reject ) => {
399+ const timer = setTimeout ( resolve , ms )
400+ signal ?. addEventListener (
401+ 'abort' ,
402+ ( ) => {
403+ clearTimeout ( timer )
404+ reject ( signal . reason ?? new DOMException ( 'The operation was aborted.' , 'AbortError' ) )
405+ } ,
406+ { once : true }
407+ )
408+ } )
394409}
395410
396411/**
@@ -680,7 +695,10 @@ export async function executeDeepResearchRequest(
680695 stream : true ,
681696 }
682697
683- const streamResponse = await ai . interactions . create ( streamParams )
698+ const streamResponse = await ai . interactions . create (
699+ streamParams ,
700+ request . abortSignal ? { signal : request . abortSignal } : undefined
701+ )
684702 const firstResponseTime = Date . now ( ) - providerStartTime
685703
686704 const streamingResult : StreamingExecution = {
@@ -765,7 +783,10 @@ export async function executeDeepResearchRequest(
765783 stream : false ,
766784 }
767785
768- const interaction = await ai . interactions . create ( createParams )
786+ const interaction = await ai . interactions . create (
787+ createParams ,
788+ request . abortSignal ? { signal : request . abortSignal } : undefined
789+ )
769790 const interactionId = interaction . id
770791
771792 logger . info ( 'Deep research interaction created' , { interactionId, status : interaction . status } )
@@ -793,8 +814,12 @@ export async function executeDeepResearchRequest(
793814 elapsedMs : Date . now ( ) - pollStartTime ,
794815 } )
795816
796- await sleep ( DEEP_RESEARCH_POLL_INTERVAL_MS )
797- result = await ai . interactions . get ( interactionId )
817+ await sleep ( DEEP_RESEARCH_POLL_INTERVAL_MS , request . abortSignal )
818+ result = await ai . interactions . get (
819+ interactionId ,
820+ undefined ,
821+ request . abortSignal ? { signal : request . abortSignal } : undefined
822+ )
798823 }
799824
800825 if ( result . status !== 'completed' ) {
0 commit comments