Annotation Interface RegisterAiService


@Retention(RUNTIME) @Target(TYPE) public @interface RegisterAiService
Used to create Langchain4j's AiServices in a declarative manner that the application can then use simply by using the class as a CDI bean. Under the hood Langchain4j's AiServices.builder(Class) is called while also providing the builder with the proper ChatLanguageModel bean (mandatory), tools bean (optional), ChatMemoryProvider and Retriever beans (which by default are configured if such beans exist).

NOTE: The resulting CDI bean is RequestScoped by default. If you need to change the scope, simply annotate the class with a CDI scope. CAUTION: When using anything other than the request scope, you need to be very careful with the chat memory implementation.

NOTE: When the application also contains the quarkus-micrometer extension, metrics are automatically generated for the method invocations.

  • Element Details

    • chatLanguageModelSupplier

      Class<? extends Supplier<dev.langchain4j.model.chat.ChatLanguageModel>> chatLanguageModelSupplier
      Configures the way to obtain the ChatLanguageModel to use. If not configured, the default CDI bean implementing the model is looked up. Such a bean provided automatically by extensions such as quarkus-langchain4j-openai, quarkus-langchain4j-azure-openai or quarkus-langchain4j-hugging-face
      Default:
      io.quarkiverse.langchain4j.RegisterAiService.BeanChatLanguageModelSupplier.class
    • tools

      Class<?>[] tools
      Tool classes to use. All tools are expected to be CDI beans.

      NOTE: when this is used, either a ChatMemoryProvider bean must be present in the application, or a custom Supplier<dev.langchain4j.memory.chat.ChatMemoryProvider> must be set.

      Default:
      {}
    • chatMemoryProviderSupplier

      Class<? extends Supplier<dev.langchain4j.memory.chat.ChatMemoryProvider>> chatMemoryProviderSupplier
      Configures the way to obtain the ChatMemoryProvider to use. By default, Quarkus will look for a CDI bean that implements ChatMemoryProvider, but will fall back to not using any memory if no such bean exists. If an arbitrary ChatMemoryProvider instance is needed, a custom implementation of Supplier<dev.langchain4j.memory.chat.ChatMemoryProvider> needs to be provided.

      If the memory provider to use is exposed as a CDI bean exposing the type ChatMemoryProvider, then set the value to RegisterAiService.BeanChatMemoryProviderSupplier

      NOTE: when tools() is set, the default is changed to RegisterAiService.BeanChatMemoryProviderSupplier which means that a bean a ChatMemoryProvider bean must be present. The alternative in this case is to set a custom Supplier<dev.langchain4j.memory.chat.ChatMemoryProvider>.

      Default:
      io.quarkiverse.langchain4j.RegisterAiService.BeanIfExistsChatMemoryProviderSupplier.class
    • retrieverSupplier

      Class<? extends Supplier<dev.langchain4j.retriever.Retriever<dev.langchain4j.data.segment.TextSegment>>> retrieverSupplier
      Configures the way to obtain the Retriever to use (when using RAG). By default, no chat memory is used. If a CDI bean of type ChatMemory is needed, the value should be RegisterAiService.BeanRetrieverSupplier. If an arbitrary ChatMemory instance is needed, a custom implementation of Supplier<dev.langchain4j.memory.ChatMemory> needs to be provided.
      Default:
      io.quarkiverse.langchain4j.RegisterAiService.NoRetrieverSupplier.class
    • auditServiceSupplier

      Class<? extends Supplier<AuditService>> auditServiceSupplier
      Configures the way to obtain the AuditService to use. By default, Quarkus will look for a CDI bean that implements AuditService, but will fall back to not using any memory if no such bean exists. If an arbitrary AuditService instance is needed, a custom implementation of Supplier<AuditService> needs to be provided.
      Default:
      io.quarkiverse.langchain4j.RegisterAiService.BeanIfExistsAuditServiceSupplier.class