diff --git a/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts b/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts index 05c812bd0250b..1af10f37f8c58 100644 --- a/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts +++ b/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts @@ -203,6 +203,7 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D engines: `${ENTERPRISE_SEARCH_DOCS}engines.html`, indexApi: `${ELASTICSEARCH_DOCS}docs-index_.html`, inferenceApiCreate: `${ELASTICSEARCH_DOCS}put-inference-api.html`, + inferenceApisConfigureChunking: `${ELASTICSEARCH_DOCS}inference-apis.html#infer-chunking-config`, ingestionApis: `${ELASTICSEARCH_DOCS}search-with-elasticsearch.html`, ingestPipelines: `${ELASTICSEARCH_DOCS}ingest-pipeline-search.html`, knnSearch: `${ELASTICSEARCH_DOCS}knn-search.html`, diff --git a/src/platform/packages/shared/kbn-doc-links/src/types.ts b/src/platform/packages/shared/kbn-doc-links/src/types.ts index de87b134d4156..b338e4f0a4c9b 100644 --- a/src/platform/packages/shared/kbn-doc-links/src/types.ts +++ b/src/platform/packages/shared/kbn-doc-links/src/types.ts @@ -168,6 +168,7 @@ export interface DocLinks { readonly engines: string; readonly indexApi: string; readonly inferenceApiCreate: string; + readonly inferenceApisConfigureChunking: string; readonly ingestionApis: string; readonly ingestPipelines: string; readonly knnSearch: string; diff --git a/x-pack/platform/plugins/private/translations/translations/fr-FR.json b/x-pack/platform/plugins/private/translations/translations/fr-FR.json index aeb2fc45b0b86..d5fd9339ba7a4 100644 --- a/x-pack/platform/plugins/private/translations/translations/fr-FR.json +++ b/x-pack/platform/plugins/private/translations/translations/fr-FR.json @@ -22467,7 +22467,6 @@ "xpack.idxMgmt.indexDetails.mappings.mappingsViewButtonGroupAriaLabel": "Groupe de bouton de l'affichage des mappings", "xpack.idxMgmt.indexDetails.mappings.reloadButtonLabel": "Recharger", "xpack.idxMgmt.indexDetails.mappings.saveMappings": "Enregistrer les mappings", - "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.description": "{label} Ajoutez un champ à votre mapping et choisissez \"Semantic text\" pour commencer.", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.descriptionForPlatinumLicense": "{label} Mettez à niveau votre licence pour ajouter les types de champ semantic_text à vos index.\"", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.dismiss": "Rejeter", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.semanticTextFieldAvailable": "Le type de champ semantic_text est maintenant disponible !", diff --git a/x-pack/platform/plugins/private/translations/translations/ja-JP.json b/x-pack/platform/plugins/private/translations/translations/ja-JP.json index cc7a22178b24f..64e966f6a857d 100644 --- a/x-pack/platform/plugins/private/translations/translations/ja-JP.json +++ b/x-pack/platform/plugins/private/translations/translations/ja-JP.json @@ -22324,7 +22324,6 @@ "xpack.idxMgmt.indexDetails.mappings.mappingsViewButtonGroupAriaLabel": "マッピングビューボタングループ", "xpack.idxMgmt.indexDetails.mappings.reloadButtonLabel": "再読み込み", "xpack.idxMgmt.indexDetails.mappings.saveMappings": "マッピングを保存", - "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.description": "{label} 開始するには、フィールドをマッピングに追加して、Semantic_textを選択してください。", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.descriptionForPlatinumLicense": "{label} semantic_textフィールド型をインデックスに追加するには、ライセンスをアップグレードしてください。'", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.dismiss": "閉じる", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.semanticTextFieldAvailable": "semantic_textフィールド型が利用できるようになりました。", diff --git a/x-pack/platform/plugins/private/translations/translations/zh-CN.json b/x-pack/platform/plugins/private/translations/translations/zh-CN.json index 52d211c2dcc23..fbed115c084ac 100644 --- a/x-pack/platform/plugins/private/translations/translations/zh-CN.json +++ b/x-pack/platform/plugins/private/translations/translations/zh-CN.json @@ -22407,7 +22407,6 @@ "xpack.idxMgmt.indexDetails.mappings.mappingsViewButtonGroupAriaLabel": "映射视图按钮组", "xpack.idxMgmt.indexDetails.mappings.reloadButtonLabel": "重新加载", "xpack.idxMgmt.indexDetails.mappings.saveMappings": "保存映射", - "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.description": "{label} 将字段添加到您的映射并选择“语义文本”以开始使用。", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.descriptionForPlatinumLicense": "{label} 升级许可证以将 semantic_text 字段类型添加到您的索引。'", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.dismiss": "关闭", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.semanticTextFieldAvailable": "semantic_text 字段类型现已可用!", diff --git a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx index 4badcc04540b1..fafd1a877dfc8 100644 --- a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx +++ b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx @@ -533,6 +533,67 @@ describe('', () => { }); }); + describe('Semantic Text Banner', () => { + const mockIndexMappingResponseWithoutSemanticText: any = { + ...testIndexMappings.mappings, + properties: { + ...testIndexMappings.mappings.properties, + name: { + type: 'text', + }, + }, + }; + + const mockIndexMappingResponseWithSemanticText: any = { + ...testIndexMappings.mappings, + properties: { + ...testIndexMappings.mappings.properties, + name: { + type: 'text', + }, + sem_text: { + type: 'semantic_text', + inference_id: '.elser-2-elasticsearch', + }, + title: { + type: 'text', + copy_to: ['sem_text'], + }, + }, + }; + + beforeEach(async () => { + await act(async () => { + testBed = await setup({ + httpSetup, + dependencies: { + core: { + application: { capabilities: { ml: { canGetTrainedModels: true } } }, + }, + }, + }); + }); + }); + + it('semantic text banner is visible if there is no semantic_text field in the mapping', async () => { + httpRequestsMockHelpers.setLoadIndexMappingResponse(testIndexName, { + mappings: mockIndexMappingResponseWithoutSemanticText, + }); + testBed.component.update(); + await testBed.actions.clickIndexDetailsTab(IndexDetailsSection.Mappings); + expect(testBed.actions.mappings.isSemanticTextBannerVisible()).toBe(true); + }); + + it('semantic text banner is not visible if there exists a semantic_text field in the mapping', async () => { + httpRequestsMockHelpers.setLoadIndexMappingResponse(testIndexName, { + mappings: mockIndexMappingResponseWithSemanticText, + }); + testBed.component.update(); + await testBed.actions.clickIndexDetailsTab(IndexDetailsSection.Mappings); + expect(testBed.actions.mappings.isSemanticTextBannerVisible()).toBe(false); + }); + }); + describe('Mappings tab', () => { beforeEach(async () => { await testBed.actions.clickIndexDetailsTab(IndexDetailsSection.Mappings); diff --git a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/semantic_text_bannner.test.tsx b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/semantic_text_bannner.test.tsx index 6be691a03d8f1..c8f6631277495 100644 --- a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/semantic_text_bannner.test.tsx +++ b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/semantic_text_bannner.test.tsx @@ -42,6 +42,10 @@ describe('When semantic_text is enabled', () => { expect(find('indexDetailsMappingsSemanticTextBanner').text()).toContain( 'semantic_text field type now available!' ); + + expect(find('indexDetailsMappingsSemanticTextBanner').text()).toContain( + 'Documents will be automatically chunked to fit model context limits, to avoid truncation.' + ); }); it('should hide the banner if dismiss is clicked', async () => { diff --git a/x-pack/platform/plugins/shared/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx b/x-pack/platform/plugins/shared/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx index 0b492c1a00309..1f70cba42d84f 100644 --- a/x-pack/platform/plugins/shared/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx +++ b/x-pack/platform/plugins/shared/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx @@ -118,6 +118,8 @@ export const DetailsPageMappingsContent: FunctionComponent<{ prefix: 'pendingFieldListId', }); + const hasSemanticText = hasSemanticTextField(state.fields); + const [isAddingFields, setAddingFields] = useState(false); useUnsavedChangesPrompt({ @@ -220,7 +222,6 @@ export const DetailsPageMappingsContent: FunctionComponent<{ const updateMappings = useCallback( async (forceSaveMappings?: boolean) => { - const hasSemanticText = hasSemanticTextField(state.fields); let inferenceToModelIdMap = state.inferenceToModelIdMap; setIsUpdatingMappings(true); try { @@ -539,7 +540,7 @@ export const DetailsPageMappingsContent: FunctionComponent<{ - {hasMLPermissions && ( + {hasMLPermissions && !hasSemanticText && ( ); -const platinumLicenseMessage = ( +const getPlatinumLicenseMessage = () => ( @@ -44,6 +52,14 @@ const platinumLicenseMessage = ( /> ), + learnMore: ( + + + + ), }} /> ); @@ -57,11 +73,11 @@ export function SemanticTextBanner({ return isSemanticTextBannerDisplayable && isSemanticTextEnabled ? ( <> - - + + - - {isPlatinumLicense ? platinumLicenseMessage : defaultLicenseMessage} + + {isPlatinumLicense ? getPlatinumLicenseMessage() : defaultLicenseMessage} diff --git a/x-pack/platform/plugins/shared/index_management/public/application/services/documentation.ts b/x-pack/platform/plugins/shared/index_management/public/application/services/documentation.ts index 62b7defd78db1..09f6153a5cc5e 100644 --- a/x-pack/platform/plugins/shared/index_management/public/application/services/documentation.ts +++ b/x-pack/platform/plugins/shared/index_management/public/application/services/documentation.ts @@ -21,6 +21,7 @@ class DocumentationService { private indexSettings: string = ''; private indexTemplates: string = ''; private indexV1: string = ''; + private inferenceApisConfigureChunking: string = ''; private mapping: string = ''; private mappingAnalyzer: string = ''; private mappingCoerce: string = ''; @@ -81,6 +82,7 @@ class DocumentationService { this.indexManagement = links.management.indexManagement; this.indexSettings = links.elasticsearch.indexSettings; this.indexTemplates = links.elasticsearch.indexTemplates; + this.inferenceApisConfigureChunking = links.enterpriseSearch.inferenceApisConfigureChunking; this.indexV1 = links.apis.putIndexTemplateV1; this.mapping = links.elasticsearch.mapping; this.mappingAnalyzer = links.elasticsearch.mappingAnalyzer; @@ -159,6 +161,10 @@ class DocumentationService { return this.indexManagement; } + public getConfigureChunkingDocLink() { + return this.inferenceApisConfigureChunking; + } + public getIndicesComponentTemplate() { return this.indicesComponentTemplate; }