Skip to content

Commit e89dda0

Browse files
stephmilovicspong
andauthored
[8.x] [Security solution] naturalLanguageToEsql Tool added to default assistant graph (#192042) (#193364)
# Backport This will backport the following commits from `main` to `8.x`: - [[Security solution] `naturalLanguageToEsql` Tool added to default assistant graph (#192042)](#192042) <!--- Backport version: 8.9.8 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sqren/backport) <!--BACKPORT [{"author":{"name":"Steph Milovic","email":"stephanie.milovic@elastic.co"},"sourceCommit":{"committedDate":"2024-09-18T21:05:41Z","message":"[Security solution] `naturalLanguageToEsql` Tool added to default assistant graph (#192042)","sha":"798a26f93ce0501ed8fe72e6de94fd7454315d8e","branchLabelMapping":{"^v9.0.0$":"main","^v8.16.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:enhancement","v9.0.0","Team: SecuritySolution","Team:Security Generative AI","v8.16.0"],"number":192042,"url":"https://github.com/elastic/kibana/pull/192042","mergeCommit":{"message":"[Security solution] `naturalLanguageToEsql` Tool added to default assistant graph (#192042)","sha":"798a26f93ce0501ed8fe72e6de94fd7454315d8e"}},"sourceBranch":"main","suggestedTargetBranches":["8.x"],"targetPullRequestStates":[{"branch":"main","label":"v9.0.0","labelRegex":"^v9.0.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/192042","number":192042,"mergeCommit":{"message":"[Security solution] `naturalLanguageToEsql` Tool added to default assistant graph (#192042)","sha":"798a26f93ce0501ed8fe72e6de94fd7454315d8e"}},{"branch":"8.x","label":"v8.16.0","labelRegex":"^v8.16.0$","isSourceBranch":false,"state":"NOT_CREATED"}]}] BACKPORT--> Co-authored-by: Garrett Spong <spong@users.noreply.github.com>
1 parent 21e02f7 commit e89dda0

19 files changed

Lines changed: 129 additions & 6 deletions

File tree

x-pack/plugins/elastic_assistant/kibana.jsonc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
"ml",
1414
"taskManager",
1515
"licensing",
16+
"inference",
1617
"spaces",
1718
"security"
1819
]

x-pack/plugins/elastic_assistant/server/__mocks__/request_context.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export const createMockClients = () => {
4545
getAIAssistantAnonymizationFieldsDataClient: dataClientMock.create(),
4646
getSpaceId: jest.fn(),
4747
getCurrentUser: jest.fn(),
48+
inference: jest.fn(),
4849
},
4950
savedObjectsClient: core.savedObjects.client,
5051

@@ -130,6 +131,7 @@ const createElasticAssistantRequestContextMock = (
130131
getCurrentUser: jest.fn(),
131132
getServerBasePath: jest.fn(),
132133
getSpaceId: jest.fn(),
134+
inference: { getClient: jest.fn() },
133135
core: clients.core,
134136
telemetry: clients.elasticAssistant.telemetry,
135137
};

