Skip to content

Grounding Module: Document Grounding retrieval API returned: ELSER API is down. Please try again later or raise a ticket. #763

@rajathkodandaramu

Description

@rajathkodandaramu

Describe the Problem/Bug

I am attempting to create a resource group in AI Core Launchpad and have a few questions regarding the document-grounding configuration:

Is the zone_id a mandatory field for enabling document-grounding functionality?

Where can I locate the zone_id value? I have already successfully retrieved the instance_id and subaccount_id from my BTP subaccount.

I am currently encountering the following error message: "Grounding Module: Document Grounding retrieval API returned: ELSER API is down."

Could you please advise on how to resolve this issue?

Steps to Reproduce

Just trying to do a poc locally.
I wanted check if i search for error with a SAP grounding would this fetch sap help docs or notes or kba.
However grounding enabled is causing an error

Expected Behavior

get correct grounding info

Screenshots

Image

Used Versions

  • Java and Maven version via mvn --version:
    • Apache Maven 3.9.9
    • Java version: 21.0.8, vendor: SAP SE (SapMachine 21)
  • SAP Cloud SDK for AI version: 1.15.0
  • SAP Cloud SDK version: 5.25.0
  • Spring Boot version: 3.4.1
  com.sap.bmb.ai:error-root-cause-agent:jar:1.0.0-SNAPSHOT
  +- org.springframework.boot:spring-boot-starter-web:jar:3.4.1:compile
  |  +- org.springframework.boot:spring-boot-starter:jar:3.4.1:compile
  |  |  +- org.springframework.boot:spring-boot:jar:3.4.1:compile
  |  |  +- org.springframework.boot:spring-boot-autoconfigure:jar:3.4.1:compile
  |  |  +- org.springframework.boot:spring-boot-starter-logging:jar:3.4.1:compile
  |  +- org.springframework.boot:spring-boot-starter-json:jar:3.4.1:compile
  |  +- org.springframework.boot:spring-boot-starter-tomcat:jar:3.4.1:compile
  +- org.springframework.boot:spring-boot-starter-validation:jar:3.4.1:compile
  +- org.springframework.boot:spring-boot-starter-actuator:jar:3.4.1:compile
  +- com.sap.ai.sdk:orchestration:jar:1.15.0:compile
  |  +- com.sap.ai.sdk:core:jar:1.15.0:compile
  |  |  +- com.sap.cloud.sdk.datamodel:openapi-core:jar:5.25.0:compile
  |  |  +- com.sap.cloud.sdk.cloudplatform:connectivity-oauth:jar:5.25.0:runtime
  |  +- com.sap.cloud.sdk.cloudplatform:cloudplatform-connectivity:jar:5.25.0:compile
  |  +- com.sap.cloud.sdk.cloudplatform:connectivity-apache-httpclient5:jar:5.25.0:compile
  +- com.sap.ai.sdk.foundationmodels:openai:jar:1.15.0:compile
  +- io.github.resilience4j:resilience4j-spring-boot3:jar:2.2.0:compile
  +- io.github.resilience4j:resilience4j-circuitbreaker:jar:2.2.0:compile
  +- io.github.resilience4j:resilience4j-ratelimiter:jar:2.2.0:compile
  +- org.springframework.boot:spring-boot-starter-webflux:jar:3.4.1:compile
  +- com.fasterxml.jackson.core:jackson-databind:jar:2.18.2:compile
  +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.18.2:compile
  +- org.springdoc:springdoc-openapi-starter-webmvc-ui:jar:2.3.0:compile
  +- me.paulschwarz:spring-dotenv:jar:4.0.0:compile
  +- org.springframework.boot:spring-boot-starter-test:jar:3.4.1:test
  +- org.mockito:mockito-core:jar:5.14.2:test
  +- org.mockito:mockito-junit-jupiter:jar:5.14.2:test

Code Examples

  public Grounding getGroundingConfig() {
        var groundingFilter = DocumentGroundingFilter.create()
                .dataRepositoryType(DataRepositoryType.HELP_SAP_COM);
        return Grounding.create().filters(groundingFilter);
    }

    public OrchestrationModuleConfig createOrchestrationModuleConfig() {
        log.info("Creating OrchestrationModuleConfig: model={}, version={}, maxTokens={}, temperature={}, " +
                        "jsonSchema=enabled, masking=enabled, grounding={}, outputFiltering=enabled",
                getModelName(), modelVersion, getMaxTokens(), getTemperature(),
                groundingEnabled ? "HELP_SAP_COM" : "disabled");

        OrchestrationAiModel orchestrationModel = new OrchestrationAiModel(
                getModelName(),
                getLlmParams(),
                modelVersion
        );

        // Template config with JSON schema response format
        var templateConfig = TemplateConfig.create()
                .withJsonSchemaResponse(getJsonSchemaConfig());

        var config = new OrchestrationModuleConfig()
                .withLlmConfig(orchestrationModel)
                .withTemplateConfig(templateConfig)
                .withMaskingConfig(getMaskingConfig())
                .withOutputFiltering(getOutputFilterConfig());

        // Only add grounding if enabled (requires provisioned AI Core resource group)
        if (groundingEnabled) {
            config = config.withGrounding(getGroundingConfig());
        }

        return config;
    }

