Skip to content

Commit 7e14398

Browse files
committed
use required=true for json properties to fail fast
1 parent eaec578 commit 7e14398

30 files changed

+195
-93
lines changed

examples/src/main/kotlin/files/Files.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package files
22

33
import com.cjcrafter.openai.files.FilePurpose
4-
import com.cjcrafter.openai.files.ListFilesRequest
5-
import com.cjcrafter.openai.files.fileUploadRequest
4+
import com.cjcrafter.openai.files.uploadFileRequest
65
import com.cjcrafter.openai.files.listFilesRequest
76
import com.cjcrafter.openai.openAI
87
import io.github.cdimascio.dotenv.dotenv
98
import java.io.File
10-
import java.util.Scanner
119

1210
// To use dotenv, you need to add the "io.github.cdimascio:dotenv-kotlin:version"
1311
// dependency. Then you can add a .env file in your project directory.
@@ -44,7 +42,7 @@ fun uploadFile() {
4442
print("Enter the file name: ")
4543
val fileName = readln()
4644
val input = File(fileName)
47-
val request = fileUploadRequest {
45+
val request = uploadFileRequest {
4846
file(input)
4947
purpose(FilePurpose.ASSISTANTS)
5048
}

src/main/kotlin/com/cjcrafter/openai/OpenAI.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ interface OpenAI {
138138
* @return The OpenAI file object created
139139
*/
140140
@ApiStatus.Experimental
141-
fun uploadFile(request: FileUploadRequest): FileObject
141+
fun uploadFile(request: UploadFileRequest): FileObject
142142

143143
@ApiStatus.Experimental
144144
fun deleteFile(fileId: String): FileDeletionStatus

src/main/kotlin/com/cjcrafter/openai/OpenAIImpl.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,8 @@ import okhttp3.*
1313
import okhttp3.HttpUrl.Companion.toHttpUrl
1414
import okhttp3.MediaType.Companion.toMediaType
1515
import okhttp3.RequestBody.Companion.toRequestBody
16-
import org.intellij.lang.annotations.Language
1716
import org.jetbrains.annotations.ApiStatus
1817
import java.io.BufferedReader
19-
import java.io.File
2018
import java.io.IOException
2119

2220
open class OpenAIImpl @ApiStatus.Internal constructor(
@@ -188,7 +186,7 @@ open class OpenAIImpl @ApiStatus.Internal constructor(
188186
return executeRequest(httpRequest, ListFilesResponse::class.java)
189187
}
190188

191-
override fun uploadFile(request: FileUploadRequest): FileObject {
189+
override fun uploadFile(request: UploadFileRequest): FileObject {
192190
val httpRequest = buildMultipartRequest(FILES_ENDPOINT) {
193191
addFormDataPart("purpose", OpenAI.createObjectMapper().writeValueAsString(request.purpose).trim('"'))
194192
addFormDataPart("file", request.fileName, request.requestBody)

src/main/kotlin/com/cjcrafter/openai/chat/ChatChoice.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import com.fasterxml.jackson.annotation.JsonProperty
2121
* @see FinishReason
2222
*/
2323
data class ChatChoice(
24-
val index: Int,
25-
val message: ChatMessage,
26-
@JsonProperty("finish_reason") val finishReason: FinishReason
24+
@JsonProperty(required = true) val index: Int,
25+
@JsonProperty(required = true) val message: ChatMessage,
26+
@JsonProperty("finish_reason", required = true) val finishReason: FinishReason
2727
)

src/main/kotlin/com/cjcrafter/openai/chat/ChatChoiceChunk.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ import java.lang.IllegalArgumentException
2929
* @since 1.2.0
3030
*/
3131
data class ChatChoiceChunk(
32-
val index: Int,
33-
var delta: ChatMessageDelta? = null,
34-
@JsonProperty("finish_reason") var finishReason: FinishReason?
32+
@JsonProperty(required = true) val index: Int,
33+
@JsonProperty(required = true) var delta: ChatMessageDelta? = null,
34+
@JsonProperty("finish_reason", required = true) var finishReason: FinishReason?
3535
) {
3636
val message: ChatMessage = ChatMessage(delta?.role!!, delta?.content, delta?.toolCalls?.map { it.toToolCall() })
3737

src/main/kotlin/com/cjcrafter/openai/chat/ChatResponse.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.cjcrafter.openai.chat
22

3+
import com.fasterxml.jackson.annotation.JsonProperty
34
import java.time.Instant
45
import java.time.ZoneId
56
import java.time.ZonedDateTime
@@ -17,10 +18,10 @@ import java.util.*
1718
* @constructor Create Chat response (for internal usage).
1819
*/
1920
data class ChatResponse(
20-
val id: String,
21-
val created: Long,
22-
val choices: List<ChatChoice>,
23-
val usage: ChatUsage
21+
@JsonProperty(required = true) val id: String,
22+
@JsonProperty(required = true) val created: Long,
23+
@JsonProperty(required = true) val choices: List<ChatChoice>,
24+
@JsonProperty(required = true) val usage: ChatUsage
2425
) {
2526

2627
/**

src/main/kotlin/com/cjcrafter/openai/chat/ChatResponseChunk.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.cjcrafter.openai.chat
22

3+
import com.fasterxml.jackson.annotation.JsonProperty
34
import com.fasterxml.jackson.databind.JsonNode
45
import com.fasterxml.jackson.databind.node.ArrayNode
56
import com.fasterxml.jackson.databind.node.ObjectNode
@@ -25,9 +26,9 @@ import java.util.*
2526
* @since 1.2.0
2627
*/
2728
data class ChatResponseChunk(
28-
val id: String,
29-
val created: Long,
30-
val choices: List<ChatChoiceChunk>,
29+
@JsonProperty(required = true) val id: String,
30+
@JsonProperty(required = true) val created: Long,
31+
@JsonProperty(required = true) val choices: List<ChatChoiceChunk>,
3132
) {
3233
internal fun update(json: ObjectNode) {
3334
val choicesArray = json.get("choices") as? ArrayNode

src/main/kotlin/com/cjcrafter/openai/chat/ChatUsage.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import com.fasterxml.jackson.annotation.JsonProperty
1616
* @see <a href="https://platform.openai.com/docs/guides/chat/managing-tokens">Managing Tokens Guide</a>
1717
*/
1818
data class ChatUsage(
19-
@JsonProperty("prompt_tokens") val promptTokens: Int,
20-
@JsonProperty("completion_tokens") val completionTokens: Int,
21-
@JsonProperty("total_tokens") val totalTokens: Int
19+
@JsonProperty("prompt_tokens", required = true) val promptTokens: Int,
20+
@JsonProperty("completion_tokens", required = true) val completionTokens: Int,
21+
@JsonProperty("total_tokens", required = true) val totalTokens: Int
2222
)

src/main/kotlin/com/cjcrafter/openai/completions/CompletionChoice.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ import com.fasterxml.jackson.annotation.JsonProperty
2121
* @see FinishReason
2222
*/
2323
data class CompletionChoice(
24-
val text: String,
25-
val index: Int,
26-
val logprobs: List<Float>?,
27-
@JsonProperty("finish_reason") val finishReason: FinishReason
24+
@JsonProperty(required = true) val text: String,
25+
@JsonProperty(required = true) val index: Int,
26+
@JsonProperty(required = true) val logprobs: List<Float>?,
27+
@JsonProperty("finish_reason", required = true) val finishReason: FinishReason
2828
)

src/main/kotlin/com/cjcrafter/openai/completions/CompletionChoiceChunk.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ import com.fasterxml.jackson.annotation.JsonProperty
2121
* @see FinishReason
2222
*/
2323
data class CompletionChoiceChunk(
24-
val text: String,
25-
val index: Int,
26-
val logprobs: List<Float>?,
27-
@JsonProperty("finish_reason") val finishReason: FinishReason?
24+
@JsonProperty(required = true) val text: String,
25+
@JsonProperty(required = true) val index: Int,
26+
@JsonProperty(required = true) val logprobs: List<Float>?,
27+
@JsonProperty("finish_reason", required = true) val finishReason: FinishReason?
2828
) {
2929
/**
3030
* Returns `true` if this message chunk is complete. Once complete, no more

0 commit comments

Comments
 (0)