we-promise/sure · error · Provider::Anthropic::Error

Too many merchants to enhance. Max is 25 per request.

Error message

Too many merchants to enhance. Max is 25 per request.

What it means

Provider::Anthropic#enhance_provider_merchants raises Error when merchants.size > 25. The enhancer sends all merchants in one prompt and expects one report_enhancements tool call back, so the provider enforces 25 per request to bound the tool-call payload and response length.

Source

Thrown at app/models/provider/anthropic.rb:128

      result = AutoMerchantDetector.new(
        client,
        model: effective_model,
        transactions: transactions,
        user_merchants: user_merchants,
        langfuse_trace: trace,
        family: family
      ).auto_detect_merchants

      upsert_langfuse_trace(trace: trace, output: result.map(&:to_h))

      result
    end
  end

  def enhance_provider_merchants(merchants: [], model: "", family: nil, json_mode: nil)
    with_provider_response do
      raise Error, "Too many merchants to enhance. Max is 25 per request." if merchants.size > 25

      effective_model = model.presence || @default_model

      trace = create_langfuse_trace(
        name: "anthropic.enhance_provider_merchants",
        input: { merchants: merchants }
      )

      result = ProviderMerchantEnhancer.new(
        client,
        model: effective_model,
        merchants: merchants,
        langfuse_trace: trace,
        family: family
      ).enhance_merchants

      upsert_langfuse_trace(trace: trace, output: result.map(&:to_h))

View on GitHub (pinned to e69894adb9)

Solutions

  1. Batch the merchant list into chunks of 25 and call enhance_provider_merchants per chunk.
  2. Move batching into the job that enqueues enhancement so each unit is capped at 25.
  3. If enhancements are lower priority, run batches serially with small delays to also avoid provider-level rate limits.

Example fix

# before
provider.enhance_provider_merchants(merchants: provider_merchants)
# => Too many merchants to enhance. Max is 25 per request.

# after
provider_merchants.each_slice(25) do |batch|
  provider.enhance_provider_merchants(merchants: batch, family: family)
end
Defensive patterns

Strategy: validation

Validate before calling

merchants.each_slice(25) do |batch|
  provider.enhance_provider_merchants(merchants: batch, family: family)
end

Try / catch

begin
  provider.enhance_provider_merchants(merchants: batch, family: family)
rescue Provider::Anthropic::Error => e
  Rails.logger.error("merchant enhancement failed: #{e.message}")
end

Prevention

When it happens

Trigger: Calling enhance_provider_merchants(merchants: list, ...) with more than 25 merchants — e.g. a first-run enhancement sweep over a newly imported provider's full merchant list (hundreds of entries) that forgot to paginate.

Common situations: Initial sync of a new bank connection imports a large merchant set and the enhancement job passes it whole; merchant backfill rake task without batching; provider change suddenly yields more merchants than usual.

Related errors


AI-assisted analysis of we-promise/sure@e69894adb9 (2026-08-21). Data as JSON: /api/errors/fb63294e53caf36b. Report an issue: GitHub.