Skip to main content
Incubating Status GitHubReplicate.com

Overview

This project provides Spring AI integration for Replicate.com, enabling access to hundreds of AI models for text generation, image/video/audio generation, embeddings, classification, and more. Replicate hosts a wide variety of AI models with varying input/output schemas. Rather than creating model-specific implementations, this integration provides four flexible adapter models that work with any Replicate model:

ReplicateChatModel

Conversational LLMs (Claude, GPT, Llama, Grok, etc.)

ReplicateMediaModel

Media generation (images, video, audio)

ReplicateStringModel

String outputs (classifiers, detectors)

ReplicateStructuredModel

Structured outputs (embeddings, JSON responses)
Version: 1.0.0-SNAPSHOT Maven snapshot artifacts are available from Maven Central Snapshots

Project Structure

spring-ai-replicate/
├── spring-ai-replicate/                         # API, Models and Options
├── spring-ai-replicate-spring-boot-autoconfigure/   # Autoconfiguration
└── spring-ai-replicate-spring-boot-starter/     # Starter Dependency

Quick Start

Add Dependency

<dependency>
    <groupId>org.springaicommunity</groupId>
    <artifactId>spring-ai-replicate-spring-boot-starter</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>

Configure Models

Configure via application.properties:
# API Token
spring.ai.replicate.api-token=REPLICATE_TOKEN

# Polling interval for async operations
spring.ai.replicate.retry-fixed-backoff=1000ms

# Chat model (LLMs)
spring.ai.replicate.chat.options.model=meta/meta-llama-3-8b-instruct
spring.ai.replicate.chat.options.input.temperature=0.7
spring.ai.replicate.chat.options.input.max_tokens=500

# Media model (image/video/audio generation)
spring.ai.replicate.media.options.model=black-forest-labs/flux-schnell
spring.ai.replicate.media.options.input.num_outputs=2

# String model (classification/detection)
spring.ai.replicate.string.options.model=falcons-ai/nsfw_image_detection

# Structured model (embeddings)
spring.ai.replicate.structured.options.model=openai/clip
All model beans are automatically created and available for injection.

Usage Examples

Chat Model (Conversational AI)

@RestController
class ChatController {
    @Autowired
    private ReplicateChatModel chatModel;

    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        return chatModel.call(message);
    }
}
Streaming support:
public void streamingChat() {
    Flux<ChatResponse> responseFlux = chatModel.stream(
        new Prompt("Count from 1 to 100")
    );

    responseFlux.subscribe(chatResponse -> {
        String chunk = chatResponse.getResult().getOutput().getText();
        System.out.print(chunk);
    });
}

Media Model (Image/Video/Audio Generation)

@Autowired
private ReplicateMediaModel mediaModel;

public void generateImages() {
    ReplicateOptions options = ReplicateOptions.builder()
        .model("black-forest-labs/flux-schnell")
        .withParameter("prompt", "a cat sitting on a laptop")
        .withParameter("num_outputs", 2)
        .build();

    MediaResponse response = mediaModel.generate(options);

    List<String> imageUrls = response.getUris();
    imageUrls.forEach(url -> System.out.println("Image URL: " + url));
}

String Model (Classification/Detection)

Two ways to upload resources to Replicate: File Upload:
@Autowired
private ReplicateStringModel stringModel;

@Autowired
private ReplicateApi replicateApi;

public void classifyImage() {
    FileSystemResource fileResource = new FileSystemResource(
        Paths.get("path/to/image.jpg")
    );
    FileUploadResponse uploadResponse = replicateApi.uploadFile(
        fileResource, "image.jpg"
    );
    String imageUrl = uploadResponse.urls().get();

    ReplicateOptions options = ReplicateOptions.builder()
        .model("falcons-ai/nsfw_image_detection")
        .withParameter("image", imageUrl)
        .build();

    StringResponse response = stringModel.generate(options);
    System.out.println("Classification: " + response.getOutput());
}
Base64 Encoding:
public void classifyWithBase64() {
    byte[] imageBytes = Files.readAllBytes(Paths.get("path/to/image.jpg"));
    String base64Image = "data:application/octet-stream;base64,"
        + Base64.getEncoder().encodeToString(imageBytes);

    ReplicateOptions options = ReplicateOptions.builder()
        .model("falcons-ai/nsfw_image_detection")
        .withParameter("image", base64Image)
        .build();

    StringResponse response = stringModel.generate(options);
}

Structured Model (Embeddings)

@Autowired
private ReplicateStructuredModel structuredModel;

public void generateEmbeddings() {
    ReplicateOptions options = ReplicateOptions.builder()
        .model("openai/clip")
        .withParameter("text", "spring ai framework")
        .build();

    StructuredResponse response = structuredModel.generate(options);
    Map<String, Object> rawOutput = response.getOutput();
    MyClass output = objectMapper.convertValue(rawOutput, MyClass.class);
}

Per-Request Options

Override configuration on a per-request basis:
public void chatWithOptions() {
    ReplicateChatOptions options = ReplicateChatOptions.builder()
        .model("meta/meta-llama-3-8b-instruct")
        .withParameter("temperature", 0.8)
        .withParameter("max_tokens", 100)
        .build();

    Prompt prompt = new Prompt("Tell me a joke", options);
    ChatResponse response = chatModel.call(prompt);

    System.out.println(response.getResult().getOutput().getText());
    System.out.println("Tokens used: " +
        response.getMetadata().getUsage().getTotalTokens());
}
Chat Model Options: Use ReplicateChatOptions for chat models to integrate with Spring AI conventions. Other models use ReplicateOptions.

Important Notes

Multi-turn Conversations: The current implementation does not support multi-turn conversations with conversation history. Each call is independent due to varying model schemas.

Model Discovery

Visit Replicate.com/explore to discover available models. Each model has different input parameters - check the model’s documentation for specific requirements.

Resources

License

Spring AI Replicate is Open Source software released under the Apache 2.0 license.