85 lines
2.2 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
module DiscourseAi
module Completions
module Dialects
class OpenAiTools
def initialize(tools, responses_api: false)
@responses_api = responses_api
@raw_tools = tools
end
def translated_tools
if @responses_api
raw_tools.map do |tool|
{
type: "function",
name: tool.name,
description: tool.description,
parameters: tool.parameters_json_schema,
}
end
else
raw_tools.map do |tool|
{
type: "function",
function: {
name: tool.name,
description: tool.description,
parameters: tool.parameters_json_schema,
},
}
end
end
end
def instructions
"" # Noop. Tools are listed separate.
end
def from_raw_tool_call(raw_message)
call_details = JSON.parse(raw_message[:content], symbolize_names: true)
call_details[:arguments] = call_details[:arguments].to_json
call_details[:name] = raw_message[:name]
if @responses_api
{
type: "function_call",
call_id: raw_message[:id],
name: call_details[:name],
arguments: call_details[:arguments],
}
else
{
role: "assistant",
content: nil,
tool_calls: [{ type: "function", function: call_details, id: raw_message[:id] }],
}
end
end
def from_raw_tool(raw_message)
if @responses_api
{
type: "function_call_output",
call_id: raw_message[:id],
output: raw_message[:content],
}
else
{
role: "tool",
tool_call_id: raw_message[:id],
content: raw_message[:content],
name: raw_message[:name],
}
end
end
private
attr_reader :raw_tools
end
end
end
end