Skip to content

Commit c6f3499

Browse files
stainless-botStainless Bot
authored andcommitted
feat(client)!: simplify structure of strings with presets
chore: unknown commit message
1 parent 92b5889 commit c6f3499

21 files changed

+450
-751
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ import com.openai.models.ChatCompletionCreateParams;
7878
import java.util.List;
7979

8080
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
81-
.model(ChatCompletionCreateParams.Model.ofString("gpt-3.5-turbo"))
81+
.model("gpt-3.5-turbo")
8282
.build();
8383
ChatCompletion chatCompletion = client.chat().completions().create(params);
8484
```

openai-java-core/src/main/kotlin/com/openai/models/ChatCompletionCreateParams.kt

Lines changed: 215 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,14 +1017,7 @@ constructor(
10171017
* [model endpoint compatibility](https://platform.openai.com/docs/models#model-endpoint-compatibility)
10181018
* table for details on which models work with the Chat API.
10191019
*/
1020-
fun model(string: String) = apply { this.model = Model.ofString(string) }
1021-
1022-
/**
1023-
* ID of the model to use. See the
1024-
* [model endpoint compatibility](https://platform.openai.com/docs/models#model-endpoint-compatibility)
1025-
* table for details on which models work with the Chat API.
1026-
*/
1027-
fun model(chatModel: ChatModel) = apply { this.model = Model.ofChatModel(chatModel) }
1020+
fun model(value: String) = apply { this.model = Model.of(value) }
10281021

10291022
/**
10301023
* Parameters for audio output. Required when audio output is requested with `modalities:
@@ -1609,118 +1602,251 @@ constructor(
16091602
)
16101603
}
16111604

