CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-springframework-ai--spring-ai-openai

OpenAI models support for Spring AI, providing comprehensive integration for chat completion, embeddings, image generation, audio transcription, text-to-speech, and content moderation capabilities within Spring Boot applications.

Overview
Eval results
Files

index.mddocs/

Spring AI OpenAI

OpenAI integration for Spring AI, providing Java APIs for chat completion, embeddings, image generation, audio transcription/synthesis, and content moderation within Spring Boot applications.

Package Information

  • Group ID: org.springframework.ai
  • Artifact ID: spring-ai-openai
  • Version: 1.1.2
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai</artifactId>
    <version>1.1.2</version>
</dependency>

Quick Start

import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.ai.openai.api.OpenAiApi;
import org.springframework.ai.chat.prompt.Prompt;

// Create API client
var openAiApi = OpenAiApi.builder()
    .apiKey(System.getenv("OPENAI_API_KEY"))
    .build();

// Create chat model
var chatModel = OpenAiChatModel.builder()
    .openAiApi(openAiApi)
    .build();

// Generate response
var response = chatModel.call(new Prompt("Explain quantum computing"));
System.out.println(response.getResult().getOutput().getContent());

→ Complete Quick Start Guide

Core Components

Model Layer

High-level implementations of Spring AI interfaces:

ModelPurposeReference
OpenAiChatModelChat completions (GPT-4, GPT-3.5, O-series)Chat Models
OpenAiEmbeddingModelVector embeddings for semantic searchEmbeddings
OpenAiImageModelImage generation (DALL-E 2/3)Images
OpenAiAudioSpeechModelText-to-speech synthesisAudio
OpenAiAudioTranscriptionModelAudio transcription (Whisper)Audio
OpenAiModerationModelContent moderationModeration

API Client Layer

Low-level REST clients for direct API access:

ClientPurposeReference
OpenAiApiChat & embeddingsAPI Clients
OpenAiImageApiImage generationAPI Clients
OpenAiAudioApiAudio operationsAPI Clients
OpenAiModerationApiContent moderationAPI Clients
OpenAiFileApiFile managementAPI Clients

Key Features

Chat Completion

  • Multiple models: GPT-4, GPT-3.5, O-series reasoning models
  • Tool/function calling support
  • Structured outputs with JSON schema
  • Multimodal inputs (text, images, audio)
  • Streaming responses

Embeddings

  • Models: text-embedding-ada-002, text-embedding-3-small/large
  • Adjustable dimensions (v3 models)
  • Batch processing support

Image Generation

  • DALL-E 2: Multiple images, lower cost
  • DALL-E 3: Higher quality, single image
  • Size, quality, and style controls

Audio

  • TTS: Multiple voices, formats (mp3, opus, aac, flac, wav, pcm)
  • Transcription: Whisper model, multiple languages, subtitle formats

Content Moderation

  • Categories: sexual, hate, harassment, self-harm, violence
  • Confidence scores for each category
  • Batch moderation support

Architecture

┌─────────────────────────────────────────┐
│         Spring Boot Application         │
├─────────────────────────────────────────┤
│  Model Layer (OpenAiChatModel, etc.)    │
│  ↓ Spring AI Interfaces                 │
├─────────────────────────────────────────┤
│  Options Layer (OpenAiChatOptions, etc.)│
│  ↓ Builder Pattern                      │
├─────────────────────────────────────────┤
│  API Client Layer (OpenAiApi, etc.)     │
│  ↓ REST Communication                   │
├─────────────────────────────────────────┤
│         OpenAI REST API                  │
└─────────────────────────────────────────┘

Features:

  • Observability: Micrometer integration for metrics and tracing
  • Retry Support: Spring Retry for transient failures
  • Reactive Streams: Project Reactor for streaming responses
  • Auto-Configuration: Spring Boot starter available

Common Patterns

Builder Pattern

var chatModel = OpenAiChatModel.builder()
    .openAiApi(openAiApi)
    .defaultOptions(OpenAiChatOptions.builder()
        .model(OpenAiApi.ChatModel.GPT_4_O.getValue())
        .temperature(0.7)
        .build())
    .build();

Streaming

chatModel.stream(new Prompt("Write a story"))
    .subscribe(response -> {
        System.out.print(response.getResult().getOutput().getContent());
    });

