[Security solution] Rename Generative AI connector to OpenAI (#167519)

This commit is contained in:
Steph Milovic 2023-09-29 09:45:53 -06:00 committed by GitHub
parent 3ba0f32952
commit a81b620a41
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
87 changed files with 257 additions and 303 deletions

6
.github/CODEOWNERS vendored
View file

@ -1211,9 +1211,9 @@ x-pack/plugins/cloud_integrations/cloud_full_story/server/config.ts @elastic/kib
/x-pack/plugins/security_solution/server/search_strategy/security_solution/factory/users @elastic/security-threat-hunting-explore
## Explore owner connectors
/x-pack/plugins/stack_connectors/public/connector_types/gen_ai @elastic/security-threat-hunting-explore
/x-pack/plugins/stack_connectors/server/connector_types/gen_ai @elastic/security-threat-hunting-explore
/x-pack/plugins/stack_connectors/common/gen_ai @elastic/security-threat-hunting-explore
/x-pack/plugins/stack_connectors/public/connector_types/openai @elastic/security-threat-hunting-explore
/x-pack/plugins/stack_connectors/server/connector_types/openai @elastic/security-threat-hunting-explore
/x-pack/plugins/stack_connectors/common/openai @elastic/security-threat-hunting-explore
## Defend Workflows owner connectors
/x-pack/plugins/stack_connectors/public/connector_types/sentinelone @elastic/security-defend-workflows

View file

@ -5273,10 +5273,10 @@
},
{
"parentPluginId": "actions",
"id": "def-common.GeneralConnectorFeatureId",
"id": "def-common.GenerativeAIConnectorFeatureId",
"type": "string",
"tags": [],
"label": "GeneralConnectorFeatureId",
"label": "GenerativeAIConnectorFeatureId",
"description": [],
"signature": [
"\"general\""
@ -5613,10 +5613,10 @@
},
{
"parentPluginId": "actions",
"id": "def-common.GeneralFeature",
"id": "def-common.GenerativeAIFeature",
"type": "Object",
"tags": [],
"label": "GeneralFeature",
"label": "GenerativeAIFeature",
"description": [],
"path": "x-pack/plugins/actions/common/connector_feature_config.ts",
"deprecated": false,
@ -5624,7 +5624,7 @@
"children": [
{
"parentPluginId": "actions",
"id": "def-common.GeneralFeature.id",
"id": "def-common.GenerativeAIFeature.id",
"type": "string",
"tags": [],
"label": "id",
@ -5635,7 +5635,7 @@
},
{
"parentPluginId": "actions",
"id": "def-common.GeneralFeature.name",
"id": "def-common.GenerativeAIFeature.name",
"type": "string",
"tags": [],
"label": "name",
@ -5646,7 +5646,7 @@
},
{
"parentPluginId": "actions",
"id": "def-common.GeneralFeature.compatibility",
"id": "def-common.GenerativeAIFeature.compatibility",
"type": "string",
"tags": [],
"label": "compatibility",
@ -5769,4 +5769,4 @@
}
]
}
}
}

View file

@ -1004,7 +1004,7 @@ Any modifications made to this file will be overwritten.
<li><a href="#config_properties_cases_webhook"><code>config_properties_cases_webhook</code> - Connector request properties for Webhook - Case Management connector</a></li>
<li><a href="#config_properties_d3security"><code>config_properties_d3security</code> - Connector request properties for a D3 Security connector</a></li>
<li><a href="#config_properties_email"><code>config_properties_email</code> - Connector request properties for an email connector</a></li>
<li><a href="#config_properties_genai"><code>config_properties_genai</code> - Connector request properties for a generative AI connector</a></li>
<li><a href="#config_properties_genai"><code>config_properties_genai</code> - Connector request properties for an OpenAI connector</a></li>
<li><a href="#config_properties_genai_oneOf"><code>config_properties_genai_oneOf</code> - </a></li>
<li><a href="#config_properties_genai_oneOf_1"><code>config_properties_genai_oneOf_1</code> - </a></li>
<li><a href="#config_properties_index"><code>config_properties_index</code> - Connector request properties for an index connector</a></li>
@ -1044,7 +1044,7 @@ Any modifications made to this file will be overwritten.
<li><a href="#create_connector_request_cases_webhook"><code>create_connector_request_cases_webhook</code> - Create Webhook - Case Managment connector request</a></li>
<li><a href="#create_connector_request_d3security"><code>create_connector_request_d3security</code> - Create D3 Security connector request</a></li>
<li><a href="#create_connector_request_email"><code>create_connector_request_email</code> - Create email connector request</a></li>
<li><a href="#create_connector_request_genai"><code>create_connector_request_genai</code> - Create generative AI connector request</a></li>
<li><a href="#create_connector_request_genai"><code>create_connector_request_genai</code> - Create OpenAI connector request</a></li>
<li><a href="#create_connector_request_index"><code>create_connector_request_index</code> - Create index connector request</a></li>
<li><a href="#create_connector_request_jira"><code>create_connector_request_jira</code> - Create Jira connector request</a></li>
<li><a href="#create_connector_request_opsgenie"><code>create_connector_request_opsgenie</code> - Create Opsgenie connector request</a></li>
@ -1100,7 +1100,7 @@ Any modifications made to this file will be overwritten.
<li><a href="#secrets_properties_cases_webhook"><code>secrets_properties_cases_webhook</code> - Connector secrets properties for Webhook - Case Management connector</a></li>
<li><a href="#secrets_properties_d3security"><code>secrets_properties_d3security</code> - Connector secrets properties for a D3 Security connector</a></li>
<li><a href="#secrets_properties_email"><code>secrets_properties_email</code> - Connector secrets properties for an email connector</a></li>
<li><a href="#secrets_properties_genai"><code>secrets_properties_genai</code> - Connector secrets properties for a generative AI connector</a></li>
<li><a href="#secrets_properties_genai"><code>secrets_properties_genai</code> - Connector secrets properties for an OpenAI connector</a></li>
<li><a href="#secrets_properties_jira"><code>secrets_properties_jira</code> - Connector secrets properties for a Jira connector</a></li>
<li><a href="#secrets_properties_opsgenie"><code>secrets_properties_opsgenie</code> - Connector secrets properties for an Opsgenie connector</a></li>
<li><a href="#secrets_properties_pagerduty"><code>secrets_properties_pagerduty</code> - Connector secrets properties for a PagerDuty connector</a></li>
@ -1432,7 +1432,7 @@ Any modifications made to this file will be overwritten.
</div> <!-- field-items -->
</div>
<div class="model">
<h3><a name="config_properties_genai"><code>config_properties_genai</code> - Connector request properties for a generative AI connector</a> <a class="up" href="#__Models">Up</a></h3>
<h3><a name="config_properties_genai"><code>config_properties_genai</code> - Connector request properties for an OpenAI connector</a> <a class="up" href="#__Models">Up</a></h3>
<div class='model-description'>Defines properties for connectors when type is <code>.gen-ai</code>.</div>
<div class="field-items">
<div class="param">apiProvider </div><div class="param-desc"><span class="param-type"><a href="#string">String</a></span> The OpenAI API provider. </div>
@ -1958,8 +1958,8 @@ Any modifications made to this file will be overwritten.
</div> <!-- field-items -->
</div>
<div class="model">
<h3><a name="create_connector_request_genai"><code>create_connector_request_genai</code> - Create generative AI connector request</a> <a class="up" href="#__Models">Up</a></h3>
<div class='model-description'>The generative AI connector uses axios to send a POST request to either OpenAI or Azure OpenAPI.</div>
<h3><a name="create_connector_request_genai"><code>create_connector_request_genai</code> - Create OpenAI connector request</a> <a class="up" href="#__Models">Up</a></h3>
<div class='model-description'>The OpenAI connector uses axios to send a POST request to either OpenAI or Azure OpenAPI.</div>
<div class="field-items">
<div class="param">config </div><div class="param-desc"><span class="param-type"><a href="#config_properties_genai">config_properties_genai</a></span> </div>
<div class="param">connector_type_id </div><div class="param-desc"><span class="param-type"><a href="#string">String</a></span> The type of connector. </div>
@ -2535,7 +2535,7 @@ Any modifications made to this file will be overwritten.
</div> <!-- field-items -->
</div>
<div class="model">
<h3><a name="secrets_properties_genai"><code>secrets_properties_genai</code> - Connector secrets properties for a generative AI connector</a> <a class="up" href="#__Models">Up</a></h3>
<h3><a name="secrets_properties_genai"><code>secrets_properties_genai</code> - Connector secrets properties for an OpenAI connector</a> <a class="up" href="#__Models">Up</a></h3>
<div class='model-description'>Defines secrets for connectors when type is <code>.gen-ai</code>.</div>
<div class="field-items">
<div class="param">apiKey (optional)</div><div class="param-desc"><span class="param-type"><a href="#string">String</a></span> The OpenAI API key. </div>

View file

@ -35,7 +35,7 @@ a| <<teams-action-type,Microsoft Teams>>
| Send a message to a Microsoft Teams channel.
a| <<gen-ai-action-type,OpenAI>>
a| <<openai-action-type,OpenAI>>
| Send a request to OpenAI.

View file