Stack Trace

14:28:27.359 [http-nio-8080-exec-1] WARN  c.s.b.a.e.s.ErrorRootCauseAgent - Failed to get LLM decision: LLM service unavailable: Failed to call AI Core: Request failed with status 400 (Bad Request): 400 - Grounding Module: Document Grounding retrieval API returned: ELSER API is down. Please try again later or raise a ticket.
com.sap.bmb.ai.erroragent.common.exception.AiServiceException: LLM service unavailable: Failed to call AI Core: Request failed with status 400 (Bad Request): 400 - Grounding Module: Document Grounding retrieval API returned: ELSER API is down. Please try again later or raise a ticket.
        at com.sap.bmb.ai.erroragent.common.exception.AiServiceException.llmCallFailed(AiServiceException.java:73)
        at com.sap.bmb.ai.erroragent.service.AiCoreService.chatCompletion(AiCoreService.java:140)
        at com.sap.bmb.ai.erroragent.service.ErrorRootCauseAgent.askLlmForDecision(ErrorRootCauseAgent.java:209)
        at com.sap.bmb.ai.erroragent.service.ErrorRootCauseAgent.analyze(ErrorRootCauseAgent.java:144)
        at com.sap.bmb.ai.erroragent.controller.ErrorAnalysisController.analyzeError(ErrorAnalysisController.java:50)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:257)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:190)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1088)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:978)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914)
        at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
        at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
        at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)
        at org.springframework.security.web.FilterChainProxy.lambda$doFilterInternal$3(FilterChainProxy.java:231)
        at org.springframework.security.web.ObservationFilterChainDecorator$FilterObservation$SimpleFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:479)
        at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$1(ObservationFilterChainDecorator.java:340)
        at org.springframework.security.web.ObservationFilterChainDecorator.lambda$wrapSecured$0(ObservationFilterChainDecorator.java:82)
        at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:128)
        at org.springframework.security.web.access.intercept.AuthorizationFilter.doFilter(AuthorizationFilter.java:101)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
        at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:126)
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:120)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
        at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
        at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:100)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
        at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
        at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:179)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
        at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
        at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
        at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:107)
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:93)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
        at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
        at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90)
        at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
        at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
        at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:82)
        at org.springframework.security.web.context.SecurityContextHolderFilter.doFilter(SecurityContextHolderFilter.java:69)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
        at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
        at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:62)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:227)
        at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
        at org.springframework.security.web.session.DisableEncodeUrlFilter.doFilterInternal(DisableEncodeUrlFilter.java:42)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.wrapFilter(ObservationFilterChainDecorator.java:240)
        at org.springframework.security.web.ObservationFilterChainDecorator$AroundFilterObservation$SimpleAroundFilterObservation.lambda$wrap$0(ObservationFilterChainDecorator.java:323)
        at org.springframework.security.web.ObservationFilterChainDecorator$ObservationFilter.doFilter(ObservationFilterChainDecorator.java:224)
        at org.springframework.security.web.ObservationFilterChainDecorator$VirtualFilterChain.doFilter(ObservationFilterChainDecorator.java:137)
        at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:233)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)
        at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
        at org.springframework.web.servlet.handler.HandlerMappingIntrospector.lambda$createCacheFilter$3(HandlerMappingIntrospector.java:243)
        at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)
        at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
        at org.springframework.security.config.annotation.web.configuration.WebMvcSecurityConfiguration$CompositeFilterChainProxy.doFilter(WebMvcSecurityConfiguration.java:238)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:362)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:278)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
        at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
        at org.springframework.web.filter.ServerHttpObservationFilter.doFilterInternal(ServerHttpObservationFilter.java:114)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
        at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: com.sap.ai.sdk.orchestration.OrchestrationClientException: Request failed with status 400 (Bad Request): 400 - Grounding Module: Document Grounding retrieval API returned: ELSER API is down. Please try again later or raise a ticket.
        at com.sap.ai.sdk.orchestration.OrchestrationClientException.lambda$static$0(OrchestrationClientException.java:32)
        at com.sap.ai.sdk.core.common.ClientResponseHandler.parseErrorResponseAndThrow(ClientResponseHandler.java:163)
        at com.sap.ai.sdk.core.common.ClientResponseHandler.buildAndThrowException(ClientResponseHandler.java:142)
        at com.sap.ai.sdk.core.common.ClientResponseHandler.handleResponse(ClientResponseHandler.java:71)
        at org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:247)
        at org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:188)
        at org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:162)
        at com.sap.ai.sdk.orchestration.OrchestrationHttpExecutor.execute(OrchestrationHttpExecutor.java:65)
        at com.sap.ai.sdk.orchestration.OrchestrationClient.executeRequest(OrchestrationClient.java:165)
        at com.sap.ai.sdk.orchestration.OrchestrationClient.chatCompletion(OrchestrationClient.java:99)
        at com.sap.bmb.ai.erroragent.service.AiCoreService.chatCompletion(AiCoreService.java:98)

Log File

Log file ...

Affected Development Phase

Getting Started

Impact

Inconvenience

Timeline

no go live

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions