|
For the latest snapshot version, please use Spring AI 1.1.3! |
Azure OpenAI Image Generation
Spring AI supports the gpt-image-1-mini image generation model from Azure OpenAI.
Prerequisites
Obtain your Azure OpenAI endpoint and api-key from the Azure OpenAI Service section on the Azure Portal.
Spring AI defines two configuration properties:
-
spring.ai.azure.openai.api-key: Set this to the value of theAPI Keyobtained from Azure. -
spring.ai.azure.openai.endpoint: Set this to the endpoint URL obtained when provisioning your model in Azure.
You can set these configuration properties in your application.properties file:
spring.ai.azure.openai.api-key=<your-azure-openai-api-key>
spring.ai.azure.openai.endpoint=<your-azure-openai-endpoint>
For enhanced security when handling sensitive information like API keys, you can use Spring Expression Language (SpEL) to reference custom environment variables:
# In application.yml
spring:
ai:
azure:
openai:
api-key: ${AZURE_OPENAI_API_KEY}
endpoint: ${AZURE_OPENAI_ENDPOINT}
# In your environment or .env file
export AZURE_OPENAI_API_KEY=<your-azure-openai-api-key>
export AZURE_OPENAI_ENDPOINT=<your-azure-openai-endpoint>
You can also set these configurations programmatically in your application code:
// Retrieve API key and endpoint from secure sources or environment variables
String apiKey = System.getenv("AZURE_OPENAI_API_KEY");
String endpoint = System.getenv("AZURE_OPENAI_ENDPOINT");
Deployment Name
To use run Azure AI applications, create an Azure AI Deployment through the [Azure AI Portal](oai.azure.com/portal).
In Azure, each client must specify a Deployment Name to connect to the Azure OpenAI service.
It’s essential to understand that the Deployment Name is different from the model you choose to deploy
For instance, a deployment named 'MyImgAiDeployment' could be configured to use 'gpt-image-1-mini' model.
For now, to keep things simple, you can create a deployment using the following settings:
Deployment Name: MyImgAiDeployment
Model Name: gpt-image-1-mini
This Azure configuration will align with the default configurations of the Spring Boot Azure AI Starter and its Autoconfiguration feature.
If you use a different Deployment Name, update the configuration property accordingly:
spring.ai.azure.openai.image.options.deployment-name=<my deployment name>
The different deployment structures of Azure OpenAI and OpenAI leads to a property in the Azure OpenAI client library named deploymentOrModelName.
This is because in OpenAI there is no Deployment Name, only a Model Name.
Add Repositories and BOM
Spring AI artifacts are published in Maven Central and Spring Snapshot repositories. Refer to the Artifact Repositories section to add these repositories to your build system.
To help with dependency management, Spring AI provides a BOM (bill of materials) to ensure that a consistent version of Spring AI is used throughout the entire project. Refer to the Dependency Management section to add the Spring AI BOM to your build system.
Auto-configuration
|
There has been a significant change in the Spring AI auto-configuration, starter modules' artifact names. Please refer to the upgrade notes for more information. |
Spring AI provides Spring Boot auto-configuration for the Azure OpenAI Chat Client.
To enable it add the following dependency to your project’s Maven pom.xml file:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-azure-openai</artifactId>
</dependency>
or to your Gradle build.gradle build file.
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-model-azure-openai'
}
| Refer to the Dependency Management section to add the Spring AI BOM to your build file. |
Image Generation Properties
|
Enabling and disabling of the image auto-configurations are now configured via top level properties with the prefix To enable, spring.ai.model.image=azure-openai (It is enabled by default) To disable, spring.ai.model.image=none (or any value which doesn’t match azure-openai) This change is done to allow configuration of multiple models. |
The prefix spring.ai.azure.openai.image is the property prefix that lets you configure the ImageModel implementation for Azure OpenAI.
Property |
Description |
Default |
spring.ai.azure.openai.image.enabled (Removed and no longer valid) |
Enable Azure OpenAI image model. |
true |
spring.ai.model.image |
Enable image model. Set to |
azure-openai |
spring.ai.azure.openai.image.options.n |
The number of images to generate (e.g. 1 for gpt-image-1-mini). |
- |
spring.ai.azure.openai.image.options.model |
The model to use for image generation (e.g. |
gpt-image-1-mini |
spring.ai.azure.openai.image.options.deployment-name |
The deployment name as defined in Azure AI Studio for your image model. |
- |
spring.ai.azure.openai.image.options.response_format |
The format in which the generated images are returned. Must be one of URL or b64_json. |
- |
spring.ai.azure.openai.image.options.size |
The size of the generated images (e.g. 1024x1024). Check Azure documentation for supported sizes for your model. |
- |
spring.ai.azure.openai.image.options.size_width |
The width of the generated images. |
- |
spring.ai.azure.openai.image.options.size_height |
The height of the generated images. |
- |
spring.ai.azure.openai.image.options.user |
A unique identifier representing your end-user, which can help Azure OpenAI to monitor and detect abuse. |
- |
Connection Properties
The prefix spring.ai.azure.openai is used as the property prefix that lets you connect to Azure OpenAI.
Property |
Description |
Default |
spring.ai.azure.openai.endpoint |
The URL to connect to (e.g. <your-resource>.openai.azure.com/) |
- |
spring.ai.azure.openai.apiKey |
The API Key |
- |
Runtime Options
The AzureOpenAiImageOptions provides model configurations, such as the deployment name, model, and image size.
On start-up, the default options can be configured with the AzureOpenAiImageModel(OpenAIClient openAIClient, AzureOpenAiImageOptions options) constructor. Alternatively, use the spring.ai.azure.openai.image.options.* properties described previously.
At runtime you can override the default options by adding request-specific options to the ImagePrompt call.
For example, to use the gpt-image-1-mini model with a custom size:
ImageResponse response = azureOpenAiImageModel.call(
new ImagePrompt("A light cream colored mini golden doodle",
AzureOpenAiImageOptions.builder()
.model("gpt-image-1-mini")
.deploymentName("gpt-image-1-mini")
.height(1024)
.width(1024)
.build())
);
| In addition to the model specific AzureOpenAiImageOptions you can use a portable ImageOptions instance, created with the ImageOptionsBuilder#builder(). |