@ -1,7 +1,7 @@
[[gen-ai-action-type]]
== Generative AI connector and action
[[openai-action-type]]
== OpenAI connector and action
++++
<titleabbrev>Generative AI</titleabbrev>
<titleabbrev>OpenAI</titleabbrev>
++++
:frontmatter-description: Add a connector that can send requests to an OpenAI provider.
:frontmatter-tags-products: [kibana]
@ -9,7 +9,7 @@
:frontmatter-tags-user-goals: [configure]
The Generative AI connector uses https://github.com/axios/axios[axios] to send a POST request to an OpenAI provider, either OpenAI or Azure OpenAI. The connector uses the <<execute-connector-api,run connector API>> to send the request.
The OpenAI connector uses https://github.com/axios/axios[axios] to send a POST request to an OpenAI provider, either OpenAI or Azure OpenAI. The connector uses the <<execute-connector-api,run connector API>> to send the request.
[float]
[[define-gen-ai-ui]]
@ -18,14 +18,14 @@ The Generative AI connector uses https://github.com/axios/axios[axios] to send a
You can create connectors in *{stack-manage-app} > {connectors-ui}*. For example:
[role="screenshot"]
image::management/connectors/images/gen-ai-connector.png[Generative AI connector]
image::management/connectors/images/gen-ai-connector.png[OpenAI connector]
// NOTE: This is an autogenerated screenshot. Do not edit it directly.
[float]
[[gen-ai-connector-configuration]]
[[openai-connector-configuration]]
==== Connector configuration
Generative AI connectors have the following configuration properties:
OpenAI connectors have the following configuration properties:
Name:: The name of the connector.
OpenAI provider:: The OpenAI API provider, either OpenAI or Azure OpenAI.
@ -41,10 +41,10 @@ You can test connectors with the <<execute-connector-api,run connector API>> or
as you're creating or editing the connector in {kib}. For example:
[role="screenshot"]
image::management/connectors/images/gen-ai-params-test.png[Generative AI params test]
image::management/connectors/images/gen-ai-params-test.png[OpenAI params test]
// NOTE: This is an autogenerated screenshot. Do not edit it directly.
The Generative AI actions have the following configuration properties.
The OpenAI actions have the following configuration properties.
Body:: A JSON payload sent to the OpenAI API URL. For example:
+
@ -61,15 +61,15 @@ Body:: A JSON payload sent to the OpenAI API URL. For example:
}
--
[float]
[[gen-ai-connector-networking-configuration]]
[[openai-connector-networking-configuration]]
=== Connector networking configuration
Use the <<action-settings, Action configuration settings>> to customize connector networking configurations, such as proxies, certificates, or TLS settings. You can set configurations that apply to all your connectors or use `xpack.actions.customHostSettings` to set per-host configurations.
[float]
[[gen-ai-connector-token-dashboard]]
[[openai-connector-token-dashboard]]
=== Token usage dashboard
Once you've created a Generative AI connector, you can monitor its token usage using the *Generative AI Token Usage* dashboard. Select the connector in *{stack-manage-app}* > *{connectors-ui}* to view its details, then click the *View OpenAI Usage Dashboard for "_<Name>_" Connector* link to open the dashboard.
Once you've created a OpenAI connector, you can monitor its token usage using the *OpenAI Token Usage* dashboard. Select the connector in *{stack-manage-app}* > *{connectors-ui}* to view its details, then click the *View OpenAI Usage Dashboard for "_<Name>_" Connector* link to open the dashboard.
NOTE: To view the dashboard, you need at least `read` and `view_index_metadata` privileges for the `.kibana-event-log-*` index and the `Read` feature privilege for {kib}. You can set up a role with these minimum privileges and assign it to non-admin users who need to view this dashboard.

View file

@ -1,11 +1,11 @@
include::action-types/bedrock.asciidoc[leveloffset=+1]
include::action-types/d3security.asciidoc[leveloffset=+1]
include::action-types/email.asciidoc[leveloffset=+1]
include::action-types/gen-ai.asciidoc[leveloffset=+1]
include::action-types/resilient.asciidoc[leveloffset=+1]
include::action-types/index.asciidoc[leveloffset=+1]
include::action-types/jira.asciidoc[leveloffset=+1]
include::action-types/teams.asciidoc[leveloffset=+1]
include::action-types/openai.asciidoc[leveloffset=+1]
include::action-types/opsgenie.asciidoc[leveloffset=+1]
include::action-types/pagerduty.asciidoc[leveloffset=+1]
include::action-types/server-log.asciidoc[leveloffset=+1]

View file

@ -282,15 +282,15 @@ secrets:
[float]
[[preconfigured-gen-ai-configuration]]
==== Generative AI connectors
==== OpenAI connectors
The following example creates a <<gen-ai-action-type,generative AI connector>>:
The following example creates a <<openai-action-type,OpenAI connector>>:
[source,text]
--
xpack.actions.preconfigured:
my-gen-ai:
name: preconfigured-gen-ai-connector-type
my-open-ai:
name: preconfigured-openai-connector-type
actionTypeId: .gen-ai
config:
apiUrl: https://api.openai.com/v1/chat/completions <1>

View file

@ -422,3 +422,8 @@ This page has been deleted. Refer to <<alerting-getting-started>>.
== Enhancements and bug fixes for 8.10.0
This content has moved. Refer to <<enhancements-and-bug-fixes-v8.10.0-revised>> for 8.10.0.
[role="exclude",id="gen-ai-action-type"]
== Generative AI connector and action
This connector was renamed. Refer to <<openai-action-type>>.

View file

@ -261,13 +261,13 @@ For example: `.email`, `.index`, `.opsgenie`, `.server-log`, `.resilient`, `.sla
The configuration details, which are specific to the type of preconfigured connector.
`xpack.actions.preconfigured.<connector-id>.config.apiProvider`::
For a <<gen-ai-action-type,generative AI connector>>, specifies the OpenAI API provider, either `OpenAI` or `Azure OpenAI`.
For a <<openai-action-type,OpenAI connector>>, specifies the OpenAI API provider, either `OpenAI` or `Azure OpenAI`.
`xpack.actions.preconfigured.<connector-id>.config.apiUrl`::
A configuration URL that varies by connector:
+
--
* For a <<gen-ai-action-type,generative AI connector>>, specifies the OpenAI request URL.
* For a <<openai-action-type,OpenAI connector>>, specifies the OpenAI request URL.
* For a <<resilient-action-type,{ibm-r} connector>>, specifies the {ibm-r} instance URL.
* For a <<jira-action-type,Jira connector>>, specifies the Jira instance URL.
* For an <<opsgenie-action-type,{opsgenie} connector>>, specifies the {opsgenie} URL. For example, `https://api.opsgenie.com` or `https://api.eu.opsgenie.com`.
@ -321,7 +321,7 @@ NOTE: If you are using the `xpack.actions.allowedHosts` setting, make sure the h
For a <<cases-webhook-action-type,{webhook-cm} connector>>, specifies a string from the response body of the create case method that corresponds to the external service identifier.
`xpack.actions.preconfigured.<connector-id>.config.defaultModel`::
For a <<gen-ai-action-type,generative AI connector>>, specifies the default model to use for requests. It is optional and applicable only when `xpack.actions.preconfigured.<connector-id>.config.apiProvider` is `OpenAI`.
For a <<openai-action-type,OpenAI connector>>, specifies the default model to use for requests. It is optional and applicable only when `xpack.actions.preconfigured.<connector-id>.config.apiProvider` is `OpenAI`.
`xpack.actions.preconfigured.<connector-id>.config.executionTimeField`::
For an <<index-action-type,index connector>>, a field that indicates when the document was indexed.
@ -448,7 +448,7 @@ TIP: Sensitive properties, such as passwords, should be stored in the <<creating
An API key secret that varies by connector:
+
--
* For a <<gen-ai-action-type,generative AI connector>>, specifies the OpenAI or Azure OpenAI API key for authentication.
* For a <<openai-action-type,OpenAI connector>>, specifies the OpenAI or Azure OpenAI API key for authentication.
* For an <<opsgenie-action-type,{opsgenie} connector>>, specifies the {opsgenie} API authentication key for HTTP basic authentication.
--

View file

@ -1,5 +1,5 @@
## Generative AI Connector Streaming Response Example
## OpenAI Connector Streaming Response Example
This example plugin shows you how to stream a response from a Generative AI connector.
This example plugin shows you how to stream a response from a OpenAI connector.
To run this example, use the command `yarn start --run-examples`.

View file

@ -52,7 +52,7 @@ export const ListConnectors = ({
label={i18n.translate(
'genAiStreamingResponseExample.app.component.selectConnectorLabel',
{
defaultMessage: 'Select a Generative AI Connector',
defaultMessage: 'Select an OpenAI Connector',
}
)}
labelAppend={

View file

@ -6,7 +6,7 @@
*/
import React from 'react';
import { GenAiLogo } from '@kbn/stack-connectors-plugin/public/common';
import { OpenAILogo } from '@kbn/stack-connectors-plugin/public/common';
import { EuiFlexGroup, EuiCard, EuiFlexItem, EuiIcon } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
@ -20,11 +20,11 @@ export const SetupConnector = ({ setIsConnectorModalVisible }: SetupConnectorPro
<EuiFlexItem grow={false}>
<EuiCard
layout="horizontal"
icon={<EuiIcon size="xl" type={GenAiLogo} />}
icon={<EuiIcon size="xl" type={OpenAILogo} />}
title={i18n.translate(
'genAiStreamingResponseExample.app.component.addConnectorCardTitle',
{
defaultMessage: 'Add Generative AI Connector',
defaultMessage: 'Add OpenAI Connector',
}
)}
description={i18n.translate(

View file

@ -65,7 +65,7 @@ export const GenAiStreamingResponseExampleApp = ({
minimumLicenseRequired: 'platinum',
supportedFeatureIds: ['general'],
id: '.gen-ai',
name: 'Generative AI',
name: 'OpenAI',
enabled: true,
});
const [loading, setLoading] = useState<boolean>(true);

View file

@ -37,7 +37,7 @@ export class GenAiStreamingResponseExamplePlugin
) {
core.application.register({
id: 'GenAiStreamingResponseExample',
title: 'Generative AI Streaming Response Example',
title: 'OpenAI Streaming Response Example',
navLinkStatus: AppNavLinkStatus.hidden,
async mount(params: AppMountParameters) {
const [coreStart, depsStart] = await core.getStartServices();
@ -48,9 +48,8 @@ export class GenAiStreamingResponseExamplePlugin
developerExamples.register({
appId: 'GenAiStreamingResponseExample',
title: 'Generative AI Streaming Response Example',
description:
'This example demonstrates how to stream a response from a Generative AI connector',
title: 'OpenAI Streaming Response Example',
description: 'This example demonstrates how to stream a response from an OpenAI connector',
});
}

View file

@ -87,7 +87,7 @@ export class GenAiStreamingResponseExamplePlugin implements Plugin<void, void> {
};
} else {
throw Boom.badRequest(
`Invalid generative AI connector selected - ${connector.config?.apiProvider} is not a valid provider`
`Invalid OpenAI connector selected - ${connector.config?.apiProvider} is not a valid provider`
);
}

View file

@ -17,7 +17,7 @@ import {
} from '@elastic/eui';
import { css } from '@emotion/react';
import { DocLinksStart } from '@kbn/core-doc-links-browser';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/gen_ai/constants';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/openai/constants';
import { Conversation } from '../../..';
import { AssistantTitle } from '../assistant_title';
import { ConversationSelector } from '../conversations/conversation_selector';

View file

@ -19,7 +19,7 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
import useEvent from 'react-use/lib/useEvent';
import { css } from '@emotion/react';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/gen_ai/constants';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/openai/constants';
import { Conversation } from '../../../..';
import { useAssistantContext } from '../../../assistant_context';
import * as i18n from './translations';

View file

@ -18,7 +18,7 @@ import {
import React, { useCallback, useMemo, useState } from 'react';
import { css } from '@emotion/react';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/gen_ai/constants';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/openai/constants';
import { Conversation, Prompt } from '../../../..';
import { UseAssistantContext } from '../../../assistant_context';
import * as i18n from './translations';

View file

@ -29,7 +29,7 @@ import {
import { createPortal } from 'react-dom';
import { css } from '@emotion/react';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/gen_ai/constants';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/openai/constants';
import { ActionConnectorProps } from '@kbn/triggers-actions-ui-plugin/public/types';
import { ChatSend } from './chat_send';
import { BlockBotCallToAction } from './block_bot/cta';

View file

@ -23,7 +23,7 @@ import {
// eslint-disable-next-line @kbn/eslint/module_migration
import styled from 'styled-components';
import { css } from '@emotion/react';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/gen_ai/constants';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/openai/constants';
import { Conversation, Prompt, QuickPrompt } from '../../..';
import * as i18n from './translations';
import { useAssistantContext } from '../../assistant_context';

View file

@ -8,7 +8,7 @@
import React, { useCallback } from 'react';
import { EuiButtonIcon, EuiToolTip } from '@elastic/eui';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/gen_ai/constants';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/openai/constants';
import { Conversation } from '../../..';
import { AssistantSettings, CONVERSATIONS_TAB } from './assistant_settings';
import * as i18n from './translations';

View file

@ -5,7 +5,7 @@
* 2.0.
*/
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/gen_ai/constants';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/openai/constants';
export type ConversationRole = 'system' | 'user' | 'assistant';

View file

@ -8,7 +8,7 @@
import React, { useCallback } from 'react';
import { EuiCard, EuiFlexGroup, EuiFlexItem, EuiIcon } from '@elastic/eui';
import { GenAiLogo } from '@kbn/stack-connectors-plugin/public/common';
import { OpenAILogo } from '@kbn/stack-connectors-plugin/public/common';
import * as i18n from '../translations';
import { useAssistantContext } from '../../assistant_context';
@ -41,7 +41,7 @@ export const ConnectorButton: React.FC<ConnectorButtonProps> = React.memo<Connec
<EuiCard
data-test-subj="connectorButton"
layout="horizontal"
icon={<EuiIcon size="xl" type={GenAiLogo} />}
icon={<EuiIcon size="xl" type={OpenAILogo} />}
title={title}
description={description}
onClick={assistantAvailability.hasConnectorsAllPrivilege ? onClick : undefined}

View file

@ -7,7 +7,7 @@
import type { ActionConnector } from '@kbn/triggers-actions-ui-plugin/public';
import { ActionConnectorProps } from '@kbn/triggers-actions-ui-plugin/public/types';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/gen_ai/constants';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/openai/constants';
import { ActionTypeModel } from '@kbn/triggers-actions-ui-plugin/public';
interface GenAiConfig {
@ -20,7 +20,7 @@ interface GenAiConfig {
* Returns the GenAiConfig for a given ActionConnector. Note that if the connector is preconfigured,
* the config will be undefined as the connector is neither available nor editable.
*
* TODO: Extract and use separate types from GenAiConfig from '@kbn/stack-connectors-plugin/common/gen_ai/types'
* TODO: Extract and use separate types from GenAiConfig from '@kbn/stack-connectors-plugin/common/openai/types'
*
* @param connector
*/

View file

@ -15,7 +15,7 @@ import type { IHttpFetchError } from '@kbn/core-http-browser';
import type { ActionType } from '@kbn/actions-plugin/common';
import { HttpSetup } from '@kbn/core-http-browser';
import { IToasts } from '@kbn/core-notifications-browser';
import { GeneralConnectorFeatureId } from '@kbn/actions-plugin/common';
import { GenerativeAIConnectorFeatureId } from '@kbn/actions-plugin/common';
import * as i18n from '../translations';
/**
@ -37,7 +37,10 @@ export const useLoadActionTypes = ({
QUERY_KEY,
async () => {
const queryResult = await loadActionTypes({ http, featureId: GeneralConnectorFeatureId });
const queryResult = await loadActionTypes({
http,
featureId: GenerativeAIConnectorFeatureId,
});
const sortedData = queryResult.sort((a, b) => a.name.localeCompare(b.name));
return sortedData;

View file

@ -19,7 +19,7 @@ export const WELCOME_GENERAL_2 = i18n.translate(
'xpack.elasticAssistant.securityAssistant.content.prompts.welcome.welcomeGeneral2Prompt',
{
defaultMessage:
"First things first, we'll need to set up a Generative AI Connector to get this chat experience going! With the Generative AI Connector, you'll be able to configure access to either an Azure OpenAI Service or OpenAI API account, but you better believe you'll be able to deploy your own models within your Elastic Cloud instance and use those here in the future... 😉",
"First things first, we'll need to set up a Generative AI Connector to get this chat experience going! With the Generative AI Connector, you'll be able to configure access to either an OpenAI service or an AWS Bedrock service, but you better believe you'll be able to deploy your own models within your Elastic Cloud instance and use those here in the future... 😉",
}
);

View file

@ -5,7 +5,7 @@
* 2.0.
*/
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/gen_ai/constants';
import { OpenAiProviderType } from '@kbn/stack-connectors-plugin/common/openai/constants';
import { Conversation } from '../..';
export const alertConvo: Conversation = {

View file

@ -13,7 +13,7 @@ import {
describe('areValidFeatures', () => {
it('returns true when all inputs are valid features', () => {
expect(areValidFeatures(['alerting', 'cases', 'general'])).toBeTruthy();
expect(areValidFeatures(['alerting', 'cases', 'generativeAI'])).toBeTruthy();
});
it('returns true when only one input and it is a valid feature', () => {
@ -42,11 +42,9 @@ describe('getConnectorFeatureName', () => {
describe('getConnectorCompatibility', () => {
it('returns the compatibility list for valid feature ids', () => {
expect(getConnectorCompatibility(['alerting', 'cases', 'uptime', 'siem', 'general'])).toEqual([
'Alerting Rules',
'Cases',
'General',
]);
expect(
getConnectorCompatibility(['alerting', 'cases', 'uptime', 'siem', 'generativeAI'])
).toEqual(['Alerting Rules', 'Cases', 'Generative AI']);
});
it('skips invalid feature ids', () => {

View file

@ -25,12 +25,12 @@ export const AlertingConnectorFeatureId = 'alerting';
export const CasesConnectorFeatureId = 'cases';
export const UptimeConnectorFeatureId = 'uptime';
export const SecurityConnectorFeatureId = 'siem';
export const GeneralConnectorFeatureId = 'general';
export const GenerativeAIConnectorFeatureId = 'generativeAI';
const compatibilityGeneral = i18n.translate(
'xpack.actions.availableConnectorFeatures.compatibility.general',
const compatibilityGenerativeAI = i18n.translate(
'xpack.actions.availableConnectorFeatures.compatibility.generativeAI',
{
defaultMessage: 'General',
defaultMessage: 'Generative AI',
}
);
@ -80,10 +80,10 @@ export const SecuritySolutionFeature: ConnectorFeatureConfig = {
compatibility: compatibilityAlertingRules,
};
export const GeneralFeature: ConnectorFeatureConfig = {
id: GeneralConnectorFeatureId,
name: compatibilityGeneral,
compatibility: compatibilityGeneral,
export const GenerativeAIFeature: ConnectorFeatureConfig = {
id: GenerativeAIConnectorFeatureId,
name: compatibilityGenerativeAI,
compatibility: compatibilityGenerativeAI,
};
const AllAvailableConnectorFeatures = {
@ -91,7 +91,7 @@ const AllAvailableConnectorFeatures = {
[CasesConnectorFeature.id]: CasesConnectorFeature,
[UptimeConnectorFeature.id]: UptimeConnectorFeature,
[SecuritySolutionFeature.id]: SecuritySolutionFeature,
[GeneralFeature.id]: GeneralFeature,
[GenerativeAIFeature.id]: GenerativeAIFeature,
};
export function areValidFeatures(ids: string[]) {

View file

@ -12,7 +12,7 @@ export {
CasesConnectorFeatureId,
UptimeConnectorFeatureId,
SecurityConnectorFeatureId,
GeneralConnectorFeatureId,
GenerativeAIConnectorFeatureId,
} from './connector_feature_config';
export interface ActionType {
id: string;

View file

@ -1768,7 +1768,7 @@
}
},
"config_properties_genai": {
"title": "Connector request properties for a generative AI connector",
"title": "Connector request properties for an OpenAI connector",
"description": "Defines properties for connectors when type is `.gen-ai`.",
"oneOf": [
{
@ -1821,7 +1821,7 @@
}
},
"secrets_properties_genai": {
"title": "Connector secrets properties for a generative AI connector",
"title": "Connector secrets properties for an OpenAI connector",
"description": "Defines secrets for connectors when type is `.gen-ai`.",
"type": "object",
"properties": {
@ -1832,8 +1832,8 @@
}
},
"create_connector_request_genai": {
"title": "Create generative AI connector request",
"description": "The generative AI connector uses axios to send a POST request to either OpenAI or Azure OpenAPI.\n",
"title": "Create OpenAI connector request",
"description": "The OpenAI connector uses axios to send a POST request to either OpenAI or Azure OpenAPI.\n",
"type": "object",
"required": [
"config",
@ -5722,4 +5722,4 @@
}
}
}
}
}

View file

@ -1031,14 +1031,14 @@ components:
type: boolean
host:
description: |
The host name of the service provider. If the `service` is `elastic_cloud` (for Elastic Cloud notifications) or one of Nodemailer's well-known email service providers, this property is ignored. If `service` is `other`, this property must be defined.
The host name of the service provider. If the `service` is `elastic_cloud` (for Elastic Cloud notifications) or one of Nodemailer's well-known email service providers, this property is ignored. If `service` is `other`, this property must be defined.
type: string
oauthTokenUrl:
type: string
nullable: true
port:
description: |
The port to connect to on the service provider. If the `service` is `elastic_cloud` (for Elastic Cloud notifications) or one of Nodemailer's well-known email service providers, this property is ignored. If `service` is `other`, this property must be defined.
The port to connect to on the service provider. If the `service` is `elastic_cloud` (for Elastic Cloud notifications) or one of Nodemailer's well-known email service providers, this property is ignored. If `service` is `other`, this property must be defined.
type: integer
secure:
description: |
@ -1103,7 +1103,7 @@ components:
secrets:
$ref: '#/components/schemas/secrets_properties_email'
config_properties_genai:
title: Connector request properties for a generative AI connector
title: Connector request properties for an OpenAI connector
description: Defines properties for connectors when type is `.gen-ai`.
oneOf:
- type: object
@ -1138,7 +1138,7 @@ components:
discriminator:
propertyName: apiProvider
secrets_properties_genai:
title: Connector secrets properties for a generative AI connector
title: Connector secrets properties for an OpenAI connector
description: Defines secrets for connectors when type is `.gen-ai`.
type: object
properties:
@ -1146,9 +1146,9 @@ components:
type: string
description: The OpenAI API key.
create_connector_request_genai:
title: Create generative AI connector request
title: Create OpenAI connector request
description: |
The generative AI connector uses axios to send a POST request to either OpenAI or Azure OpenAPI.
The OpenAI connector uses axios to send a POST request to either OpenAI or Azure OpenAPI.
type: object
required:
- config

View file

@ -1,4 +1,4 @@
title: Connector request properties for a generative AI connector
title: Connector request properties for an OpenAI connector
description: Defines properties for connectors when type is `.gen-ai`.
oneOf:
- type: object
@ -29,4 +29,4 @@ oneOf:
type: string
description: The default model to use for requests.
discriminator:
propertyName: apiProvider
propertyName: apiProvider

View file

@ -1,4 +1,4 @@
title: Connector response properties for a generative AI connector
title: Connector response properties for an OpenAI connector
type: object
required:
- config

View file

@ -1,6 +1,6 @@
title: Create generative AI connector request
title: Create OpenAI connector request
description: >
The generative AI connector uses axios to send a POST request to either
The OpenAI connector uses axios to send a POST request to either
OpenAI or Azure OpenAPI.
type: object
required:
@ -22,4 +22,4 @@ properties:
description: The display name for the connector.
example: my-connector
secrets:
$ref: 'secrets_properties_genai.yaml'
$ref: 'secrets_properties_genai.yaml'

View file

@ -1,7 +1,7 @@
title: Connector secrets properties for a generative AI connector
title: Connector secrets properties for an OpenAI connector
description: Defines secrets for connectors when type is `.gen-ai`.
type: object
properties:
apiKey:
type: string
description: The OpenAI API key.
description: The OpenAI API key.

View file

@ -1,4 +1,4 @@
title: Update generative AI connector request
title: Update OpenAI connector request
type: object
required:
- config
@ -10,4 +10,4 @@ properties:
type: string
description: The display name for the connector.
secrets:
$ref: 'secrets_properties_genai.yaml'
$ref: 'secrets_properties_genai.yaml'

View file

@ -1766,7 +1766,7 @@ test('writes to event log for execute and execute start when consumer and relate
});
});
test('writes usage data to event log for gen ai events', async () => {
test('writes usage data to event log for OpenAI events', async () => {
const executorMock = setupActionExecutorMock('.gen-ai');
const mockGenAi = {
id: 'chatcmpl-7LztF5xsJl2z5jcNpJKvaPm4uWt8x',

View file

@ -286,8 +286,8 @@ export class ActionExecutor {
event.event = event.event || {};
// start gen_ai extension
// add event.kibana.action.execution.gen_ai to event log when GenerativeAi Connector is executed
// start openai extension
// add event.kibana.action.execution.openai to event log when OpenAI Connector is executed
if (result.status === 'ok' && actionTypeId === '.gen-ai') {
const data = result.data as unknown as {
usage: { prompt_tokens?: number; completion_tokens?: number; total_tokens?: number };
@ -311,7 +311,7 @@ export class ActionExecutor {
},
};
}
// end gen_ai extension
// end openai extension
const currentUser = security?.authc.getCurrentUser(request);

View file

@ -6,7 +6,7 @@ This document gives an overview of the features of the Observability AI Assistan
#### **1.1. Configuration**
Users can connect to an LLM using [connectors](https://www.elastic.co/guide/en/kibana/current/action-types.html) - specifically the [Generative AI connector](https://www.elastic.co/guide/en/kibana/current/gen-ai-action-type.html), which currently supports both OpenAI and Azure OpenAI as providers. The connector is Enterprise-only. Users can also leverage [preconfigured connectors](https://www.elastic.co/guide/en/kibana/current/pre-configured-connectors.html), in which case the following should be added to `kibana.yml`:
Users can connect to an LLM using [connectors](https://www.elastic.co/guide/en/kibana/current/action-types.html) - specifically the [OpenAI connector](https://www.elastic.co/guide/en/kibana/current/openai-action-type.html), which currently supports both OpenAI and Azure OpenAI as providers. The connector is Enterprise-only. Users can also leverage [preconfigured connectors](https://www.elastic.co/guide/en/kibana/current/pre-configured-connectors.html), in which case the following should be added to `kibana.yml`:
```yaml
xpack.actions.preconfigured:

View file

@ -143,7 +143,7 @@ export function InitialSetupPanel({
{i18n.translate(
'xpack.observabilityAiAssistant.initialSetupPanel.setupConnector.description1',
{
defaultMessage: 'Set up a Generative AI connector with your AI provider.',
defaultMessage: 'Set up an OpenAI connector with your AI provider.',
}
)}
</p>
@ -153,7 +153,7 @@ export function InitialSetupPanel({
'xpack.observabilityAiAssistant.initialSetupPanel.setupConnector.description2',
{
defaultMessage:
'The Generative AI model needs to support function calls. We strongly recommend using GPT4.',
'The OpenAI model needs to support function calls. We strongly recommend using GPT4.',
}
)}
<EuiBetaBadge
@ -197,7 +197,7 @@ export function InitialSetupPanel({
{i18n.translate(
'xpack.observabilityAiAssistant.initialSetupPanel.setupConnector.buttonLabel',
{
defaultMessage: 'Set up Generative AI connector',
defaultMessage: 'Set up OpenAI connector',
}
)}
</EuiButton>

View file

@ -7,13 +7,13 @@
import { i18n } from '@kbn/i18n';
export const OPEN_AI_TITLE = i18n.translate(
export const OPENAI_TITLE = i18n.translate(
'xpack.stackConnectors.components.genAi.connectorTypeTitle',
{
defaultMessage: 'OpenAI',
}
);
export const GEN_AI_CONNECTOR_ID = '.gen-ai';
export const OPENAI_CONNECTOR_ID = '.gen-ai';
export enum SUB_ACTION {
RUN = 'run',
INVOKE_AI = 'invokeAI',

View file

@ -5,7 +5,7 @@
* 2.0.
*/
import GenAiLogo from '../connector_types/gen_ai/logo';
import OpenAILogo from '../connector_types/openai/logo';
export { GEN_AI_CONNECTOR_ID, OpenAiProviderType } from '../../common/gen_ai/constants';
export { GenAiLogo };
export { OPENAI_CONNECTOR_ID, OpenAiProviderType } from '../../common/openai/constants';
export { OpenAILogo };

View file

@ -8,7 +8,7 @@
import { lazy } from 'react';
import { i18n } from '@kbn/i18n';
import { GenericValidationResult } from '@kbn/triggers-actions-ui-plugin/public/types';
import { SUB_ACTION } from '../../../common/gen_ai/constants';
import { SUB_ACTION } from '../../../common/d3security/constants';
import { D3SecurityActionParams, D3SecurityConnector } from './types';
import { D3_SECURITY_CONNECTOR_ID } from '../../../common/d3security/constants';
interface ValidationErrors {

View file

@ -11,7 +11,7 @@ import { getCasesWebhookConnectorType } from './cases_webhook';
import { getEmailConnectorType } from './email';
import { getIndexConnectorType } from './es_index';
import { getJiraConnectorType } from './jira';
import { getGenerativeAiConnectorType } from './gen_ai';
import { getOpenAIConnectorType } from './openai';
import { getBedrockConnectorType } from './bedrock';
import { getOpsgenieConnectorType } from './opsgenie';
import { getPagerDutyConnectorType } from './pagerduty';
@ -60,7 +60,7 @@ export function registerConnectorTypes({
connectorTypeRegistry.register(getJiraConnectorType());
connectorTypeRegistry.register(getResilientConnectorType());
connectorTypeRegistry.register(getOpsgenieConnectorType());
connectorTypeRegistry.register(getGenerativeAiConnectorType());
connectorTypeRegistry.register(getOpenAIConnectorType());
connectorTypeRegistry.register(getBedrockConnectorType());
connectorTypeRegistry.register(getTeamsConnectorType());
connectorTypeRegistry.register(getTorqConnectorType());

View file

@ -7,7 +7,7 @@
import { httpServiceMock } from '@kbn/core-http-browser-mocks';
import { getDashboard } from './api';
import { SUB_ACTION } from '../../../common/gen_ai/constants';
import { SUB_ACTION } from '../../../common/openai/constants';
const response = {
available: true,
};

View file

@ -7,7 +7,7 @@
import { HttpSetup } from '@kbn/core-http-browser';
import { ActionTypeExecutorResult, BASE_ACTION_API_PATH } from '@kbn/actions-plugin/common';
import { SUB_ACTION } from '../../../common/gen_ai/constants';
import { SUB_ACTION } from '../../../common/openai/constants';
import { ConnectorExecutorResult, rewriteResponseToCamelCase } from '../lib/rewrite_response_body';
export async function getDashboard({

View file

@ -6,11 +6,11 @@
*/
import React from 'react';
import GenerativeAiConnectorFields from './connector';
import ConnectorFields from './connector';
import { ConnectorFormTestProvider } from '../lib/test_utils';
import { act, fireEvent, render, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { DEFAULT_OPENAI_MODEL, OpenAiProviderType } from '../../../common/gen_ai/constants';
import { DEFAULT_OPENAI_MODEL, OpenAiProviderType } from '../../../common/openai/constants';
import { useKibana } from '@kbn/triggers-actions-ui-plugin/public';
import { useGetDashboard } from './use_get_dashboard';
@ -21,7 +21,7 @@ const useKibanaMock = useKibana as jest.Mocked<typeof useKibana>;
const mockDashboard = useGetDashboard as jest.Mock;
const openAiConnector = {
actionTypeId: '.gen-ai',
name: 'genAi',
name: 'OpenAI',
id: '123',
config: {
apiUrl: 'https://openaiurl.com',
@ -46,7 +46,7 @@ const azureConnector = {
const navigateToUrl = jest.fn();
describe('GenerativeAiConnectorFields renders', () => {
describe('ConnectorFields renders', () => {
beforeEach(() => {
jest.clearAllMocks();
useKibanaMock().services.application.navigateToUrl = navigateToUrl;
@ -57,11 +57,7 @@ describe('GenerativeAiConnectorFields renders', () => {
test('open ai connector fields are rendered', async () => {
const { getAllByTestId } = render(
<ConnectorFormTestProvider connector={openAiConnector}>
<GenerativeAiConnectorFields
readOnly={false}
isEdit={false}
registerPreSubmitValidator={() => {}}
/>
<ConnectorFields readOnly={false} isEdit={false} registerPreSubmitValidator={() => {}} />
</ConnectorFormTestProvider>
);
expect(getAllByTestId('config.apiUrl-input')[0]).toBeInTheDocument();
@ -77,11 +73,7 @@ describe('GenerativeAiConnectorFields renders', () => {
test('azure ai connector fields are rendered', async () => {
const { getAllByTestId } = render(
<ConnectorFormTestProvider connector={azureConnector}>
<GenerativeAiConnectorFields
readOnly={false}
isEdit={false}
registerPreSubmitValidator={() => {}}
/>
<ConnectorFields readOnly={false} isEdit={false} registerPreSubmitValidator={() => {}} />
</ConnectorFormTestProvider>
);
expect(getAllByTestId('config.apiUrl-input')[0]).toBeInTheDocument();
@ -98,11 +90,7 @@ describe('GenerativeAiConnectorFields renders', () => {
it('Does not render if isEdit is false and dashboardUrl is defined', async () => {
const { queryByTestId } = render(
<ConnectorFormTestProvider connector={openAiConnector}>
<GenerativeAiConnectorFields
readOnly={false}
isEdit={false}
registerPreSubmitValidator={() => {}}
/>
<ConnectorFields readOnly={false} isEdit={false} registerPreSubmitValidator={() => {}} />
</ConnectorFormTestProvider>
);
expect(queryByTestId('link-gen-ai-token-dashboard')).not.toBeInTheDocument();
@ -113,11 +101,7 @@ describe('GenerativeAiConnectorFields renders', () => {
}));
const { queryByTestId } = render(
<ConnectorFormTestProvider connector={openAiConnector}>
<GenerativeAiConnectorFields
readOnly={false}
isEdit={false}
registerPreSubmitValidator={() => {}}
/>
<ConnectorFields readOnly={false} isEdit={false} registerPreSubmitValidator={() => {}} />
</ConnectorFormTestProvider>
);
expect(queryByTestId('link-gen-ai-token-dashboard')).not.toBeInTheDocument();
@ -125,11 +109,7 @@ describe('GenerativeAiConnectorFields renders', () => {
it('Renders if isEdit is true and dashboardUrl is defined', async () => {
const { getByTestId } = render(
<ConnectorFormTestProvider connector={openAiConnector}>
<GenerativeAiConnectorFields
readOnly={false}
isEdit={true}
registerPreSubmitValidator={() => {}}
/>
<ConnectorFields readOnly={false} isEdit={true} registerPreSubmitValidator={() => {}} />
</ConnectorFormTestProvider>
);
expect(getByTestId('link-gen-ai-token-dashboard')).toBeInTheDocument();
@ -137,11 +117,7 @@ describe('GenerativeAiConnectorFields renders', () => {
it('On click triggers redirect with correct saved object id', async () => {
const { getByTestId } = render(
<ConnectorFormTestProvider connector={openAiConnector}>
<GenerativeAiConnectorFields
readOnly={false}
isEdit={true}
registerPreSubmitValidator={() => {}}
/>
<ConnectorFields readOnly={false} isEdit={true} registerPreSubmitValidator={() => {}} />
</ConnectorFormTestProvider>
);
fireEvent.click(getByTestId('link-gen-ai-token-dashboard'));
@ -158,11 +134,7 @@ describe('GenerativeAiConnectorFields renders', () => {
it('connector validation succeeds when connector config is valid', async () => {
const { getByTestId } = render(
<ConnectorFormTestProvider connector={openAiConnector} onSubmit={onSubmit}>
<GenerativeAiConnectorFields
readOnly={false}
isEdit={false}
registerPreSubmitValidator={() => {}}
/>
<ConnectorFields readOnly={false} isEdit={false} registerPreSubmitValidator={() => {}} />
</ConnectorFormTestProvider>
);
@ -191,11 +163,7 @@ describe('GenerativeAiConnectorFields renders', () => {
const res = render(
<ConnectorFormTestProvider connector={connector} onSubmit={onSubmit}>
<GenerativeAiConnectorFields
readOnly={false}
isEdit={false}
registerPreSubmitValidator={() => {}}
/>
<ConnectorFields readOnly={false} isEdit={false} registerPreSubmitValidator={() => {}} />
</ConnectorFormTestProvider>
);
@ -224,11 +192,7 @@ describe('GenerativeAiConnectorFields renders', () => {
const res = render(
<ConnectorFormTestProvider connector={connector} onSubmit={onSubmit}>
<GenerativeAiConnectorFields
readOnly={false}
isEdit={false}
registerPreSubmitValidator={() => {}}
/>
<ConnectorFields readOnly={false} isEdit={false} registerPreSubmitValidator={() => {}} />
</ConnectorFormTestProvider>
);

View file

@ -19,8 +19,8 @@ import {
} from '@kbn/es-ui-shared-plugin/static/forms/hook_form_lib';
import { useKibana } from '@kbn/triggers-actions-ui-plugin/public';
import { fieldValidators } from '@kbn/es-ui-shared-plugin/static/forms/helpers';
import { OpenAiProviderType } from '../../../common/openai/constants';
import { useGetDashboard } from './use_get_dashboard';
import { OpenAiProviderType } from '../../../common/gen_ai/constants';
import * as i18n from './translations';
import {
azureAiConfig,
@ -31,10 +31,7 @@ import {
} from './constants';
const { emptyField } = fieldValidators;
const GenerativeAiConnectorFields: React.FC<ActionConnectorFieldsProps> = ({
readOnly,
isEdit,
}) => {
const ConnectorFields: React.FC<ActionConnectorFieldsProps> = ({ readOnly, isEdit }) => {
const { getFieldDefaultValue } = useFormContext();
const [{ config, id, name }] = useFormData({
watch: ['config.apiProvider'],
@ -117,4 +114,4 @@ const GenerativeAiConnectorFields: React.FC<ActionConnectorFieldsProps> = ({
};
// eslint-disable-next-line import/no-default-export
export { GenerativeAiConnectorFields as default };
export { ConnectorFields as default };

View file

@ -9,7 +9,7 @@ import React from 'react';
import { ConfigFieldSchema, SecretsFieldSchema } from '@kbn/triggers-actions-ui-plugin/public';
import { FormattedMessage } from '@kbn/i18n-react';
import { EuiLink } from '@elastic/eui';
import { DEFAULT_OPENAI_MODEL, OpenAiProviderType } from '../../../common/gen_ai/constants';
import { DEFAULT_OPENAI_MODEL, OpenAiProviderType } from '../../../common/openai/constants';
import * as i18n from './translations';
export const DEFAULT_URL = 'https://api.openai.com/v1/chat/completions' as const;
@ -46,7 +46,7 @@ export const openAiConfig: ConfigFieldSchema[] = [
href="https://platform.openai.com/docs/api-reference"
target="_blank"
>
{`${i18n.OPEN_AI} ${i18n.DOCUMENTATION}`}
{`${i18n.OPENAI} ${i18n.DOCUMENTATION}`}
</EuiLink>
),
}}
@ -108,7 +108,7 @@ export const openAiSecrets: SecretsFieldSchema[] = [
href="https://platform.openai.com/account/api-keys"
target="_blank"
>
{`${i18n.OPEN_AI} ${i18n.DOCUMENTATION}`}
{`${i18n.OPENAI} ${i18n.DOCUMENTATION}`}
</EuiLink>
),
}}
@ -145,8 +145,8 @@ export const azureAiSecrets: SecretsFieldSchema[] = [
export const providerOptions = [
{
value: OpenAiProviderType.OpenAi,
text: i18n.OPEN_AI,
label: i18n.OPEN_AI,
text: i18n.OPENAI,
label: i18n.OPENAI,
},
{
value: OpenAiProviderType.AzureAi,

View file

@ -5,4 +5,4 @@
* 2.0.
*/
export { getConnectorType as getGenerativeAiConnectorType } from './gen_ai';
export { getConnectorType as getOpenAIConnectorType } from './openai';

View file

@ -9,7 +9,7 @@ import { TypeRegistry } from '@kbn/triggers-actions-ui-plugin/public/application
import { registerConnectorTypes } from '..';
import type { ActionTypeModel } from '@kbn/triggers-actions-ui-plugin/public/types';
import { registrationServicesMock } from '../../mocks';
import { SUB_ACTION } from '../../../common/gen_ai/constants';
import { SUB_ACTION } from '../../../common/openai/constants';
const ACTION_TYPE_ID = '.gen-ai';
let actionTypeModel: ActionTypeModel;
@ -26,12 +26,12 @@ beforeAll(() => {
describe('actionTypeRegistry.get() works', () => {
test('connector type static data is as expected', () => {
expect(actionTypeModel.id).toEqual(ACTION_TYPE_ID);
expect(actionTypeModel.selectMessage).toBe('Send a request to generative AI systems.');
expect(actionTypeModel.selectMessage).toBe('Send a request to OpenAI systems.');
expect(actionTypeModel.actionTypeTitle).toBe('OpenAI');
});
});
describe('gen ai action params validation', () => {
describe('OpenAI action params validation', () => {
test('action params validation succeeds when action params is valid', async () => {
const actionParams = {
subAction: SUB_ACTION.RUN,

View file

@ -8,24 +8,24 @@
import { lazy } from 'react';
import { i18n } from '@kbn/i18n';
import type { GenericValidationResult } from '@kbn/triggers-actions-ui-plugin/public/types';
import { SUB_ACTION } from '../../../common/gen_ai/constants';
import { GEN_AI_CONNECTOR_ID, OPEN_AI_TITLE } from '../../../common/gen_ai/constants';
import { GenerativeAiActionParams, GenerativeAiConnector } from './types';
import { SUB_ACTION } from '../../../common/openai/constants';
import { OPENAI_CONNECTOR_ID, OPENAI_TITLE } from '../../../common/openai/constants';
import { ActionParams, OpenAIConnector } from './types';
interface ValidationErrors {
subAction: string[];
body: string[];
}
export function getConnectorType(): GenerativeAiConnector {
export function getConnectorType(): OpenAIConnector {
return {
id: GEN_AI_CONNECTOR_ID,
id: OPENAI_CONNECTOR_ID,
iconClass: lazy(() => import('./logo')),
selectMessage: i18n.translate('xpack.stackConnectors.components.genAi.selectMessageText', {
defaultMessage: 'Send a request to generative AI systems.',
defaultMessage: 'Send a request to OpenAI systems.',
}),
actionTypeTitle: OPEN_AI_TITLE,
actionTypeTitle: OPENAI_TITLE,
validateParams: async (
actionParams: GenerativeAiActionParams
actionParams: ActionParams
): Promise<GenericValidationResult<ValidationErrors>> => {
const { subAction, subActionParams } = actionParams;
const translations = await import('./translations');

View file

@ -7,9 +7,9 @@
import React from 'react';
import { fireEvent, render } from '@testing-library/react';
import GenerativeAiParamsFields from './params';
import ParamsFields from './params';
import { MockCodeEditor } from '@kbn/triggers-actions-ui-plugin/public/application/code_editor.mock';
import { OpenAiProviderType, SUB_ACTION } from '../../../common/gen_ai/constants';
import { OpenAiProviderType, SUB_ACTION } from '../../../common/openai/constants';
import { DEFAULT_BODY, DEFAULT_BODY_AZURE, DEFAULT_URL } from './constants';
const kibanaReactPath = '../../../../../../src/plugins/kibana_react/public';
@ -34,7 +34,7 @@ const messageVariables = [
describe('Gen AI Params Fields renders', () => {
test('all params fields are rendered', () => {
const { getByTestId } = render(
<GenerativeAiParamsFields
<ParamsFields
actionParams={{
subAction: SUB_ACTION.RUN,
subActionParams: { body: '{"message": "test"}' },
@ -67,14 +67,14 @@ describe('Gen AI Params Fields renders', () => {
isPreconfigured: false,
isSystemAction: false as const,
isDeprecated: false,
name: 'My GenAI Connector',
name: 'My OpenAI Connector',
config: {
apiProvider,
apiUrl: DEFAULT_URL,
},
};
render(
<GenerativeAiParamsFields
<ParamsFields
actionParams={actionParams}
actionConnector={actionConnector}
editAction={editAction}
@ -104,7 +104,7 @@ describe('Gen AI Params Fields renders', () => {
const editAction = jest.fn();
const errors = {};
render(
<GenerativeAiParamsFields
<ParamsFields
actionParams={actionParams}
editAction={editAction}
index={0}
@ -120,7 +120,7 @@ describe('Gen AI Params Fields renders', () => {
const editAction = jest.fn();
const errors = {};
const { getByTestId } = render(
<GenerativeAiParamsFields
<ParamsFields
actionParams={{
subAction: SUB_ACTION.RUN,
subActionParams: {

View file

@ -12,13 +12,11 @@ import {
ActionConnectorMode,
JsonEditorWithMessageVariables,
} from '@kbn/triggers-actions-ui-plugin/public';
import { OpenAiProviderType, SUB_ACTION } from '../../../common/openai/constants';
import { DEFAULT_BODY, DEFAULT_BODY_AZURE } from './constants';
import { OpenAiProviderType, SUB_ACTION } from '../../../common/gen_ai/constants';
import { GenerativeAiActionConnector, GenerativeAiActionParams } from './types';
import { OpenAIActionConnector, ActionParams } from './types';
const GenerativeAiParamsFields: React.FunctionComponent<
ActionParamsProps<GenerativeAiActionParams>
> = ({
const ParamsFields: React.FunctionComponent<ActionParamsProps<ActionParams>> = ({
actionConnector,
actionParams,
editAction,
@ -31,7 +29,7 @@ const GenerativeAiParamsFields: React.FunctionComponent<
const { body } = subActionParams ?? {};
const typedActionConnector = actionConnector as unknown as GenerativeAiActionConnector;
const typedActionConnector = actionConnector as unknown as OpenAIActionConnector;
const isTest = useMemo(() => executionMode === ActionConnectorMode.Test, [executionMode]);
@ -55,7 +53,7 @@ const GenerativeAiParamsFields: React.FunctionComponent<
}, [typedActionConnector?.config?.apiProvider, editAction, index, subActionParams]);
const editSubActionParams = useCallback(
(params: GenerativeAiActionParams['subActionParams']) => {
(params: ActionParams['subActionParams']) => {
editAction('subActionParams', { ...subActionParams, ...params }, index);
},
[editAction, index, subActionParams]
@ -87,4 +85,4 @@ const GenerativeAiParamsFields: React.FunctionComponent<
};
// eslint-disable-next-line import/no-default-export
export { GenerativeAiParamsFields as default };
export { ParamsFields as default };

View file

@ -39,7 +39,7 @@ export const API_PROVIDER_LABEL = i18n.translate(
}
);
export const OPEN_AI = i18n.translate('xpack.stackConnectors.components.genAi.openAi', {
export const OPENAI = i18n.translate('xpack.stackConnectors.components.genAi.openAi', {
defaultMessage: 'OpenAI',
});
@ -104,6 +104,6 @@ export const USAGE_DASHBOARD_LINK = (apiProvider: string, connectorName: string)
export const GET_DASHBOARD_API_ERROR = i18n.translate(
'xpack.stackConnectors.components.genAi.error.dashboardApiError',
{
defaultMessage: 'Error finding Generative AI Token Usage Dashboard.',
defaultMessage: 'Error finding OpenAI Token Usage Dashboard.',
}
);

View file

@ -7,29 +7,22 @@
import { ActionTypeModel as ConnectorTypeModel } from '@kbn/triggers-actions-ui-plugin/public';
import { UserConfiguredActionConnector } from '@kbn/triggers-actions-ui-plugin/public/types';
import { OpenAiProviderType, SUB_ACTION } from '../../../common/gen_ai/constants';
import { RunActionParams } from '../../../common/gen_ai/types';
import { OpenAiProviderType, SUB_ACTION } from '../../../common/openai/constants';
import { RunActionParams } from '../../../common/openai/types';
export interface GenerativeAiActionParams {
export interface ActionParams {
subAction: SUB_ACTION.RUN | SUB_ACTION.TEST;
subActionParams: RunActionParams;
}
export interface GenerativeAiConfig {
export interface Config {
apiProvider: OpenAiProviderType;
apiUrl: string;
}
export interface GenerativeAiSecrets {
export interface Secrets {
apiKey: string;
}
export type GenerativeAiConnector = ConnectorTypeModel<
GenerativeAiConfig,
GenerativeAiSecrets,
GenerativeAiActionParams
>;
export type GenerativeAiActionConnector = UserConfiguredActionConnector<
GenerativeAiConfig,
GenerativeAiSecrets
>;
export type OpenAIConnector = ConnectorTypeModel<Config, Secrets, ActionParams>;
export type OpenAIActionConnector = UserConfiguredActionConnector<Config, Secrets>;

View file

@ -123,7 +123,7 @@ describe('useGetDashboard_function', () => {
await waitForNextUpdate();
expect(result.current.isLoading).toBe(false);
expect(mockToasts.addDanger).toHaveBeenCalledWith({
title: 'Error finding Generative AI Token Usage Dashboard.',
title: 'Error finding OpenAI Token Usage Dashboard.',
text: 'Error fetching dashboard',
});
});

View file

@ -10,7 +10,7 @@ import {
SubActionConnectorType,
ValidatorType,
} from '@kbn/actions-plugin/server/sub_action_framework/types';
import { GeneralConnectorFeatureId } from '@kbn/actions-plugin/common';
import { GenerativeAIConnectorFeatureId } from '@kbn/actions-plugin/common';
import { urlAllowListValidator } from '@kbn/actions-plugin/server';
import { ValidatorServices } from '@kbn/actions-plugin/server/types';
import { assertURL } from '@kbn/actions-plugin/server/sub_action_framework/helpers/validators';
@ -29,7 +29,7 @@ export const getConnectorType = (): SubActionConnectorType<Config, Secrets> => (
secrets: SecretsSchema,
},
validators: [{ type: ValidatorType.CONFIG, validator: configValidator }],
supportedFeatureIds: [GeneralConnectorFeatureId],
supportedFeatureIds: [GenerativeAIConnectorFeatureId],
minimumLicenseRequired: 'enterprise' as const,
renderParameterTemplates,
});

View file

@ -17,7 +17,7 @@ import { getTinesConnectorType } from './tines';
import { getActionType as getTorqConnectorType } from './torq';
import { getConnectorType as getEmailConnectorType } from './email';
import { getConnectorType as getIndexConnectorType } from './es_index';
import { getConnectorType as getGenerativeAiConnectorType } from './gen_ai';
import { getConnectorType as getOpenAIConnectorType } from './openai';
import { getConnectorType as getBedrockConnectorType } from './bedrock';
import { getConnectorType as getPagerDutyConnectorType } from './pagerduty';
import { getConnectorType as getSwimlaneConnectorType } from './swimlane';
@ -101,7 +101,7 @@ export function registerConnectorTypes({
actions.registerSubActionConnectorType(getOpsgenieConnectorType());
actions.registerSubActionConnectorType(getTinesConnectorType());
actions.registerSubActionConnectorType(getGenerativeAiConnectorType());
actions.registerSubActionConnectorType(getOpenAIConnectorType());
actions.registerSubActionConnectorType(getBedrockConnectorType());
actions.registerSubActionConnectorType(getD3SecurityConnectorType());
}

View file

@ -9,7 +9,7 @@ import { DashboardAttributes } from '@kbn/dashboard-plugin/common';
import { v4 as uuidv4 } from 'uuid';
import { SavedObject } from '@kbn/core-saved-objects-common/src/server_types';
export const dashboardTitle = `Generative AI Token Usage`;
export const dashboardTitle = `OpenAI Token Usage`;
export const getDashboard = (dashboardId: string): SavedObject<DashboardAttributes> => {
const ids: Record<string, string> = {
@ -125,7 +125,7 @@ export const getDashboard = (dashboardId: string): SavedObject<DashboardAttribut
yLeft: 0,
yRight: 0,
},
yTitle: 'Sum of GenAi Completion + Prompt Tokens',
yTitle: 'Sum of OpenAI Completion + Prompt Tokens',
axisTitlesVisibilitySettings: {
x: true,
yLeft: true,
@ -143,7 +143,7 @@ export const getDashboard = (dashboardId: string): SavedObject<DashboardAttribut
'475e8ca0-e78e-454a-8597-a5492f70dce3': {
columns: {
'0f9814ec-0964-4efa-93a3-c7f173df2483': {
label: 'GenAI Completion Tokens',
label: 'OpenAI Completion Tokens',
dataType: 'number',
operationType: 'sum',
sourceField: 'kibana.action.execution.gen_ai.usage.completion_tokens',
@ -177,7 +177,7 @@ export const getDashboard = (dashboardId: string): SavedObject<DashboardAttribut
includeIsRegex: false,
excludeIsRegex: false,
orderAgg: {
label: 'Sum of kibana.action.execution.gen_ai.usage.total_tokens',
label: 'Sum of kibana.action.execution.openai.usage.total_tokens',
dataType: 'number',
operationType: 'sum',
sourceField: 'kibana.action.execution.gen_ai.usage.total_tokens',
@ -192,7 +192,7 @@ export const getDashboard = (dashboardId: string): SavedObject<DashboardAttribut
customLabel: true,
},
'b0e390e4-d754-4eb4-9fcc-4347dadda394': {
label: 'GenAi Prompt Tokens',
label: 'OpenAI Prompt Tokens',
dataType: 'number',
operationType: 'sum',
sourceField: 'kibana.action.execution.gen_ai.usage.prompt_tokens',
@ -334,7 +334,7 @@ export const getDashboard = (dashboardId: string): SavedObject<DashboardAttribut
customLabel: true,
},
'b0e390e4-d754-4eb4-9fcc-4347dadda394': {
label: 'Sum of GenAI Total Tokens',
label: 'Sum of OpenAI Total Tokens',
dataType: 'number',
operationType: 'sum',
sourceField: 'kibana.action.execution.gen_ai.usage.total_tokens',

View file

@ -9,9 +9,9 @@ import { actionsConfigMock } from '@kbn/actions-plugin/server/actions_config.moc
import { ActionsConfigurationUtilities } from '@kbn/actions-plugin/server/actions_config';
import axios from 'axios';
import { configValidator, getConnectorType } from '.';
import { Config, Secrets } from '../../../common/gen_ai/types';
import { Config, Secrets } from '../../../common/openai/types';
import { SubActionConnectorType } from '@kbn/actions-plugin/server/sub_action_framework/types';
import { DEFAULT_OPENAI_MODEL, OpenAiProviderType } from '../../../common/gen_ai/constants';
import { DEFAULT_OPENAI_MODEL, OpenAiProviderType } from '../../../common/openai/constants';
jest.mock('axios');
jest.mock('@kbn/actions-plugin/server/lib/axios_utils', () => {
@ -30,12 +30,12 @@ axios.create = jest.fn(() => axios);
let connectorType: SubActionConnectorType<Config, Secrets>;
let configurationUtilities: jest.Mocked<ActionsConfigurationUtilities>;
describe('Generative AI Connector', () => {
describe('OpenAI Connector', () => {
beforeEach(() => {
configurationUtilities = actionsConfigMock.create();
connectorType = getConnectorType();
});
test('exposes the connector as `Generative AI` with id `.gen-ai`', () => {
test('exposes the connector as `OpenAI` with id `.gen-ai`', () => {
expect(connectorType.id).toEqual('.gen-ai');
expect(connectorType.name).toEqual('OpenAI');
});
@ -59,7 +59,7 @@ describe('Generative AI Connector', () => {
expect(() => {
configValidator(config, { configurationUtilities });
}).toThrowErrorMatchingInlineSnapshot(
'"Error configuring Generative AI action: Error: URL Error: Invalid URL: example.com/do-something"'
'"Error configuring OpenAI action: Error: URL Error: Invalid URL: example.com/do-something"'
);
});
@ -72,7 +72,7 @@ describe('Generative AI Connector', () => {
expect(() => {
configValidator(config, { configurationUtilities });
}).toThrowErrorMatchingInlineSnapshot(
'"Error configuring Generative AI action: Error: API Provider is not supported"'
'"Error configuring OpenAI action: Error: API Provider is not supported"'
);
});
@ -85,7 +85,7 @@ describe('Generative AI Connector', () => {
expect(() => {
configValidator(config, { configurationUtilities });
}).toThrowErrorMatchingInlineSnapshot(
'"Error configuring Generative AI action: Error: API Provider is not supported: bad-one"'
'"Error configuring OpenAI action: Error: API Provider is not supported: bad-one"'
);
});
@ -106,7 +106,7 @@ describe('Generative AI Connector', () => {
expect(() => {
configValidator(config, { configurationUtilities: configUtils });
}).toThrowErrorMatchingInlineSnapshot(
`"Error configuring Generative AI action: Error: error validating url: target url is not present in allowedHosts"`
`"Error configuring OpenAI action: Error: error validating url: target url is not present in allowedHosts"`
);
});
});

View file

@ -10,30 +10,30 @@ import {
SubActionConnectorType,
ValidatorType,
} from '@kbn/actions-plugin/server/sub_action_framework/types';
import { GeneralConnectorFeatureId } from '@kbn/actions-plugin/common';
import { GenerativeAIConnectorFeatureId } from '@kbn/actions-plugin/common';
import { urlAllowListValidator } from '@kbn/actions-plugin/server';
import { ValidatorServices } from '@kbn/actions-plugin/server/types';
import { assertURL } from '@kbn/actions-plugin/server/sub_action_framework/helpers/validators';
import {
GEN_AI_CONNECTOR_ID,
OPEN_AI_TITLE,
OPENAI_CONNECTOR_ID,
OPENAI_TITLE,
OpenAiProviderType,
} from '../../../common/gen_ai/constants';
import { ConfigSchema, SecretsSchema } from '../../../common/gen_ai/schema';
import { Config, Secrets } from '../../../common/gen_ai/types';
import { GenAiConnector } from './gen_ai';
} from '../../../common/openai/constants';
import { ConfigSchema, SecretsSchema } from '../../../common/openai/schema';
import { Config, Secrets } from '../../../common/openai/types';
import { OpenAIConnector } from './openai';
import { renderParameterTemplates } from './render';
export const getConnectorType = (): SubActionConnectorType<Config, Secrets> => ({
id: GEN_AI_CONNECTOR_ID,
name: OPEN_AI_TITLE,
Service: GenAiConnector,
id: OPENAI_CONNECTOR_ID,
name: OPENAI_TITLE,
Service: OpenAIConnector,
schema: {
config: ConfigSchema,
secrets: SecretsSchema,
},
validators: [{ type: ValidatorType.CONFIG, validator: configValidator }],
supportedFeatureIds: [GeneralConnectorFeatureId],
supportedFeatureIds: [GenerativeAIConnectorFeatureId],
minimumLicenseRequired: 'enterprise' as const,
renderParameterTemplates,
});
@ -57,7 +57,7 @@ export const configValidator = (configObject: Config, validatorServices: Validat
} catch (err) {
throw new Error(
i18n.translate('xpack.stackConnectors.genAi.configurationErrorApiProvider', {
defaultMessage: 'Error configuring Generative AI action: {err}',
defaultMessage: 'Error configuring OpenAI action: {err}',
values: {
err,
},

View file

@ -14,7 +14,7 @@ import {
AZURE_OPENAI_CHAT_URL,
AZURE_OPENAI_COMPLETIONS_URL,
AZURE_OPENAI_COMPLETIONS_EXTENSIONS_URL,
} from '../../../../common/gen_ai/constants';
} from '../../../../common/openai/constants';
describe('Azure Open AI Utils', () => {
const chatUrl =

View file

@ -9,7 +9,7 @@ import {
AZURE_OPENAI_CHAT_URL,
AZURE_OPENAI_COMPLETIONS_URL,
AZURE_OPENAI_COMPLETIONS_EXTENSIONS_URL,
} from '../../../../common/gen_ai/constants';
} from '../../../../common/openai/constants';
const APIS_ALLOWING_STREAMING = new Set<string>([
AZURE_OPENAI_CHAT_URL,

View file

@ -10,7 +10,7 @@ import {
DEFAULT_OPENAI_MODEL,
OPENAI_CHAT_URL,
OPENAI_LEGACY_COMPLETION_URL,
} from '../../../../common/gen_ai/constants';
} from '../../../../common/openai/constants';
describe('Open AI Utils', () => {
describe('sanitizeRequest', () => {

View file

@ -5,7 +5,7 @@
* 2.0.
*/
import { OPENAI_CHAT_URL, OPENAI_LEGACY_COMPLETION_URL } from '../../../../common/gen_ai/constants';
import { OPENAI_CHAT_URL, OPENAI_LEGACY_COMPLETION_URL } from '../../../../common/openai/constants';
const APIS_ALLOWING_STREAMING = new Set<string>([OPENAI_CHAT_URL, OPENAI_LEGACY_COMPLETION_URL]);

View file

@ -10,7 +10,7 @@ import {
DEFAULT_OPENAI_MODEL,
OpenAiProviderType,
OPENAI_CHAT_URL,
} from '../../../../common/gen_ai/constants';
} from '../../../../common/openai/constants';
import {
sanitizeRequest as openAiSanitizeRequest,
getRequestWithStreamOption as openAiGetRequestWithStreamOption,

View file

@ -7,7 +7,7 @@
import { AxiosResponse, ResponseType } from 'axios';
import { IncomingMessage } from 'http';
import { OpenAiProviderType } from '../../../../common/gen_ai/constants';
import { OpenAiProviderType } from '../../../../common/openai/constants';
import {
sanitizeRequest as openAiSanitizeRequest,
getRequestWithStreamOption as openAiGetRequestWithStreamOption,

View file

@ -5,20 +5,20 @@
* 2.0.
*/
import { GenAiConnector } from './gen_ai';
import { OpenAIConnector } from './openai';
import { actionsConfigMock } from '@kbn/actions-plugin/server/actions_config.mock';
import {
DEFAULT_OPENAI_MODEL,
GEN_AI_CONNECTOR_ID,
OPENAI_CONNECTOR_ID,
OpenAiProviderType,
} from '../../../common/gen_ai/constants';
} from '../../../common/openai/constants';
import { loggingSystemMock } from '@kbn/core-logging-server-mocks';
import { actionsMock } from '@kbn/actions-plugin/server/mocks';
import { RunActionResponseSchema, StreamingResponseSchema } from '../../../common/gen_ai/schema';
import { RunActionResponseSchema, StreamingResponseSchema } from '../../../common/openai/schema';
import { initDashboard } from './create_dashboard';
jest.mock('./create_dashboard');
describe('GenAiConnector', () => {
describe('OpenAIConnector', () => {
let mockRequest: jest.Mock;
let mockError: jest.Mock;
const mockResponseString = 'Hello! How can I assist you today?';
@ -46,9 +46,9 @@ describe('GenAiConnector', () => {
});
describe('OpenAI', () => {
const connector = new GenAiConnector({
const connector = new OpenAIConnector({
configurationUtilities: actionsConfigMock.create(),
connector: { id: '1', type: GEN_AI_CONNECTOR_ID },
connector: { id: '1', type: OPENAI_CONNECTOR_ID },
config: {
apiUrl: 'https://api.openai.com/v1/chat/completions',
apiProvider: OpenAiProviderType.OpenAi,
@ -285,9 +285,9 @@ describe('GenAiConnector', () => {
});
describe('AzureAI', () => {
const connector = new GenAiConnector({
const connector = new OpenAIConnector({
configurationUtilities: actionsConfigMock.create(),
connector: { id: '1', type: GEN_AI_CONNECTOR_ID },
connector: { id: '1', type: OPENAI_CONNECTOR_ID },
config: {
apiUrl:
'https://My-test-resource-123.openai.azure.com/openai/deployments/NEW-DEPLOYMENT-321/chat/completions?api-version=2023-05-15',
@ -455,9 +455,9 @@ describe('GenAiConnector', () => {
});
describe('Token dashboard', () => {
const connector = new GenAiConnector({
const connector = new OpenAIConnector({
configurationUtilities: actionsConfigMock.create(),
connector: { id: '1', type: GEN_AI_CONNECTOR_ID },
connector: { id: '1', type: OPENAI_CONNECTOR_ID },
config: { apiUrl: 'https://example.com/api', apiProvider: OpenAiProviderType.AzureAi },
secrets: { apiKey: '123' },
logger: loggingSystemMock.createLogger(),

View file

@ -7,7 +7,6 @@
import { ServiceParams, SubActionConnector } from '@kbn/actions-plugin/server';
import type { AxiosError } from 'axios';
import { initDashboard } from './create_dashboard';
import {
RunActionParamsSchema,
RunActionResponseSchema,
@ -15,21 +14,22 @@ import {
StreamActionParamsSchema,
StreamingResponseSchema,
InvokeAIActionParamsSchema,
} from '../../../common/gen_ai/schema';
} from '../../../common/openai/schema';
import type {
Config,
Secrets,
RunActionParams,
RunActionResponse,
StreamActionParams,
} from '../../../common/gen_ai/types';
import { SUB_ACTION } from '../../../common/gen_ai/constants';
} from '../../../common/openai/types';
import { SUB_ACTION } from '../../../common/openai/constants';
import {
DashboardActionParams,
DashboardActionResponse,
InvokeAIActionParams,
InvokeAIActionResponse,
} from '../../../common/gen_ai/types';
} from '../../../common/openai/types';
import { initDashboard } from './create_dashboard';
import {
getAxiosOptions,
getRequestWithStreamOption,
@ -37,7 +37,7 @@ import {
sanitizeRequest,
} from './lib/utils';
export class GenAiConnector extends SubActionConnector<Config, Secrets> {
export class OpenAIConnector extends SubActionConnector<Config, Secrets> {
private url;
private provider;
private key;

View file

@ -17,7 +17,7 @@ const params = {
const variables = { domain: 'm0zepcuuu2' };
describe('GenAI - renderParameterTemplates', () => {
describe('OpenAI - renderParameterTemplates', () => {
it('should not render body on test action', () => {
const testParams = { subAction: 'test', subActionParams: { body: 'test_json' } };
const result = renderParameterTemplates(testParams, variables);

View file

@ -8,7 +8,7 @@
import { ExecutorParams } from '@kbn/actions-plugin/server/sub_action_framework/types';
import { renderMustacheString } from '@kbn/actions-plugin/server/lib/mustache_renderer';
import { RenderParameterTemplates } from '@kbn/actions-plugin/server/types';
import { SUB_ACTION } from '../../../common/gen_ai/constants';
import { SUB_ACTION } from '../../../common/openai/constants';
export const renderParameterTemplates: RenderParameterTemplates<ExecutorParams> = (
params,

View file

@ -7076,7 +7076,6 @@
"xpack.actions.availableConnectorFeatures.cases": "Cas",
"xpack.actions.availableConnectorFeatures.compatibility.alertingRules": "Règles d'alerting",
"xpack.actions.availableConnectorFeatures.compatibility.cases": "Cas",
"xpack.actions.availableConnectorFeatures.compatibility.general": "Général",
"xpack.actions.availableConnectorFeatures.securitySolution": "Solution de sécurité",
"xpack.actions.availableConnectorFeatures.uptime": "Uptime",
"xpack.actions.builtin.cases.jiraTitle": "Jira",
@ -39769,4 +39768,4 @@
"xpack.painlessLab.walkthroughButtonLabel": "Présentation",
"xpack.serverlessObservability.nav.getStarted": "Démarrer"
}
}
}

View file

@ -7092,7 +7092,6 @@
"xpack.actions.availableConnectorFeatures.cases": "ケース",
"xpack.actions.availableConnectorFeatures.compatibility.alertingRules": "アラートルール",
"xpack.actions.availableConnectorFeatures.compatibility.cases": "ケース",
"xpack.actions.availableConnectorFeatures.compatibility.general": "一般",
"xpack.actions.availableConnectorFeatures.securitySolution": "セキュリティソリューション",
"xpack.actions.availableConnectorFeatures.uptime": "アップタイム",
"xpack.actions.builtin.cases.jiraTitle": "Jira",
@ -39760,4 +39759,4 @@
"xpack.painlessLab.walkthroughButtonLabel": "実地検証",
"xpack.serverlessObservability.nav.getStarted": "使ってみる"
}
}
}

View file

@ -7091,7 +7091,6 @@
"xpack.actions.availableConnectorFeatures.cases": "案例",
"xpack.actions.availableConnectorFeatures.compatibility.alertingRules": "告警规则",
"xpack.actions.availableConnectorFeatures.compatibility.cases": "案例",
"xpack.actions.availableConnectorFeatures.compatibility.general": "常规",
"xpack.actions.availableConnectorFeatures.securitySolution": "安全解决方案",
"xpack.actions.availableConnectorFeatures.uptime": "运行时间",
"xpack.actions.builtin.cases.jiraTitle": "Jira",
@ -39754,4 +39753,4 @@
"xpack.painlessLab.walkthroughButtonLabel": "指导",
"xpack.serverlessObservability.nav.getStarted": "开始使用"
}
}
}

View file

@ -9,7 +9,7 @@ import http from 'http';
import { ProxyArgs, Simulator } from './simulator';
export class GenAiSimulator extends Simulator {
export class OpenAISimulator extends Simulator {
private readonly returnError: boolean;
constructor({ returnError = false, proxy }: { returnError?: boolean; proxy?: ProxyArgs }) {
@ -24,10 +24,10 @@ export class GenAiSimulator extends Simulator {
data: Record<string, unknown>
) {
if (this.returnError) {
return GenAiSimulator.sendErrorResponse(response);
return OpenAISimulator.sendErrorResponse(response);
}
return GenAiSimulator.sendResponse(response);
return OpenAISimulator.sendResponse(response);
}
private static sendResponse(response: http.ServerResponse) {

View file

@ -8,9 +8,9 @@
import expect from '@kbn/expect';
import {
GenAiSimulator,
OpenAISimulator,
genAiSuccessResponse,
} from '@kbn/actions-simulators-plugin/server/gen_ai_simulation';
} from '@kbn/actions-simulators-plugin/server/openai_simulation';
import { FtrProviderContext } from '../../../../../common/ftr_provider_context';
import { getUrlPrefix, ObjectRemover } from '../../../../../common/lib';
@ -51,7 +51,7 @@ export default function genAiTest({ getService }: FtrProviderContext) {
objectRemover.removeAll();
});
describe('action creation', () => {
const simulator = new GenAiSimulator({
const simulator = new OpenAISimulator({
returnError: false,
proxy: {
config: configService.get('kbnTestServer.serverArgs'),
@ -189,7 +189,7 @@ export default function genAiTest({ getService }: FtrProviderContext) {
statusCode: 400,
error: 'Bad Request',
message:
'error validating action type config: Error configuring Generative AI action: Error: error validating url: target url "http://genAi.mynonexistent.com" is not added to the Kibana config xpack.actions.allowedHosts',
'error validating action type config: Error configuring OpenAI action: Error: error validating url: target url "http://genAi.mynonexistent.com" is not added to the Kibana config xpack.actions.allowedHosts',
});
});
});
@ -217,7 +217,7 @@ export default function genAiTest({ getService }: FtrProviderContext) {
describe('executor', () => {
describe('validation', () => {
const simulator = new GenAiSimulator({
const simulator = new OpenAISimulator({
proxy: {
config: configService.get('kbnTestServer.serverArgs'),
},
@ -272,7 +272,7 @@ export default function genAiTest({ getService }: FtrProviderContext) {
describe('execution', () => {
describe('successful response simulator', () => {
const simulator = new GenAiSimulator({
const simulator = new OpenAISimulator({
proxy: {
config: configService.get('kbnTestServer.serverArgs'),
},
@ -313,7 +313,7 @@ export default function genAiTest({ getService }: FtrProviderContext) {
data: genAiSuccessResponse,
});
});
describe('gen ai dashboard', () => {
describe('OpenAI dashboard', () => {
const dashboardId = 'specific-dashboard-id-default';
it('should not create a dashboard when user does not have kibana event log permissions', async () => {
@ -377,7 +377,7 @@ export default function genAiTest({ getService }: FtrProviderContext) {
});
});
describe('non-default space simulator', () => {
const simulator = new GenAiSimulator({
const simulator = new OpenAISimulator({
proxy: {
config: configService.get('kbnTestServer.serverArgs'),
},
@ -428,7 +428,7 @@ export default function genAiTest({ getService }: FtrProviderContext) {
});
describe('error response simulator', () => {
const simulator = new GenAiSimulator({
const simulator = new OpenAISimulator({
returnError: true,
proxy: {
config: configService.get('kbnTestServer.serverArgs'),

View file

@ -39,7 +39,7 @@ export default function connectorsTests({ loadTestFile, getService }: FtrProvide
loadTestFile(require.resolve('./connector_types/xmatters'));
loadTestFile(require.resolve('./connector_types/tines'));
loadTestFile(require.resolve('./connector_types/torq'));
loadTestFile(require.resolve('./connector_types/gen_ai'));
loadTestFile(require.resolve('./connector_types/openai'));
loadTestFile(require.resolve('./connector_types/d3security'));
loadTestFile(require.resolve('./connector_types/bedrock'));
loadTestFile(require.resolve('./create'));

View file

@ -21,13 +21,13 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
`"content": "You are a cyber security analyst using Elastic Security. I would like you to evaluate the event below and format your output neatly in markdown syntax. Add your description, an accuracy rating, and a threat rating."\n` +
`}]`;
describe('generative ai connector', function () {
describe('OpenAI connector', function () {
beforeEach(async () => {
await pageObjects.common.navigateToApp('connectors');
await pageObjects.header.waitUntilLoadingHasFinished();
});
it('generative ai connector screenshots', async () => {
it('OpenAI connector screenshots', async () => {
await pageObjects.common.navigateToApp('connectors');
await pageObjects.header.waitUntilLoadingHasFinished();
await actions.common.openNewConnectorForm('gen-ai');

View file

@ -20,7 +20,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) {
await pageObjects.header.waitUntilLoadingHasFinished();
});
it('generative ai connector screenshots', async () => {
it('xmatters connector screenshots', async () => {
await pageObjects.common.navigateToApp('connectors');
await pageObjects.header.waitUntilLoadingHasFinished();
await actions.common.openNewConnectorForm('xmatters');