This is an automated email from the ASF dual-hosted git repository.

bowenliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kyuubi.git


The following commit(s) were added to refs/heads/master by this push:
     new 7225f338f [KYUUBI #4809] [CHAT] Set session user in ChatGPT request
7225f338f is described below

commit 7225f338f6bc93cc242afce9a9b018d05cdae258
Author: bowenliang <[email protected]>
AuthorDate: Tue May 9 14:21:27 2023 +0800

    [KYUUBI #4809] [CHAT] Set session user in ChatGPT request
    
    ### _Why are the changes needed?_
    
    - set session user when opening instance of ChatProvider
    - use session user in ChatGPT request, to identify user of message and 
better monitor and abuse detection by OpenAI report( 
https://platform.openai.com/docs/api-reference/chat/create#chat/create-user)
    
    ### _How was this patch tested?_
    - [ ] Add some test cases that check the changes thoroughly including 
negative and positive cases if possible
    
    - [ ] Add screenshots for manual tests if appropriate
    
    - [x] [Run 
test](https://kyuubi.readthedocs.io/en/master/develop_tools/testing.html#running-tests)
 locally before make a pull request
    
    Closes #4809 from bowenliang123/chat-user.
    
    Closes #4809
    
    615d2385a [bowenliang] set session user in chatgpt request
    
    Authored-by: bowenliang <[email protected]>
    Signed-off-by: bowenliang <[email protected]>
---
 .../apache/kyuubi/engine/chat/provider/ChatGPTProvider.scala   | 10 +++++++---
 .../org/apache/kyuubi/engine/chat/provider/ChatProvider.scala  |  2 +-
 .../org/apache/kyuubi/engine/chat/provider/EchoProvider.scala  |  2 +-
 .../apache/kyuubi/engine/chat/session/ChatSessionImpl.scala    |  2 +-
 4 files changed, 10 insertions(+), 6 deletions(-)

diff --git 
a/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/provider/ChatGPTProvider.scala
 
b/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/provider/ChatGPTProvider.scala
index cdea89d2a..03bf0b820 100644
--- 
a/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/provider/ChatGPTProvider.scala
+++ 
b/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/provider/ChatGPTProvider.scala
@@ -26,7 +26,7 @@ import scala.collection.JavaConverters._
 
 import com.google.common.cache.{CacheBuilder, CacheLoader, LoadingCache}
 import com.theokanning.openai.OpenAiApi
-import com.theokanning.openai.completion.chat.{ChatCompletionRequest, 
ChatMessage}
+import com.theokanning.openai.completion.chat.{ChatCompletionRequest, 
ChatMessage, ChatMessageRole}
 import com.theokanning.openai.service.OpenAiService
 import com.theokanning.openai.service.OpenAiService.{defaultClient, 
defaultObjectMapper, defaultRetrofit}
 
@@ -60,6 +60,8 @@ class ChatGPTProvider(conf: KyuubiConf) extends ChatProvider {
     new OpenAiService(api)
   }
 
+  private var sessionUser: Option[String] = None
+
   private val chatHistory: LoadingCache[String, util.ArrayDeque[ChatMessage]] =
     CacheBuilder.newBuilder()
       .expireAfterWrite(10, TimeUnit.MINUTES)
@@ -68,17 +70,19 @@ class ChatGPTProvider(conf: KyuubiConf) extends 
ChatProvider {
           new util.ArrayDeque[ChatMessage]
       })
 
-  override def open(sessionId: String): Unit = {
+  override def open(sessionId: String, user: Option[String]): Unit = {
+    sessionUser = user
     chatHistory.getIfPresent(sessionId)
   }
 
   override def ask(sessionId: String, q: String): String = {
     val messages = chatHistory.get(sessionId)
     try {
-      messages.addLast(new ChatMessage("user", q))
+      messages.addLast(new ChatMessage(ChatMessageRole.USER.value(), q))
       val completionRequest = ChatCompletionRequest.builder()
         .model(conf.get(KyuubiConf.ENGINE_CHAT_GPT_MODEL))
         .messages(messages.asScala.toList.asJava)
+        .user(sessionUser.orNull)
         .build()
       val responseText = 
openAiService.createChatCompletion(completionRequest).getChoices.asScala
         .map(c => c.getMessage.getContent).mkString
diff --git 
a/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/provider/ChatProvider.scala
 
b/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/provider/ChatProvider.scala
index af1ba434b..f9fa8bb5a 100644
--- 
a/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/provider/ChatProvider.scala
+++ 
b/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/provider/ChatProvider.scala
@@ -28,7 +28,7 @@ import org.apache.kyuubi.reflection.DynConstructors
 
 trait ChatProvider {
 
-  def open(sessionId: String): Unit
+  def open(sessionId: String, user: Option[String] = None): Unit
 
   def ask(sessionId: String, q: String): String
 
diff --git 
a/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/provider/EchoProvider.scala
 
b/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/provider/EchoProvider.scala
index 31ad3b8e3..1116ea785 100644
--- 
a/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/provider/EchoProvider.scala
+++ 
b/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/provider/EchoProvider.scala
@@ -19,7 +19,7 @@ package org.apache.kyuubi.engine.chat.provider
 
 class EchoProvider extends ChatProvider {
 
-  override def open(sessionId: String): Unit = {}
+  override def open(sessionId: String, user: Option[String]): Unit = {}
 
   override def ask(sessionId: String, q: String): String =
     "This is ChatKyuubi, nice to meet you!"
diff --git 
a/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/session/ChatSessionImpl.scala
 
b/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/session/ChatSessionImpl.scala
index 29f420768..6ec6d0626 100644
--- 
a/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/session/ChatSessionImpl.scala
+++ 
b/externals/kyuubi-chat-engine/src/main/scala/org/apache/kyuubi/engine/chat/session/ChatSessionImpl.scala
@@ -38,7 +38,7 @@ class ChatSessionImpl(
 
   override def open(): Unit = {
     info(s"Starting to open chat session.")
-    chatProvider.open(handle.identifier.toString)
+    chatProvider.open(handle.identifier.toString, Some(user))
     super.open()
     info(s"The chat session is started.")
   }

Reply via email to