Requests with an empty tool set serialize as `"tools": []`, which strict OpenAI-compatible upstreams reject with 400
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
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
- 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
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de anomalyco/opencode
-
Snapshot capture failure (EPERM spawning git) fails the whole step despite the best-effort contractAbiertoreproduced
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
anomalyco/opencode#58685 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
reproduced
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
anomalyco/opencode#58664 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
reproduced
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
anomalyco/opencode#58651 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
[FEATURE]: optional per-call result count for websearch (Input.count passthrough to providers)Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
anomalyco/opencode#58636 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Visual Bug in OpenCode DesktopAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
anomalyco/opencode#58618 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de anomalyco/opencode
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
awesome-dsh-plugin/awesome-dsh-plugin#9184 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
farion1231/cc-switch#8829 ·
Los mantenedores suelen responder en 1 día
-
[core-client] Remove unused hand-maintained transport helpers after the definition-table cutoverAbiertodoc-audit enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100