or run

tessl search
Log in

Version

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/io.quarkiverse.langchain4j/quarkus-langchain4j-core@1.5.x

docs

index.md
tile.json

tessl/maven-io-quarkiverse-langchain4j--quarkus-langchain4j-core

tessl install tessl/maven-io-quarkiverse-langchain4j--quarkus-langchain4j-core@1.5.0

Quarkus LangChain4j Core provides runtime integration for LangChain4j with the Quarkus framework, enabling declarative AI service creation through CDI annotations.

model-selection.mddocs/reference/

Model Selection

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.

Capabilities

@ModelName Annotation

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();
    }
}

Usage Patterns

Named Models in @RegisterAiService

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);
}

CDI Injection with @ModelName

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);
    }
}

Programmatic Model Selection

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);
    }
}

Configuration

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-20240229

Use Cases

Named model selection is useful for:

  • Cost Optimization: Use cheaper models for simple tasks, expensive models for complex ones
  • Performance Tuning: Fast models for latency-sensitive operations, powerful models for accuracy
  • A/B Testing: Compare different models side-by-side
  • Fallback Strategies: Switch to backup models when primary fails
  • Specialized Models: Different models for different domains (code, translation, summarization)
  • Multi-Provider: Mix models from different providers (OpenAI, Anthropic, local models)