Tool Calling

var options = OpenAiChatOptions.builder()
    .tools(List.of(weatherTool))
    .toolCallbacks(Map.of("get_weather", weatherCallback))
    .build();

Observability

var chatModel = OpenAiChatModel.builder()
    .openAiApi(openAiApi)
    .observationRegistry(observationRegistry)
    .build();

Spring Boot Integration

Auto-Configuration

spring.ai.openai.api-key=${OPENAI_API_KEY}
spring.ai.openai.chat.options.model=gpt-4o
spring.ai.openai.chat.options.temperature=0.7

Dependency Injection

@RestController
public class ChatController {
    private final OpenAiChatModel chatModel;

    public ChatController(OpenAiChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @PostMapping("/chat")
    public String chat(@RequestBody String message) {
        return chatModel.call(new Prompt(message))
            .getResult().getOutput().getContent();
    }
}

Model Reference

Chat Models

public enum OpenAiApi.ChatModel {
    // Reasoning: O4_MINI, O3, O3_MINI, O1, O1_MINI, O1_PRO
    // GPT-5: GPT_5, GPT_5_MINI, GPT_5_NANO
    // GPT-4o: GPT_4_O, GPT_4_O_MINI, GPT_4_O_AUDIO_PREVIEW
    // GPT-4.1: GPT_4_1, GPT_4_1_MINI, GPT_4_1_NANO
    // Legacy: GPT_4_TURBO, GPT_4, GPT_3_5_TURBO
}

Embedding Models

public enum OpenAiApi.EmbeddingModel {
    TEXT_EMBEDDING_ADA_002,      // 1536 dimensions (fixed)
    TEXT_EMBEDDING_3_SMALL,      // Up to 1536 dimensions
    TEXT_EMBEDDING_3_LARGE       // Up to 3072 dimensions
}

Image Models

public enum OpenAiImageApi.ImageModel {
    DALL_E_2,    // Multiple images, lower cost
    DALL_E_3     // Higher quality, single image
}

Error Handling

import org.springframework.ai.openai.api.common.OpenAiApiClientErrorException;

try {
    var response = chatModel.call(new Prompt("Hello"));
} catch (OpenAiApiClientErrorException e) {
    switch (e.getStatusCode()) {
        case 401 -> System.err.println("Invalid API key");
        case 429 -> System.err.println("Rate limit exceeded");
        case 400 -> System.err.println("Invalid request");
        default -> System.err.println("API error: " + e.getMessage());
    }
}

→ Complete Error Handling Guide

Production Best Practices

Security

  • Store API keys in environment variables or secrets manager
  • Never hardcode credentials
  • Use organization/project IDs for multi-tenant scenarios

Performance

  • Configure connection pooling for high throughput
  • Set appropriate timeouts (connect: 10s, read: 60s)
  • Use streaming for long responses

Reliability

  • Implement retry with exponential backoff
  • Handle rate limits gracefully
  • Monitor token usage and costs

Observability

  • Enable Micrometer metrics
  • Track request latency and error rates
  • Monitor token consumption

→ Complete Production Guide

Resources

Guides

Examples

Reference

Quick Reference

Core Imports

// Models
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.ai.openai.OpenAiEmbeddingModel;
import org.springframework.ai.openai.OpenAiImageModel;

// Options
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.ai.openai.OpenAiEmbeddingOptions;

// API Clients
import org.springframework.ai.openai.api.OpenAiApi;

Common Configuration

// Temperature: 0.0 (deterministic) to 2.0 (creative)
// Max Tokens: Limit response length
// Top P: Alternative to temperature (0.0-1.0)
// Stop: Sequences to stop generation

Rate Limits

Monitor via response headers:

  • x-ratelimit-limit-requests
  • x-ratelimit-remaining-requests
  • x-ratelimit-limit-tokens
  • x-ratelimit-remaining-tokens

Token Usage

var usage = response.getMetadata().getUsage();
System.out.println("Total tokens: " + usage.getTotalTokens());

Support

  • Documentation: Spring AI Reference
  • GitHub: spring-projects/spring-ai
  • OpenAI API: platform.openai.com/docs

Install with Tessl CLI

npx tessl i tessl/maven-org-springframework-ai--spring-ai-openai

docs

index.md

tile.json