Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

ChatGPT OAuth agents fail text turns when native image_generation tool is attached

オープン
#1,237 コメント 8 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
55/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
静か
技術スタック
go
領域
api, backend

調査の方向性

まず、提供された curl コマンドで ChatGPT OAuth テキストリクエストを再現し、次に native tools の処理について internal/agent/loop_pipeline_callbacks.go と internal/pipeline/think_stage.go を調べます。列挙された agent パス全体で image_generation アタッチメントとツール名のチェックを追跡します。完了の条件は、nil panic が発生せず、通常のテキストターンではデフォルトでネイティブ画像ツールが使用されず、混在するツールと OAuth テキストリクエストに対するリグレッションカバレッジがあることです。

索引モデルが issue の本文から書いたものです。

説明

agent:github-maintain area:providers bug maintain:triaged P1-high

What to build

Fix ChatGPT Subscription (OAuth) agent runs so ordinary text turns do not fail when native image_generation support is available.

On a v3.14.0 deployment using a ChatGPT OAuth provider (chatgpt_oauth) and an agent configured with gpt-5.5, a simple text message to the agent can fail before any useful answer is persisted. The failure has two related parts:

  1. The agent loop injects the native Responses API tool sentinel:

    { "type": "image_generation" }
    

    into normal text chat turns whenever the provider advertises image generation capability.

  2. Several tool-processing paths assume every tool definition is a function tool and dereference td.Function.Name. Native tools have Function == nil, so this can panic.

Observed stack traces included nil pointer panics in paths such as:

  • internal/agent/loop_pipeline_callbacks.go while counting or checking tool names
  • internal/pipeline/think_stage.go while building AllowedTools

After adding local nil guards, the request no longer panicked, but ChatGPT OAuth still returned an upstream 500 for a simple text turn when the native image_generation tool was included. Disabling image generation for that agent via:

{
  "allow_image_generation": false
}

made the same agent reply successfully.

Acceptance criteria

  • Native provider tools with Function == nil never panic the agent loop, pipeline, tool filtering, history metadata, tracing, or retry guard paths.
  • Ordinary text-only turns for ChatGPT OAuth agents do not attach image_generation unless image generation is explicitly requested or otherwise intentionally enabled for that turn.
  • If allow_image_generation remains the control, document it and/or expose it in agent/provider settings so admins can disable the native image tool without editing hidden JSON.
  • Add regression tests covering a tool list that contains both a function tool and { "type": "image_generation" }.
  • Add a regression test or fixture showing a ChatGPT OAuth text turn does not include image_generation by default.

Reproduction notes

Environment:

  • GoClaw v3.14.0
  • DB schema 80
  • Provider type: chatgpt_oauth
  • Model: gpt-5.5
  • Agent: predefined agent using the ChatGPT OAuth provider

Minimal request:

curl http://localhost:18790/v1/chat/completions \
  -H "Authorization: Bearer $GOCLAW_GATEWAY_TOKEN" \
  -H "X-GoClaw-User-Id: system" \
  -H "X-GoClaw-Tenant-Id: <tenant-id>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "agent:rook",
    "messages": [{"role": "user", "content": "xin chào"}],
    "stream": false,
    "user": "system"
  }'

Observed behavior before local workaround:

  • HTTP connection can close with an empty reply due to panic.
  • After nil guards, the request can return a structured 500 from the ChatGPT OAuth backend when image_generation is still attached to the text turn.
  • Session history may remain at 0 messages because the turn fails before final persistence.

Observed workaround:

  • Set other_config.allow_image_generation=false for the affected agent.
  • Recreate/restart the service so the agent config is reloaded.
  • The same text request returns HTTP 200 and persists user+assistant messages.

Blocked by

None - can start immediately.

主要言語
Go
スター
3.7k
フォーク
1.1k
平均マージ
1日 8時間
マージ済み PR(30日)
11

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

nextlevelbuilder/goclaw のほかの issue

nextlevelbuilder/goclaw の issue をすべて見る

似ている issue

Go の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。