module RubyLLM::ModelCapabilities::Anthropic

def default_input_price

def default_input_price
  3.0
end

def default_output_price

def default_output_price
  15.0
end

def determine_context_window(model_id)

def determine_context_window(model_id)
  case model_id
  when /claude-3/ then 200_000
  else 100_000
  end
end

def determine_max_tokens(model_id)

def determine_max_tokens(model_id)
  case model_id
  when /claude-3-5/ then 8_192
  else 4_096
  end
end

def get_input_price(model_id)

def get_input_price(model_id)
  PRICES.dig(model_family(model_id), :input) || default_input_price
end

def get_output_price(model_id)

def get_output_price(model_id)
  PRICES.dig(model_family(model_id), :output) || default_output_price
end

def model_family(model_id)

def model_family(model_id)
  case model_id
  when /claude-3-5-sonnet/  then :claude35_sonnet
  when /claude-3-5-haiku/   then :claude35_haiku
  when /claude-3-opus/      then :claude3_opus
  when /claude-3-sonnet/    then :claude3_sonnet
  when /claude-3-haiku/     then :claude3_haiku
  else :claude2
  end
end

def supports_functions?(model_id)

def supports_functions?(model_id)
  model_id.include?('claude-3')
end

def supports_json_mode?(model_id)

def supports_json_mode?(model_id)
  model_id.include?('claude-3')
end

def supports_vision?(model_id)

def supports_vision?(model_id)
  return false if model_id.match?(/claude-3-5-haiku/)
  return false if model_id.match?(/claude-[12]/)
  true
end