All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sttp.openai.requests.completions.chat.Role.scala Maven / Gradle / Ivy

package sttp.openai.requests.completions.chat

import sttp.openai.OpenAIExceptions.OpenAIException.DeserializationOpenAIException
import sttp.openai.json.SnakePickle
import ujson.Str

sealed abstract class Role(val value: String)

object Role {
  case object System extends Role("system")

  case object User extends Role("user")

  case object Assistant extends Role("assistant")

  case object Tool extends Role("tool")

  case class Custom(customRole: String) extends Role(customRole)

  val values: Set[Role] = Set(System, User, Assistant, Tool)

  private val byRoleValue = values.map(role => role.value -> role).toMap

  implicit val roleRW: SnakePickle.ReadWriter[Role] = SnakePickle
    .readwriter[ujson.Value]
    .bimap[Role](
      role => SnakePickle.writeJs(role.value),
      jsonValue =>
        SnakePickle.read[ujson.Value](jsonValue) match {
          case Str(value) => byRoleValue.getOrElse(value, Custom(value))
          case e          => throw DeserializationOpenAIException(new Exception(s"Could not deserialize: $e"))
        }
    )
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy