Skip to content

[BUG] Claude‑Code proxy upstream DeepSeek‑V4‑Flash hit 400 The content[].thinking in the thinking mode must be passed back to the API after tool‑call turn #990

Description

@ryan-yuan-dev

Claude Code Version:
2.1.232

Plugin Version:
2.0.0

Operating System:
MacOS 26.4 (25E246)

Describe the bug:

  1. Start full memory‑proxy stack (./start‑all.sh)
  2. Configure upstream LLM provider to deepseek‑v4‑flash
    # ── memory 组:memory + memory-hub 内部调用的 LLM ────────────────────────────
    # 用途:memory 的 embed/summarize;memory-hub 里 knowledge 的 wiki ingest / 总结
    MEMORY_LLM_BASE_URL=https://api.deepseek.com/anthropic             # 例:https://api.deepseek.com/v1
    MEMORY_LLM_API_KEY=sk-xxxx               # 例:sk-xxxxxxxx
    MEMORY_LLM_MODEL="deepseek-v4-flash[1m]"                 # 例:deepseek-chat
    MEMORY_LLM_PROTOCOL=anthropic                  # openai | anthropic
    
    # ── proxy 组:proxy 把用户请求转发到的上游 LLM ──────────────────────────────
    # 用途:coding agent / 客户端调 proxy:8096,proxy 再转发到这里
    PROXY_UPSTREAM_URL=https://api.deepseek.com/anthropic               # 例:https://api.deepseek.com/v1
    PROXY_UPSTREAM_API_KEY=sk-xxxx           # 例:sk-xxxxxxxx(可与 memory 组不同)
    PROXY_UPSTREAM_MODEL="deepseek-v4-flash[1m]"             # 例:deepseek-chat
  3. Configure Claude Code auth info
    export ANTHROPIC_BASE_URL=http://127.0.0.1:8096/claude-code/default
    export ANTHROPIC_AUTH_TOKEN='sk-mem-xxxx'
    claude --model deepseek-v4-flash[1m]
  4. Launch claude cli then send "hello" message
  5. Choose "关联团队资产" -> API Error: 400 The content[].thinking in the thinking mode must be passed back to the API.

Expected behavior:
Avoid 400 error

Error Logs / Screenshots :

  • ScrreenShot
    Image

  • Error Logs

    ➜  global-images git:(feat/server_team) ✗ docker logs -f tdai-proxy
    [config] loaded /data/config.yaml (top-level sections: server,upstream,log,tdai,skill,auth,sessionInit,costGuard,injection,redis)
    26-08-14 09:45:18.648 INFO  langfuse.disabled {"reason":"config not complete"}
    26-08-14 09:45:18.649 INFO  auth.init {"url":"http://memory-core:8420"}
    [storage] activated sqlite backend
    26-08-14 09:45:18.659 INFO  server.starting {"host":"0.0.0.0","port":8096,"upstream":"https://api.deepseek.com/anthropic","logFile":"(disabled)","logLevel":"info","opik":"disabled","langfuse":"disabled","clickhouse":"disabled","costGuard":"disabled","rateLimit":"1000000 TPM / 100 QPM","sessionInit":"enabled","injection":"skill,knowledge,tdai-memory","tdai":"http://memory-core:8420","coreSkill":"http://memory-core:8420","skillRuntime":"allowLlmWrite=false","auth":"http://memory-core:8420","systemUsers":"disabled"}
    26-08-14 09:45:18.664 INFO  server.listening {"address":"0.0.0.0","port":8096}
    26-08-14 09:45:18.890 WARN  connectivity.check {"result":"some_failed","upstream":"ok (225ms)","auth":"ok (18ms)","creditReport":"FAIL: fetch failed"}
    [identity] userId=? keyId=0ec79b66 sessionId=none wechatId=none user=? ws=? proxyToken=none custom=[x-app,x-claude-code-session-id,x-stainless-arch,x-stainless-lang,x-stainless-os,x-stainless-package-version,x-stainless-retry-count,x-stainless-runtime,x-stainless-runtime-version,x-stainless-timeout]
    [debug-cc] x-claude-code-session-id=7240fe95-120f-4259-9892-69d2107bbbeb x-app=cli
    [injection-debug] conversationId=7240fe95-120f-4259-9892-69d2107bbbeb sessionKey=7240fe95-120f-4259-9892-69d2107bbbeb userId=usr-00329t8my3 agentSource=claude-code sessionInitEnabled=true injectionEnabled=true injectors=["skill","knowledge","tdai-memory"] injectedSkipped=false
    [cache] session=claude-code:7240fe95-120f-4259-9892-69d2107bbbeb miss (no bindingRepo) → history-scan
    [session-init:cc] session=claude-code:7240fe95-120f-4259-9892-69d2107bbbeb state=none → uninitialized
    [session-init:cc] session=claude-code:7240fe95-120f-4259-9892-69d2107bbbeb user=usr-00329t8my3 → pending_asset_confirm (teams=1)
    [identity] userId=? keyId=0ec79b66 sessionId=none wechatId=none user=? ws=? proxyToken=none custom=[x-app,x-claude-code-session-id,x-stainless-arch,x-stainless-lang,x-stainless-os,x-stainless-package-version,x-stainless-retry-count,x-stainless-runtime,x-stainless-runtime-version,x-stainless-timeout]
    [debug-cc] x-claude-code-session-id=7240fe95-120f-4259-9892-69d2107bbbeb x-app=cli
    [injection-debug] conversationId=7240fe95-120f-4259-9892-69d2107bbbeb sessionKey=7240fe95-120f-4259-9892-69d2107bbbeb userId=usr-00329t8my3 agentSource=claude-code sessionInitEnabled=true injectionEnabled=true injectors=["skill","knowledge","tdai-memory"] injectedSkipped=false
    [session-recover] claude-code:7240fe95-120f-4259-9892-69d2107bbbeb L2a hit status=pending_asset_confirm (agent=-, task=-)
    [cache] session=claude-code:7240fe95-120f-4259-9892-69d2107bbbeb L2a hit → promote L1 (override stale L1)
    [session-init:cc:debug] session=claude-code:7240fe95-120f-4259-9892-69d2107bbbeb pending_asset_confirm lastUserText="Your questions have been answered: \"本次对话是否要关联团队资产?\"=\"是,关联团队资产\". You can now continue with these answers in mind." choice=true
    [session-init:cc] session=claude-code:7240fe95-120f-4259-9892-69d2107bbbeb auto-select single team=team-003gyfltl9
    [session-init:cc] session=claude-code:7240fe95-120f-4259-9892-69d2107bbbeb team=team-003gyfltl9 auto-select single agent=agt-060cir3ka6
    [session-init:cc] session=claude-code:7240fe95-120f-4259-9892-69d2107bbbeb agent=agt-060cir3ka6 auto-select single task=task-1fn1nub0sw
    [session-init:cc] session=claude-code:7240fe95-120f-4259-9892-69d2107bbbeb → initialized agent=agt-060cir3ka6 task=task-1fn1nub0sw team=team-003gyfltl9 user=usr-00329t8my3
    [session-init:cc] session=claude-code:7240fe95-120f-4259-9892-69d2107bbbeb processed: 4 msgs, ctx=Y/Y protocol=anthropic systemAppend=Y final=[user,system,assistant,user]
    [injection-debug] initResult session=7240fe95-120f-4259-9892-69d2107bbbeb intercepted=false bypassed=undefined justRegistered=true hasSessionInfo=true hasAgentDetail=true
    [asset-capability] user=usr-00329t8my3 flags={"skill":true,"llm_wiki":true,"code_graph":true,"chat_memory":true}
    [injection] injection.externalGatewayUrl not set — falling back to http://172.18.0.4:8096. This causes hook cache thrashing + upstream KV-cache misses in multi-node deployments; set injection.externalGatewayUrl to the shared gateway domain (e.g. https://gateway.example.com).
    ...
    26-08-14 09:46:40.173 INFO  injection.pipeline.done {"traceId":"019fffaa","protocol":"anthropic","agentSource":"claude-code","durationMs":18,"hookCount":4,"totalBlockCount":3,"errorCount":0}
    26-08-14 09:46:40.174 WARN  joinUrl.fallback {"requestPath":"/messages","endpoint":"/messages"}
    08-14 09:46:40.174 [019fffaa] → REQ model=deepseek-v4-flash msgs=3 stream=true
    08-14 09:46:40.175 [019fffaa]   → FORWARD upstream=https://api.deepseek.com/anthropic
    26-08-14 09:46:40.176 WARN  rate_limit.fail_open {"instanceId":"default","modelId":"deepseek-v4-flash","reason":"redis_unavailable"}
    08-14 09:46:40.635 [019fffaa]   ← FORWARD status=400 460ms
    26-08-14 09:46:40.638 ERROR pipeline.error {"requestId":"[019fffaa]","stage":"UPSTREAM_4xx","error":"status=400 body={\"error\":{\"message\":\"The `content[].thinking` in the thinking mode must be passed back to the API.\",\"type\":\"invalid_request_error\",\"param\":null,\"code\":\"invalid_request_error\"}}","error.message":"status=400 body={\"error\":{\"message\":\"The `content[].thinking` in the thinking mode must be passed back to the API.\",\"type\":\"invalid_request_error\",\"param\":null,\"code\":\"invalid_request_error\"}}","error.name":"Error"}
    08-14 09:46:40.639 [019fffaa]   ✗ UPSTREAM_4xx status=400 body={"error":{"message":"The `content[].thinking` in the thinking mode must be passed back to the API.","type":"invalid_request_error","param":null,"code":"invalid_request_error"}}
    08-14 09:46:40.641 [019fffaa]   ✓ STREAM done (no usage extracted)
    08-14 09:46:40.641 [019fffaa] ← DONE total=467ms
    

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions