Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
name: CI
on:
push:
branches-ignore:
- 'generated'
- 'codegen/**'
- 'integrated/**'
- 'stl-preview-head/**'
- 'stl-preview-base/**'
branches:
- '**'
- '!integrated/**'
- '!stl-preview-head/**'
- '!stl-preview-base/**'
- '!generated'
- '!codegen/**'
- 'codegen/stl/**'
pull_request:
branches-ignore:
- 'stl-preview-head/**'
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "4.28.0"
".": "4.29.0"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 151
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-cb3e4451108eed58d59cff25bf77ec0dc960ec9c6f3dba68f90e7a9847c09d21.yml
openapi_spec_hash: dec6d9be64a5ba8f474a1f2a7a4fafef
config_hash: e922f01e25accd07d8fd3641c37fbd62
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-55ef7034334e938c30656a404ce5e21466103be87542a796425346299f450404.yml
openapi_spec_hash: 4a5bfd2ee4ad47f5b7cf6f1ad08d5d7f
config_hash: 96fbf82cf74a44ccd513f5acf0956ffd
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
# Changelog

## 4.29.0 (2026-03-17)

Full Changelog: [v4.28.0...v4.29.0](https://github.com/openai/openai-java/compare/v4.28.0...v4.29.0)

### Features

* **api:** 5.4 nano and mini model slugs ([397027a](https://github.com/openai/openai-java/commit/397027a4117ab49e0a500b8dec8594ad34763011))
* **api:** add defer_loading field to NamespaceTool.Tool.Function ([ff60586](https://github.com/openai/openai-java/commit/ff60586659f25204a545cb08623fe0a12810cbfa))
* **api:** add IN and NIN filter types to ComparisonFilter ([6d0eac3](https://github.com/openai/openai-java/commit/6d0eac374f8eab9de341ae1a19c185512614893b))
* **api:** add v1/videos endpoint to batch create ([421acd8](https://github.com/openai/openai-java/commit/421acd884ef736944c5368a7282fda8a890f0aed))


### Chores

* **internal:** tweak CI branches ([bfe3f0a](https://github.com/openai/openai-java/commit/bfe3f0ac8ac068443a40b4b7b23e7d179e8b4837))
* **internal:** update retry delay tests ([dfcccf1](https://github.com/openai/openai-java/commit/dfcccf14f4f3a72e85db513955a3ede7bcdb1d6b))

## 4.28.0 (2026-03-13)

Full Changelog: [v4.27.0...v4.28.0](https://github.com/openai/openai-java/compare/v4.27.0...v4.28.0)
Expand Down
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@

<!-- x-release-please-start-version -->

[![Maven Central](https://img.shields.io/maven-central/v/com.openai/openai-java)](https://central.sonatype.com/artifact/com.openai/openai-java/4.28.0)
[![javadoc](https://javadoc.io/badge2/com.openai/openai-java/4.28.0/javadoc.svg)](https://javadoc.io/doc/com.openai/openai-java/4.28.0)
[![Maven Central](https://img.shields.io/maven-central/v/com.openai/openai-java)](https://central.sonatype.com/artifact/com.openai/openai-java/4.29.0)
[![javadoc](https://javadoc.io/badge2/com.openai/openai-java/4.29.0/javadoc.svg)](https://javadoc.io/doc/com.openai/openai-java/4.29.0)

<!-- x-release-please-end -->

The OpenAI Java SDK provides convenient access to the [OpenAI REST API](https://platform.openai.com/docs) from applications written in Java.

<!-- x-release-please-start-version -->

The REST API documentation can be found on [platform.openai.com](https://platform.openai.com/docs). Javadocs are available on [javadoc.io](https://javadoc.io/doc/com.openai/openai-java/4.28.0).
The REST API documentation can be found on [platform.openai.com](https://platform.openai.com/docs). Javadocs are available on [javadoc.io](https://javadoc.io/doc/com.openai/openai-java/4.29.0).

<!-- x-release-please-end -->

Expand All @@ -24,7 +24,7 @@ The REST API documentation can be found on [platform.openai.com](https://platfor
### Gradle

```kotlin
implementation("com.openai:openai-java:4.28.0")
implementation("com.openai:openai-java:4.29.0")
```

### Maven
Expand All @@ -33,7 +33,7 @@ implementation("com.openai:openai-java:4.28.0")
<dependency>
<groupId>com.openai</groupId>
<artifactId>openai-java</artifactId>
<version>4.28.0</version>
<version>4.29.0</version>
</dependency>
```

Expand Down Expand Up @@ -1342,7 +1342,7 @@ If you're using Spring Boot, then you can use the SDK's [Spring Boot starter](ht
#### Gradle

```kotlin
implementation("com.openai:openai-java-spring-boot-starter:4.28.0")
implementation("com.openai:openai-java-spring-boot-starter:4.29.0")
```

#### Maven
Expand All @@ -1351,7 +1351,7 @@ implementation("com.openai:openai-java-spring-boot-starter:4.28.0")
<dependency>
<groupId>com.openai</groupId>
<artifactId>openai-java-spring-boot-starter</artifactId>
<version>4.28.0</version>
<version>4.29.0</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ repositories {

allprojects {
group = "com.openai"
version = "4.28.0" // x-release-please-version
version = "4.29.0" // x-release-please-version
}

subprojects {
Expand Down
24 changes: 24 additions & 0 deletions openai-java-core/src/main/kotlin/com/openai/models/ChatModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,14 @@ class ChatModel @JsonCreator private constructor(private val value: JsonField<St

@JvmField val GPT_5_4 = of("gpt-5.4")

@JvmField val GPT_5_4_MINI = of("gpt-5.4-mini")

@JvmField val GPT_5_4_NANO = of("gpt-5.4-nano")

@JvmField val GPT_5_4_MINI_2026_03_17 = of("gpt-5.4-mini-2026-03-17")

@JvmField val GPT_5_4_NANO_2026_03_17 = of("gpt-5.4-nano-2026-03-17")

@JvmField val GPT_5_3_CHAT_LATEST = of("gpt-5.3-chat-latest")

@JvmField val GPT_5_2 = of("gpt-5.2")
Expand Down Expand Up @@ -176,6 +184,10 @@ class ChatModel @JsonCreator private constructor(private val value: JsonField<St
/** An enum containing [ChatModel]'s known values. */
enum class Known {
GPT_5_4,
GPT_5_4_MINI,
GPT_5_4_NANO,
GPT_5_4_MINI_2026_03_17,
GPT_5_4_NANO_2026_03_17,
GPT_5_3_CHAT_LATEST,
GPT_5_2,
GPT_5_2_2025_12_11,
Expand Down Expand Up @@ -262,6 +274,10 @@ class ChatModel @JsonCreator private constructor(private val value: JsonField<St
*/
enum class Value {
GPT_5_4,
GPT_5_4_MINI,
GPT_5_4_NANO,
GPT_5_4_MINI_2026_03_17,
GPT_5_4_NANO_2026_03_17,
GPT_5_3_CHAT_LATEST,
GPT_5_2,
GPT_5_2_2025_12_11,
Expand Down Expand Up @@ -349,6 +365,10 @@ class ChatModel @JsonCreator private constructor(private val value: JsonField<St
fun value(): Value =
when (this) {
GPT_5_4 -> Value.GPT_5_4
GPT_5_4_MINI -> Value.GPT_5_4_MINI
GPT_5_4_NANO -> Value.GPT_5_4_NANO
GPT_5_4_MINI_2026_03_17 -> Value.GPT_5_4_MINI_2026_03_17
GPT_5_4_NANO_2026_03_17 -> Value.GPT_5_4_NANO_2026_03_17
GPT_5_3_CHAT_LATEST -> Value.GPT_5_3_CHAT_LATEST
GPT_5_2 -> Value.GPT_5_2
GPT_5_2_2025_12_11 -> Value.GPT_5_2_2025_12_11
Expand Down Expand Up @@ -436,6 +456,10 @@ class ChatModel @JsonCreator private constructor(private val value: JsonField<St
fun known(): Known =
when (this) {
GPT_5_4 -> Known.GPT_5_4
GPT_5_4_MINI -> Known.GPT_5_4_MINI
GPT_5_4_NANO -> Known.GPT_5_4_NANO
GPT_5_4_MINI_2026_03_17 -> Known.GPT_5_4_MINI_2026_03_17
GPT_5_4_NANO_2026_03_17 -> Known.GPT_5_4_NANO_2026_03_17
GPT_5_3_CHAT_LATEST -> Known.GPT_5_3_CHAT_LATEST
GPT_5_2 -> Known.GPT_5_2
GPT_5_2_2025_12_11 -> Known.GPT_5_2_2025_12_11
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,10 @@ private constructor(

@JvmField val LTE = of("lte")

@JvmField val IN = of("in")

@JvmField val NIN = of("nin")

@JvmStatic fun of(value: String) = Type(JsonField.of(value))
}

Expand All @@ -331,6 +335,8 @@ private constructor(
GTE,
LT,
LTE,
IN,
NIN,
}

/**
Expand All @@ -349,6 +355,8 @@ private constructor(
GTE,
LT,
LTE,
IN,
NIN,
/** An enum member indicating that [Type] was instantiated with an unknown value. */
_UNKNOWN,
}
Expand All @@ -368,6 +376,8 @@ private constructor(
GTE -> Value.GTE
LT -> Value.LT
LTE -> Value.LTE
IN -> Value.IN
NIN -> Value.NIN
else -> Value._UNKNOWN
}

Expand All @@ -388,6 +398,8 @@ private constructor(
GTE -> Known.GTE
LT -> Known.LT
LTE -> Known.LTE
IN -> Known.IN
NIN -> Known.NIN
else -> throw OpenAIInvalidDataException("Unknown Type: $value")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ private constructor(
/**
* The endpoint to be used for all requests in the batch. Currently `/v1/responses`,
* `/v1/chat/completions`, `/v1/embeddings`, `/v1/completions`, `/v1/moderations`,
* `/v1/images/generations`, and `/v1/images/edits` are supported. Note that `/v1/embeddings`
* batches are also restricted to a maximum of 50,000 embedding inputs across all requests in
* the batch.
* `/v1/images/generations`, `/v1/images/edits`, and `/v1/videos` are supported. Note that
* `/v1/embeddings` batches are also restricted to a maximum of 50,000 embedding inputs across
* all requests in the batch.
*
* @throws OpenAIInvalidDataException if the JSON field has an unexpected type or is
* unexpectedly missing or null (e.g. if the server responded with an unexpected value).
Expand Down Expand Up @@ -199,7 +199,7 @@ private constructor(
/**
* The endpoint to be used for all requests in the batch. Currently `/v1/responses`,
* `/v1/chat/completions`, `/v1/embeddings`, `/v1/completions`, `/v1/moderations`,
* `/v1/images/generations`, and `/v1/images/edits` are supported. Note that
* `/v1/images/generations`, `/v1/images/edits`, and `/v1/videos` are supported. Note that
* `/v1/embeddings` batches are also restricted to a maximum of 50,000 embedding inputs
* across all requests in the batch.
*/
Expand Down Expand Up @@ -470,7 +470,7 @@ private constructor(
/**
* The endpoint to be used for all requests in the batch. Currently `/v1/responses`,
* `/v1/chat/completions`, `/v1/embeddings`, `/v1/completions`, `/v1/moderations`,
* `/v1/images/generations`, and `/v1/images/edits` are supported. Note that
* `/v1/images/generations`, `/v1/images/edits`, and `/v1/videos` are supported. Note that
* `/v1/embeddings` batches are also restricted to a maximum of 50,000 embedding inputs
* across all requests in the batch.
*
Expand Down Expand Up @@ -628,9 +628,9 @@ private constructor(
/**
* The endpoint to be used for all requests in the batch. Currently `/v1/responses`,
* `/v1/chat/completions`, `/v1/embeddings`, `/v1/completions`, `/v1/moderations`,
* `/v1/images/generations`, and `/v1/images/edits` are supported. Note that
* `/v1/embeddings` batches are also restricted to a maximum of 50,000 embedding inputs
* across all requests in the batch.
* `/v1/images/generations`, `/v1/images/edits`, and `/v1/videos` are supported. Note
* that `/v1/embeddings` batches are also restricted to a maximum of 50,000 embedding
* inputs across all requests in the batch.
*/
fun endpoint(endpoint: Endpoint) = endpoint(JsonField.of(endpoint))

Expand Down Expand Up @@ -948,9 +948,9 @@ private constructor(
/**
* The endpoint to be used for all requests in the batch. Currently `/v1/responses`,
* `/v1/chat/completions`, `/v1/embeddings`, `/v1/completions`, `/v1/moderations`,
* `/v1/images/generations`, and `/v1/images/edits` are supported. Note that `/v1/embeddings`
* batches are also restricted to a maximum of 50,000 embedding inputs across all requests in
* the batch.
* `/v1/images/generations`, `/v1/images/edits`, and `/v1/videos` are supported. Note that
* `/v1/embeddings` batches are also restricted to a maximum of 50,000 embedding inputs across
* all requests in the batch.
*/
class Endpoint @JsonCreator private constructor(private val value: JsonField<String>) : Enum {

Expand Down Expand Up @@ -980,6 +980,8 @@ private constructor(

@JvmField val V1_IMAGES_EDITS = of("/v1/images/edits")

@JvmField val V1_VIDEOS = of("/v1/videos")

@JvmStatic fun of(value: String) = Endpoint(JsonField.of(value))
}

Expand All @@ -992,6 +994,7 @@ private constructor(
V1_MODERATIONS,
V1_IMAGES_GENERATIONS,
V1_IMAGES_EDITS,
V1_VIDEOS,
}

/**
Expand All @@ -1011,6 +1014,7 @@ private constructor(
V1_MODERATIONS,
V1_IMAGES_GENERATIONS,
V1_IMAGES_EDITS,
V1_VIDEOS,
/** An enum member indicating that [Endpoint] was instantiated with an unknown value. */
_UNKNOWN,
}
Expand All @@ -1031,6 +1035,7 @@ private constructor(
V1_MODERATIONS -> Value.V1_MODERATIONS
V1_IMAGES_GENERATIONS -> Value.V1_IMAGES_GENERATIONS
V1_IMAGES_EDITS -> Value.V1_IMAGES_EDITS
V1_VIDEOS -> Value.V1_VIDEOS
else -> Value._UNKNOWN
}

Expand All @@ -1052,6 +1057,7 @@ private constructor(
V1_MODERATIONS -> Known.V1_MODERATIONS
V1_IMAGES_GENERATIONS -> Known.V1_IMAGES_GENERATIONS
V1_IMAGES_EDITS -> Known.V1_IMAGES_EDITS
V1_VIDEOS -> Known.V1_VIDEOS
else -> throw OpenAIInvalidDataException("Unknown Endpoint: $value")
}

Expand Down
Loading
Loading