Skip to content

Bug: Responses API completed-empty payload is retried as empty response after a successful tool call #108

@eeee0717

Description

@eeee0717

Summary

When using Bub with Telegram and an OpenAI model over the Responses API path, a turn can fail after a successful tool call because a completed response with no extracted text/tool calls is treated as empty response, retried 4 times, and then surfaced to the user as:

An error occurred at stage 'turn': temporary: openai:gpt-5.4-pro: LLM call failed after retries

This was observed on March 11, 2026.

Environment

  • bub: 0.3.0a1
  • republic: 0.5.4
  • channel: Telegram
  • model: openai:gpt-5.4-pro
  • transport: responses (from Bub payload logging)
  • deployment: Docker

Steps To Reproduce

  1. Start Bub with Telegram enabled.
  2. Send a simple Telegram message such as h.
  3. Let the agent respond through the Telegram skill/tool path.
  4. After the tool call succeeds, Bub starts the next loop step.
  5. The provider returns a Responses payload that appears to be completed, but Bub retries it as empty response until the turn fails.

Actual Behavior

  • The tool call succeeds.
  • Bub logs openai:gpt-5.4-pro: empty response 4 times.
  • The turn ends with temporary: openai:gpt-5.4-pro: LLM call failed after retries.
  • Bub dispatches an error message back to the Telegram chat.

Expected Behavior

  • A completed Responses payload with status=completed and incomplete_details=null should not be retried as an error in this case.

Sanitized Log Excerpt

2026-03-11 11:42:01 INFO  session.message received active session_id=telegram:<chat_id>
content={"message":"h","message_id":<redacted>,"type":"text","username":"<redacted>","full_name":"<redacted>","sender_id":"<user_id>","sender_is_bot":false,"date":<redacted>}

2026-03-11 11:42:02 INFO  loop.step step=1 tape=<tape_id> model=openai:gpt-5.4-pro

2026-03-11 11:42:07 INFO  tool.call.start name=bash cmd="uv run /app/src/bub_skills/telegram/scripts/telegram_send.py --chat-id <chat_id> --message '<redacted>' ..."
2026-03-11 11:42:13 INFO  tool.call.success name=bash elapsed_time=6154.95ms

2026-03-11 11:42:13 INFO  loop.step step=2 tape=<tape_id> model=openai:gpt-5.4-pro

[openai:gpt-5.4-pro] attempt 1/4 failed: [temporary] openai:gpt-5.4-pro: empty response
WARNING llm.empty_response_payload provider=openai model=gpt-5.4-pro transport=responses payload_type=ResponseResource payload={"id":"<response_id>","object":"response","status":"completed","incomplete_details":null,"model":"gpt-5.4-pro",...}

[openai:gpt-5.4-pro] attempt 2/4 failed: [temporary] openai:gpt-5.4-pro: empty response
WARNING llm.empty_response_payload provider=openai model=gpt-5.4-pro transport=responses payload_type=ResponseResource payload={"id":"<response_id>","object":"response","status":"completed","incomplete_details":null,"model":"gpt-5.4-pro",...}

[openai:gpt-5.4-pro] attempt 3/4 failed: [temporary] openai:gpt-5.4-pro: empty response
WARNING llm.empty_response_payload provider=openai model=gpt-5.4-pro transport=responses payload_type=ResponseResource payload={"id":"<response_id>","object":"response","status":"completed","incomplete_details":null,"model":"gpt-5.4-pro",...}

[openai:gpt-5.4-pro] attempt 4/4 failed: [temporary] openai:gpt-5.4-pro: empty response
WARNING llm.empty_response_payload provider=openai model=gpt-5.4-pro transport=responses payload_type=ResponseResource payload={"id":"<response_id>","object":"response","status":"completed","incomplete_details":null,"model":"gpt-5.4-pro",...}

2026-03-11 11:42:24 INFO  session.run.outbound session_id=telegram:<chat_id>
content=An error occurred at stage 'turn': temporary: openai:gpt-5.4-pro: LLM call failed after retries

Notes

From the logged payload shape, this looks like a completed Responses API payload rather than an incomplete/failed one.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions