CtrlK
BlogDocsLog inGet started
Tessl Logo

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

Quarkus LangChain4j OpenAI extension provides seamless integration between Quarkus and OpenAI's Large Language Models, enabling developers to easily incorporate LLMs into their applications with support for chat, streaming, embeddings, moderation, and image generation.

Overview
Eval results
Files

dev-ui-services.mddocs/

Development & Testing Services

JSON-RPC services for testing OpenAI integration in Quarkus Dev UI. These services provide interactive testing interfaces for image generation and content moderation directly from the Quarkus development console without writing code.

Overview

The extension includes JSON-RPC services that integrate with Quarkus Dev UI, enabling developers to:

  • Test image generation with different models, sizes, qualities, and prompts
  • Test content moderation with different models and content
  • Experiment with configurations before implementing in application code
  • Debug model behavior with real-time feedback
  • Validate API keys and configuration settings

These services are available only in development mode and are automatically registered with the Quarkus Dev UI system.

Key Features

  • No Code Required - Test models interactively from the browser
  • Configuration Testing - Test both default and named configurations
  • Real-time Results - Immediate feedback on model responses
  • JSON Response Format - Structured results easy to inspect
  • Dev-Only - Not included in production builds

Import Statements

import io.quarkiverse.langchain4j.openai.runtime.devui.OpenAiImagesJsonRPCService;
import io.quarkiverse.langchain4j.openai.runtime.devui.OpenAiModerationModelsJsonRPCService;
import io.quarkiverse.langchain4j.openai.runtime.config.LangChain4jOpenAiConfig;
import jakarta.inject.Inject;
import jakarta.json.JsonObject;
import jakarta.json.JsonArray;

Capabilities

Image Generation Testing Service

JSON-RPC service for testing DALL-E image generation models from Quarkus Dev UI.

/**
 * JSON-RPC service for testing OpenAI image generation in Dev UI.
 *
 * This service provides an interactive interface in the Quarkus Dev UI for
 * testing DALL-E models with different configurations, sizes, qualities,
 * and prompts without writing application code.
 *
 * Access via: Quarkus Dev UI → Extensions → LangChain4j OpenAI → Image Generation
 *
 * Usage:
 *     Navigate to Dev UI in development mode (http://localhost:8080/q/dev)
 *     Find the LangChain4j OpenAI extension card
 *     Click to access image generation testing interface
 */
public class OpenAiImagesJsonRPCService {

    /**
     * Runtime configuration injected by CDI.
     *
     * Provides access to both default and named OpenAI configurations
     * defined in application.properties.
     */
    @Inject
    LangChain4jOpenAiConfig config;

    /**
     * Generate an image using OpenAI DALL-E models.
     *
     * Parameters:
     *     configuration - Configuration name to use ("default" or named config)
     *     modelName - Model to use (e.g., "dall-e-3", "dall-e-2")
     *     size - Image size (e.g., "1024x1024", "1792x1024", "1024x1792")
     *     prompt - Text prompt describing the desired image
     *     quality - Image quality ("standard" or "hd", DALL-E 3 only)
     *
     * Returns:
     *     JsonObject with fields:
     *       - prompt (String): The original prompt
     *       - url (String): URL to the generated image (if responseFormat is "url")
     *       - base64Data (String): Base64-encoded image (if responseFormat is "b64_json")
     *       - revisedPrompt (String): OpenAI's refined version of the prompt
     *
     * Example Response:
     *     {
     *       "prompt": "A sunset over mountains",
     *       "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/...",
     *       "base64Data": null,
     *       "revisedPrompt": "A breathtaking sunset over majestic mountains..."
     *     }
     *
     * Throws:
     *     RuntimeException if image generation fails or API key is invalid
     *
     * The service builds a QuarkusOpenAiImageModel using the specified
     * configuration and model settings, generates the image, and returns
     * the result in a structured JSON format for display in the Dev UI.
     */
    public JsonObject generate(
        String configuration,
        String modelName,
        String size,
        String prompt,
        String quality
    );
}

Content Moderation Testing Service

JSON-RPC service for testing OpenAI content moderation models from Quarkus Dev UI.

/**
 * JSON-RPC service for testing OpenAI content moderation in Dev UI.
 *
 * This service provides an interactive interface in the Quarkus Dev UI for
 * testing OpenAI's content moderation API with different configurations and
 * content. It helps developers understand how moderation works and test
 * content safety policies before implementation.
 *
 * Access via: Quarkus Dev UI → Extensions → LangChain4j OpenAI → Content Moderation
 *
 * Usage:
 *     Navigate to Dev UI in development mode (http://localhost:8080/q/dev)
 *     Find the LangChain4j OpenAI extension card
 *     Click to access content moderation testing interface
 */
public class OpenAiModerationModelsJsonRPCService {

    /**
     * Runtime configuration injected by CDI.
     *
     * Provides access to both default and named OpenAI configurations
     * defined in application.properties.
     */
    @Inject
    LangChain4jOpenAiConfig config;

