Quarkus extension deployment module for OpenAI integration with LangChain4j providing build-time processing and CDI bean generation
The Quarkus LangChain4j OpenAI deployment module provides development-time UI integration for testing image generation and content moderation models directly from the Quarkus Dev UI without writing code.
The Development UI is available when running Quarkus in development mode.
Starting Development Mode:
mvn quarkus:devAccessing Dev UI:
Open your browser to: http://localhost:8080/q/dev-ui
Look for the LangChain4j OpenAI card in the extensions list.
Interactive interface for testing OpenAI DALL-E image generation with real-time preview and configuration options.
Requirements:
quarkus.langchain4j.openai.image-model.enabled=true (default)Features:
Usage Steps:
Configuration Properties Used:
# Image model configuration for Dev UI
quarkus.langchain4j.openai.image-model.enabled=true
quarkus.langchain4j.openai.image-model.model-name=dall-e-3
quarkus.langchain4j.openai.api-key=sk-your-api-key
# Optional: Named configuration for Dev UI testing
quarkus.langchain4j.openai.test-images.api-key=sk-test-key
quarkus.langchain4j.openai.test-images.image-model.model-name=dall-e-3Example Prompts:
Interactive interface for testing OpenAI content moderation with category-specific results and detailed scores.
Requirements:
quarkus.langchain4j.openai.moderation-model.enabled=true (default)Features:
Usage Steps:
Configuration Properties Used:
# Moderation model configuration for Dev UI
quarkus.langchain4j.openai.moderation-model.enabled=true
quarkus.langchain4j.openai.moderation-model.model-name=omni-moderation-latest
quarkus.langchain4j.openai.api-key=sk-your-api-key
# Optional: Named configuration for Dev UI testing
quarkus.langchain4j.openai.test-moderation.api-key=sk-test-key
quarkus.langchain4j.openai.test-moderation.moderation-model.model-name=omni-moderation-latestModeration Categories:
Example Test Content:
The Dev UI automatically detects and supports multiple named OpenAI configurations.
Configuration Example:
# Default configuration
quarkus.langchain4j.openai.api-key=sk-default
quarkus.langchain4j.openai.image-model.model-name=dall-e-3
# Development configuration
quarkus.langchain4j.openai.dev.api-key=sk-dev
quarkus.langchain4j.openai.dev.image-model.model-name=dall-e-3
quarkus.langchain4j.openai.dev.image-model.quality=hd
# Testing configuration
quarkus.langchain4j.openai.test.api-key=sk-test
quarkus.langchain4j.openai.test.moderation-model.model-name=text-moderation-stableDev UI Behavior:
Backend services powering the Dev UI, implementing JSON RPC protocol for communication.
package io.quarkiverse.langchain4j.openai.runtime.devui;
/**
* JSON RPC service for Dev UI image generation.
* Handles image generation requests from the Dev UI frontend.
*/
public class OpenAiImagesJsonRPCService {
/**
* Generate an image using specified configuration.
*
* @param configName Configuration name (e.g., "default")
* @param prompt Image description prompt
* @param size Image size (e.g., "1024x1024")
* @param quality Image quality ("standard" or "hd")
* @param style Image style ("vivid" or "natural")
* @return Image URL or base64 data
*/
public ImageResult generateImage(
String configName,
String prompt,
String size,
String quality,
String style
) {
// Implementation
}
/**
* Get available configurations for image models.
*
* @return List of configuration names
*/
public List<String> getConfigurations() {
// Implementation
}
}package io.quarkiverse.langchain4j.openai.runtime.devui;
/**
* JSON RPC service for Dev UI content moderation.
* Handles moderation requests from the Dev UI frontend.
*/
public class OpenAiModerationModelsJsonRPCService {
/**
* Moderate content using specified configuration.
*
* @param configName Configuration name (e.g., "default")
* @param text Text content to moderate
* @return Moderation results with category flags and scores
*/
public ModerationResult moderate(String configName, String text) {
// Implementation
}
/**
* Get available configurations for moderation models.
*
* @return List of configuration names
*/
public List<String> getConfigurations() {
// Implementation
}
}RPC Service Features:
The Dev UI provides clear error messages for common issues.
Common Errors and Solutions:
"API key not configured":
quarkus.langchain4j.openai.api-key in application.propertiesQUARKUS_LANGCHAIN4J_OPENAI_API_KEY"Invalid API key":
"Model not enabled":
quarkus.langchain4j.openai.image-model.enabled=truequarkus.langchain4j.openai.moderation-model.enabled=true"Rate limit exceeded":
"Network error":
"Insufficient quota":
The Dev UI pages are only registered in development mode using the @BuildStep(onlyIf = IsDevelopment.class) annotation.
When Dev UI is Available:
mvn quarkus:devgradle quarkusDevWhen Dev UI is NOT Available:
mvn clean package)mvn clean package -Pnative)mvn test)Build-Time Condition:
package io.quarkus.deployment;
/**
* Condition that is true only in development mode.
* Used to conditionally register Dev UI components.
*/
public class IsDevelopment implements BooleanSupplier {
@Override
public boolean getAsBoolean() {
return LaunchMode.current() == LaunchMode.DEVELOPMENT;
}
}This ensures Dev UI code and dependencies are excluded from production builds, reducing application size and attack surface.
The Dev UI uses web components for the frontend interface.
Registered Web Components:
Images Component:
qwc-images.jsfont-awesome-solid:paletteimageModelConfigurations (list of config names)Moderation Component:
qwc-moderation.jsfont-awesome-solid:triangle-exclamationmoderationModelConfigurations (list of config names)Component Registration:
package io.quarkus.devui.spi.page;
/**
* Builder for web component pages in Dev UI.
*/
public class Page {
public static WebComponentPageBuilder webComponentPageBuilder() {
return new WebComponentPageBuilder();
}
public static class WebComponentPageBuilder {
/**
* Set page title displayed in Dev UI.
*/
public WebComponentPageBuilder title(String title);
/**
* Set web component JavaScript file.
*/
public WebComponentPageBuilder componentLink(String componentLink);
/**
* Set icon using Font Awesome class.
*/
public WebComponentPageBuilder icon(String icon);
public Page build();
}
}To test application build and startup without valid OpenAI credentials, disable integration:
quarkus.langchain4j.openai.enable-integration=falseBehavior:
This allows development and testing of application logic without requiring OpenAI API access.
Hiding Specific Pages:
# Disable image model to hide Images page
quarkus.langchain4j.openai.image-model.enabled=false
# Disable moderation model to hide Moderation page
quarkus.langchain4j.openai.moderation-model.enabled=falseUsing Different Models in Dev Mode:
# Use cheaper/faster models in development
%dev.quarkus.langchain4j.openai.image-model.model-name=dall-e-2
%dev.quarkus.langchain4j.openai.image-model.quality=standard
# Use latest models in production
%prod.quarkus.langchain4j.openai.image-model.model-name=dall-e-3
%prod.quarkus.langchain4j.openai.image-model.quality=hdVerbose Logging for Debugging:
# Enable request/response logging in dev mode
%dev.quarkus.langchain4j.openai.log-requests=true
%dev.quarkus.langchain4j.openai.log-responses=true
%dev.quarkus.langchain4j.openai.log-requests-curl=trueView logs in console to debug Dev UI interactions with OpenAI API.
Test OpenAI capabilities without writing code:
Verify configuration is correct:
Estimate API costs before production:
Share results with team members:
Install with Tessl CLI
npx tessl i tessl/maven-io-quarkiverse-langchain4j--quarkus-langchain4j-openai-deployment