Annotation Interface RegisterAiService
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.
See also ToolBox
, SeedMemory
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final class
Marker that is used to tell Quarkus to use theChatLanguageModel
that has been configured as a CDI bean by any of the extensions providing such capability (such asquarkus-langchain4j-openai
andquarkus-langchain4j-hugging-face
).static final class
Marker that is used to tell Quarkus to use the retriever that the user has configured as a CDI bean.static final class
Marker that is used to tell Quarkus to use theAuditService
that the user has configured as a CDI bean.static final class
Marker that is used to tell Quarkus to use theImageModel
that the user has configured as a CDI bean.static final class
Marker that is used to tell Quarkus to use theModerationModel
that the user has configured as a CDI bean.static final class
Marker that is used to tell Quarkus to use theRetrievalAugmentor
that the user has configured as a CDI bean.static final class
Marker that is used to tell Quarkus to use theToolProvider
that the user has configured as a CDI bean.static final class
Marker that is used to tell Quarkus to use theStreamingChatLanguageModel
that has been configured as a CDI bean by * any of the extensions providing such capability (such asquarkus-langchain4j-openai
andquarkus-langchain4j-hugging-face
).static final class
Marker that is used when the user does not want any memory configured for the AiServicestatic final class
Marker that is used to tell Quarkus to not use any retrieval augmentor even if a CDI bean implementing the `RetrievalAugmentor` interface exists.static final class
Marker class to indicate that no retriever should be usedstatic final class
Marker that is used when the user does not want any tool provider -
Optional Element Summary
Optional ElementsModifier and TypeOptional ElementDescriptionClass
<? extends Supplier<AuditService>> Configures the way to obtain theAuditService
to use.Configures the way to obtain theChatLanguageModel
to use.Configures the way to obtain theChatMemoryProvider
.WhenchatLanguageModelSupplier
is set toBeanChatLanguageModelSupplier.class
(which is the default) this allows the selection of theChatLanguageModel
CDI bean to use.Configures the way to obtain theModerationModel
to use.Configures the way to obtain theRetrievalAugmentor
to use (when using RAG).Class
<? extends dev.langchain4j.retriever.Retriever<dev.langchain4j.data.segment.TextSegment>> Deprecated, for removal: This API element is subject to removal in a future version.Use retrievalAugmentor insteadConfigures the way to obtain theStreamingChatLanguageModel
to use.Configures a toolProviderSupplier.Class<?>[]
Tool classes to use.
-
Element Details
-
streamingChatLanguageModelSupplier
Class<? extends Supplier<dev.langchain4j.model.chat.StreamingChatLanguageModel>> streamingChatLanguageModelSupplierConfigures the way to obtain theStreamingChatLanguageModel
to use. If not configured, the default CDI bean implementing the model is looked up. Such a bean provided automatically by extensions such asquarkus-langchain4j-openai
,quarkus-langchain4j-azure-openai
orquarkus-langchain4j-hugging-face
- Default:
io.quarkiverse.langchain4j.RegisterAiService.BeanStreamingChatLanguageModelSupplier.class
-
chatLanguageModelSupplier
Configures the way to obtain theChatLanguageModel
to use. If not configured, the default CDI bean implementing the model is looked up. Such a bean provided automatically by extensions such asquarkus-langchain4j-openai
,quarkus-langchain4j-azure-openai
orquarkus-langchain4j-hugging-face
- Default:
io.quarkiverse.langchain4j.RegisterAiService.BeanChatLanguageModelSupplier.class
-
modelName
String modelNameWhenchatLanguageModelSupplier
is set toBeanChatLanguageModelSupplier.class
(which is the default) this allows the selection of theChatLanguageModel
CDI bean to use.If not set, the default model (i.e. the one configured without setting the model name) is used. An example of the default model configuration is the following:
quarkus.langchain4j.openai.chat-model.model-name=gpt-4-turbo-preview
If set, it uses the model configured by name. For example if this is set to
somename
an example configuration value for that named model could be:quarkus.langchain4j.somename.openai.chat-model.model-name=gpt-4-turbo-preview
- Default:
"<default>"
-
tools
-
chatMemoryProviderSupplier
Class<? extends Supplier<dev.langchain4j.memory.chat.ChatMemoryProvider>> chatMemoryProviderSupplierConfigures the way to obtain theChatMemoryProvider
.Be default, Quarkus configures a
ChatMemoryProvider
bean that uses aInMemoryChatMemoryStore
bean as the backing store. The default type for the actualChatMemory
isMessageWindowChatMemory
and it is configured with the value of thequarkus.langchain4j.chat-memory.memory-window.max-messages
configuration property (which default to 10) as a way of limiting the number of messages in each chat.If the application provides its own
ChatMemoryProvider
bean, that takes precedence over what Quarkus provides as the default.If the application provides an implementation of
ChatMemoryStore
, then that is used instead of the defaultInMemoryChatMemoryStore
.In the most advances case, an arbitrary
ChatMemoryProvider
can be used by having a customSupplier<ChatMemoryProvider>
configured in this property.Supplier<dev.langchain4j.memory.chat.ChatMemoryProvider>
needs to be provided.- Default:
io.quarkiverse.langchain4j.RegisterAiService.BeanChatMemoryProviderSupplier.class
-
retriever
@Deprecated(forRemoval=true) Class<? extends dev.langchain4j.retriever.Retriever<dev.langchain4j.data.segment.TextSegment>> retrieverDeprecated, for removal: This API element is subject to removal in a future version.Use retrievalAugmentor insteadConfigures the way to obtain theRetriever
to use (when using RAG). By default, no retriever is used.- Default:
io.quarkiverse.langchain4j.RegisterAiService.NoRetriever.class
-
retrievalAugmentor
Configures the way to obtain theRetrievalAugmentor
to use (when using RAG). The Supplier may or may not be a CDI bean (but most typically it will, so consider adding a bean-defining annotation to it). If it is not a CDI bean, Quarkus will create an instance by calling its no-arg constructor.If unspecified, Quarkus will attempt to locate a CDI bean that implements
RetrievalAugmentor
and use it if one exists.- Default:
io.quarkiverse.langchain4j.RegisterAiService.BeanIfExistsRetrievalAugmentorSupplier.class
-
auditServiceSupplier
Class<? extends Supplier<AuditService>> auditServiceSupplierConfigures the way to obtain theAuditService
to use. By default, Quarkus will look for a CDI bean that implementsAuditService
, but will fall back to not using any memory if no such bean exists. If an arbitraryAuditService
instance is needed, a custom implementation ofSupplier<AuditService>
needs to be provided.- Default:
io.quarkiverse.langchain4j.RegisterAiService.BeanIfExistsAuditServiceSupplier.class
-
moderationModelSupplier
Configures the way to obtain theModerationModel
to use. By default, Quarkus will look for a CDI bean that implementsModerationModel
if at least one method is annotated with @Moderate. If an arbitraryModerationModel
instance is needed, a custom implementation ofSupplier<dev.langchain4j.model.moderation.ModerationModel>
needs to be provided.- Default:
io.quarkiverse.langchain4j.RegisterAiService.BeanIfExistsModerationModelSupplier.class
-
toolProviderSupplier
-