Ask flow fails with two distinct issues on OpenAI-compatible / Anthropic-compatible providers: hanging SSE streams and invalid tool-call arguments
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Error
- Claridad
- Necesita aclaración
- Estado de actividad
- Tranquilo
- Stack tecnológico
- typescript
Línea de trabajo
Start by reproducing the Ask workflow with the documented OpenAI-compatible and Anthropic-compatible provider modes, focusing on the streaming consumer and tool-call handling paths. Compare the captured SSE termination and malformed arguments with Sourcebot's diagnostics, title-generation requests, and conversation state; done means the failure boundaries and any existing safeguards are clearly identified.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
We investigated repeated Ask failures in Sourcebot and captured the real upstream model traffic with a transparent proxy. We found two separate failure modes:
-
Streaming/network failure
Some model requests return200 OKwithtext/event-stream, start streaming, but never terminate correctly. Eventually the client fails with:TypeError: terminatedTLSSocket.onHttpSocketCloseread ETIMEDOUT
-
Tool-call argument failure
In OpenAI-compatible mode, the model sometimes emits invalid function arguments JSON for tool calls, which leads to:invalid function arguments json string- upstream
400 Bad Request
These are not the same failure.
Environment
- Sourcebot: current Docker image as of 2026-04-10
- Runtime: Node 24 inside container
- Deployment: local Docker on WSL2
- Provider modes tested:
openai-compatibleanthropic
What we ruled out
We ruled out the following as the primary root cause:
- WSL general outbound connectivity
- Docker general outbound connectivity
- basic long-lived
fetch/undiciSSE streaming in both host and container - host proxy env leakage into the Sourcebot container
Using the same sourcebot container and Node fetch/undici, an independent long streaming request to the same model endpoint completed successfully:
- host:
49 chunks,23594 bytes,38.4s - container:
52 chunks,25029 bytes,43.6s
This narrowed the failures to Sourcebot's real Ask workflow rather than general WSL/Docker outbound connectivity.
Failure mode 1: hanging SSE stream
Symptom
Frontend remains stuck in generating, and backend eventually reports:
TypeError: terminatedTLSSocket.onHttpSocketClose
Captured behavior
For some Ask requests, upstream responds with:
200 OKcontent-type: text/event-stream
But the stream never ends normally. Our proxy later records:
message: "terminated"cause_code: "ETIMEDOUT"cause_message: "read ETIMEDOUT"
This happened in both Anthropic-compatible and OpenAI-compatible runs.
Example evidence
OpenAI-compatible sample:
- request body size about
45 KB - stream starts successfully
- then hangs until timeout
Anthropic-compatible sample:
- request to
/anthropic/v1/messages stream=truethinking.enabledtool_choice={"type":"auto"}tools_count=8- stream starts, then never cleanly finishes
See sanitized evidence: https://gist.github.com/leozhengliu-pixel/6252d9b8415ab65dd106d11e2bf59da0
Failure mode 2: invalid tool-call arguments
Symptom
Frontend error:
Failed after 2 attempts with non-retryable error: 'invalid params, invalid function arguments json string ...'
Captured behavior
In an OpenAI-compatible request, the assistant produced this tool call:
{
"id": "call_function_j32rtdm8f446_1",
"type": "function",
"function": {
"name": "read_file",
"arguments": "\"{\""
}
}
The arguments field is not a JSON object string like:
{"path":"...","repo":"..."}
It is just a malformed string literal.
The same request also contains the tool error returned into conversation state:
{
"role": "tool",
"tool_call_id": "call_function_j32rtdm8f446_1",
"content": "Invalid input for tool read_file: JSON parsing failed: Text: {.\nError message: Expected property name or '}' in JSON at position 1 (line 1 column 2)"
}
That request ultimately receives 400 Bad Request.
Why I believe this is relevant to Sourcebot
Even if some instability may be provider-side, Sourcebot is the shared client here, and these failures happen specifically under Sourcebot Ask orchestration:
- tool-rich multi-step interaction
- title-generation subrequests
- conversation accumulation
- streaming consumer path
At minimum, it would help if Sourcebot:
- handled hanging SSE streams more defensively
- surfaced raw upstream request/response diagnostics more clearly
- isolated title-generation failure from main answer flow
- degraded more safely on malformed tool arguments
Requested guidance
Please help clarify:
- Is this a known limitation of Ask with OpenAI-compatible / Anthropic-compatible providers?
- Are there recommended settings to disable or simplify:
- title generation
- thinking
- tool streaming
- multi-step Ask behavior
- Is there an existing safeguard for malformed
tool_calls[].function.arguments? - Is there a supported way to capture Sourcebot's exact model payloads without patching Sourcebot?
I can provide more sanitized payloads if useful.
- Lenguaje dominante
- TypeScript
- Estrellas
- 3.9k
- Forks
- 374
- Merge medio
- 21 h 18 min
- PR fusionados (30 d)
- 39
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 sourcebot-dev/sourcebot
-
bug triage needed
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
sourcebot-dev/sourcebot#1681 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
sourcebot-dev/sourcebot#1633 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
sourcebot-dev/sourcebot#1384 · 4 comentarios ·
-
ask_sb bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
sourcebot-dev/sourcebot#1137 · 4 comentarios ·
-
bug triage needed
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
sourcebot-dev/sourcebot#1661 · 1 comentario ·
Todos los issues de sourcebot-dev/sourcebot
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
safetrustcr/dApp-SafeTrust#426 ·
-
area:workflow bug ready-for-agent
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
fil-donadoni/tolaria#4409 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Fission-AI/OpenSpec#1960 ·
-
Add dependabot Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
corsairdev/corsair#1764 ·