Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

@effect/ai-anthropic: responses whose usage has only input_tokens and output_tokens fail to decode (Anthropic-compatible gateways)

Abierto
#9,963 0 comentarios 0 reacciones 1 asignado Ver en GitHub

Los mantenedores suelen responder en 1 día

@effect-bot ya está trabajando en esto.

Desde el 26/10/2026.

Evaluación

Este issue todavía no se ha evaluado.

Descripción

What version of Effect is running?

effect and @effect/ai-anthropic from main at 16fe80030.

What steps can reproduce the bug?

Point AnthropicClient.layer({ apiKey, apiUrl }) at an Anthropic-compatible gateway that sends a minimal usage object, and call LanguageModel.generateText or LanguageModel.streamText. I used freellmapi's /v1/messages, which answers with:

// non-streaming message, and message_start in a stream
"usage": { "input_tokens": 3, "output_tokens": 1 }
// message_delta
"usage": { "output_tokens": 1 }
What is the expected behavior?

The response decodes. These fields only feed cache accounting, which already falls back when they are missing or null (cache_creation_input_tokens ?? 0).

What do you see instead?
generateText: AnthropicClient.createMessage: Invalid response: Missing key
  at ["usage"]["cache_creation"]
streamText:   AnthropicClient.createMessageStream: Invalid response: Missing key
  at [0]["data"]["message"]["usage"]["cache_creation"]

Adding the missing keys one by one, the generated schemas require:

  • BetaMessage.usage and BetaMessageStartEvent.message.usage: cache_creation, cache_creation_input_tokens, cache_read_input_tokens, service_tier
  • BetaMessageDeltaEvent.usage: cache_creation_input_tokens, cache_read_input_tokens, input_tokens
Additional information

Same kind of problem as #8464 (inference_geo), which was fixed with codegen.yml replacements. If these keys become optional, the message_delta handler needs a change too: it checks Predicate.isNotNull(event.usage.input_tokens) (AnthropicLanguageModel.ts:2209, and the two cache fields below it), and undefined passes that check, so a delta without input_tokens would set the input count to undefined. Predicate.isNotNullish avoids that. Happy to open a PR with both if that helps.

Lenguaje dominante
TypeScript
Estrellas
16.7k
Forks
808
Merge medio
10 h 49 min
PR fusionados (30 d)
846

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de Effect-TS/effect

Todos los issues de Effect-TS/effect

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.