    /**
     * Moderate content using OpenAI moderation models.
     *
     * Parameters:
     *     configuration - Configuration name to use ("default" or named config)
     *     modelName - Model to use (e.g., "omni-moderation-latest", "text-moderation-latest")
     *     prompt - Content text to moderate
     *
     * Returns:
     *     JsonObject with fields:
     *       - flagged (boolean): Whether any policy violations were detected
     *       - categories (JsonArray): Array of moderation category results
     *
     *     Each category object in the array contains:
     *       - name (String): Category name (e.g., "sexual", "hate", "violence")
     *       - flagged (boolean): Whether this specific category was flagged
     *       - score (double): Confidence score (0.0 to 1.0) for this category
     *
     * Example Response:
     *     {
     *       "flagged": false,
     *       "categories": [
     *         { "name": "sexual", "flagged": false, "score": 0.00012 },
     *         { "name": "hate", "flagged": false, "score": 0.00008 },
     *         { "name": "hate-threatening", "flagged": false, "score": 0.00001 },
     *         { "name": "self-harm", "flagged": false, "score": 0.00003 },
     *         { "name": "violence", "flagged": false, "score": 0.00015 },
     *         { "name": "violence-graphic", "flagged": false, "score": 0.00004 },
     *         { "name": "sexual-minors", "flagged": false, "score": 0.00002 }
     *       ]
     *     }
     *
     * Supported Categories:
     *   - sexual: Sexual content
     *   - hate: Hateful content
     *   - hate-threatening: Hateful content that includes violence or threats
     *   - self-harm: Content promoting or describing self-harm
     *   - violence: Violent content
     *   - violence-graphic: Graphic violent content
     *   - sexual-minors: Sexual content involving minors
     *
     * Throws:
     *     RuntimeException if moderation fails or API key is invalid
     *
     * The service builds a moderation model using the specified configuration,
     * moderates the content, and returns detailed category scores and flagging
     * results in a structured JSON format for display in the Dev UI.
     */
    public JsonObject moderate(
        String configuration,
        String modelName,
        String prompt
    );
}

Usage in Development

Accessing Dev UI Services

  1. Start Quarkus in Development Mode:

    ./mvnw quarkus:dev
  2. Navigate to Dev UI:

    • Open browser to http://localhost:8080/q/dev
    • Find "LangChain4j OpenAI" extension card
    • Click to access testing interfaces
  3. Test Image Generation:

    • Select configuration (default or named)
    • Choose model (dall-e-3, dall-e-2)
    • Set size, quality, and prompt
    • Click "Generate" to see results
    • View generated image and revised prompt
  4. Test Content Moderation:

    • Select configuration (default or named)
    • Choose moderation model
    • Enter content to moderate
    • Click "Moderate" to see results
    • Review flagging status and category scores

Testing Named Configurations

Dev UI services support testing named configurations:

# application.properties
quarkus.langchain4j.openai.api-key=sk-default-key

# Named configuration for creative images
quarkus.langchain4j.openai.creative.api-key=sk-creative-key
quarkus.langchain4j.openai.creative.image-model.model-name=dall-e-3
quarkus.langchain4j.openai.creative.image-model.quality=hd
quarkus.langchain4j.openai.creative.image-model.style=vivid

# Named configuration for strict moderation
quarkus.langchain4j.openai.strict.api-key=sk-strict-key
quarkus.langchain4j.openai.strict.moderation-model.model-name=omni-moderation-latest

Then test these configurations in Dev UI:

  • Select "creative" configuration for image generation with HD quality
  • Select "strict" configuration for moderation with latest model

Response Formats

Image Generation Response:

{
  "prompt": "A futuristic city at night",
  "url": "https://oaidalleapiprodscus.blob.core.windows.net/...",
  "base64Data": null,
  "revisedPrompt": "A stunning futuristic city skyline at night with neon lights..."
}

Moderation Response:

{
  "flagged": true,
  "categories": [
    { "name": "sexual", "flagged": false, "score": 0.00012 },
    { "name": "hate", "flagged": true, "score": 0.89234 },
    { "name": "hate-threatening", "flagged": false, "score": 0.12345 },
    { "name": "self-harm", "flagged": false, "score": 0.00003 },
    { "name": "violence", "flagged": false, "score": 0.00015 },
    { "name": "violence-graphic", "flagged": false, "score": 0.00004 },
    { "name": "sexual-minors", "flagged": false, "score": 0.00002 }
  ]
}

Integration with Application Code

While Dev UI services are for testing, the patterns translate directly to application code:

Image Generation

After testing in Dev UI, implement in code:

import io.quarkiverse.langchain4j.openai.QuarkusOpenAiImageModel;
import dev.langchain4j.model.image.ImageModel;
import dev.langchain4j.data.image.Image;
import dev.langchain4j.model.output.Response;

ImageModel imageModel = QuarkusOpenAiImageModel.builder()
    .configName("creative")  // Use named config tested in Dev UI
    .build();

Response<Image> response = imageModel.generate("A futuristic city at night");
String imageUrl = response.content().url();

Content Moderation

After testing in Dev UI, implement in code:

import dev.langchain4j.model.moderation.ModerationModel;
import dev.langchain4j.model.moderation.Moderation;
import dev.langchain4j.model.output.Response;
import jakarta.inject.Inject;

@ApplicationScoped
public class ModerationService {
    @Inject
    ModerationModel moderationModel;  // Uses default config

    public boolean isSafe(String content) {
        Response<Moderation> response = moderationModel.moderate(content);
        return !response.content().flagged();
    }
}

Notes

  • Development Only: These services are only available when running Quarkus in development mode (mvn quarkus:dev)
  • Not in Production: Dev UI services are not included in production builds
  • API Key Required: Valid OpenAI API key must be configured to use these services
  • Rate Limits: Be mindful of OpenAI API rate limits when testing
  • Cost Awareness: Image generation and API calls incur costs; monitor usage during testing
  • Configuration Validation: Use Dev UI services to validate configuration before deploying to production

Install with Tessl CLI

npx tessl i tessl/maven-io-quarkiverse-langchain4j--quarkus-langchain4j-openai@1.7.0

docs

chat-models.md

configuration.md

cost-estimation.md

dev-ui-services.md

embedding-models.md

image-models.md

index.md

moderation-models.md

tile.json