mirror of
https://github.com/discourse/discourse-ai.git
synced 2025-02-27 22:09:23 +00:00
Native tools do not work well on Opus. Chain of Thought prompting means it consumes enormous amounts of tokens and has poor latency. This commit introduce and XML stripper to remove various chain of thought XML islands from anthropic prompts when tools are involved. This mean Opus native tools is now functions (albeit slowly) From local testing XML just works better now. Also fixes enum support in Anthropic native tools
70 lines
1.8 KiB
Ruby
70 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module DiscourseAi
|
|
module Completions
|
|
module Dialects
|
|
class ClaudeTools
|
|
def initialize(tools)
|
|
@raw_tools = tools
|
|
end
|
|
|
|
def translated_tools
|
|
# Transform the raw tools into the required Anthropic Claude API format
|
|
raw_tools.map do |t|
|
|
properties = {}
|
|
required = []
|
|
|
|
if t[:parameters]
|
|
properties = {}
|
|
|
|
t[:parameters].each do |param|
|
|
mapped = { type: param[:type], description: param[:description] }
|
|
mapped[:items] = { type: param[:item_type] } if param[:item_type]
|
|
mapped[:enum] = param[:enum] if param[:enum]
|
|
properties[param[:name]] = mapped
|
|
end
|
|
required =
|
|
t[:parameters].select { |param| param[:required] }.map { |param| param[:name] }
|
|
end
|
|
|
|
{
|
|
name: t[:name],
|
|
description: t[:description],
|
|
input_schema: {
|
|
type: "object",
|
|
properties: properties,
|
|
required: required,
|
|
},
|
|
}
|
|
end
|
|
end
|
|
|
|
def instructions
|
|
""
|
|
end
|
|
|
|
def from_raw_tool_call(raw_message)
|
|
call_details = JSON.parse(raw_message[:content], symbolize_names: true)
|
|
tool_call_id = raw_message[:id]
|
|
[
|
|
{
|
|
type: "tool_use",
|
|
id: tool_call_id,
|
|
name: raw_message[:name],
|
|
input: call_details[:arguments],
|
|
},
|
|
]
|
|
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
|