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

Requests with an empty tool set serialize as `"tools": []`, which strict OpenAI-compatible upstreams reject with 400

Abierto Apto para principiantes
#58,648 3 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
76/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
json, typescript
Área
api, backend

Línea de trabajo

Comienza en la capa de TypeScript AI SDK que serializa las solicitudes de modelos compatibles con OpenAI y localiza dónde un conjunto event.tools vacío se convierte en un array tools. Reproduce el cuerpo de la solicitud contra un upstream estricto y luego añade una prueba de regresión que confirme que las solicitudes sin herramientas efectivas omiten el campo tools y se completan correctamente.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

reproduced
  • opencode 2.0.32, Linux, openai-compatible providers.

When the effective tool set for a model request is empty — in our case a plugin's compaction takeover clears inherited tools by setting event.tools = {} on its child sessions — the AI SDK layer serializes the request body with "tools": []. Strict OpenAI-compatible upstreams reject that:

{"error": {"type": "invalid_request_error", "param": "tools",
           "message": "`tools` must not be an empty array. either provide at least one tool or omit the field entirely."}}

(HTTP 400; a second upstream answers 400 with a generic "upstream provider rejected the request". The same bodies with the tools field omitted return 200.)

Consequence here: every compaction request failed and the fallback chain exhausted — all compaction on the machine was down.

The OpenAI API treats tools as optional and accepts an empty array, and omitting the field is accepted everywhere; clients that model "no tools" as an empty set (the AI SDK's openai-compatible provider) cannot opt out of emitting it.

Request: when the effective tool set is empty, omit tools from the serialized body (or make that behavior configurable). This also makes the documented hook pattern of deleting tools from event.tools safe against strict upstreams.

Workaround we deployed: a local http.request hook plugin that deletes empty tools arrays from outgoing JSON bodies before the request leaves opencode.

Lenguaje dominante
TypeScript
Estrellas
215k
Forks
28.9k
Merge medio
4 h 37 min
PR fusionados (30 d)
512

Preparar el entorno

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 anomalyco/opencode

Todos los issues de anomalyco/opencode

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.