enhancement
major
minor
defect
critical
major
minor
major
#30251
tl-ai-core, Anthropic provider: Claude 5.5 models missing from the bundled model catalog, and claude-haiku-5-5 sent a thinking budget (HTTP 400)
tl-ai-core 8.0.0-alpha12.819, application E-Home (haumacher/ehome #126).
1. Catalog
models-dev-snapshot.json of tl-ai-core knows claude-sonnet-4-6 and claude-opus-4-7, but not the current models claude-sonnet-5-5, claude-opus-5-5 and claude-haiku-5-5. An application configuring them (tl_anthropic_models) has no context window, output limit and prices for them unless it declares <model-overrides> itself.
Expected: the snapshot knows the current Claude models (and the shipped default list of the anthropic provider names them).
2. Thinking budget for Haiku 5.5
AnthropicRequestBuilder.requiresBudgetTokens answers true for every model whose name contains haiku. A run on claude-haiku-5-5 with an effort chosen in the chat's thinking picker therefore sends thinking: {type: "enabled", budget_tokens: N}, which the model refuses with HTTP 400; it takes {type: "adaptive"} with output_config.effort.
Reproduction: configure claude-haiku-5-5, choose it and an effort in the chat, send a message.
Expected: only the Haiku models before generation 5 get a budget.
3. Price tiers of the current catalog
models.dev describes a price that depends on the prompt size no longer only as cost.context_over_200k, but also as a list cost.tiers with its own threshold per tier ({input, output, cache_read, cache_write, tier: {type: "context", size: N}}). claude-haiku-5-5 has only such a tier, starting at 100 000 tokens (5 times the base price). ModelsDevFetcher reads only context_over_200k, and CostCalculator applies a tier from a fixed 200 000 tokens; with a refreshed catalog a run on Haiku 5.5 above 100 000 prompt tokens would be reported at a fifth of its cost.
Workaround in E-Home
<model-overrides> for the three models in WEB-INF/autoconf/ehome.ai.config.xml; the override of claude-haiku-5-5 declares reasoning="false", so the chat offers no effort for it.
Solution
- Thinking: The generation of a model name is recognized for Haiku as for Opus and Sonnet (AnthropicRequestBuilder.modelGeneration; a release date in an old name such as claude-3-5-haiku-20241022 is not taken for a generation). Only a Haiku model before generation 5 gets a thinking budget; claude-haiku-5-5 gets adaptive thinking with the chosen effort in output_config.effort. Without an effort, a Haiku model is sent no thinking configuration (it is not counted among the models that think unasked: Opus/Sonnet from generation 5, Fable, Mythos). Dated Claude 3 names (claude-3-opus-20240229) no longer count as thinking unasked.
- Price tiers: A model's price (ModelCost) carries a list of tiers (TieredCost with its threshold). The catalog parser reads both context_over_200k (a tier above 200 000 tokens) and the entries of cost.tiers of type context (a tier above tier.size); a tier of another type is ignored, and when both forms name the same threshold the tiers entry counts. A request is charged at the tier with the highest threshold its prompt (cached part included) exceeds, for all of its tokens. The fixed constant CostCalculator.TIER_THRESHOLD is removed.
- Catalog: The bundled models-dev-snapshot.json is replaced by the current models.dev catalog (2026-11-11). It knows the Claude 5.x models (claude-sonnet-5-5, claude-opus-5-5, claude-haiku-5-5, claude-fable-5-x) among others. Models that models.dev no longer lists (e.g. Claude 3.x, claude-opus-4-1, claude-sonnet-4-20250514, grok-4-1-fast, Grok 2/3) are no longer in the bundled catalog either.
- Default lists: Without tl_anthropic_models, the anthropic provider offers claude-sonnet-5-5,claude-opus-5-5,claude-haiku-5-5; without tl_xai_models, the xai provider offers grok-4.7,grok-4.3.
Migration
- An application that relies on the shipped model lists (no tl_anthropic_models / tl_xai_models) runs its agents on claude-sonnet-5-5 (default) resp. offers grok-4.7,grok-4.3. To keep the previous models, set the variables (tl_anthropic_models=claude-sonnet-4-6,claude-opus-4-7,claude-haiku-4-5, tl_xai_models=grok-4.3,grok-4-1-fast).
- An agent tool access policy (AiToolAccessService) may grant only models a configured provider offers; otherwise the policy is refused and the service does not start. An application relying on the shipped model lists whose policy grants a model no longer in them (e.g. <grant models="claude-haiku-4-5"/>) changes the grant to a current model (claude-haiku-5-5) or sets tl_anthropic_models / tl_xai_models to include the granted models.
- A model the bundled catalog no longer knows (retired models such as claude-sonnet-4-20250514, claude-opus-4-1, grok-4-1-fast) gets no context window, output limit and prices from the catalog. An application still using such a model switches to a current model or declares it in the <model-overrides> of LLMProviderService.
- Workarounds for Claude 5.5 in <model-overrides> (e.g. reasoning="false" for claude-haiku-5-5) can be removed.
- Java code constructing ModelInfo.ModelCost / ModelInfo.TieredCost passes a list of tiers resp. the tier's threshold; CostCalculator.TIER_THRESHOLD is gone (ModelCost.tierFor(promptTokens) answers the applicable tier).