1612-
@JsonDeserialize(using = Model.Deserializer::class)
1613-
@JsonSerialize(using = Model.Serializer::class)
16141605
class Model
1606+
@JsonCreator
16151607
private constructor(
1616-
private val string: String? = null,
1617-
private val chatModel: ChatModel? = null,
1618-
private val _json: JsonValue? = null,
1619-
) {
1608+
private val value: JsonField<String>,
1609+
) : Enum {
16201610

1621-
private var validated: Boolean = false
1611+
@com.fasterxml.jackson.annotation.JsonValue fun _value(): JsonField<String> = value
16221612

1623-
fun string(): Optional<String> = Optional.ofNullable(string)
1613+
override fun equals(other: Any?): Boolean {
1614+
if (this === other) {
1615+
return true
1616+
}
16241617

1625-
fun chatModel(): Optional<ChatModel> = Optional.ofNullable(chatModel)
1618+
return /* spotless:off */ other is Model && this.value == other.value /* spotless:on */
1619+
}
16261620

1627-
fun isString(): Boolean = string != null
1621+
override fun hashCode() = value.hashCode()
16281622

1629-
fun isChatModel(): Boolean = chatModel != null
1623+
override fun toString() = value.toString()
16301624

1631-
fun asString(): String = string.getOrThrow("string")
1625+
companion object {
16321626

1633-
fun asChatModel(): ChatModel = chatModel.getOrThrow("chatModel")
1627+
@JvmField val O1_PREVIEW = Model(JsonField.of("o1-preview"))
16341628

1635-
fun _json(): Optional<JsonValue> = Optional.ofNullable(_json)
1629+
@JvmField val O1_PREVIEW_2024_09_12 = Model(JsonField.of("o1-preview-2024-09-12"))
16361630

1637-
fun <T> accept(visitor: Visitor<T>): T {
1638-
return when {
1639-
string != null -> visitor.visitString(string)
1640-
chatModel != null -> visitor.visitChatModel(chatModel)
1641-
else -> visitor.unknown(_json)
1642-
}
1643-
}
1631+
@JvmField val O1_MINI = Model(JsonField.of("o1-mini"))
16441632

1645-
fun validate(): Model = apply {
1646-
if (!validated) {
1647-
if (string == null && chatModel == null) {
1648-
throw OpenAIInvalidDataException("Unknown Model: $_json")
1649-
}
1650-
validated = true
1651-
}
1652-
}
1633+
@JvmField val O1_MINI_2024_09_12 = Model(JsonField.of("o1-mini-2024-09-12"))
16531634

1654-
override fun equals(other: Any?): Boolean {
1655-
if (this === other) {
1656-
return true
1657-
}
1635+
@JvmField val GPT_4O = Model(JsonField.of("gpt-4o"))
16581636

1659-
return /* spotless:off */ other is Model && this.string == other.string && this.chatModel == other.chatModel /* spotless:on */
1660-
}
1637+
@JvmField val GPT_4O_2024_08_06 = Model(JsonField.of("gpt-4o-2024-08-06"))
16611638

1662-
override fun hashCode(): Int {
1663-
return /* spotless:off */ Objects.hash(string, chatModel) /* spotless:on */
1664-
}
1639+
@JvmField val GPT_4O_2024_05_13 = Model(JsonField.of("gpt-4o-2024-05-13"))
16651640

1666-
override fun toString(): String {
1667-
return when {
1668-
string != null -> "Model{string=$string}"
1669-
chatModel != null -> "Model{chatModel=$chatModel}"
1670-
_json != null -> "Model{_unknown=$_json}"
1671-
else -> throw IllegalStateException("Invalid Model")
1672-
}
1673-
}
1641+
@JvmField val GPT_4O_REALTIME_PREVIEW = Model(JsonField.of("gpt-4o-realtime-preview"))
16741642

1675-
companion object {
1643+
@JvmField
1644+
val GPT_4O_REALTIME_PREVIEW_2024_10_01 =
1645+
Model(JsonField.of("gpt-4o-realtime-preview-2024-10-01"))
16761646

1677-
@JvmStatic fun ofString(string: String) = Model(string = string)
1647+
@JvmField val GPT_4O_AUDIO_PREVIEW = Model(JsonField.of("gpt-4o-audio-preview"))
16781648

1679-
@JvmStatic fun ofChatModel(chatModel: ChatModel) = Model(chatModel = chatModel)
1680-
}
1649+
@JvmField
1650+
val GPT_4O_AUDIO_PREVIEW_2024_10_01 =
1651+
Model(JsonField.of("gpt-4o-audio-preview-2024-10-01"))
16811652

1682-
interface Visitor<out T> {
1653+
@JvmField val CHATGPT_4O_LATEST = Model(JsonField.of("chatgpt-4o-latest"))
16831654

1684-
fun visitString(string: String): T
1655+
@JvmField val GPT_4O_MINI = Model(JsonField.of("gpt-4o-mini"))
16851656

1686-
fun visitChatModel(chatModel: ChatModel): T
1657+
@JvmField val GPT_4O_MINI_2024_07_18 = Model(JsonField.of("gpt-4o-mini-2024-07-18"))
16871658

1688-
fun unknown(json: JsonValue?): T {
1689-
throw OpenAIInvalidDataException("Unknown Model: $json")
1690-
}
1691-
}
1659+
@JvmField val GPT_4_TURBO = Model(JsonField.of("gpt-4-turbo"))
16921660

1693-
class Deserializer : BaseDeserializer<Model>(Model::class) {
1661+
@JvmField val GPT_4_TURBO_2024_04_09 = Model(JsonField.of("gpt-4-turbo-2024-04-09"))
16941662

1695-
override fun ObjectCodec.deserialize(node: JsonNode): Model {
1696-
val json = JsonValue.fromJsonNode(node)
1663+
@JvmField val GPT_4_0125_PREVIEW = Model(JsonField.of("gpt-4-0125-preview"))
16971664

1698-
tryDeserialize(node, jacksonTypeRef<String>())?.let {
1699-
return Model(string = it, _json = json)
1700-
}
1701-
tryDeserialize(node, jacksonTypeRef<ChatModel>())?.let {
1702-
return Model(chatModel = it, _json = json)
1703-
}
1665+
@JvmField val GPT_4_TURBO_PREVIEW = Model(JsonField.of("gpt-4-turbo-preview"))
17041666

1705-
return Model(_json = json)
1706-
}
1667+
@JvmField val GPT_4_1106_PREVIEW = Model(JsonField.of("gpt-4-1106-preview"))
1668+
1669+
@JvmField val GPT_4_VISION_PREVIEW = Model(JsonField.of("gpt-4-vision-preview"))
1670+
1671+
@JvmField val GPT_4 = Model(JsonField.of("gpt-4"))
1672+
1673+
@JvmField val GPT_4_0314 = Model(JsonField.of("gpt-4-0314"))
1674+
1675+
@JvmField val GPT_4_0613 = Model(JsonField.of("gpt-4-0613"))
1676+
1677+
@JvmField val GPT_4_32K = Model(JsonField.of("gpt-4-32k"))
1678+
1679+
@JvmField val GPT_4_32K_0314 = Model(JsonField.of("gpt-4-32k-0314"))
1680+
1681+
@JvmField val GPT_4_32K_0613 = Model(JsonField.of("gpt-4-32k-0613"))
1682+
1683+
@JvmField val GPT_3_5_TURBO = Model(JsonField.of("gpt-3.5-turbo"))
1684+
1685+
@JvmField val GPT_3_5_TURBO_16K = Model(JsonField.of("gpt-3.5-turbo-16k"))
1686+
1687+
@JvmField val GPT_3_5_TURBO_0301 = Model(JsonField.of("gpt-3.5-turbo-0301"))
1688+
1689+
@JvmField val GPT_3_5_TURBO_0613 = Model(JsonField.of("gpt-3.5-turbo-0613"))
1690+
1691+
@JvmField val GPT_3_5_TURBO_1106 = Model(JsonField.of("gpt-3.5-turbo-1106"))
1692+
1693+
@JvmField val GPT_3_5_TURBO_0125 = Model(JsonField.of("gpt-3.5-turbo-0125"))
1694+
1695+
@JvmField val GPT_3_5_TURBO_16K_0613 = Model(JsonField.of("gpt-3.5-turbo-16k-0613"))
1696+
1697+
@JvmStatic fun of(value: String) = Model(JsonField.of(value))
17071698
}
17081699

1709-
class Serializer : BaseSerializer<Model>(Model::class) {
1700+
enum class Known {
1701+
O1_PREVIEW,
1702+
O1_PREVIEW_2024_09_12,
1703+
O1_MINI,
1704+
O1_MINI_2024_09_12,
1705+
GPT_4O,
1706+
GPT_4O_2024_08_06,
1707+
GPT_4O_2024_05_13,
1708+
GPT_4O_REALTIME_PREVIEW,
1709+
GPT_4O_REALTIME_PREVIEW_2024_10_01,
1710+
GPT_4O_AUDIO_PREVIEW,
1711+
GPT_4O_AUDIO_PREVIEW_2024_10_01,
1712+
CHATGPT_4O_LATEST,
1713+
GPT_4O_MINI,
1714+
GPT_4O_MINI_2024_07_18,
1715+
GPT_4_TURBO,
1716+
GPT_4_TURBO_2024_04_09,
1717+
GPT_4_0125_PREVIEW,
1718+
GPT_4_TURBO_PREVIEW,
1719+
GPT_4_1106_PREVIEW,
1720+
GPT_4_VISION_PREVIEW,
1721+
GPT_4,
1722+
GPT_4_0314,
1723+
GPT_4_0613,
1724+
GPT_4_32K,
1725+
GPT_4_32K_0314,
1726+
GPT_4_32K_0613,
1727+
GPT_3_5_TURBO,
1728+
GPT_3_5_TURBO_16K,
1729+
GPT_3_5_TURBO_0301,
1730+
GPT_3_5_TURBO_0613,
1731+
GPT_3_5_TURBO_1106,
1732+
GPT_3_5_TURBO_0125,
1733+
GPT_3_5_TURBO_16K_0613,
1734+
}
17101735

1711-
override fun serialize(
1712-
value: Model,
1713-
generator: JsonGenerator,
1714-
provider: SerializerProvider
1715-
) {
1716-
when {
1717-
value.string != null -> generator.writeObject(value.string)
1718-
value.chatModel != null -> generator.writeObject(value.chatModel)
1719-
value._json != null -> generator.writeObject(value._json)
1720-
else -> throw IllegalStateException("Invalid Model")
1721-
}
1722-
}
1736+
enum class Value {
1737+
O1_PREVIEW,
1738+
O1_PREVIEW_2024_09_12,
1739+
O1_MINI,
1740+
O1_MINI_2024_09_12,
1741+
GPT_4O,
1742+
GPT_4O_2024_08_06,
1743+
GPT_4O_2024_05_13,
1744+
GPT_4O_REALTIME_PREVIEW,
1745+
GPT_4O_REALTIME_PREVIEW_2024_10_01,
1746+
GPT_4O_AUDIO_PREVIEW,
1747+
GPT_4O_AUDIO_PREVIEW_2024_10_01,
1748+
CHATGPT_4O_LATEST,
1749+
GPT_4O_MINI,
1750+
GPT_4O_MINI_2024_07_18,
1751+
GPT_4_TURBO,
1752+
GPT_4_TURBO_2024_04_09,
1753+
GPT_4_0125_PREVIEW,
1754+
GPT_4_TURBO_PREVIEW,
1755+
GPT_4_1106_PREVIEW,
1756+
GPT_4_VISION_PREVIEW,
1757+
GPT_4,
1758+
GPT_4_0314,
1759+
GPT_4_0613,
1760+
GPT_4_32K,
1761+
GPT_4_32K_0314,
1762+
GPT_4_32K_0613,
1763+
GPT_3_5_TURBO,
1764+
GPT_3_5_TURBO_16K,
1765+
GPT_3_5_TURBO_0301,
1766+
GPT_3_5_TURBO_0613,
1767+
GPT_3_5_TURBO_1106,
1768+
GPT_3_5_TURBO_0125,
1769+
GPT_3_5_TURBO_16K_0613,
1770+
_UNKNOWN,
17231771
}
1772+
1773+
fun value(): Value =
1774+
when (this) {
1775+
O1_PREVIEW -> Value.O1_PREVIEW
1776+
O1_PREVIEW_2024_09_12 -> Value.O1_PREVIEW_2024_09_12
1777+
O1_MINI -> Value.O1_MINI
1778+
O1_MINI_2024_09_12 -> Value.O1_MINI_2024_09_12
1779+
GPT_4O -> Value.GPT_4O
1780+
GPT_4O_2024_08_06 -> Value.GPT_4O_2024_08_06
1781+
GPT_4O_2024_05_13 -> Value.GPT_4O_2024_05_13
1782+
GPT_4O_REALTIME_PREVIEW -> Value.GPT_4O_REALTIME_PREVIEW
1783+
GPT_4O_REALTIME_PREVIEW_2024_10_01 -> Value.GPT_4O_REALTIME_PREVIEW_2024_10_01
1784+
GPT_4O_AUDIO_PREVIEW -> Value.GPT_4O_AUDIO_PREVIEW
1785+
GPT_4O_AUDIO_PREVIEW_2024_10_01 -> Value.GPT_4O_AUDIO_PREVIEW_2024_10_01
1786+
CHATGPT_4O_LATEST -> Value.CHATGPT_4O_LATEST
1787+
GPT_4O_MINI -> Value.GPT_4O_MINI
1788+
GPT_4O_MINI_2024_07_18 -> Value.GPT_4O_MINI_2024_07_18
1789+
GPT_4_TURBO -> Value.GPT_4_TURBO
1790+
GPT_4_TURBO_2024_04_09 -> Value.GPT_4_TURBO_2024_04_09
1791+
GPT_4_0125_PREVIEW -> Value.GPT_4_0125_PREVIEW
1792+
GPT_4_TURBO_PREVIEW -> Value.GPT_4_TURBO_PREVIEW
1793+
GPT_4_1106_PREVIEW -> Value.GPT_4_1106_PREVIEW
1794+
GPT_4_VISION_PREVIEW -> Value.GPT_4_VISION_PREVIEW
1795+
GPT_4 -> Value.GPT_4
1796+
GPT_4_0314 -> Value.GPT_4_0314
1797+
GPT_4_0613 -> Value.GPT_4_0613
1798+
GPT_4_32K -> Value.GPT_4_32K
1799+
GPT_4_32K_0314 -> Value.GPT_4_32K_0314
1800+
GPT_4_32K_0613 -> Value.GPT_4_32K_0613
1801+
GPT_3_5_TURBO -> Value.GPT_3_5_TURBO
1802+
GPT_3_5_TURBO_16K -> Value.GPT_3_5_TURBO_16K
1803+
GPT_3_5_TURBO_0301 -> Value.GPT_3_5_TURBO_0301
1804+
GPT_3_5_TURBO_0613 -> Value.GPT_3_5_TURBO_0613
1805+
GPT_3_5_TURBO_1106 -> Value.GPT_3_5_TURBO_1106
1806+
GPT_3_5_TURBO_0125 -> Value.GPT_3_5_TURBO_0125
1807+
GPT_3_5_TURBO_16K_0613 -> Value.GPT_3_5_TURBO_16K_0613
1808+
else -> Value._UNKNOWN
1809+
}
1810+
1811+
fun known(): Known =
1812+
when (this) {
1813+
O1_PREVIEW -> Known.O1_PREVIEW
1814+
O1_PREVIEW_2024_09_12 -> Known.O1_PREVIEW_2024_09_12
1815+
O1_MINI -> Known.O1_MINI
1816+
O1_MINI_2024_09_12 -> Known.O1_MINI_2024_09_12
1817+
GPT_4O -> Known.GPT_4O
1818+
GPT_4O_2024_08_06 -> Known.GPT_4O_2024_08_06
1819+
GPT_4O_2024_05_13 -> Known.GPT_4O_2024_05_13
1820+
GPT_4O_REALTIME_PREVIEW -> Known.GPT_4O_REALTIME_PREVIEW
1821+
GPT_4O_REALTIME_PREVIEW_2024_10_01 -> Known.GPT_4O_REALTIME_PREVIEW_2024_10_01
1822+
GPT_4O_AUDIO_PREVIEW -> Known.GPT_4O_AUDIO_PREVIEW
1823+
GPT_4O_AUDIO_PREVIEW_2024_10_01 -> Known.GPT_4O_AUDIO_PREVIEW_2024_10_01
1824+
CHATGPT_4O_LATEST -> Known.CHATGPT_4O_LATEST
1825+
GPT_4O_MINI -> Known.GPT_4O_MINI
1826+
GPT_4O_MINI_2024_07_18 -> Known.GPT_4O_MINI_2024_07_18
1827+
GPT_4_TURBO -> Known.GPT_4_TURBO
1828+
GPT_4_TURBO_2024_04_09 -> Known.GPT_4_TURBO_2024_04_09
1829+
GPT_4_0125_PREVIEW -> Known.GPT_4_0125_PREVIEW
1830+
GPT_4_TURBO_PREVIEW -> Known.GPT_4_TURBO_PREVIEW
1831+
GPT_4_1106_PREVIEW -> Known.GPT_4_1106_PREVIEW
1832+
GPT_4_VISION_PREVIEW -> Known.GPT_4_VISION_PREVIEW
1833+
GPT_4 -> Known.GPT_4
1834+
GPT_4_0314 -> Known.GPT_4_0314
1835+
GPT_4_0613 -> Known.GPT_4_0613
1836+
GPT_4_32K -> Known.GPT_4_32K
1837+
GPT_4_32K_0314 -> Known.GPT_4_32K_0314
1838+
GPT_4_32K_0613 -> Known.GPT_4_32K_0613
1839+
GPT_3_5_TURBO -> Known.GPT_3_5_TURBO
1840+
GPT_3_5_TURBO_16K -> Known.GPT_3_5_TURBO_16K
1841+
GPT_3_5_TURBO_0301 -> Known.GPT_3_5_TURBO_0301
1842+
GPT_3_5_TURBO_0613 -> Known.GPT_3_5_TURBO_0613
1843+
GPT_3_5_TURBO_1106 -> Known.GPT_3_5_TURBO_1106
1844+
GPT_3_5_TURBO_0125 -> Known.GPT_3_5_TURBO_0125
1845+
GPT_3_5_TURBO_16K_0613 -> Known.GPT_3_5_TURBO_16K_0613
1846+
else -> throw OpenAIInvalidDataException("Unknown Model: $value")
1847+
}
1848+
1849+
fun asString(): String = _value().asStringOrThrow()
17241850
}
17251851

17261852
@JsonDeserialize(using = FunctionCall.Deserializer::class)

0 commit comments

Comments
 (0)