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

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

package sttp.openai.requests.completions.chat

import sttp.openai.json.SnakePickle
import ujson._

sealed trait ToolCall

object ToolCall {

  /** @param id
    *   The ID of the tool call.
    * @param function
    *   The function that the model called.
    */
  case class FunctionToolCall(id: Option[String], function: FunctionCall) extends ToolCall

  implicit val functionToolCallRW: SnakePickle.ReadWriter[FunctionToolCall] = SnakePickle
    .readwriter[Value]
    .bimap[FunctionToolCall](
      functionToolCall => {
        val baseObj = Obj("type" -> "function", "function" -> SnakePickle.writeJs(functionToolCall.function))
        functionToolCall.id.foreach(baseObj("id") = _)
        baseObj
      },
      json => FunctionToolCall(json.obj.get("id").map(_.str), SnakePickle.read[FunctionCall](json("function")))
    )

  implicit val toolCallRW: SnakePickle.ReadWriter[ToolCall] = SnakePickle
    .readwriter[Value]
    .bimap[ToolCall](
      { case functionToolCall: FunctionToolCall =>
        SnakePickle.writeJs(functionToolCall)
      },
      json => SnakePickle.read[FunctionToolCall](json)
    )
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy