Skip to content

Commit 2f7164f

Browse files
committed
fix(providers): propagate abort signal to deep research interactions API
1 parent a98e20f commit 2f7164f

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

apps/sim/providers/gemini/core.ts

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -387,10 +387,25 @@ const DEEP_RESEARCH_POLL_INTERVAL_MS = 10_000
387387
const 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

Comments
 (0)