Skip to content

Commit ab24fbc

Browse files
fix(chat): function mode serializer (#203)
1 parent c37ce61 commit ab24fbc

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

openai-core/src/commonMain/kotlin/com.aallam.openai.api/chat/FunctionMode.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import kotlinx.serialization.json.JsonDecoder
1515
import kotlinx.serialization.json.JsonEncoder
1616
import kotlinx.serialization.json.JsonObject
1717
import kotlinx.serialization.json.JsonPrimitive
18+
import kotlinx.serialization.json.jsonPrimitive
1819
import kotlin.jvm.JvmInline
1920

2021
/**
@@ -62,7 +63,7 @@ internal object FunctionModeSerializer : KSerializer<FunctionMode> {
6263
require(decoder is JsonDecoder) { "This decoder is not a JsonDecoder. Cannot deserialize `FunctionCall`" }
6364
return when (val json = decoder.decodeJsonElement()) {
6465
is JsonPrimitive -> Default(json.content)
65-
is JsonObject -> Named.serializer().deserialize(decoder)
66+
is JsonObject -> json["name"]?.jsonPrimitive?.content?.let(FunctionMode::Named) ?: error("Missing 'name'")
6667
else -> throw UnsupportedOperationException("Cannot deserialize FunctionMode. Unsupported JSON element.")
6768
}
6869
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.aallam.openai.api.chat
2+
3+
import com.aallam.openai.api.BetaOpenAI
4+
import kotlinx.serialization.json.Json
5+
import kotlin.test.Test
6+
import kotlin.test.assertEquals
7+
8+
@OptIn(BetaOpenAI::class)
9+
class TestFunctionMode {
10+
11+
@Test
12+
fun serialize() {
13+
listOf(
14+
FunctionMode.Auto,
15+
FunctionMode.None,
16+
FunctionMode.Named("someFunctionName")
17+
).forEach { functionMode ->
18+
val jsonString = Json.encodeToString(FunctionMode.serializer(), functionMode)
19+
val decoded = Json.decodeFromString(FunctionMode.serializer(), jsonString)
20+
assertEquals(functionMode, decoded)
21+
}
22+
}
23+
}

0 commit comments

Comments
 (0)