Skip to content

Commit 3befc71

Browse files
committed
New OpenAIServiceStreamedExtra function/endpoint - createChatCompletionStreamed (with impl)
1 parent 3c15343 commit 3befc71

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

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

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ package io.cequence.openaiscala.service
22

33
import akka.NotUsed
44
import akka.stream.scaladsl.Source
5-
import io.cequence.openaiscala.domain.response.{FineTuneEvent, TextCompletionResponse}
6-
import io.cequence.openaiscala.domain.settings.CreateCompletionSettings
5+
import io.cequence.openaiscala.domain.MessageSpec
6+
import io.cequence.openaiscala.domain.response.{ChatCompletionChunkResponse, ChatCompletionResponse, FineTuneEvent, TextCompletionResponse}
7+
import io.cequence.openaiscala.domain.settings.{CreateChatCompletionSettings, CreateCompletionSettings}
8+
9+
import scala.concurrent.Future
710

811
trait OpenAIServiceStreamedExtra extends OpenAIServiceConsts {
912

@@ -23,6 +26,20 @@ trait OpenAIServiceStreamedExtra extends OpenAIServiceConsts {
2326
settings: CreateCompletionSettings = DefaultSettings.CreateCompletion
2427
): Source[TextCompletionResponse, NotUsed]
2528

29+
/**
30+
* Creates a completion for the chat message(s) with streamed results.
31+
*
32+
* @param messages The messages to generate chat completions.
33+
* @param settings
34+
* @return chat completion response
35+
*
36+
* @see <a href="https://platform.openai.com/docs/api-reference/chat/create">OpenAI Doc</a>
37+
*/
38+
def createChatCompletionStreamed(
39+
messages: Seq[MessageSpec],
40+
settings: CreateChatCompletionSettings = DefaultSettings.CreateChatCompletion
41+
): Source[ChatCompletionChunkResponse, NotUsed]
42+
2643
/**
2744
* Get fine-grained status updates for a fine-tune job with streamed results.
2845
*

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import io.cequence.openaiscala.domain.settings._
99
import io.cequence.openaiscala.domain.response._
1010
import io.cequence.openaiscala.service.ws.{Timeouts, WSStreamRequestHelper}
1111
import io.cequence.openaiscala.OpenAIScalaClientException
12+
import io.cequence.openaiscala.domain.MessageSpec
1213
import play.api.libs.json.{JsValue, Json}
1314

1415
import scala.concurrent.ExecutionContext
@@ -42,6 +43,22 @@ private trait OpenAIServiceStreamedExtraImpl extends OpenAIServiceStreamedExtra
4243
)
4344
}
4445

46+
override def createChatCompletionStreamed(
47+
messages: Seq[MessageSpec],
48+
settings: CreateChatCompletionSettings = DefaultSettings.CreateChatCompletion
49+
): Source[ChatCompletionChunkResponse, NotUsed] =
50+
execJsonStreamAux(
51+
Command.chat_completions,
52+
"POST",
53+
bodyParams = createBodyParamsForChatCompletion(messages, settings, stream = true)
54+
).map { (json: JsValue) =>
55+
(json \ "error").toOption.map { error =>
56+
throw new OpenAIScalaClientException(error.toString())
57+
}.getOrElse(
58+
json.asSafe[ChatCompletionChunkResponse]
59+
)
60+
}
61+
4562
override def listFineTuneEventsStreamed(
4663
fineTuneId: String
4764
): Source[FineTuneEvent, NotUsed] =

0 commit comments

Comments
 (0)