discourse-ai/lib/completions/dialects/claude_tools.rb

65 lines
1.6 KiB
Ruby

# frozen_string_literal: true
module DiscourseAi
module Completions
module Dialects
class ClaudeTools
def initialize(tools)
@raw_tools = tools
end
def translated_tools
raw_tools.map do |t|
{ name: t.name, description: t.description, input_schema: t.parameters_json_schema }
end
end
def instructions
""
end
def from_raw_tool_call(raw_message)
call_details = JSON.parse(raw_message[:content], symbolize_names: true)
result = []
if raw_message[:thinking] || raw_message[:redacted_thinking_signature]
if raw_message[:thinking]
result << {
type: "thinking",
thinking: raw_message[:thinking],
signature: raw_message[:thinking_signature],
}
end
if raw_message[:redacted_thinking_signature]
result << {
type: "redacted_thinking",
data: raw_message[:redacted_thinking_signature],
}
end
end
tool_call_id = raw_message[:id]
result << {
type: "tool_use",
id: tool_call_id,
name: raw_message[:name],
input: call_details[:arguments],
}
result
end
def from_raw_tool(raw_message)
[{ type: "tool_result", tool_use_id: raw_message[:id], content: raw_message[:content] }]
end
private
attr_reader :raw_tools
end
end
end
end