llmadapter

Troubleshooting

This document covers runtime diagnostics for provider transport and continuation failures.

WebSocket Close Or Context-Window Failure

Symptoms:

Important distinction:

Capture a current Codex session trace:

go run ./cmd/llmadapter infer \
  --debug request,response,stream \
  -m codex/gpt-5.4 \
  --session debug-session-1 \
  --branch main \
  --max-tokens 64 \
  "reply with one short sentence"

Capture a Claude/Anthropic HTTP/SSE trace:

go run ./cmd/llmadapter infer \
  --debug request,response,stream \
  -m anthropic/claude-haiku-4-5-20251001 \
  --source-api anthropic.messages \
  --max-tokens 64 \
  "reply with one short sentence"

Useful scopes:

What to inspect:

Avoid storing raw traces in permanent logs unless required. Debug output redacts known sensitive headers and JSON keys, but prompts, response IDs, and provider metadata can still be operationally sensitive.

Library-Level Diagnostics

Consumers can wire the same redacted diagnostics used by llmadapter infer:

scopes, err := diagnostics.ParseScopes([]string{"request,response,stream"})
if err != nil {
	return err
}

client, err := adapterconfig.NewMuxClient(
	cfg,
	adapterconfig.WithSourceAPI(adapt.ApiOpenAIResponses),
	adapterconfig.WithProviderTransport(diagnostics.NewHTTPTransport(os.Stderr, scopes)),
	adapterconfig.WithProviderWebSocketTransport(diagnostics.NewWebSocketTransport(os.Stderr, scopes)),
)

This wraps only the provider transports created by adapterconfig.NewMuxClient. It does not change the caller’s public continuation contract.