diff --git a/.buildkite/ftr_oblt_serverless_configs.yml b/.buildkite/ftr_oblt_serverless_configs.yml index 33ff3a3337c56..de6ad30af22cd 100644 --- a/.buildkite/ftr_oblt_serverless_configs.yml +++ b/.buildkite/ftr_oblt_serverless_configs.yml @@ -14,7 +14,6 @@ enabled: - x-pack/test_serverless/api_integration/test_suites/observability/common_configs/config.group1.ts - x-pack/test_serverless/api_integration/test_suites/observability/common_configs/config.logs_essentials.group1.ts - x-pack/test_serverless/api_integration/test_suites/observability/fleet/config.ts - - x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/config.ts - x-pack/test_serverless/functional/test_suites/observability/config.ts - x-pack/test_serverless/functional/test_suites/observability/config.logs_essentials.ts - x-pack/test_serverless/functional/test_suites/observability/config.examples.ts diff --git a/.buildkite/ftr_oblt_stateful_configs.yml b/.buildkite/ftr_oblt_stateful_configs.yml index d27dc531a92e9..7b1d9df53aad3 100644 --- a/.buildkite/ftr_oblt_stateful_configs.yml +++ b/.buildkite/ftr_oblt_stateful_configs.yml @@ -40,7 +40,6 @@ enabled: - x-pack/test/observability_functional/with_rac_write.config.ts - x-pack/test/observability_onboarding_api_integration/basic/config.ts - x-pack/test/observability_onboarding_api_integration/cloud/config.ts - - x-pack/test/observability_ai_assistant_api_integration/enterprise/config.ts - x-pack/test/observability_ai_assistant_functional/enterprise/config.ts - x-pack/solutions/observability/test/api_integration/profiling/cloud/config.ts - x-pack/test/functional/apps/apm/config.ts diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 87347ba42793d..a6bdbbc8acc3b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1347,9 +1347,7 @@ src/platform/plugins/shared/discover/public/context_awareness/profile_providers/ /x-pack/test_serverless/api_integration/test_suites/common/data_usage @elastic/kibana-management /x-pack/test_serverless/functional/test_suites/common/data_usage @elastic/kibana-management /x-pack/test_serverless/functional/page_objects/svl_data_usage.ts @elastic/kibana-management -/x-pack/test/observability_ai_assistant_api_integration @elastic/obs-ai-assistant /x-pack/test/observability_ai_assistant_functional @elastic/obs-ai-assistant -/x-pack/test_serverless/**/test_suites/observability/ai_assistant @elastic/obs-ai-assistant /x-pack/test/functional/es_archives/observability/ai_assistant @elastic/obs-ai-assistant /x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant @elastic/obs-ai-assistant # Infra Obs diff --git a/.github/paths-labeller.yml b/.github/paths-labeller.yml index 00cc41418908d..1348dd1506dec 100644 --- a/.github/paths-labeller.yml +++ b/.github/paths-labeller.yml @@ -26,7 +26,6 @@ - 'Team:Obs AI Assistant': - 'x-pack/platform/plugins/shared/observability_ai_assistant/**/*.*' - 'x-pack/plugins/observability_solution/observability_ai_assistant_*/**/*.*' - - 'x-pack/test/observability_ai_assistant_api_integration/**/*.*' - 'x-pack/test/observability_ai_assistant_functional/**/*.*' - 'ci:project-deploy-observability': - 'packages/kbn-apm-*/**/*.*' diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/anonymization/anonymization.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/anonymization/anonymization.spec.ts index c9042b30ebb23..4fe82ee3b5d63 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/anonymization/anonymization.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/anonymization/anonymization.spec.ts @@ -6,10 +6,7 @@ */ import expect from '@kbn/expect'; import { MessageRole, type Message } from '@kbn/observability-ai-assistant-plugin/common'; -import { - LlmProxy, - createLlmProxy, -} from '../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { LlmProxy, createLlmProxy } from '../utils/create_llm_proxy'; import { setAdvancedSettings } from '../utils/advanced_settings'; import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context'; import { clearConversations } from '../utils/conversation'; diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/chat/chat.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/chat/chat.spec.ts index f9f001a95c8d1..159eb1a56bbaf 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/chat/chat.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/chat/chat.spec.ts @@ -9,10 +9,7 @@ import expect from '@kbn/expect'; import { MessageRole, type Message } from '@kbn/observability-ai-assistant-plugin/common'; import { PassThrough } from 'stream'; import { times } from 'lodash'; -import { - LlmProxy, - createLlmProxy, -} from '../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { createLlmProxy, LlmProxy } from '../utils/create_llm_proxy'; import { SupertestWithRoleScope } from '../../../../services/role_scoped_supertest'; import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context'; diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/complete.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/complete.spec.ts index f875f360af491..f2eddfc9c3856 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/complete.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/complete.spec.ts @@ -17,10 +17,7 @@ import { StreamingChatResponseEventType, } from '@kbn/observability-ai-assistant-plugin/common/conversation_complete'; import { ObservabilityAIAssistantScreenContextRequest } from '@kbn/observability-ai-assistant-plugin/common/types'; -import { - createLlmProxy, - LlmProxy, -} from '../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { createLlmProxy, LlmProxy } from '../utils/create_llm_proxy'; import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context'; import { SupertestWithRoleScope } from '../../../../services/role_scoped_supertest'; import { diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/alerts.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/alerts.spec.ts index 76f1ea4aaf251..ecb4c6dbc8c34 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/alerts.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/alerts.spec.ts @@ -11,10 +11,7 @@ import { InternalRequestHeader, RoleCredentials } from '@kbn/ftr-common-function import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace'; import { ApmRuleType } from '@kbn/rule-data-utils'; import { SearchAlertsResult } from '@kbn/alerts-ui-shared/src/common/apis/search_alerts/search_alerts'; -import { - LlmProxy, - createLlmProxy, -} from '../../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { LlmProxy, createLlmProxy } from '../../utils/create_llm_proxy'; import { getMessageAddedEvents, invokeChatCompleteWithFunctionRequest, diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/context.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/context.spec.ts index c99038201698c..84b896fe397ae 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/context.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/context.spec.ts @@ -17,11 +17,7 @@ import { CONTEXT_FUNCTION_NAME } from '@kbn/observability-ai-assistant-plugin/se import { Instruction } from '@kbn/observability-ai-assistant-plugin/common/types'; import { RecalledSuggestion } from '@kbn/observability-ai-assistant-plugin/server/functions/context/utils/recall_and_score'; import { SCORE_SUGGESTIONS_FUNCTION_NAME } from '@kbn/observability-ai-assistant-plugin/server/functions/context/utils/score_suggestions'; -import { - KnowledgeBaseDocument, - LlmProxy, - createLlmProxy, -} from '../../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { KnowledgeBaseDocument, LlmProxy, createLlmProxy } from '../../utils/create_llm_proxy'; import type { DeploymentAgnosticFtrProviderContext } from '../../../../../ftr_provider_context'; import { addSampleDocsToInternalKb, clearKnowledgeBase } from '../../utils/knowledge_base'; import { chatComplete } from '../../utils/conversation'; diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/elasticsearch.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/elasticsearch.spec.ts index 9aa3f2b375e8a..17331ba832d9d 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/elasticsearch.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/elasticsearch.spec.ts @@ -10,10 +10,7 @@ import expect from '@kbn/expect'; import { apm, timerange } from '@kbn/apm-synthtrace-client'; import { ApmSynthtraceEsClient } from '@kbn/apm-synthtrace'; import { ELASTICSEARCH_FUNCTION_NAME } from '@kbn/observability-ai-assistant-plugin/server/functions/elasticsearch'; -import { - LlmProxy, - createLlmProxy, -} from '../../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { LlmProxy, createLlmProxy } from '../../utils/create_llm_proxy'; import { getMessageAddedEvents, invokeChatCompleteWithFunctionRequest, diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/execute_query.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/execute_query.spec.ts index 266f4650df4fe..320da35ea016f 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/execute_query.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/execute_query.spec.ts @@ -11,10 +11,7 @@ import { LogsSynthtraceEsClient } from '@kbn/apm-synthtrace'; import { last } from 'lodash'; import { ChatCompletionStreamParams } from 'openai/lib/ChatCompletionStream'; import { type EsqlToRecords } from '@elastic/elasticsearch/lib/helpers'; -import { - LlmProxy, - createLlmProxy, -} from '../../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { LlmProxy, createLlmProxy } from '../../utils/create_llm_proxy'; import { chatComplete } from '../../utils/conversation'; import type { DeploymentAgnosticFtrProviderContext } from '../../../../../ftr_provider_context'; import { createSimpleSyntheticLogs } from '../../synthtrace_scenarios/simple_logs'; diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/get_alerts_dataset_info.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/get_alerts_dataset_info.spec.ts index d04052c2f8c99..459fbbde90479 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/get_alerts_dataset_info.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/get_alerts_dataset_info.spec.ts @@ -13,11 +13,7 @@ import { InternalRequestHeader, RoleCredentials } from '@kbn/ftr-common-function import { last } from 'lodash'; import { GET_RELEVANT_FIELD_NAMES_SYSTEM_MESSAGE } from '@kbn/observability-ai-assistant-plugin/server/functions/get_dataset_info/get_relevant_field_names'; import { ChatCompletionStreamParams } from 'openai/lib/ChatCompletionStream'; -import { - LlmProxy, - RelevantField, - createLlmProxy, -} from '../../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { LlmProxy, RelevantField, createLlmProxy } from '../../utils/create_llm_proxy'; import { createSyntheticApmData } from '../../synthtrace_scenarios/create_synthetic_apm_data'; import { chatComplete, getSystemMessage, systemMessageSorted } from '../../utils/conversation'; import type { DeploymentAgnosticFtrProviderContext } from '../../../../../ftr_provider_context'; diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/get_dataset_info.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/get_dataset_info.spec.ts index 6a9a72788f856..35f0483ecd887 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/get_dataset_info.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/get_dataset_info.spec.ts @@ -11,11 +11,7 @@ import { LogsSynthtraceEsClient } from '@kbn/apm-synthtrace'; import { last } from 'lodash'; import { GET_RELEVANT_FIELD_NAMES_SYSTEM_MESSAGE } from '@kbn/observability-ai-assistant-plugin/server/functions/get_dataset_info/get_relevant_field_names'; import { ChatCompletionStreamParams } from 'openai/lib/ChatCompletionStream'; -import { - LlmProxy, - RelevantField, - createLlmProxy, -} from '../../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { LlmProxy, RelevantField, createLlmProxy } from '../../utils/create_llm_proxy'; import { chatComplete, getSystemMessage, systemMessageSorted } from '../../utils/conversation'; import type { DeploymentAgnosticFtrProviderContext } from '../../../../../ftr_provider_context'; import { createSimpleSyntheticLogs } from '../../synthtrace_scenarios/simple_logs'; diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/retrieve_elastic_doc.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/retrieve_elastic_doc.spec.ts index 4c8f5000b9a97..bc273ad9584a9 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/retrieve_elastic_doc.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/retrieve_elastic_doc.spec.ts @@ -10,10 +10,7 @@ import { ChatCompletionStreamParams } from 'openai/lib/ChatCompletionStream'; import { ChatCompletionMessageParam } from 'openai/resources'; import { last } from 'lodash'; import { MessageAddEvent, MessageRole } from '@kbn/observability-ai-assistant-plugin/common'; -import { - LlmProxy, - createLlmProxy, -} from '../../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { LlmProxy, createLlmProxy } from '../../utils/create_llm_proxy'; import { chatComplete } from '../../utils/conversation'; import type { DeploymentAgnosticFtrProviderContext } from '../../../../../ftr_provider_context'; import { installProductDoc, uninstallProductDoc } from '../../utils/product_doc_base'; diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/summarize.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/summarize.spec.ts index 6287b26b69ef1..8d4d468226a0e 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/summarize.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/summarize.spec.ts @@ -7,10 +7,7 @@ import { MessageRole } from '@kbn/observability-ai-assistant-plugin/common'; import expect from '@kbn/expect'; -import { - LlmProxy, - createLlmProxy, -} from '../../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { LlmProxy, createLlmProxy } from '../../utils/create_llm_proxy'; import type { DeploymentAgnosticFtrProviderContext } from '../../../../../ftr_provider_context'; import { invokeChatCompleteWithFunctionRequest } from '../../utils/conversation'; import { diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/title_conversation.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/title_conversation.spec.ts index b13c3bdf3d93a..734c1a058ef0a 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/title_conversation.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/title_conversation.spec.ts @@ -12,10 +12,7 @@ import { TITLE_SYSTEM_MESSAGE, } from '@kbn/observability-ai-assistant-plugin/server/service/client/operators/get_generated_title'; import { MessageRole } from '@kbn/observability-ai-assistant-plugin/common'; -import { - LlmProxy, - createLlmProxy, -} from '../../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { LlmProxy, createLlmProxy } from '../../utils/create_llm_proxy'; import { chatComplete, clearConversations } from '../../utils/conversation'; import type { DeploymentAgnosticFtrProviderContext } from '../../../../../ftr_provider_context'; diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/visualize_query.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/visualize_query.spec.ts index 59ba78627d4da..e872e6e178fd5 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/visualize_query.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/complete/functions/visualize_query.spec.ts @@ -8,10 +8,7 @@ import expect from '@kbn/expect'; import { MessageAddEvent, MessageRole } from '@kbn/observability-ai-assistant-plugin/common'; import { VisualizeESQLUserIntention } from '@kbn/observability-ai-assistant-plugin/common/functions/visualize_esql'; -import { - LlmProxy, - createLlmProxy, -} from '../../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { LlmProxy, createLlmProxy } from '../../utils/create_llm_proxy'; import { getMessageAddedEvents, invokeChatCompleteWithFunctionRequest, diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/knowledge_base/knowledge_base_user_instructions.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/knowledge_base/knowledge_base_user_instructions.spec.ts index ec1e58229be67..d620bd113a08b 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/knowledge_base/knowledge_base_user_instructions.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/knowledge_base/knowledge_base_user_instructions.spec.ts @@ -13,10 +13,7 @@ import { Instruction } from '@kbn/observability-ai-assistant-plugin/common/types import pRetry from 'p-retry'; import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context'; import { clearKnowledgeBase } from '../utils/knowledge_base'; -import { - LlmProxy, - createLlmProxy, -} from '../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { LlmProxy, createLlmProxy } from '../utils/create_llm_proxy'; import { clearConversations, getConversationCreatedEvent } from '../utils/conversation'; import { deployTinyElserAndSetupKb, diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/public_complete/public_complete.spec.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/public_complete/public_complete.spec.ts index 079caef139d50..da74483af47db 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/public_complete/public_complete.spec.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/public_complete/public_complete.spec.ts @@ -11,10 +11,7 @@ import { type Message, } from '@kbn/observability-ai-assistant-plugin/common'; import { type Instruction } from '@kbn/observability-ai-assistant-plugin/common/types'; -import { - createLlmProxy, - LlmProxy, -} from '../../../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { createLlmProxy, LlmProxy } from '../utils/create_llm_proxy'; import type { DeploymentAgnosticFtrProviderContext } from '../../../../ftr_provider_context'; export default function ApiTest({ getService }: DeploymentAgnosticFtrProviderContext) { diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/create_llm_proxy.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/create_llm_proxy.ts similarity index 100% rename from x-pack/test/observability_ai_assistant_api_integration/common/create_llm_proxy.ts rename to x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/create_llm_proxy.ts diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/create_openai_chunk.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/create_openai_chunk.ts similarity index 100% rename from x-pack/test/observability_ai_assistant_api_integration/common/create_openai_chunk.ts rename to x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/create_openai_chunk.ts diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/observability_ai_assistant_api_client.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/observability_ai_assistant_api_client.ts similarity index 100% rename from x-pack/test/observability_ai_assistant_api_integration/common/observability_ai_assistant_api_client.ts rename to x-pack/test/api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/observability_ai_assistant_api_client.ts diff --git a/x-pack/test/functional/apps/search_playground/playground_overview.ess.ts b/x-pack/test/functional/apps/search_playground/playground_overview.ess.ts index 909158bb82b46..419bed905f9a2 100644 --- a/x-pack/test/functional/apps/search_playground/playground_overview.ess.ts +++ b/x-pack/test/functional/apps/search_playground/playground_overview.ess.ts @@ -12,7 +12,7 @@ import { MachineLearningCommonAPIProvider } from '../../services/ml/common_api'; import { createLlmProxy, LlmProxy, -} from '../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +} from '../../../api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/create_llm_proxy'; const esArchiveIndex = 'src/platform/test/api_integration/fixtures/es_archiver/index_patterns/basic_index'; diff --git a/x-pack/test/functional/apps/search_playground/utils/create_openai_connector.ts b/x-pack/test/functional/apps/search_playground/utils/create_openai_connector.ts index ed8c81eda0491..ddbe83605454f 100644 --- a/x-pack/test/functional/apps/search_playground/utils/create_openai_connector.ts +++ b/x-pack/test/functional/apps/search_playground/utils/create_openai_connector.ts @@ -6,7 +6,7 @@ */ import type SuperTest from 'supertest'; -import { LlmProxy } from '../../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { LlmProxy } from '../../../../api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/create_llm_proxy'; export async function createOpenAIConnector({ supertest, diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/action_connectors.ts b/x-pack/test/observability_ai_assistant_api_integration/common/action_connectors.ts deleted file mode 100644 index b577ef03c5eb6..0000000000000 --- a/x-pack/test/observability_ai_assistant_api_integration/common/action_connectors.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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 { ToolingLog } from '@kbn/tooling-log'; -import { Agent } from 'supertest'; - -export async function deleteActionConnector({ - supertest, - connectorId, - log, -}: { - supertest: Agent; - connectorId: string; - log: ToolingLog; -}) { - try { - await supertest - .delete(`/api/actions/connector/${connectorId}`) - .set('kbn-xsrf', 'foo') - .expect(204); - } catch (e) { - log.error(`Failed to delete action connector with id ${connectorId} due to: ${e}`); - throw e; - } -} - -export async function createProxyActionConnector({ - log, - supertest, - port, -}: { - log: ToolingLog; - supertest: Agent; - port: number; -}) { - try { - const res = await supertest - .post('/api/actions/connector') - .set('kbn-xsrf', 'foo') - .send({ - name: 'OpenAI Proxy', - connector_type_id: '.gen-ai', - config: { - apiProvider: 'OpenAI', - apiUrl: `http://localhost:${port}`, - }, - secrets: { - apiKey: 'my-api-key', - }, - }) - .expect(200); - - const connectorId = res.body.id as string; - return connectorId; - } catch (e) { - log.error(`Failed to create action connector due to: ${e}`); - throw e; - } -} diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/config.ts b/x-pack/test/observability_ai_assistant_api_integration/common/config.ts deleted file mode 100644 index 6505ad3e94d64..0000000000000 --- a/x-pack/test/observability_ai_assistant_api_integration/common/config.ts +++ /dev/null @@ -1,123 +0,0 @@ -/* - * 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 { Config, FtrConfigProviderContext } from '@kbn/test'; -import { UrlObject } from 'url'; -import { ObservabilityAIAssistantFtrConfigName } from '../configs'; -import { getApmSynthtraceEsClient } from './create_synthtrace_client'; -import { InheritedFtrProviderContext, InheritedServices } from './ftr_provider_context'; -import { getScopedApiClient } from './observability_ai_assistant_api_client'; -import { editor, secondaryEditor, unauthorizedUser, viewer } from './users/users'; - -export interface ObservabilityAIAssistantFtrConfig { - name: ObservabilityAIAssistantFtrConfigName; - license: 'basic' | 'trial'; - kibanaConfig?: Record; -} - -export type CreateTestConfig = ReturnType; - -export type CreateTest = ReturnType; - -export type ObservabilityAIAssistantApiClients = Awaited< - ReturnType ->; - -export type ObservabilityAIAssistantAPIClient = Awaited< - ReturnType ->; - -export type ObservabilityAIAssistantServices = Awaited>['services']; - -export class ForbiddenApiError extends Error { - status: number; - - constructor(message: string = 'Forbidden') { - super(message); - this.name = 'ForbiddenApiError'; - this.status = 403; - } -} - -export function createObservabilityAIAssistantAPIConfig({ - config, - license, - name, - kibanaConfig, -}: { - config: Config; - license: 'basic' | 'trial'; - name: string; - kibanaConfig?: Record; -}) { - const services = config.get('services') as InheritedServices; - const servers = config.get('servers'); - const kibanaServer = servers.kibana as UrlObject; - const apmSynthtraceKibanaClient = services.apmSynthtraceKibanaClient(); - const allConfigs = config.getAll() as Record; - - const getScopedApiClientForUsername = (username: string) => - getScopedApiClient(kibanaServer, username); - - return { - ...allConfigs, - servers, - services: { - ...services, - getScopedApiClientForUsername: () => getScopedApiClientForUsername, - apmSynthtraceEsClient: (context: InheritedFtrProviderContext) => - getApmSynthtraceEsClient(context, apmSynthtraceKibanaClient), - observabilityAIAssistantAPIClient: async () => { - return { - admin: getScopedApiClientForUsername('elastic'), - viewer: getScopedApiClientForUsername(viewer.username), - editor: getScopedApiClientForUsername(editor.username), - secondaryEditor: getScopedApiClientForUsername(secondaryEditor.username), - unauthorizedUser: getScopedApiClientForUsername(unauthorizedUser.username), - }; - }, - }, - junit: { - reportName: `Observability AI Assistant API Integration tests (${name})`, - }, - esTestCluster: { - ...config.get('esTestCluster'), - license, - }, - kbnTestServer: { - ...config.get('kbnTestServer'), - serverArgs: [ - ...config.get('kbnTestServer.serverArgs'), - ...(kibanaConfig - ? Object.entries(kibanaConfig).map(([key, value]) => - Array.isArray(value) ? `--${key}=${JSON.stringify(value)}` : `--${key}=${value}` - ) - : []), - ], - }, - }; -} - -export function createTestConfig(config: ObservabilityAIAssistantFtrConfig) { - const { license, name, kibanaConfig } = config; - - return async ({ readConfigFile }: FtrConfigProviderContext) => { - const xPackAPITestsConfig = await readConfigFile( - require.resolve('../../api_integration/config.ts') - ); - - return { - ...createObservabilityAIAssistantAPIConfig({ - config: xPackAPITestsConfig, - name, - license, - kibanaConfig, - }), - testFiles: [require.resolve('../tests')], - }; - }; -} diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/ftr_provider_context.ts b/x-pack/test/observability_ai_assistant_api_integration/common/ftr_provider_context.ts deleted file mode 100644 index 1c0277c210d61..0000000000000 --- a/x-pack/test/observability_ai_assistant_api_integration/common/ftr_provider_context.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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 { GenericFtrProviderContext } from '@kbn/test'; -import { FtrProviderContext as InheritedFtrProviderContext } from '../../api_integration/ftr_provider_context'; -import { ObservabilityAIAssistantServices } from './config'; - -export type InheritedServices = InheritedFtrProviderContext extends GenericFtrProviderContext< - infer TServices, - {} -> - ? TServices - : {}; - -export type { InheritedFtrProviderContext }; -export type FtrProviderContext = GenericFtrProviderContext; diff --git a/x-pack/test/observability_ai_assistant_api_integration/configs/index.ts b/x-pack/test/observability_ai_assistant_api_integration/configs/index.ts deleted file mode 100644 index d31f13d546bf9..0000000000000 --- a/x-pack/test/observability_ai_assistant_api_integration/configs/index.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* - * 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 { mapValues } from 'lodash'; -import path from 'path'; -import { createTestConfig, CreateTestConfig } from '../common/config'; - -export const observabilityAIAssistantDebugLogger = { - name: 'plugins.observabilityAIAssistant', - level: 'debug', - appenders: ['console'], -}; - -export const observabilityAIAssistantFtrConfigs = { - basic: { - license: 'basic' as const, - kibanaConfig: { - 'logging.loggers': [observabilityAIAssistantDebugLogger], - }, - }, - enterprise: { - license: 'trial' as const, - kibanaConfig: { - 'logging.loggers': [observabilityAIAssistantDebugLogger], - 'plugin-path': path.resolve( - __dirname, - '../../../../src/platform/test/analytics/plugins/analytics_ftr_helpers' - ), - }, - }, -}; - -export type ObservabilityAIAssistantFtrConfigName = keyof typeof observabilityAIAssistantFtrConfigs; - -export const configs: Record = mapValues( - observabilityAIAssistantFtrConfigs, - (value, key) => { - return createTestConfig({ - name: key as ObservabilityAIAssistantFtrConfigName, - ...value, - }); - } -); diff --git a/x-pack/test/observability_ai_assistant_api_integration/enterprise/config.ts b/x-pack/test/observability_ai_assistant_api_integration/enterprise/config.ts deleted file mode 100644 index 598ecae70efbb..0000000000000 --- a/x-pack/test/observability_ai_assistant_api_integration/enterprise/config.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * 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 { configs } from '../configs'; - -// eslint-disable-next-line import/no-default-export -export default configs.enterprise; diff --git a/x-pack/test/observability_ai_assistant_api_integration/tests/index.ts b/x-pack/test/observability_ai_assistant_api_integration/tests/index.ts deleted file mode 100644 index e0312d2f76019..0000000000000 --- a/x-pack/test/observability_ai_assistant_api_integration/tests/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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 globby from 'globby'; -import path from 'path'; -import { createUsersAndRoles } from '../common/users/create_users_and_roles'; -import { FtrProviderContext } from '../common/ftr_provider_context'; - -const cwd = path.join(__dirname); - -export default function observabilityAIAssistantApiIntegrationTests({ - getService, - loadTestFile, -}: FtrProviderContext) { - describe('Observability AI Assistant API tests', function () { - const filePattern = '**/*.spec.ts'; - const tests = globby.sync(filePattern, { cwd }); - - // Creates roles and users before running tests - before(async () => { - await createUsersAndRoles(getService); - }); - - tests.forEach((testName) => { - describe(testName, () => { - loadTestFile(require.resolve(`./${testName}`)); - }); - }); - }); -} diff --git a/x-pack/test/observability_ai_assistant_functional/common/config.ts b/x-pack/test/observability_ai_assistant_functional/common/config.ts index eb267123adf2b..bee949cbeb19f 100644 --- a/x-pack/test/observability_ai_assistant_functional/common/config.ts +++ b/x-pack/test/observability_ai_assistant_functional/common/config.ts @@ -6,24 +6,50 @@ */ import { FtrConfigProviderContext } from '@kbn/test'; -import { merge } from 'lodash'; import { UrlObject } from 'url'; import { KibanaEBTServerProvider, KibanaEBTUIProvider, } from '@kbn/test-suites-src/analytics/services/kibana_ebt'; -import { - secondaryEditor, - editor, - viewer, -} from '../../observability_ai_assistant_api_integration/common/users/users'; -import { - ObservabilityAIAssistantFtrConfig, - createObservabilityAIAssistantAPIConfig, -} from '../../observability_ai_assistant_api_integration/common/config'; -import { getScopedApiClient } from '../../observability_ai_assistant_api_integration/common/observability_ai_assistant_api_client'; +import path from 'path'; +import { secondaryEditor, editor, viewer } from './users/users'; +import { getScopedApiClient } from '../../api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/observability_ai_assistant_api_client'; import { InheritedFtrProviderContext, InheritedServices } from '../ftr_provider_context'; import { ObservabilityAIAssistantUIProvider } from './ui'; +import { getApmSynthtraceEsClient } from './create_synthtrace_client'; + +export interface ObservabilityAIAssistantFtrConfig { + name: ObservabilityAIAssistantFtrConfigName; + license: 'basic' | 'trial'; + kibanaConfig?: Record; +} + +export const observabilityAIAssistantDebugLogger = { + name: 'plugins.observabilityAIAssistant', + level: 'debug', + appenders: ['console'], +}; + +export const observabilityAIAssistantFtrConfigs = { + basic: { + license: 'basic' as const, + kibanaConfig: { + 'logging.loggers': [observabilityAIAssistantDebugLogger], + }, + }, + enterprise: { + license: 'trial' as const, + kibanaConfig: { + 'logging.loggers': [observabilityAIAssistantDebugLogger], + 'plugin-path': path.resolve( + __dirname, + '../../../../src/platform/test/analytics/plugins/analytics_ftr_helpers' + ), + }, + }, +}; + +export type ObservabilityAIAssistantFtrConfigName = keyof typeof observabilityAIAssistantFtrConfigs; export type CreateTestConfig = ReturnType; export type TestConfig = Awaited>; @@ -41,38 +67,55 @@ async function getTestConfig({ }) { const testConfig = await readConfigFile(require.resolve('../../functional/config.base.js')); - const baseConfig = createObservabilityAIAssistantAPIConfig({ - config: testConfig, - license, - name, - kibanaConfig, - }); - - const kibanaServer = baseConfig.servers.kibana as UrlObject; + const getScopedApiClientForUsername = (username: string) => + getScopedApiClient(kibanaServer, username); + const servers = testConfig.get('servers'); + const kibanaServer = servers.kibana as UrlObject; + const services = testConfig.get('services') as InheritedServices; + const apmSynthtraceKibanaClient = services.apmSynthtraceKibanaClient(); + const allConfigs = testConfig.getAll() as Record; - return merge( - { - services: testConfig.get('services') as InheritedServices, - }, - baseConfig, - { - testFiles: [require.resolve('../tests')], - services: { - observabilityAIAssistantUI: (context: InheritedFtrProviderContext) => - ObservabilityAIAssistantUIProvider(context), - observabilityAIAssistantApi: async () => { - return { - admin: getScopedApiClient(kibanaServer, 'elastic'), - viewer: getScopedApiClient(kibanaServer, viewer.username), - editor: getScopedApiClient(kibanaServer, editor.username), - secondaryEditor: getScopedApiClient(kibanaServer, secondaryEditor.username), - }; - }, - kibana_ebt_server: KibanaEBTServerProvider, - kibana_ebt_ui: KibanaEBTUIProvider, + return { + ...allConfigs, + servers, + testFiles: [require.resolve('../tests')], + services: { + ...services, + getScopedApiClientForUsername: () => getScopedApiClientForUsername, + kibana_ebt_server: KibanaEBTServerProvider, + kibana_ebt_ui: KibanaEBTUIProvider, + apmSynthtraceEsClient: (context: InheritedFtrProviderContext) => + getApmSynthtraceEsClient(context, apmSynthtraceKibanaClient), + observabilityAIAssistantUI: (context: InheritedFtrProviderContext) => + ObservabilityAIAssistantUIProvider(context), + observabilityAIAssistantApi: async () => { + return { + admin: getScopedApiClient(kibanaServer, 'elastic'), + viewer: getScopedApiClient(kibanaServer, viewer.username), + editor: getScopedApiClient(kibanaServer, editor.username), + secondaryEditor: getScopedApiClient(kibanaServer, secondaryEditor.username), + }; }, - } - ); + }, + junit: { + reportName: `Chrome X-Pack Observability AI Assistant Functional Tests (${name})`, + }, + esTestCluster: { + ...testConfig.get('esTestCluster'), + license, + }, + kbnTestServer: { + ...testConfig.get('kbnTestServer'), + serverArgs: [ + ...testConfig.get('kbnTestServer.serverArgs'), + ...(kibanaConfig + ? Object.entries(kibanaConfig).map(([key, value]) => + Array.isArray(value) ? `--${key}=${JSON.stringify(value)}` : `--${key}=${value}` + ) + : []), + ], + }, + }; } export function createTestConfig(config: ObservabilityAIAssistantFtrConfig) { diff --git a/x-pack/test/observability_ai_assistant_functional/common/connectors.ts b/x-pack/test/observability_ai_assistant_functional/common/connectors.ts index fc06a33cd0d72..eff4f0aca57dd 100644 --- a/x-pack/test/observability_ai_assistant_functional/common/connectors.ts +++ b/x-pack/test/observability_ai_assistant_functional/common/connectors.ts @@ -6,7 +6,7 @@ */ import { Agent as SuperTestAgent } from 'supertest'; -import { LlmProxy } from '../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +import { LlmProxy } from '../../api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/create_llm_proxy'; export async function createConnector(proxy: LlmProxy, supertest: SuperTestAgent) { await supertest diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/create_synthtrace_client.ts b/x-pack/test/observability_ai_assistant_functional/common/create_synthtrace_client.ts similarity index 92% rename from x-pack/test/observability_ai_assistant_api_integration/common/create_synthtrace_client.ts rename to x-pack/test/observability_ai_assistant_functional/common/create_synthtrace_client.ts index 5e2497a0342a7..de78cb581e289 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/common/create_synthtrace_client.ts +++ b/x-pack/test/observability_ai_assistant_functional/common/create_synthtrace_client.ts @@ -10,7 +10,7 @@ import { createLogger, LogLevel, } from '@kbn/apm-synthtrace'; -import { InheritedFtrProviderContext } from './ftr_provider_context'; +import { InheritedFtrProviderContext } from '../ftr_provider_context'; export async function getApmSynthtraceEsClient( context: InheritedFtrProviderContext, diff --git a/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts b/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts index eb37742b58f1f..a222d9110c389 100644 --- a/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts +++ b/x-pack/test/observability_ai_assistant_functional/common/ui/index.ts @@ -9,7 +9,7 @@ import type { PathsOf, TypeAsArgs, TypeOf } from '@kbn/typed-react-router-config import { kbnTestConfig } from '@kbn/test'; import type { ObservabilityAIAssistantRoutes } from '@kbn/observability-ai-assistant-app-plugin/public/routes/config'; import qs from 'query-string'; -import { User } from '../../../observability_ai_assistant_api_integration/common/users/users'; +import { User } from '../users/users'; import type { InheritedFtrProviderContext } from '../../ftr_provider_context'; export interface ObservabilityAIAssistantUIService { diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/users/create_users_and_roles.ts b/x-pack/test/observability_ai_assistant_functional/common/users/create_users_and_roles.ts similarity index 92% rename from x-pack/test/observability_ai_assistant_api_integration/common/users/create_users_and_roles.ts rename to x-pack/test/observability_ai_assistant_functional/common/users/create_users_and_roles.ts index 1492fa68114a2..d031134d9d4e1 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/common/users/create_users_and_roles.ts +++ b/x-pack/test/observability_ai_assistant_functional/common/users/create_users_and_roles.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { InheritedFtrProviderContext } from '../ftr_provider_context'; +import { InheritedFtrProviderContext } from '../../ftr_provider_context'; import { allUsers } from './users'; import { allRoles } from './roles'; diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/users/roles.ts b/x-pack/test/observability_ai_assistant_functional/common/users/roles.ts similarity index 100% rename from x-pack/test/observability_ai_assistant_api_integration/common/users/roles.ts rename to x-pack/test/observability_ai_assistant_functional/common/users/roles.ts diff --git a/x-pack/test/observability_ai_assistant_api_integration/common/users/users.ts b/x-pack/test/observability_ai_assistant_functional/common/users/users.ts similarity index 68% rename from x-pack/test/observability_ai_assistant_api_integration/common/users/users.ts rename to x-pack/test/observability_ai_assistant_functional/common/users/users.ts index 2dc5a433517f3..82a89d9d8230a 100644 --- a/x-pack/test/observability_ai_assistant_api_integration/common/users/users.ts +++ b/x-pack/test/observability_ai_assistant_functional/common/users/users.ts @@ -9,11 +9,8 @@ import { kbnTestConfig } from '@kbn/test'; const password = kbnTestConfig.getUrlParts().password!; -export const UNAUTHORIZED_USERNAME = 'unauthorized_user'; -export const UNAUTHORIZED_USER_PASSWORD = 'unauthorized_password'; - export interface User { - username: 'elastic' | 'editor' | 'viewer' | 'secondary_editor' | 'unauthorized_user'; + username: 'elastic' | 'editor' | 'viewer' | 'secondary_editor'; password: string; roles: string[]; } @@ -36,10 +33,4 @@ export const viewer: User = { roles: ['viewer'], }; -export const unauthorizedUser: User = { - username: UNAUTHORIZED_USERNAME, - password: UNAUTHORIZED_USER_PASSWORD, - roles: [], -}; - -export const allUsers = [editor, secondaryEditor, viewer, unauthorizedUser]; +export const allUsers = [editor, secondaryEditor, viewer]; diff --git a/x-pack/test/observability_ai_assistant_functional/configs/index.ts b/x-pack/test/observability_ai_assistant_functional/configs/index.ts index 22096dff2a47e..4c9566ab6ba42 100644 --- a/x-pack/test/observability_ai_assistant_functional/configs/index.ts +++ b/x-pack/test/observability_ai_assistant_functional/configs/index.ts @@ -9,7 +9,7 @@ import { mapValues } from 'lodash'; import { ObservabilityAIAssistantFtrConfigName, observabilityAIAssistantFtrConfigs, -} from '../../observability_ai_assistant_api_integration/configs'; +} from '../common/config'; import { createTestConfig, CreateTestConfig } from '../common/config'; export const configs: Record = mapValues( diff --git a/x-pack/test/observability_ai_assistant_functional/tests/contextual_insights/index.spec.ts b/x-pack/test/observability_ai_assistant_functional/tests/contextual_insights/index.spec.ts index d0e01f2f90d27..7b59cab352742 100644 --- a/x-pack/test/observability_ai_assistant_functional/tests/contextual_insights/index.spec.ts +++ b/x-pack/test/observability_ai_assistant_functional/tests/contextual_insights/index.spec.ts @@ -11,7 +11,7 @@ import moment from 'moment'; import { createLlmProxy, LlmProxy, -} from '../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +} from '../../../api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/create_llm_proxy'; import { FtrProviderContext } from '../../ftr_provider_context'; import { deleteConnectors, createConnector } from '../../common/connectors'; diff --git a/x-pack/test/observability_ai_assistant_functional/tests/conversations/archiving.spec.ts b/x-pack/test/observability_ai_assistant_functional/tests/conversations/archiving.spec.ts index 5be4b085fe9f2..a18dc8074fd79 100644 --- a/x-pack/test/observability_ai_assistant_functional/tests/conversations/archiving.spec.ts +++ b/x-pack/test/observability_ai_assistant_functional/tests/conversations/archiving.spec.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { createLlmProxy, LlmProxy, -} from '../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +} from '../../../api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/create_llm_proxy'; import { FtrProviderContext } from '../../ftr_provider_context'; import { createConnector, deleteConnectors } from '../../common/connectors'; import { deleteConversations } from '../../common/conversations'; diff --git a/x-pack/test/observability_ai_assistant_functional/tests/conversations/index.spec.ts b/x-pack/test/observability_ai_assistant_functional/tests/conversations/index.spec.ts index 89b47023fee06..3b652f18f7336 100644 --- a/x-pack/test/observability_ai_assistant_functional/tests/conversations/index.spec.ts +++ b/x-pack/test/observability_ai_assistant_functional/tests/conversations/index.spec.ts @@ -15,10 +15,10 @@ import { systemMessageSorted } from '../../../api_integration/deployment_agnosti import { createLlmProxy, LlmProxy, -} from '../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +} from '../../../api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/create_llm_proxy'; import { FtrProviderContext } from '../../ftr_provider_context'; -import { editor } from '../../../observability_ai_assistant_api_integration/common/users/users'; +import { editor } from '../../common/users/users'; import { deleteConnectors } from '../../common/connectors'; import { deleteConversations } from '../../common/conversations'; diff --git a/x-pack/test/observability_ai_assistant_functional/tests/conversations/sharing.spec.ts b/x-pack/test/observability_ai_assistant_functional/tests/conversations/sharing.spec.ts index ac72fcec28ad1..6c8abf525e0cb 100644 --- a/x-pack/test/observability_ai_assistant_functional/tests/conversations/sharing.spec.ts +++ b/x-pack/test/observability_ai_assistant_functional/tests/conversations/sharing.spec.ts @@ -9,7 +9,7 @@ import expect from '@kbn/expect'; import { createLlmProxy, LlmProxy, -} from '../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +} from '../../../api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/create_llm_proxy'; import { FtrProviderContext } from '../../ftr_provider_context'; import { createConnector, deleteConnectors } from '../../common/connectors'; import { deleteConversations } from '../../common/conversations'; diff --git a/x-pack/test/observability_ai_assistant_functional/tests/feature_controls/assistant_security.spec.ts b/x-pack/test/observability_ai_assistant_functional/tests/feature_controls/assistant_security.spec.ts index 117a9f11b316e..60c4c369879ba 100644 --- a/x-pack/test/observability_ai_assistant_functional/tests/feature_controls/assistant_security.spec.ts +++ b/x-pack/test/observability_ai_assistant_functional/tests/feature_controls/assistant_security.spec.ts @@ -10,7 +10,7 @@ import { FtrProviderContext } from '../../ftr_provider_context'; import { createLlmProxy, LlmProxy, -} from '../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +} from '../../../api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/create_llm_proxy'; import { createConnector, deleteConnectors } from '../../common/connectors'; import { createAndLoginUserWithCustomRole, deleteAndLogoutUser } from './helpers'; diff --git a/x-pack/test/observability_ai_assistant_functional/tests/index.ts b/x-pack/test/observability_ai_assistant_functional/tests/index.ts index 07e81d9488592..76f7a98a07aa2 100644 --- a/x-pack/test/observability_ai_assistant_functional/tests/index.ts +++ b/x-pack/test/observability_ai_assistant_functional/tests/index.ts @@ -7,8 +7,8 @@ import globby from 'globby'; import path from 'path'; -import { createUsersAndRoles } from '../../observability_ai_assistant_api_integration/common/users/create_users_and_roles'; -import { FtrProviderContext } from '../../observability_ai_assistant_api_integration/common/ftr_provider_context'; +import { createUsersAndRoles } from '../common/users/create_users_and_roles'; +import { FtrProviderContext } from '../../common/ftr_provider_context'; const cwd = path.join(__dirname); diff --git a/x-pack/test/observability_ai_assistant_functional/tests/knowledge_base/index.spec.ts b/x-pack/test/observability_ai_assistant_functional/tests/knowledge_base/index.spec.ts index 7675e710eb690..4ec26fdcb46d2 100644 --- a/x-pack/test/observability_ai_assistant_functional/tests/knowledge_base/index.spec.ts +++ b/x-pack/test/observability_ai_assistant_functional/tests/knowledge_base/index.spec.ts @@ -10,7 +10,7 @@ import { KnowledgeBaseState } from '@kbn/observability-ai-assistant-plugin/commo import { LlmProxy, createLlmProxy, -} from '../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +} from '../../../api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/create_llm_proxy'; import { FtrProviderContext } from '../../ftr_provider_context'; import { deployTinyElserAndSetupKb, diff --git a/x-pack/test/observability_ai_assistant_functional/tests/knowledge_base_management/index.spec.ts b/x-pack/test/observability_ai_assistant_functional/tests/knowledge_base_management/index.spec.ts index 0abd47f06f705..8e51217c4a3c8 100644 --- a/x-pack/test/observability_ai_assistant_functional/tests/knowledge_base_management/index.spec.ts +++ b/x-pack/test/observability_ai_assistant_functional/tests/knowledge_base_management/index.spec.ts @@ -15,7 +15,7 @@ import { teardownTinyElserModelAndInferenceEndpoint, } from '../../../api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/model_and_inference'; import { clearKnowledgeBase } from '../../../api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/knowledge_base'; -import { ObservabilityAIAssistantApiClient } from '../../../observability_ai_assistant_api_integration/common/observability_ai_assistant_api_client'; +import { ObservabilityAIAssistantApiClient } from '../../../api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/observability_ai_assistant_api_client'; import { FtrProviderContext } from '../../ftr_provider_context'; export default function ApiTest({ getService, getPageObjects }: FtrProviderContext) { diff --git a/x-pack/test/observability_ai_assistant_functional/tests/settings/change_knowledge_base_model.spec.ts b/x-pack/test/observability_ai_assistant_functional/tests/settings/change_knowledge_base_model.spec.ts index ee640f0a01017..12173f7c51727 100644 --- a/x-pack/test/observability_ai_assistant_functional/tests/settings/change_knowledge_base_model.spec.ts +++ b/x-pack/test/observability_ai_assistant_functional/tests/settings/change_knowledge_base_model.spec.ts @@ -12,7 +12,7 @@ import { createConnector, deleteConnectors } from '../../common/connectors'; import { LlmProxy, createLlmProxy, -} from '../../../observability_ai_assistant_api_integration/common/create_llm_proxy'; +} from '../../../api_integration/deployment_agnostic/apis/observability/ai_assistant/utils/create_llm_proxy'; import { deployTinyElserAndSetupKb, stopTinyElserModel, diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/ftr_provider_context.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/ftr_provider_context.ts deleted file mode 100644 index dc8dbbed7536e..0000000000000 --- a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/ftr_provider_context.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * 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 { GenericFtrProviderContext } from '@kbn/test'; -import { InheritedServices, InheritedFtrProviderContext } from '../../../../services'; -import { ObservabilityAIAssistantApiClient } from './observability_ai_assistant_api_client'; - -export type ObservabilityAIAssistantServices = InheritedServices & { - observabilityAIAssistantAPIClient: ( - context: InheritedFtrProviderContext - ) => Promise; -}; - -export type FtrProviderContext = GenericFtrProviderContext; diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/observability_ai_assistant_api_client.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/observability_ai_assistant_api_client.ts deleted file mode 100644 index 061175872380f..0000000000000 --- a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/common/observability_ai_assistant_api_client.ts +++ /dev/null @@ -1,242 +0,0 @@ -/* - * 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 type { - APIReturnType, - ObservabilityAIAssistantAPIClientRequestParamsOf, - ObservabilityAIAssistantAPIEndpoint, -} from '@kbn/observability-ai-assistant-plugin/public'; -import { formatRequest } from '@kbn/server-route-repository'; -import supertest from 'supertest'; -import { Subtract } from 'utility-types'; -import { format } from 'url'; -import { Config } from '@kbn/test'; -import { InheritedFtrProviderContext, SupertestWithRoleScopeType } from '../../../../services'; -import type { InternalRequestHeader, RoleCredentials } from '../../../../../shared/services'; - -export function getObservabilityAIAssistantApiClient({ - svlSharedConfig, - supertestUserWithCookieCredentials, -}: { - svlSharedConfig: Config; - supertestUserWithCookieCredentials?: SupertestWithRoleScopeType; -}) { - if (supertestUserWithCookieCredentials) { - return createObservabilityAIAssistantApiClient(supertestUserWithCookieCredentials); - } else { - const kibanaServer = svlSharedConfig.get('servers.kibana'); - const cAuthorities = svlSharedConfig.get('servers.kibana.certificateAuthorities'); - - const url = format({ - ...kibanaServer, - auth: false, // don't use auth in serverless - }); - return createObservabilityAIAssistantApiClient(supertest.agent(url, { ca: cAuthorities })); - } -} - -type ObservabilityAIAssistantApiClientKey = - | 'slsAdmin' - | 'slsEditor' - | 'slsUser' - | 'slsUnauthorized'; - -export type ObservabilityAIAssistantApiClient = Record< - ObservabilityAIAssistantApiClientKey, - Awaited> ->; - -export function createObservabilityAIAssistantApiClient( - st: SupertestWithRoleScopeType | supertest.Agent -) { - return ( - options: { - type?: 'form-data'; - endpoint: TEndpoint; - roleAuthc?: RoleCredentials; - internalReqHeader?: InternalRequestHeader; - } & ObservabilityAIAssistantAPIClientRequestParamsOf & { - params?: { query?: { _inspect?: boolean } }; - } - ): SupertestReturnType => { - const { endpoint, type, roleAuthc, internalReqHeader } = options; - - const params = 'params' in options ? (options.params as Record) : {}; - - const { method, pathname, version } = formatRequest(endpoint, params.path); - const url = format({ pathname, query: params?.query }); - - const headers: Record = - roleAuthc && internalReqHeader ? { ...internalReqHeader, ...roleAuthc.apiKeyHeader } : {}; - - if (version) { - headers['Elastic-Api-Version'] = version; - } - - let res: supertest.Test; - if (type === 'form-data') { - const fields: Array<[string, any]> = Object.entries(params.body); - const formDataRequest = st[method](url) - .set(headers) - .set('Content-type', 'multipart/form-data'); - for (const field of fields) { - void formDataRequest.field(field[0], field[1]); - } - - res = formDataRequest; - } else if (params.body) { - res = st[method](url).send(params.body).set(headers); - } else { - res = st[method](url).set(headers); - } - - return res as unknown as SupertestReturnType; - }; -} - -export type ObservabilityAIAssistantAPIClient = ReturnType< - typeof createObservabilityAIAssistantApiClient ->; - -type WithoutPromise> = Subtract>; - -// this is a little intense, but without it, method overrides are lost -// e.g., { -// end(one:string) -// end(one:string, two:string) -// } -// would lose the first signature. This keeps up to eight signatures. -type OverloadedParameters = T extends { - (...args: infer A1): any; - (...args: infer A2): any; - (...args: infer A3): any; - (...args: infer A4): any; - (...args: infer A5): any; - (...args: infer A6): any; - (...args: infer A7): any; - (...args: infer A8): any; -} - ? A1 | A2 | A3 | A4 | A5 | A6 | A7 | A8 - : T extends { - (...args: infer A1): any; - (...args: infer A2): any; - (...args: infer A3): any; - (...args: infer A4): any; - (...args: infer A5): any; - (...args: infer A6): any; - (...args: infer A7): any; - } - ? A1 | A2 | A3 | A4 | A5 | A6 | A7 - : T extends { - (...args: infer A1): any; - (...args: infer A2): any; - (...args: infer A3): any; - (...args: infer A4): any; - (...args: infer A5): any; - (...args: infer A6): any; - } - ? A1 | A2 | A3 | A4 | A5 | A6 - : T extends { - (...args: infer A1): any; - (...args: infer A2): any; - (...args: infer A3): any; - (...args: infer A4): any; - (...args: infer A5): any; - } - ? A1 | A2 | A3 | A4 | A5 - : T extends { - (...args: infer A1): any; - (...args: infer A2): any; - (...args: infer A3): any; - (...args: infer A4): any; - } - ? A1 | A2 | A3 | A4 - : T extends { - (...args: infer A1): any; - (...args: infer A2): any; - (...args: infer A3): any; - } - ? A1 | A2 | A3 - : T extends { - (...args: infer A1): any; - (...args: infer A2): any; - } - ? A1 | A2 - : T extends (...args: infer A) => any - ? A - : any; - -type OverrideReturnType any, TNextReturnType> = ( - ...args: OverloadedParameters -) => WithoutPromise> & TNextReturnType; - -type OverwriteThisMethods, TNextReturnType> = TNextReturnType & { - [key in keyof T]: T[key] extends (...args: infer TArgs) => infer TReturnType - ? TReturnType extends Promise - ? OverrideReturnType - : (...args: TArgs) => TReturnType - : T[key]; -}; - -export type SupertestReturnType = - OverwriteThisMethods< - WithoutPromise, - Promise<{ - text: string; - status: number; - body: APIReturnType; - }> - >; - -export async function getObservabilityAIAssistantApiClientService({ - getService, -}: InheritedFtrProviderContext): Promise { - const svlSharedConfig = getService('config'); - const roleScopedSupertest = getService('roleScopedSupertest'); - - // admin user - const supertestAdminWithCookieCredentials: SupertestWithRoleScopeType = - await roleScopedSupertest.getSupertestWithRoleScope('admin', { - useCookieHeader: true, - withInternalHeaders: true, - }); - - // editor user - const supertestEditorWithCookieCredentials: SupertestWithRoleScopeType = - await roleScopedSupertest.getSupertestWithRoleScope('editor', { - useCookieHeader: true, - withInternalHeaders: true, - }); - - // unauthorized user - const supertestUnauthorizedWithCookieCredentials: SupertestWithRoleScopeType = - await roleScopedSupertest.getSupertestWithRoleScope('viewer', { - useCookieHeader: false, - withInternalHeaders: true, - }); - - return { - // defaults to elastic_admin user when used without auth - slsUser: await getObservabilityAIAssistantApiClient({ - svlSharedConfig, - }), - // cookie auth for internal apis - slsAdmin: await getObservabilityAIAssistantApiClient({ - svlSharedConfig, - supertestUserWithCookieCredentials: supertestAdminWithCookieCredentials, - }), - // cookie auth for internal apis - slsEditor: await getObservabilityAIAssistantApiClient({ - svlSharedConfig, - supertestUserWithCookieCredentials: supertestEditorWithCookieCredentials, - }), - slsUnauthorized: await getObservabilityAIAssistantApiClient({ - svlSharedConfig, - supertestUserWithCookieCredentials: supertestUnauthorizedWithCookieCredentials, - }), - }; -} diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/config.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/config.ts deleted file mode 100644 index 01e470d2a7d88..0000000000000 --- a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/config.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 { createTestConfig } from '../../../config.base'; -import { ObservabilityAIAssistantServices } from './common/ftr_provider_context'; -import { services as inheritedServices } from '../../../services'; -import { getObservabilityAIAssistantApiClientService } from './common/observability_ai_assistant_api_client'; - -export const services: ObservabilityAIAssistantServices = { - ...inheritedServices, - observabilityAIAssistantAPIClient: getObservabilityAIAssistantApiClientService, -}; - -export default createTestConfig({ - serverlessProject: 'oblt', - testFiles: [require.resolve('./tests')], - junit: { - reportName: 'Observability AI Assistant API Integration tests', - }, - suiteTags: { exclude: ['skipSvlOblt'] }, - services, - - // include settings from project controller - // https://github.com/elastic/project-controller/blob/main/internal/project/observability/config/elasticsearch.yml - esServerArgs: ['xpack.ml.dfa.enabled=false'], -}); diff --git a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/index.ts b/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/index.ts deleted file mode 100644 index 26c8a7b2839a9..0000000000000 --- a/x-pack/test_serverless/api_integration/test_suites/observability/ai_assistant/tests/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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 globby from 'globby'; -import path from 'path'; -import { FtrProviderContext } from '../../../../ftr_provider_context'; - -const cwd = path.join(__dirname); - -export default function observabilityAIAssistantApiIntegrationTests({ - loadTestFile, -}: FtrProviderContext) { - describe('Observability AI Assistant API tests', function () { - const filePattern = '**/*.spec.ts'; - const tests = globby.sync(filePattern, { cwd }); - - tests.forEach((testName) => { - describe(testName, () => { - loadTestFile(require.resolve(`./${testName}`)); - }); - }); - }); -} diff --git a/x-pack/test_serverless/tsconfig.json b/x-pack/test_serverless/tsconfig.json index 06136551ec365..18ce563f97982 100644 --- a/x-pack/test_serverless/tsconfig.json +++ b/x-pack/test_serverless/tsconfig.json @@ -81,7 +81,6 @@ "@kbn/search-types", "@kbn/config-schema", "@kbn/features-plugin", - "@kbn/observability-ai-assistant-plugin", "@kbn/test-suites-src", "@kbn/console-plugin", "@kbn/cloud-security-posture-common",