tessl install tessl/maven-io-quarkiverse-langchain4j--quarkus-langchain4j-core@1.5.0Quarkus LangChain4j Core provides runtime integration for LangChain4j with the Quarkus framework, enabling declarative AI service creation through CDI annotations.
Model Selection enables fine-grained control over which LLM model instance handles requests through CDI qualifiers, allowing different models for different purposes within the same application.
CDI qualifier for selecting specific named model instances.
// Package: io.quarkiverse.langchain4j
/**
* CDI Qualifier for selecting named model instances.
* Use to inject or specify specific models by name.
*/
@Target({ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface ModelName {
/**
* The name of the model to select.
* Must match a model name configured in application properties.
*/
String value();
/**
* AnnotationLiteral for programmatic creation of @ModelName qualifiers.
*/
final class Literal extends AnnotationLiteral<ModelName> implements ModelName {
/**
* Create a ModelName literal with the given value.
*
* @param value The model name
* @return ModelName annotation literal
*/
public static Literal of(String value);
@Override
public String value();
}
}Specify which model an AI service should use:
import io.quarkiverse.langchain4j.RegisterAiService;
@RegisterAiService(modelName = "gpt-4")
public interface AdvancedAssistant {
String chat(String message);
}
@RegisterAiService(modelName = "gpt-3.5-turbo")
public interface BasicAssistant {
String chat(String message);
}Inject specific model instances:
import io.quarkiverse.langchain4j.ModelName;
import dev.langchain4j.model.chat.ChatModel;
import jakarta.inject.Inject;
public class ModelConsumer {
@Inject
@ModelName("gpt-4")
ChatModel advancedModel;
@Inject
@ModelName("claude-3-opus")
ChatModel claudeModel;
public String useSpecificModel(String prompt) {
return advancedModel.generate(prompt);
}
}Create @ModelName qualifiers programmatically:
import io.quarkiverse.langchain4j.ModelName;
import dev.langchain4j.model.chat.ChatModel;
import jakarta.enterprise.inject.Instance;
import jakarta.inject.Inject;
public class DynamicModelSelector {
@Inject
Instance<ChatModel> models;
public ChatModel selectModel(String modelName) {
ModelName.Literal qualifier = ModelName.Literal.of(modelName);
return models.select(qualifier).get();
}
public String generateWithModel(String modelName, String prompt) {
ChatModel model = selectModel(modelName);
return model.generate(prompt);
}
}Configure named models in application.properties:
# Configure GPT-4 model
quarkus.langchain4j.openai.gpt-4.api-key=${OPENAI_API_KEY}
quarkus.langchain4j.openai.gpt-4.model-name=gpt-4
quarkus.langchain4j.openai.gpt-4.temperature=0.7
quarkus.langchain4j.openai.gpt-4.timeout=60s
# Configure GPT-3.5-turbo model
quarkus.langchain4j.openai.gpt-3-5-turbo.api-key=${OPENAI_API_KEY}
quarkus.langchain4j.openai.gpt-3-5-turbo.model-name=gpt-3.5-turbo
quarkus.langchain4j.openai.gpt-3-5-turbo.temperature=0.3
quarkus.langchain4j.openai.gpt-3-5-turbo.timeout=30s
# Configure Claude model
quarkus.langchain4j.anthropic.claude-3-opus.api-key=${ANTHROPIC_API_KEY}
quarkus.langchain4j.anthropic.claude-3-opus.model-name=claude-3-opus-20240229Named model selection is useful for: