-
Notifications
You must be signed in to change notification settings - Fork 8.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch '8.15' into update-bundled-packages-20240917131222
- Loading branch information
Showing
32 changed files
with
1,188 additions
and
40 deletions.
There are no files selected for viewing
25 changes: 25 additions & 0 deletions
25
x-pack/plugins/integration_assistant/__jest__/fixtures/unstructured.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* 2.0; you may not use this file except in compliance with the Elastic License | ||
* 2.0. | ||
*/ | ||
|
||
export const unstructuredLogState = { | ||
lastExecutedChain: 'testchain', | ||
packageName: 'testPackage', | ||
dataStreamName: 'testDatastream', | ||
grokPatterns: ['%{GREEDYDATA:message}'], | ||
logSamples: ['dummy data'], | ||
jsonSamples: ['{"message":"dummy data"}'], | ||
finalized: false, | ||
ecsVersion: 'testVersion', | ||
errors: { test: 'testerror' }, | ||
additionalProcessors: [], | ||
}; | ||
|
||
export const unstructuredLogResponse = { | ||
grok_patterns: [ | ||
'####<%{MONTH} %{MONTHDAY}, %{YEAR} %{TIME} (?:AM|PM) %{WORD:timezone}> <%{WORD:log_level}> <%{WORD:component}> <%{DATA:hostname}> <%{DATA:server_name}> <%{DATA:thread_info}> <%{DATA:user}> <%{DATA:empty_field}> <%{DATA:empty_field2}> <%{NUMBER:timestamp}> <%{DATA:message_id}> <%{GREEDYDATA:message}>', | ||
], | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
27 changes: 27 additions & 0 deletions
27
x-pack/plugins/integration_assistant/server/graphs/unstructured/constants.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* 2.0; you may not use this file except in compliance with the Elastic License | ||
* 2.0. | ||
*/ | ||
|
||
export const GROK_EXAMPLE_ANSWER = { | ||
rfc: 'RFC2454', | ||
regex: | ||
'/(?:(d{4}[-]d{2}[-]d{2}[T]d{2}[:]d{2}[:]d{2}(?:.d{1,6})?(?:[+-]d{2}[:]d{2}|Z)?)|-)s(?:([w][wd.@-]*)|-)s(.*)$/', | ||
grok_patterns: ['%{WORD:key1}:%{WORD:value1};%{WORD:key2}:%{WORD:value2}:%{GREEDYDATA:message}'], | ||
}; | ||
|
||
export const GROK_ERROR_EXAMPLE_ANSWER = { | ||
grok_patterns: [ | ||
'%{TIMESTAMP:timestamp}:%{WORD:value1};%{WORD:key2}:%{WORD:value2}:%{GREEDYDATA:message}', | ||
], | ||
}; | ||
|
||
export const onFailure = { | ||
append: { | ||
field: 'error.message', | ||
value: | ||
'{% raw %}Processor {{{_ingest.on_failure_processor_type}}} with tag {{{_ingest.on_failure_processor_tag}}} in pipeline {{{_ingest.on_failure_pipeline}}} failed with message: {{{_ingest.on_failure_message}}}{% endraw %}', | ||
}, | ||
}; |
32 changes: 32 additions & 0 deletions
32
x-pack/plugins/integration_assistant/server/graphs/unstructured/error.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* 2.0; you may not use this file except in compliance with the Elastic License | ||
* 2.0. | ||
*/ | ||
|
||
import { JsonOutputParser } from '@langchain/core/output_parsers'; | ||
import type { UnstructuredLogState } from '../../types'; | ||
import type { HandleUnstructuredNodeParams } from './types'; | ||
import { GROK_ERROR_PROMPT } from './prompts'; | ||
import { GROK_ERROR_EXAMPLE_ANSWER } from './constants'; | ||
|
||
export async function handleUnstructuredError({ | ||
state, | ||
model, | ||
}: HandleUnstructuredNodeParams): Promise<Partial<UnstructuredLogState>> { | ||
const outputParser = new JsonOutputParser(); | ||
const grokErrorGraph = GROK_ERROR_PROMPT.pipe(model).pipe(outputParser); | ||
const currentPatterns = state.grokPatterns; | ||
|
||
const pattern = await grokErrorGraph.invoke({ | ||
current_pattern: JSON.stringify(currentPatterns, null, 2), | ||
errors: JSON.stringify(state.errors, null, 2), | ||
ex_answer: JSON.stringify(GROK_ERROR_EXAMPLE_ANSWER, null, 2), | ||
}); | ||
|
||
return { | ||
grokPatterns: pattern.grok_patterns, | ||
lastExecutedChain: 'unstructuredError', | ||
}; | ||
} |
40 changes: 40 additions & 0 deletions
40
x-pack/plugins/integration_assistant/server/graphs/unstructured/errors.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* 2.0; you may not use this file except in compliance with the Elastic License | ||
* 2.0. | ||
*/ | ||
|
||
import { FakeLLM } from '@langchain/core/utils/testing'; | ||
import { handleUnstructuredError } from './error'; | ||
import type { UnstructuredLogState } from '../../types'; | ||
import { | ||
unstructuredLogState, | ||
unstructuredLogResponse, | ||
} from '../../../__jest__/fixtures/unstructured'; | ||
import { | ||
ActionsClientChatOpenAI, | ||
ActionsClientSimpleChatModel, | ||
} from '@kbn/langchain/server/language_models'; | ||
import { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; | ||
|
||
const model = new FakeLLM({ | ||
response: JSON.stringify(unstructuredLogResponse, null, 2), | ||
}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; | ||
|
||
const state: UnstructuredLogState = unstructuredLogState; | ||
|
||
describe('Testing unstructured error handling node', () => { | ||
const client = { | ||
asCurrentUser: { | ||
ingest: { | ||
simulate: jest.fn(), | ||
}, | ||
}, | ||
} as unknown as IScopedClusterClient; | ||
it('handleUnstructuredError()', async () => { | ||
const response = await handleUnstructuredError({ state, model, client }); | ||
expect(response.grokPatterns).toStrictEqual(unstructuredLogResponse.grok_patterns); | ||
expect(response.lastExecutedChain).toBe('unstructuredError'); | ||
}); | ||
}); |
39 changes: 39 additions & 0 deletions
39
x-pack/plugins/integration_assistant/server/graphs/unstructured/graph.test.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* 2.0; you may not use this file except in compliance with the Elastic License | ||
* 2.0. | ||
*/ | ||
|
||
import { | ||
ActionsClientChatOpenAI, | ||
ActionsClientSimpleChatModel, | ||
} from '@kbn/langchain/server/language_models'; | ||
import { FakeLLM } from '@langchain/core/utils/testing'; | ||
import { getUnstructuredGraph } from './graph'; | ||
import { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; | ||
|
||
const model = new FakeLLM({ | ||
response: '{"log_type": "structured"}', | ||
}) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; | ||
|
||
describe('UnstructuredGraph', () => { | ||
const client = { | ||
asCurrentUser: { | ||
ingest: { | ||
simulate: jest.fn(), | ||
}, | ||
}, | ||
} as unknown as IScopedClusterClient; | ||
describe('Compiling and Running', () => { | ||
it('Ensures that the graph compiles', async () => { | ||
// When getUnstructuredGraph runs, langgraph compiles the graph it will error if the graph has any issues. | ||
// Common issues for example detecting a node has no next step, or there is a infinite loop between them. | ||
try { | ||
await getUnstructuredGraph({ model, client }); | ||
} catch (error) { | ||
fail(`getUnstructuredGraph threw an error: ${error}`); | ||
} | ||
}); | ||
}); | ||
}); |
Oops, something went wrong.