11package com.cjcrafter.openai
22
3- import com.cjcrafter.openai.chat.ChatRequest
4- import com.cjcrafter.openai.chat.ChatResponse
5- import com.cjcrafter.openai.chat.ChatResponseChunk
6- import com.cjcrafter.openai.chat.ChatUser
3+ import com.cjcrafter.openai.gson.ChatChoiceChunkAdapter
4+ import com.cjcrafter.openai.chat.*
75import com.cjcrafter.openai.exception.OpenAIError
86import com.cjcrafter.openai.exception.WrappedIOError
7+ import com.cjcrafter.openai.gson.ChatUserAdapter
8+ import com.cjcrafter.openai.gson.FinishReasonAdapter
99import com.google.gson.Gson
1010import com.google.gson.GsonBuilder
1111import com.google.gson.JsonObject
1212import com.google.gson.JsonParser
13- import com.google.gson.JsonSerializer
1413import okhttp3.*
1514import okhttp3.MediaType.Companion.toMediaType
1615import okhttp3.RequestBody.Companion.toRequestBody
1716import java.io.IOException
18- import java.lang.IllegalArgumentException
1917import java.util.function.Consumer
2018
2119/* *
@@ -39,10 +37,8 @@ class OpenAI @JvmOverloads constructor(
3937 private val client : OkHttpClient = OkHttpClient ()
4038) {
4139
42- private val mediaType: MediaType = " application/json; charset=utf-8" .toMediaType()
43- private val gson: Gson = GsonBuilder ()
44- .registerTypeAdapter(ChatUser ::class .java, JsonSerializer <ChatUser > { src, _, context -> context!! .serialize(src!! .name.lowercase())!! })
45- .create()
40+ private val mediaType = " application/json; charset=utf-8" .toMediaType()
41+ private val gson = createGson()
4642
4743 private fun buildRequest (request : Any ): Request {
4844 val json = gson.toJson(request)
@@ -67,6 +63,7 @@ class OpenAI @JvmOverloads constructor(
6763 */
6864 @Throws(OpenAIError ::class )
6965 fun createChatCompletion (request : ChatRequest ): ChatResponse {
66+ @Suppress(" DEPRECATION" )
7067 request.stream = false // use streamResponse for stream=true
7168 val httpRequest = buildRequest(request)
7269
@@ -80,7 +77,9 @@ class OpenAI @JvmOverloads constructor(
8077 rootObject = JsonParser .parseString(response.body!! .string()).asJsonObject
8178 if (rootObject!! .has(" error" ))
8279 throw OpenAIError .fromJson(rootObject!! .get(" error" ).asJsonObject)
83- return ChatResponse (rootObject!! )
80+
81+ return gson.fromJson(rootObject, ChatResponse ::class .java)
82+ // return ChatResponse(rootObject!!)
8483 }
8584 } catch (ex: IOException ) {
8685 throw WrappedIOError (ex)
@@ -175,7 +174,7 @@ class OpenAI @JvmOverloads constructor(
175174
176175 val rootObject = JsonParser .parseString(jsonResponse).asJsonObject
177176 if (cache == null )
178- cache = ChatResponseChunk (rootObject)
177+ cache = gson.fromJson (rootObject, ChatResponseChunk :: class .java )
179178 else
180179 cache!! .update(rootObject)
181180
@@ -185,4 +184,16 @@ class OpenAI @JvmOverloads constructor(
185184 }
186185 })
187186 }
187+
188+ companion object {
189+
190+ @JvmStatic
191+ fun createGson (): Gson {
192+ return GsonBuilder ()
193+ .registerTypeAdapter(ChatUser ::class .java, ChatUserAdapter ())
194+ .registerTypeAdapter(FinishReason ::class .java, FinishReasonAdapter ())
195+ .registerTypeAdapter(ChatChoiceChunk ::class .java, ChatChoiceChunkAdapter ())
196+ .create()
197+ }
198+ }
188199}
0 commit comments