Skip to content

Commit 82ab1d5

Browse files
committed
ChatFunCompletionResponse used for createChatFunCompletion function where the actual messages are of FunMessageSpec type instead of MessageSpec. To harmonize (redundant) response classes ChatMessage was replaced by identical MessageSpec.
1 parent d5785fb commit 82ab1d5

File tree

7 files changed

+44
-28
lines changed

7 files changed

+44
-28
lines changed

openai-client-stream/src/main/scala/io/cequence/openaiscala/service/OpenAIServiceStreamedImpl.scala

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,7 @@ import play.api.libs.json.{JsValue, Json}
1515
import scala.concurrent.ExecutionContext
1616

1717
/**
18-
* Private impl. class of [[OpenAIService]].
19-
*
20-
* @param apiKey
21-
* @param orgId
22-
* @param ec
23-
* @param materializer
18+
* Private impl. class of [[OpenAIServiceStreamedExtra]] which offers extra functions with streaming support.
2419
*
2520
* @since Jan 2023
2621
*/

openai-client/src/main/scala/io/cequence/openaiscala/JsonFormats.scala

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,13 @@ object JsonFormats {
4949
Json.format[FunctionSpec]
5050
}
5151

52-
implicit val chatMessageFormat: Format[ChatMessage] = Json.format[ChatMessage]
5352
implicit val chatCompletionChoiceInfoFormat: Format[ChatCompletionChoiceInfo] = Json.format[ChatCompletionChoiceInfo]
5453
implicit val chatCompletionResponseFormat: Format[ChatCompletionResponse] = Json.format[ChatCompletionResponse]
5554

56-
implicit val chatChunkMessageFormat: Format[ChatChunkMessage] = Json.format[ChatChunkMessage]
55+
implicit val chatFunCompletionChoiceInfoFormat: Format[ChatFunCompletionChoiceInfo] = Json.format[ChatFunCompletionChoiceInfo]
56+
implicit val chatFunCompletionResponseFormat: Format[ChatFunCompletionResponse] = Json.format[ChatFunCompletionResponse]
57+
58+
implicit val chatChunkMessageFormat: Format[ChunkMessageSpec] = Json.format[ChunkMessageSpec]
5759
implicit val chatCompletionChoiceChunkInfoFormat: Format[ChatCompletionChoiceChunkInfo] = Json.format[ChatCompletionChoiceChunkInfo]
5860
implicit val chatCompletionChunkResponseFormat: Format[ChatCompletionChunkResponse] = Json.format[ChatCompletionChunkResponse]
5961

openai-client/src/main/scala/io/cequence/openaiscala/service/OpenAIServiceImpl.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ private class OpenAIServiceImpl(
121121
functions: Seq[FunctionSpec],
122122
responseFunctionName: Option[String],
123123
settings: CreateChatCompletionSettings
124-
): Future[ChatCompletionResponse] = {
124+
): Future[ChatFunCompletionResponse] = {
125125
val coreParams = createBodyParamsForChatCompletion(messages, settings, stream = false)
126126

127127
val extraParams = jsonBodyParams(
@@ -133,7 +133,7 @@ private class OpenAIServiceImpl(
133133
EndPoint.chat_completions,
134134
bodyParams = coreParams ++ extraParams
135135
).map(
136-
_.asSafe[ChatCompletionResponse]
136+
_.asSafe[ChatFunCompletionResponse]
137137
)
138138
}
139139

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,50 @@
11
package io.cequence.openaiscala.domain.response
22

3-
import io.cequence.openaiscala.domain.ChatRole
3+
import io.cequence.openaiscala.domain.{BaseMessageSpec, ChatRole, FunMessageSpec, MessageSpec}
44

55
import java.{util => ju}
66

7+
sealed trait BaseChatCompletionResponse[M <: BaseMessageSpec, C <: BaseChatCompletionChoiceInfo[M]] {
8+
val id: String
9+
val created: ju.Date
10+
val model: String
11+
val choices: Seq[C]
12+
val usage: Option[UsageInfo]
13+
}
14+
715
case class ChatCompletionResponse(
816
id: String,
917
created: ju.Date,
1018
model: String,
1119
choices: Seq[ChatCompletionChoiceInfo],
1220
usage: Option[UsageInfo]
13-
)
21+
) extends BaseChatCompletionResponse[MessageSpec, ChatCompletionChoiceInfo]
22+
23+
case class ChatFunCompletionResponse(
24+
id: String,
25+
created: ju.Date,
26+
model: String,
27+
choices: Seq[ChatFunCompletionChoiceInfo],
28+
usage: Option[UsageInfo]
29+
) extends BaseChatCompletionResponse[FunMessageSpec, ChatFunCompletionChoiceInfo]
30+
31+
sealed trait BaseChatCompletionChoiceInfo[M <: BaseMessageSpec] {
32+
val message: M
33+
val index: Int
34+
val finish_reason: Option[String]
35+
}
1436

1537
case class ChatCompletionChoiceInfo(
16-
message: ChatMessage,
38+
message: MessageSpec,
1739
index: Int,
1840
finish_reason: Option[String]
19-
)
41+
) extends BaseChatCompletionChoiceInfo[MessageSpec]
42+
43+
case class ChatFunCompletionChoiceInfo(
44+
message: FunMessageSpec,
45+
index: Int,
46+
finish_reason: Option[String]
47+
) extends BaseChatCompletionChoiceInfo[FunMessageSpec]
2048

2149
// chunk - streamed
2250
case class ChatCompletionChunkResponse(
@@ -28,12 +56,13 @@ case class ChatCompletionChunkResponse(
2856
)
2957

3058
case class ChatCompletionChoiceChunkInfo(
31-
delta: ChatChunkMessage,
59+
delta: ChunkMessageSpec,
3260
index: Int,
3361
finish_reason: Option[String]
3462
)
3563

36-
case class ChatChunkMessage(
64+
// we should incorporate this into the MessageSpec hierarchy (but the role is optional)
65+
case class ChunkMessageSpec(
3766
role: Option[ChatRole],
3867
content: Option[String]
3968
)

openai-core/src/main/scala/io/cequence/openaiscala/domain/response/ChatMessage.scala

Lines changed: 0 additions & 11 deletions
This file was deleted.

openai-core/src/main/scala/io/cequence/openaiscala/service/OpenAIService.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ trait OpenAIService extends OpenAIServiceConsts {
8989
functions: Seq[FunctionSpec],
9090
responseFunctionName: Option[String] = None,
9191
settings: CreateChatCompletionSettings = DefaultSettings.CreateChatFunCompletion
92-
): Future[ChatCompletionResponse]
92+
): Future[ChatFunCompletionResponse]
9393

9494
/**
9595
* Creates a new edit for the provided input, instruction, and parameters.

openai-guice/src/main/scala/io/cequence/openaiscala/service/GuiceContainer.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ trait GuiceContainer {
1616

1717
protected lazy val config = instance[Config]
1818

19+
// TODO: for Scala3 this function has to be "inlined"
1920
protected def instance[T: Manifest] = injector.instance[T]
2021

2122
protected def result[T](future: Future[T]) =

0 commit comments

Comments
 (0)