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
- Batch the merchant list into chunks of 25 and call enhance_provider_merchants per chunk.
- Move batching into the job that enqueues enhancement so each unit is capped at 25.
- 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
- Cap enhancement jobs at 25 merchants per unit when enqueueing.
- For large first-sync merchant sets, run batches serially to also respect provider rate limits.
- Reuse the shared LLM batch helper.
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
- Too many transactions to auto-categorize. Max is 25 per requ
- Too many transactions to auto-detect merchants. Max is 25 pe
- Model did not invoke #{TOOL_NAME}
- Tool call missing merchants
- Model is required when using a custom Anthropic-compatible e
AI-assisted analysis of we-promise/sure@e69894adb9 (2026-08-21).
Data as JSON: /api/errors/fb63294e53caf36b.
Report an issue: GitHub.