x-pack/plugins/elastic_assistant/server/lib/langchain/executors/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import type { LangChainTracer } from '@langchain/core/tracers/tracer_langchain';
1414
import { ExecuteConnectorRequestBody, Message, Replacements } from '@kbn/elastic-assistant-common';
1515
import { StreamResponseWithHeaders } from '@kbn/ml-response-stream/server';
1616
import { PublicMethodsOf } from '@kbn/utility-types';
17+
import type { InferenceServerStart } from '@kbn/inference-plugin/server';
1718
import { ResponseBody } from '../types';
1819
import type { AssistantTool } from '../../../types';
1920
import { ElasticsearchStore } from '../elasticsearch_store/elasticsearch_store';
@@ -47,6 +48,7 @@ export interface AgentExecutorParams<T extends boolean> {
4748
langChainMessages: BaseMessage[];
4849
llmType?: string;
4950
logger: Logger;
51+
inference: InferenceServerStart;
5052
onNewReplacements?: (newReplacements: Replacements) => void;
5153
replacements: Replacements;
5254
isStream?: T;

x-pack/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export const callAssistantGraph: AgentExecutor<true | false> = async ({
3838
dataClients,
3939
esClient,
4040
esStore,
41+
inference,
4142
langChainMessages,
4243
llmType,
4344
logger: parentLogger,
@@ -107,7 +108,9 @@ export const callAssistantGraph: AgentExecutor<true | false> = async ({
107108
alertsIndexPattern,
108109
anonymizationFields,
109110
chain,
111+
connectorId,
110112
esClient,
113+
inference,
111114
isEnabledKnowledgeBase,
112115
kbDataClient: dataClients?.kbDataClient,
113116
logger,

x-pack/plugins/elastic_assistant/server/plugin.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ export class ElasticAssistantPlugin
112112

113113
return {
114114
actions: plugins.actions,
115+
inference: plugins.inference,
115116
getRegisteredFeatures: (pluginName: string) => {
116117
return appContextService.getRegisteredFeatures(pluginName);
117118
},

x-pack/plugins/elastic_assistant/server/routes/attack_discovery/helpers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ const formatAssistantToolParams = ({
149149
ExecuteConnectorRequestBody | AttackDiscoveryPostRequestBody
150150
>;
151151
size: number;
152-
}): AssistantToolParams => ({
152+
}): Omit<AssistantToolParams, 'connectorId' | 'inference'> => ({
153153
alertsIndexPattern,
154154
anonymizationFields: [...(anonymizationFields ?? []), ...REQUIRED_FOR_ATTACK_DISCOVERY],
155155
isEnabledKnowledgeBase: false, // not required for attack discovery

x-pack/plugins/elastic_assistant/server/routes/chat/chat_complete_route.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ export const chatCompleteRoute = (
6666
const ctx = await context.resolve(['core', 'elasticAssistant', 'licensing']);
6767
const logger: Logger = ctx.elasticAssistant.logger;
6868
telemetry = ctx.elasticAssistant.telemetry;
69+
const inference = ctx.elasticAssistant.inference;
6970

7071
// Perform license and authenticated user checks
7172
const checkResponse = performChecks({
@@ -195,6 +196,7 @@ export const chatCompleteRoute = (
195196
context: ctx,
196197
getElser,
197198
logger,
199+
inference,
198200
messages: messages ?? [],
199201
onLlmResponse,
200202
onNewReplacements,

x-pack/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ export const postEvaluateRoute = (
150150
// Default ELSER model
151151
const elserId = await getElser();
152152

153+
const inference = ctx.elasticAssistant.inference;
154+
153155
// Data clients
154156
const anonymizationFieldsDataClient =
155157
(await assistantContext.getAIAssistantAnonymizationFieldsDataClient()) ?? undefined;
@@ -260,6 +262,8 @@ export const postEvaluateRoute = (
260262
alertsIndexPattern,
261263
// onNewReplacements,
262264
replacements,
265+
inference,
266+
connectorId: connector.id,
263267
size,
264268
};
265269

x-pack/plugins/elastic_assistant/server/routes/helpers.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import { AwaitedProperties, PublicMethodsOf } from '@kbn/utility-types';
2828
import { ActionsClient } from '@kbn/actions-plugin/server';
2929
import { AssistantFeatureKey } from '@kbn/elastic-assistant-common/impl/capabilities';
3030
import { getLangSmithTracer } from '@kbn/langchain/server/tracers/langsmith';
31+
import type { InferenceServerStart } from '@kbn/inference-plugin/server';
3132
import { AIAssistantKnowledgeBaseDataClient } from '../ai_assistant_data_clients/knowledge_base';
3233
import { FindResponse } from '../ai_assistant_data_clients/find';
3334
import { EsPromptsSchema } from '../ai_assistant_data_clients/prompts/types';
@@ -321,6 +322,7 @@ export interface LangChainExecuteParams {
321322
telemetry: AnalyticsServiceSetup;
322323
actionTypeId: string;
323324
connectorId: string;
325+
inference: InferenceServerStart;
324326
conversationId?: string;
325327
context: AwaitedProperties<
326328
Pick<ElasticAssistantRequestHandlerContext, 'elasticAssistant' | 'licensing' | 'core'>
@@ -349,6 +351,7 @@ export const langChainExecute = async ({
349351
connectorId,
350352
context,
351353
actionsClient,
354+
inference,
352355
request,
353356
logger,
354357
conversationId,
@@ -418,6 +421,7 @@ export const langChainExecute = async ({
418421
connectorId,
419422
esClient,
420423
esStore,
424+
inference,
421425
isStream,
422426
llmType: getLlmType(actionTypeId),
423427
langChainMessages,

x-pack/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ export const postActionsConnectorExecuteRoute = (
9292

9393
// get the actions plugin start contract from the request context:
9494
const actions = ctx.elasticAssistant.actions;
95+
const inference = ctx.elasticAssistant.inference;
9596
const actionsClient = await actions.getActionsClientWithRequest(request);
9697

9798
const conversationsDataClient =
@@ -132,6 +133,7 @@ export const postActionsConnectorExecuteRoute = (
132133
context: ctx,
133134
getElser,
134135
logger,
136+
inference,
135137
messages: (newMessage ? [newMessage] : messages) ?? [],
136138
onLlmResponse,
137139
onNewReplacements,

0 commit comments

Comments
 (0)