From e41ff9e1a0104a321bc91ac7fa95632282431a0c Mon Sep 17 00:00:00 2001 From: pgayvallet Date: Tue, 31 Mar 2026 08:18:22 +0200 Subject: [PATCH] [inference] increase timeout for ES inference calls --- .../utils/inference_endpoint_executor.test.ts | 9 ++++++--- .../utils/inference_endpoint_executor.ts | 15 ++++----------- .../connector_types/inference/inference.test.ts | 3 +++ .../server/connector_types/inference/inference.ts | 1 + 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_endpoint_executor.test.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_endpoint_executor.test.ts index 9ecd64446e59c..0679a9a29978c 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_endpoint_executor.test.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_endpoint_executor.test.ts @@ -40,7 +40,7 @@ describe('createInferenceEndpointExecutor', () => { querystring: { timeout: '3m' }, body, }, - { asStream: true } + { asStream: true, requestTimeout: 180_000 } ); }); @@ -118,13 +118,16 @@ describe('createInferenceEndpointExecutor', () => { ); }); - it('does not include requestTimeout when timeout is not provided', async () => { + it('uses the default requestTimeout when timeout is not provided', async () => { const stream = new PassThrough(); mockTransportRequest.mockResolvedValue(stream); await executor.invoke({ body: {} }); - expect(mockTransportRequest).toHaveBeenCalledWith(expect.anything(), { asStream: true }); + expect(mockTransportRequest).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ requestTimeout: 180_000 }) + ); }); it('returns the stream from the response', async () => { diff --git a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_endpoint_executor.ts b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_endpoint_executor.ts index 14383516fb944..d871c2eafebfb 100644 --- a/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_endpoint_executor.ts +++ b/x-pack/platform/plugins/shared/inference/server/chat_complete/utils/inference_endpoint_executor.ts @@ -26,28 +26,21 @@ export const createInferenceEndpointExecutor = ({ esClient: ElasticsearchClient; }): InferenceEndpointExecutor => { return { - async invoke({ body, signal, timeout }): Promise { - // timeout for the inference call performed by the endpoint - const inferenceTimeout = - typeof timeout === 'number' && Number.isFinite(timeout) - ? `${Math.ceil(timeout / 60000)}m` - : '3m'; - + async invoke({ body, signal, timeout = 180_000 }): Promise { const response = await esClient.transport.request( { method: 'POST', path: `/_inference/chat_completion/${encodeURIComponent(inferenceId)}/_stream`, querystring: { - timeout: inferenceTimeout, + // timeout for the inference call performed by the endpoint + timeout: `${Math.ceil(timeout / 60000)}m`, }, body, }, { asStream: true, + requestTimeout: timeout, ...(signal ? { signal } : {}), - ...(typeof timeout === 'number' && Number.isFinite(timeout) - ? { requestTimeout: timeout } - : {}), } ); return response as unknown as Readable; diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.test.ts b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.test.ts index 582c8a12fec84..61e6c0425beee 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.test.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.test.ts @@ -91,6 +91,7 @@ describe('InferenceConnector', () => { { asStream: true, meta: true, + requestTimeout: 180_000, headers: { 'X-Elastic-Product-Use-Case': 'security_ai_assistant', }, @@ -322,6 +323,7 @@ describe('InferenceConnector', () => { { asStream: true, meta: true, + requestTimeout: 180_000, } ); }); @@ -348,6 +350,7 @@ describe('InferenceConnector', () => { { asStream: true, meta: true, + requestTimeout: 180_000, signal, } ); diff --git a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.ts b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.ts index b922c17bfbbc0..21a5d057c9816 100644 --- a/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.ts +++ b/x-pack/platform/plugins/shared/stack_connectors/server/connector_types/inference/inference.ts @@ -209,6 +209,7 @@ export class InferenceConnector extends SubActionConnector { { asStream: true, meta: true, + requestTimeout: 180_000, signal: params.signal, ...(params.telemetryMetadata?.pluginId ? {