Skip to content

Expected thinking or redacted_thinking, but found tool_use #3077

Description

@jessevdp

Related: #2599

AI_APICallError: litellm.BadRequestError: BedrockException
The model returned the following errors: messages.3.content.0.type: Expected thinking or redacted_thinking, but found tool_use. When thinking is enabled, a final assistant message must start with a thinking block (preceeding the lastmost set of tool_use and tool_result blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable thinking. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking

A session share link where this error happened: https://opencode.ai/s/iDe3unHA

My config

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "my-litellm-provider": {
      "name": "My LiteLLM Provider",
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "https://my-provider.com",
        "apiKey": "...",
        "includeUsage": true
      },
      "models": {
        "claude-4-5-sonnet": {
          "name": "Anthropic Claude Sonnet 4.5",
          "release_date": "2025-09-29",
          "attachment": true,
          "reasoning": true,
          "temperature": true,
          "tool_call": true,
          "limit": {
            "context": 200000,
            "output": 64000
          },
          "options": {
            "thinking": {
              "type": "enabled",
              "budget_tokens": 16000,
            },
          }
        },
      }
    }
  }
}

Activity

  1. github-actions commented on Oct 10, 2025

    @github-actions
    Contributor

    This issue might be a duplicate of existing issues. Please check:

    Feel free to ignore if none of these address your specific case.

  2. jessevdp commented on Oct 10, 2025

    @jessevdp
    ContributorAuthor

    I was able to get the payload of the last request sent that resulted in this error:

    HTTP log implementation

    On dev branch on 28d617d I changed:

    diff --git a/packages/opencode/src/flag/flag.ts b/packages/opencode/src/flag/flag.ts
    index 0437c4c6..ec7c76e1 100644
    --- a/packages/opencode/src/flag/flag.ts
    +++ b/packages/opencode/src/flag/flag.ts
    @@ -9,6 +9,7 @@ export namespace Flag {
       export const OPENCODE_DISABLE_LSP_DOWNLOAD = truthy("OPENCODE_DISABLE_LSP_DOWNLOAD")
       export const OPENCODE_ENABLE_EXPERIMENTAL_MODELS = truthy("OPENCODE_ENABLE_EXPERIMENTAL_MODELS")
       export const OPENCODE_DISABLE_AUTOCOMPACT = truthy("OPENCODE_DISABLE_AUTOCOMPACT")
    +  export const OPENCODE_HTTP_LOG = truthy("OPENCODE_HTTP_LOG")
     
       // Experimental
       export const OPENCODE_EXPERIMENTAL_WATCHER = truthy("OPENCODE_EXPERIMENTAL_WATCHER")
    diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts
    index e0fe4be2..f6cf158e 100644
    --- a/packages/opencode/src/provider/provider.ts
    +++ b/packages/opencode/src/provider/provider.ts
    @@ -393,10 +393,36 @@ export namespace Provider {
           const modPath =
             provider.id === "google-vertex-anthropic" ? `${installedPath}/dist/anthropic/index.mjs` : installedPath
           const mod = await import(modPath)
    -      if (options["timeout"] !== undefined) {
    -        // Only override fetch if user explicitly sets timeout
    +      const timeout = options["timeout"]
    +      const httpLog = Flag.OPENCODE_HTTP_LOG
    +      if (timeout !== undefined || httpLog) {
    +        const originalFetch = options["fetch"] ?? fetch
             options["fetch"] = async (input: any, init?: any) => {
    -          return await fetch(input, { ...init, timeout: options["timeout"] })
    +          const requestTime = Date.now()
    +          if (httpLog) {
    +            log.info("http request", {
    +              providerID: provider.id,
    +              url: typeof input === "string" ? input : input?.url,
    +              method: init?.method ?? "POST",
    +              headers: init?.headers,
    +              body: init?.body,
    +            })
    +          }
    +          const response = await originalFetch(input, timeout !== undefined ? { ...init, timeout } : init)
    +          if (httpLog) {
    +            const duration = Date.now() - requestTime
    +            const clonedResponse = response.clone()
    +            const body = await clonedResponse.text().catch(() => "[failed to read body]")
    +            log.info("http response", {
    +              providerID: provider.id,
    +              status: response.status,
    +              statusText: response.statusText,
    +              headers: Object.fromEntries(response.headers.entries()),
    +              body,
    +              duration,
    +            })
    +          }
    +          return response
             }
           }
           const fn = mod[Object.keys(mod).find((key) => key.startsWith("create"))!]

    HTTP request body

    {
      "model": "claude-4-5-sonnet",
      "max_tokens": 32000,
      "temperature": 1,
      "thinking": {
        "type": "enabled",
        "budget_tokens": 16000
      },
      "messages": [
        {
          "role": "system",
          "content": "...",
          "cache_control": {
            "type": "ephemeral"
          }
        },
        {
          "role": "system",
          "content": "...",
          "cache_control": {
            "type": "ephemeral"
          }
        },
        {
          "role": "user",
          "content": "Think of a shell commands to run and run it."
        },
        {
          "role": "assistant",
          "content": "",
          "tool_calls": [
            {
              "id": "tooluse_DjCcbaRbTQuSqZ_EYPjtDw",
              "type": "function",
              "function": {
                "name": "bash",
                "arguments": "{\"command\":\"git branch --show-current\",\"description\":\"Show current git branch\"}"
              },
              "cache_control": {
                "type": "ephemeral"
              }
            }
          ]
        },
        {
          "role": "tool",
          "tool_call_id": "tooluse_DjCcbaRbTQuSqZ_EYPjtDw",
          "content": "dev\n",
          "cache_control": {
            "type": "ephemeral"
          }
        }
      ],
      "tools": [
        // ...
      ],
      "tool_choice": "auto",
      "stream": true,
      "stream_options": {
        "include_usage": true
      }
    }

  3. rekram1-node commented on Oct 10, 2025

    @rekram1-node
    Collaborator

    does litellm proxy all the reasoning data? There is metadata missing from the reasoning chunk that is probably related:

            {
              "id": "prt_9ce7d0f2a001hbMeUIiVLauU1R",
              "sessionID": "ses_631830520ffeKAg0mziDe3unHA",
              "messageID": "msg_9ce7cfae5001QdLuZKqdf2ko95",
              "type": "reasoning",
              "text": "The user is asking me to think of 5 different shell commands and run them. This is a straightforward task. I should pick some common, useful shell commands that won't cause any harm and will provide interesting information about the system.\n\nLet me think of 5 different commands:\n1. `pwd` - print working directory\n2. `date` - show current date and time\n3. `uname -a` - show system information\n4. `whoami` - show current user\n5. `echo $SHELL` - show the current shell\n\nThese are all safe, read-only commands that will give useful information. I should run them all in parallel since they're independent.\n\nAccording to the instructions, I should be concise and direct. I don't need to explain much unless it's a non-trivial command. These are all trivial commands, so I should just run them.",
              "time": {
                "start": 1760105926442,
                "end": 1760105929703
              }
            },
    

    Example of what I'd expect tto see there:

    {
              .....
              "metadata": {
                "anthropic": {
                  "signature": "EpoFCkYICBgCKkCbTfCLXzhDRXz6OqIdv7M/TW5uqwOam/XJcmdXqpUSmQ7Excsa2jhPPKV3vOMtPn4WYeH5MOplnsO3ltSuFdEcEgxZ+toRK8yaQEzcUX8aDH6cE85hDM7VHR12riIwRAG91rGHahBxIsZDUqUy6iDiZAa88iY7zu62L4mwIiDCrSzK661IRhfyFuhIXzbEKoEEinnwzJMwUuF/DesP99dLdNbmxlrlEivqS0glCmIuIqIjV5PqGymNJmMfE20EPnoZ0u6hRzR7ecIv8bVMIycJ8X5aLaRNyimEyI6SMmbCV4qIbNAfm74wV2cUvLMZ3HR6Deb3O3PcN/4A9HVF4iPDxKSUwXMtn/JWvLQSF4SzHjrL8Rr1wFmUDGLb++uL7fAeG8Q/bO05pWiSxzl4n/FKKt5oEiGTeKZhjd7MpKviCHJfMN05nCkPatUff2uUoLqUpHShSuGoJZDYjOOIpUL5FQHktZR16Pa6EoKGVDUH7iKBHx4XV+BDAHxUJUkVd8JIbCeGzyer9kiWr0F5iBqMMNV0XG6yt1RzSeP6mko0r3CFFdvTRl9BA02AXVMDQhintL7pujWZwh2INyZToz/BfFSM/HR/U1JtrEkZI+etUCcV8UanVFtwpjLSBSf9CGlXmeadG+7noa8VKVLJCxkMyvWzH40HjXwULXgknGgxIvTg48pKoiXp3dQ7adwbk0fCUm8/j/RmOMCDMNHNiB3yOGShWHo8W/OcwNc8GH9aCPbecC+wk4H5XqqahSqpClRtxp7IMKbVo54+gn5QbvjWXcYo9B/1x7Efw78Z6tmzyKN/tyGezQCoWIHjPAY/0jphJ2HNYE3rm5Goyc/4uu3Vg+StjPe4LSX+RK3KSnmXvPbtGAE="
                }
              },
             .....
    
  4. jessevdp commented on Oct 10, 2025

    @jessevdp
    ContributorAuthor
    full log with HTTP requests & responses

    INFO  2025-10-10T14:51:21 +3ms service=provider providerID=my-lite-llm-provider url=https://my-litellm-host.com/chat/completions method=POST body={"model":"gemini-2.5-flash","max_tokens":1500,"messages":[{"role":"system","content":"..."},{"role":"user","content":"Think of 5 different shell commands to run and run them."}]} http request
    INFO  2025-10-10T14:51:21 +0ms service=provider providerID=my-lite-llm-provider url=https://my-litellm-host.com/chat/completions method=POST body={"model":"claude-4-5-sonnet","max_tokens":32000,"temperature":1,"thinking":{"type":"enabled","budget_tokens":16000},"messages":[{"role":"system","content":"...","cache_control":{"type":"ephemeral"}},{"role":"system","content":"...","cache_control":{"type":"ephemeral"}},{"role":"user","content":"Think of 5 different shell commands to run and run them.","cache_control":{"type":"ephemeral"}}],"tools":[...],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}} http request
    INFO  2025-10-10T14:51:22 +38ms service=provider providerID=my-lite-llm-provider status=200 statusText=OK headers={"connection":"keep-alive","content-length":"584","content-type":"application/json","date":"Fri, 10 Oct 2025 14:51:22 GMT","server":"uvicorn","x-litellm-attempted-fallbacks":"0","x-litellm-attempted-retries":"0","x-litellm-call-id":"6dc5948f-ebf3-4e90-9c8f-7e83c921374b","x-litellm-key-spend":"32.07764145000002","x-litellm-model-group":"gemini-2.5-flash","x-litellm-model-id":"bee511aa55363cd0f2f94431fea34fab0d936909c167dd0a707c348797734d4d","x-litellm-response-cost":"0.00038869999999999996","x-litellm-version":"1.77.5"} body={"id":"ah3paJbAAa7-kbwP2dbhkAY","created":1760107881,"model":"gemini-2.5-flash","object":"chat.completion","choices":[{"finish_reason":"stop","index":0,"message":{"content":"Running 5 different shell commands","role":"assistant","images":[],"thinking_blocks":[]}}],"usage":{"completion_tokens":131,"prompt_tokens":204,"total_tokens":335,"completion_tokens_details":{"reasoning_tokens":125,"text_tokens":6},"prompt_tokens_details":{"text_tokens":204}},"vertex_ai_grounding_metadata":[],"vertex_ai_url_context_metadata":[],"vertex_ai_safety_results":[],"vertex_ai_citation_metadata":[]} duration=1038 http response
    INFO  2025-10-10T14:51:28 +23ms service=provider providerID=my-lite-llm-provider status=200 statusText=OK headers={"connection":"keep-alive","content-type":"text/event-stream; charset=utf-8","date":"Fri, 10 Oct 2025 14:51:24 GMT","server":"uvicorn","transfer-encoding":"chunked","x-litellm-call-id":"25058b06-6a16-4647-9ed1-e9799923ae5e","x-litellm-key-spend":"32.07764145000002","x-litellm-model-api-base":"https://bedrock-runtime.eu-central-1.amazonaws.com/model/eu.anthropic.claude-sonnet-4-5-20250929-v1%3A0/converse-stream","x-litellm-model-id":"b13a5f4ec04005c9b991a3723cfa44a8e388fda30c782189d08741a1dbb3472d","x-litellm-version":"1.77.5"} body=data: {"id":"chatcmpl-23e24dd9-100c-4133-b90c-3a783141e274","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"The user wants me","thinking_blocks":[{"type":"thinking","thinking":"The user wants me"}],"provider_specific_fields":{"reasoningContent":{"text":"The user wants me"}},"content":"","role":"assistant"}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-dff732ad-3440-40d6-bcf1-e7015398cedd","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" to think of 5 different shell","thinking_blocks":[{"type":"thinking","thinking":" to think of 5 different shell"}],"provider_specific_fields":{"reasoningContent":{"text":" to think of 5 different shell"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-e6cd65f5-e4ae-4920-b6cd-f41a42e8a141","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" commands to","thinking_blocks":[{"type":"thinking","thinking":" commands to"}],"provider_specific_fields":{"reasoningContent":{"text":" commands to"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-3621fcc5-3cd4-4e6a-bb76-fd179f2682e6","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" run an","thinking_blocks":[{"type":"thinking","thinking":" run an"}],"provider_specific_fields":{"reasoningContent":{"text":" run an"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-39f0e62e-19f5-4125-9bad-613a696dfd00","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"d execute","thinking_blocks":[{"type":"thinking","thinking":"d execute"}],"provider_specific_fields":{"reasoningContent":{"text":"d execute"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-5fa2e734-ed30-476c-9602-b8c6ca7bc6b2","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" them. I should pick","thinking_blocks":[{"type":"thinking","thinking":" them. I should pick"}],"provider_specific_fields":{"reasoningContent":{"text":" them. I should pick"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-8c0e9c3d-f61e-4075-b3aa-5e74cd6e5209","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" reasonable","thinking_blocks":[{"type":"thinking","thinking":" reasonable"}],"provider_specific_fields":{"reasoningContent":{"text":" reasonable"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-9d6adc8a-844a-486d-8d9b-270e59748429","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" commands","thinking_blocks":[{"type":"thinking","thinking":" commands"}],"provider_specific_fields":{"reasoningContent":{"text":" commands"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-7c938080-760c-43d1-ad41-a0ec7c6cd5f0","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" that would be inform","thinking_blocks":[{"type":"thinking","thinking":" that would be inform"}],"provider_specific_fields":{"reasoningContent":{"text":" that would be inform"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-946982fa-1412-4b50-ae77-c6bc68174cb8","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"ative or","thinking_blocks":[{"type":"thinking","thinking":"ative or"}],"provider_specific_fields":{"reasoningContent":{"text":"ative or"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-9020bb6f-e6ef-404b-abfa-8ed2890c935b","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" useful in","thinking_blocks":[{"type":"thinking","thinking":" useful in"}],"provider_specific_fields":{"reasoningContent":{"text":" useful in"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-b877bf16-fc5c-45ae-a38f-df118f621f52","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" this context. Since","thinking_blocks":[{"type":"thinking","thinking":" this context. Since"}],"provider_specific_fields":{"reasoningContent":{"text":" this context. Since"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-43301132-b848-46a0-836d-42987bcd9a1e","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" I","thinking_blocks":[{"type":"thinking","thinking":" I"}],"provider_specific_fields":{"reasoningContent":{"text":" I"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-e069675a-d0fa-4bd2-82ae-a80ce4f1860c","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"'m","thinking_blocks":[{"type":"thinking","thinking":"'m"}],"provider_specific_fields":{"reasoningContent":{"text":"'m"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-da18dddf-31b6-49fb-b06b-4522dc2070cc","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" in a git","thinking_blocks":[{"type":"thinking","thinking":" in a git"}],"provider_specific_fields":{"reasoningContent":{"text":" in a git"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-48a9aba5-702e-4caf-b7e8-737e6ae87486","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" repository, I can","thinking_blocks":[{"type":"thinking","thinking":" repository, I can"}],"provider_specific_fields":{"reasoningContent":{"text":" repository, I can"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-5d886ed1-a484-414b-9335-1d55d1ea61d3","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" run","thinking_blocks":[{"type":"thinking","thinking":" run"}],"provider_specific_fields":{"reasoningContent":{"text":" run"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-b62eaf53-f164-49c4-9b51-48a7a6210f43","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" various","thinking_blocks":[{"type":"thinking","thinking":" various"}],"provider_specific_fields":{"reasoningContent":{"text":" various"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-3ec22c18-7113-4fd5-a48f-58eb3f3093ca","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" commands.","thinking_blocks":[{"type":"thinking","thinking":" commands."}],"provider_specific_fields":{"reasoningContent":{"text":" commands."}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-21509bd4-7b80-4ba1-a5d9-a1585dd9af83","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" Let me think of 5 different","thinking_blocks":[{"type":"thinking","thinking":" Let me think of 5 different"}],"provider_specific_fields":{"reasoningContent":{"text":" Let me think of 5 different"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-933182fe-83da-4cfb-8e84-bb438a451228","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" commands:\n\n1. `pw","thinking_blocks":[{"type":"thinking","thinking":" commands:\n\n1. `pw"}],"provider_specific_fields":{"reasoningContent":{"text":" commands:\n\n1. `pw"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-37ead03c-1ed0-48f3-9659-bfdffcdfa2f5","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"d` - Print working directory\n2.","thinking_blocks":[{"type":"thinking","thinking":"d` - Print working directory\n2."}],"provider_specific_fields":{"reasoningContent":{"text":"d` - Print working directory\n2."}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-c75f772b-6cb7-4a66-87e4-da7262db4842","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" `git","thinking_blocks":[{"type":"thinking","thinking":" `git"}],"provider_specific_fields":{"reasoningContent":{"text":" `git"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-d70d2fd3-c54e-4c3a-af0b-ecbf6e578741","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" branch","thinking_blocks":[{"type":"thinking","thinking":" branch"}],"provider_specific_fields":{"reasoningContent":{"text":" branch"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-5884639d-e8b2-46d3-a67b-ebf6f75268ce","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"` - Show","thinking_blocks":[{"type":"thinking","thinking":"` - Show"}],"provider_specific_fields":{"reasoningContent":{"text":"` - Show"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-d6ffd1af-9f75-43fd-9ad7-61f12e122a46","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" git","thinking_blocks":[{"type":"thinking","thinking":" git"}],"provider_specific_fields":{"reasoningContent":{"text":" git"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-500f4f1f-df2b-434e-8f4e-a1d85ab2109d","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" branches\n3. `u","thinking_blocks":[{"type":"thinking","thinking":" branches\n3. `u"}],"provider_specific_fields":{"reasoningContent":{"text":" branches\n3. `u"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-c18d2eec-423d-41d9-9cf6-478d4d459be5","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"name -a` - Show system information","thinking_blocks":[{"type":"thinking","thinking":"name -a` - Show system information"}],"provider_specific_fields":{"reasoningContent":{"text":"name -a` - Show system information"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-d9f7784e-791c-43f9-b007-808384fcc1b8","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"\n4. `node","thinking_blocks":[{"type":"thinking","thinking":"\n4. `node"}],"provider_specific_fields":{"reasoningContent":{"text":"\n4. `node"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-e0377e52-7a79-42c1-a38d-371da31a2031","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" --version` - Show node","thinking_blocks":[{"type":"thinking","thinking":" --version` - Show node"}],"provider_specific_fields":{"reasoningContent":{"text":" --version` - Show node"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-a7e7613e-46a8-46cf-9ab0-672066f18acd","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" version\n5. `b","thinking_blocks":[{"type":"thinking","thinking":" version\n5. `b"}],"provider_specific_fields":{"reasoningContent":{"text":" version\n5. `b"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-64a825a2-9e15-46c8-9bfa-4507ea9e8d4b","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"un --version` - Show bun","thinking_blocks":[{"type":"thinking","thinking":"un --version` - Show bun"}],"provider_specific_fields":{"reasoningContent":{"text":"un --version` - Show bun"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-05316e80-029d-48ba-8397-1f670ec7ce05","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" version (","thinking_blocks":[{"type":"thinking","thinking":" version ("}],"provider_specific_fields":{"reasoningContent":{"text":" version ("}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-72ba6264-306d-4e01-bf1e-e4fa026a3fb8","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"since this","thinking_blocks":[{"type":"thinking","thinking":"since this"}],"provider_specific_fields":{"reasoningContent":{"text":"since this"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-9faec5f9-f3f6-4160-81d3-ad70c2f8a22a","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" project","thinking_blocks":[{"type":"thinking","thinking":" project"}],"provider_specific_fields":{"reasoningContent":{"text":" project"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-ae8ef1dc-b3ca-4ceb-a01d-d10794d304bc","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" uses bun)\n\nI shoul","thinking_blocks":[{"type":"thinking","thinking":" uses bun)\n\nI shoul"}],"provider_specific_fields":{"reasoningContent":{"text":" uses bun)\n\nI shoul"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-04c147a4-c0df-4367-8835-401d304f61ec","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"d run these in","thinking_blocks":[{"type":"thinking","thinking":"d run these in"}],"provider_specific_fields":{"reasoningContent":{"text":"d run these in"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-0a622a83-b3b8-4310-8fde-fba7a111fac1","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" parallel since","thinking_blocks":[{"type":"thinking","thinking":" parallel since"}],"provider_specific_fields":{"reasoningContent":{"text":" parallel since"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-63dd1dff-b67d-4855-a533-85b944ba4178","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" they're all","thinking_blocks":[{"type":"thinking","thinking":" they're all"}],"provider_specific_fields":{"reasoningContent":{"text":" they're all"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-e84070f1-8f14-4e2c-8eaa-bc975fbabc4b","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" independent of","thinking_blocks":[{"type":"thinking","thinking":" independent of"}],"provider_specific_fields":{"reasoningContent":{"text":" independent of"}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-9ed7805b-a3bf-4a49-b0ca-2afab7e20edb","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":" each other.","thinking_blocks":[{"type":"thinking","thinking":" each other."}],"provider_specific_fields":{"reasoningContent":{"text":" each other."}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-92a96b72-6a53-45ca-bb3a-5e29ebc29ba6","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"","thinking_blocks":[{"type":"thinking","signature":"Et4FCkgICBABGAIqQFm+AC4NJF4/9kEyplZ9WB9i1vplCHJCTSVmWfOvoNZ/5ifWsh40lyc/NiFcEpt2wrHpaxCEencZdL9BWp5YbeMSDDNc6kP8/Ro71T9G6hoMltAMuQwesnxDk9x7IjBvqhVIo5bIBO7YvAbsDyABrDXCECEYJluW3cRpYj90VG0IirCBxfozHdmQVI6j87QqwwTyQ8ILIWStyDhCJXBmPQsI1lOhs0aFKEs4D+FeDkZPwo6lehfkZ9XDfdvlGpD7zoiSPp8OpmiZUqQoeGIgC+RPcq04JUind5raJOWMzxf4nM681Nqqe99tMQRrAP67h+7YEWrH0O/YTZ1VRJ4dGVJ3q82ABmFLJu/7DgmEATyhWxQ7IdmMik+YYTHiSMdURkSm6Jvp20QsYPMB84BEM3UHIJcGyQQmQZ0ibRvtho1oPQrZxpcnpPuO0LRl/1GTRR7xgP3n2zm2f5l4bL1dLxl3BQLBH9NNG8RoA3LjcZ4T1v4IGbOsuGJZD+AZVr1vT0ZnkShcF8S+vHfuP8Y25AaFFxIAhZn9vC/FfrDVreQSEiFgLqOEZe1EP77b12zC0mQAoLPfdQLjPihASwNLcmV++wEOEq6ziJcfFw0137BxGo6d/Y9cj0nvmIqCAkCHo5J85gGMJBjIbBwHdEhKth5iT6tRITIDyCGBuTg1rdYldMz7ofefZaYCq2QTt2JHFaTsdxc4tobZExVCSfgrOUFpfCgE/egnJEAVk9gXYqKDk+Fua2aBwjpVD2NhcKkBDAUSYrYYNWrsbLDGoCnBgorze8nDKfRI67vNxRnQQr1ONiPlcti8rS7d0Q/fxBJjDlwNN3IFiRtdE2quRzr4nfVSuoXw8UTawMwsTzaLRG0SkuF66ximFkl0DyYt1USxJBCUHt9gO2tq1WBo0BYFkTAygUN6GTMB0G2rvbLSig08f8PwH06eZ5hCOkmZtVuenmZ7PRcYAQ==","thinking":""}],"provider_specific_fields":{"reasoningContent":{"signature":"Et4FCkgICBABGAIqQFm+AC4NJF4/9kEyplZ9WB9i1vplCHJCTSVmWfOvoNZ/5ifWsh40lyc/NiFcEpt2wrHpaxCEencZdL9BWp5YbeMSDDNc6kP8/Ro71T9G6hoMltAMuQwesnxDk9x7IjBvqhVIo5bIBO7YvAbsDyABrDXCECEYJluW3cRpYj90VG0IirCBxfozHdmQVI6j87QqwwTyQ8ILIWStyDhCJXBmPQsI1lOhs0aFKEs4D+FeDkZPwo6lehfkZ9XDfdvlGpD7zoiSPp8OpmiZUqQoeGIgC+RPcq04JUind5raJOWMzxf4nM681Nqqe99tMQRrAP67h+7YEWrH0O/YTZ1VRJ4dGVJ3q82ABmFLJu/7DgmEATyhWxQ7IdmMik+YYTHiSMdURkSm6Jvp20QsYPMB84BEM3UHIJcGyQQmQZ0ibRvtho1oPQrZxpcnpPuO0LRl/1GTRR7xgP3n2zm2f5l4bL1dLxl3BQLBH9NNG8RoA3LjcZ4T1v4IGbOsuGJZD+AZVr1vT0ZnkShcF8S+vHfuP8Y25AaFFxIAhZn9vC/FfrDVreQSEiFgLqOEZe1EP77b12zC0mQAoLPfdQLjPihASwNLcmV++wEOEq6ziJcfFw0137BxGo6d/Y9cj0nvmIqCAkCHo5J85gGMJBjIbBwHdEhKth5iT6tRITIDyCGBuTg1rdYldMz7ofefZaYCq2QTt2JHFaTsdxc4tobZExVCSfgrOUFpfCgE/egnJEAVk9gXYqKDk+Fua2aBwjpVD2NhcKkBDAUSYrYYNWrsbLDGoCnBgorze8nDKfRI67vNxRnQQr1ONiPlcti8rS7d0Q/fxBJjDlwNN3IFiRtdE2quRzr4nfVSuoXw8UTawMwsTzaLRG0SkuF66ximFkl0DyYt1USxJBCUHt9gO2tq1WBo0BYFkTAygUN6GTMB0G2rvbLSig08f8PwH06eZ5hCOkmZtVuenmZ7PRcYAQ=="}},"content":""}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-4a7652c3-496e-4bbd-81a7-dcb9539de0b5","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"id":"tooluse_xY3KNO5BQ_Wb2hdMsEgD8g","function":{"arguments":"","name":"bash"},"type":"function","index":0}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-3af16f4d-79da-451c-8332-501ff914703d","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":""},"type":"function","index":0}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-40478524-46b7-4015-9649-9000c6baa8d5","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"{\"comma"},"type":"function","index":0}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-d0208348-ba3f-4990-a874-253a86648d5e","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"nd\":"},"type":"function","index":0}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-2c98dea9-c7e2-42e1-867e-75ce7016759e","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":" \"pw"},"type":"function","index":0}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-1c19a51d-c059-4f2d-9376-89decf28a50f","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"d\""},"type":"function","index":0}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-9381aa52-3ebe-48af-a2d0-8e5c2a442edf","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":", \"descri"},"type":"function","index":0}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-a0e8598e-be0b-4716-a521-e71aae4a34e1","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"ption\": \"Pri"},"type":"function","index":0}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-a876628b-3555-44d2-9bf2-4d6730f895e8","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"nt w"},"type":"function","index":0}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-87d4d3ce-379f-4607-997e-207a4420691b","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"ork"},"type":"function","index":0}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-6bdd06c5-f711-4ca0-ab8d-9916d1b674ce","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"ing di"},"type":"function","index":0}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-c0a602c2-75f5-48f8-8e8a-7e59aa802d94","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"rectory\"}"},"type":"function","index":0}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-a80446aa-cb3f-4b1d-9943-a3e00bd21fc7","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"id":"tooluse_QALMoQXsQYePdVd8rIaRTA","function":{"arguments":"","name":"bash"},"type":"function","index":1}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-71efd005-78d7-4bc6-84c9-3c5c42598906","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":""},"type":"function","index":1}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-294c6ce2-63fe-4c23-b608-b8290fae4a5e","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"{\"co"},"type":"function","index":1}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-af6d1967-fc7a-41ee-8f8a-ebf9c10c9089","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"mma"},"type":"function","index":1}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-8a04b1f5-9f65-41fa-8616-17d0a87aa416","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"nd"},"type":"function","index":1}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-d7e5f430-1aed-44a0-b96c-9b1b6cc6eb7b","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"\": \"git b"},"type":"function","index":1}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-9c7ce8cc-9145-4128-ab57-7e66624215fb","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"ranch\""},"type":"function","index":1}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-c120f009-dc59-4da0-b012-a000d73e7376","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":", \"d"},"type":"function","index":1}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-9b1418aa-9fd6-4730-b304-3b6ddc7fb815","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"escri"},"type":"function","index":1}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-3dfd7085-7777-46ea-a94f-bbd907c70924","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"ption\": \"Sh"},"type":"function","index":1}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-75e1b700-a490-4882-8185-efeb3c9aeb0e","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"ow git"},"type":"function","index":1}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-5a25a396-773d-4c01-90fd-119fcd71b906","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":" branch"},"type":"function","index":1}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-8ab6db62-e56f-47bc-b76d-8ff7ce75a2fe","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"es\"}"},"type":"function","index":1}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-e6f69dda-e440-4548-a6b2-f8e77ae7890c","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"id":"tooluse_V7hI0qzdTOC9xVQuvrNnDA","function":{"arguments":"","name":"bash"},"type":"function","index":2}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-6b727401-7fc0-4a6b-ab8b-4275ce70ce31","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":""},"type":"function","index":2}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-6253bc8c-8b15-43e9-806b-c5b0d5d48341","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"{\"command\":"},"type":"function","index":2}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-6d6f15ec-3c6f-44cf-871a-b8ac99edcc65","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":" \"u"},"type":"function","index":2}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-a5bd390d-0d94-4e02-abbd-9f3b1b7702ed","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"name -a\""},"type":"function","index":2}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-2c392ccd-b378-4a71-b6a3-181a697a7edd","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":", \"desc"},"type":"function","index":2}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-1e0b9716-002c-4f5f-9dfb-6199632ff3c3","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"ription\""},"type":"function","index":2}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-c2357ca5-892f-40a9-8708-19fbb14fc782","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":": \"Sh"},"type":"function","index":2}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-255a2ead-ce4d-471b-8587-ee723dd574d4","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"ow system"},"type":"function","index":2}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-4ebe0b90-de0f-4874-8601-8b66d480ac00","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":" infor"},"type":"function","index":2}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-7445fe26-8b08-49c0-a4fb-21f7a4c72be9","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"mati"},"type":"function","index":2}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-1ad86a2d-38db-4097-a624-86902502f360","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"on\"}"},"type":"function","index":2}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-f45d9944-756e-43c8-9833-d000e7749158","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"id":"tooluse_hq8Ap0CYRiOxbMx66NONbg","function":{"arguments":"","name":"bash"},"type":"function","index":3}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-02e0ead3-21f8-4f03-b5ba-373455d3ff39","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":""},"type":"function","index":3}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-42f2ff1d-3541-4b4e-a8e6-8b8e4ac728bf","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"{\"comman"},"type":"function","index":3}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-26310201-cecf-4135-b519-8efb37f74814","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"d\": \""},"type":"function","index":3}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-c7a8436b-9127-4bf9-b39a-d5eafba677f6","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"bun --"},"type":"function","index":3}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-2fc76d87-cfe8-4b51-85dc-65fb39fe127b","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"version"},"type":"function","index":3}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-4108c015-21ed-462a-96a8-76311ac484d9","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"\""},"type":"function","index":3}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-3e952e03-6419-452b-bca4-4f512903ec4e","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":", \"descript"},"type":"function","index":3}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-b45f66a3-7605-4a53-96bf-9afdd3cb29d5","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"ion\": \"Sho"},"type":"function","index":3}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-7b51c1e7-7733-471d-b127-6e7f41b3b386","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"w b"},"type":"function","index":3}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-a1a3790e-711f-464f-8cf6-27b07a641854","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"un"},"type":"function","index":3}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-f599fc5c-946f-4047-8bc4-3957571fafed","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":" vers"},"type":"function","index":3}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-45ce91e1-88e2-4e6d-9eba-7d2e8cce596f","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"ion\"}"},"type":"function","index":3}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-0dbae566-048f-4437-b70d-9386c8e73dc0","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"id":"tooluse_ciZPFEpRS8KVQork8dOxDA","function":{"arguments":"","name":"bash"},"type":"function","index":4}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-0f5b963b-16b5-4cd4-a154-ba9df0c775ec","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":""},"type":"function","index":4}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-aca1fd34-0e79-4737-a751-3fb4dc9acc4a","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"{\"command\": "},"type":"function","index":4}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-6486769f-e70f-4d59-8e06-0e5632a0d4a2","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"\"git log --"},"type":"function","index":4}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-fcaa18ff-f4a4-404f-a99b-57c871d1b641","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"oneline -"},"type":"function","index":4}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-f08fe0d2-bcec-4743-b5bc-4a9f05c5c1a8","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"5\""},"type":"function","index":4}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-32a0f358-056f-4979-9990-1f9f5d0e2e55","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":", \"descri"},"type":"function","index":4}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-a9d0d9ea-be63-41b8-8e31-493102615b67","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"ption\": \"S"},"type":"function","index":4}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-70e78e8f-2452-43b0-ba85-35f18b41575a","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"ho"},"type":"function","index":4}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-2c16c79d-ed30-422c-afbb-4e145eb5a493","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":"w last 5 git"},"type":"function","index":4}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-52851c20-be61-41f7-847c-82d517d76dc5","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"","tool_calls":[{"function":{"arguments":" commits\"}"},"type":"function","index":4}]}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-6187695b-33c8-4230-99dc-a4416b4946a6","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"finish_reason":"tool_calls","index":0,"delta":{}}],"provider_specific_fields":{}}
    
    data: {"id":"chatcmpl-94721afc-fc39-433a-bcdc-b8fa86f941f1","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{}}],"usage":{"completion_tokens":452,"prompt_tokens":9,"total_tokens":461,"completion_tokens_details":{"reasoning_tokens":135},"prompt_tokens_details":{"cached_tokens":0,"cache_creation_tokens":12922},"cache_creation_input_tokens":12922,"cache_read_input_tokens":0}}
    
    data: [DONE]
    
     duration=4658 http response
    ...
    INFO  2025-10-10T14:51:30 +1ms service=provider providerID=my-lite-llm-provider url=https://my-litellm-host.com/chat/completions method=POST body={"model":"claude-4-5-sonnet","max_tokens":32000,"temperature":1,"thinking":{"type":"enabled","budget_tokens":16000},"messages":[{"role":"system","content":"...","cache_control":{"type":"ephemeral"}},{"role":"system","content":"...","cache_control":{"type":"ephemeral"}},{"role":"user","content":"Think of 5 different shell commands to run and run them."},{"role":"assistant","content":"","tool_calls":[{"id":"tooluse_xY3KNO5BQ_Wb2hdMsEgD8g","type":"function","function":{"name":"bash","arguments":"{\"command\":\"pwd\",\"description\":\"Print working directory\"}"}},{"id":"tooluse_QALMoQXsQYePdVd8rIaRTA","type":"function","function":{"name":"bash","arguments":"{\"command\":\"git branch\",\"description\":\"Show git branches\"}"}},{"id":"tooluse_V7hI0qzdTOC9xVQuvrNnDA","type":"function","function":{"name":"bash","arguments":"{\"command\":\"uname -a\",\"description\":\"Show system information\"}"}},{"id":"tooluse_hq8Ap0CYRiOxbMx66NONbg","type":"function","function":{"name":"bash","arguments":"{\"command\":\"bun --version\",\"description\":\"Show bun version\"}"}},{"id":"tooluse_ciZPFEpRS8KVQork8dOxDA","type":"function","function":{"name":"bash","arguments":"{\"command\":\"git log --oneline -5\",\"description\":\"Show last 5 git commits\"}"},"cache_control":{"type":"ephemeral"}}]},{"role":"tool","tool_call_id":"tooluse_xY3KNO5BQ_Wb2hdMsEgD8g","content":"/Users/jessevanderpluijm/Code/forks/opencode\n"},{"role":"tool","tool_call_id":"tooluse_QALMoQXsQYePdVd8rIaRTA","content":"  azure-openai-tool-schema\n  better-claude-prompt-caching-detection\n* dev\n"},{"role":"tool","tool_call_id":"tooluse_V7hI0qzdTOC9xVQuvrNnDA","content":"Darwin mac.home 24.6.0 Darwin Kernel Version 24.6.0: Mon Jul 14 11:30:40 PDT 2025; root:xnu-11417.140.69~1/RELEASE_ARM64_T6041 arm64 arm Darwin\n"},{"role":"tool","tool_call_id":"tooluse_hq8Ap0CYRiOxbMx66NONbg","content":"1.2.20\n"},{"role":"tool","tool_call_id":"tooluse_ciZPFEpRS8KVQork8dOxDA","content":"b3ef1428 add http log\n28d617d8 ignore: update download stats 2025-10-10\n9b52d338 core: improve directory validation error messages to help users fix invalid directory names\n096710a8 ensure @opencode-ai/plugin is available in `.opencode` folder\n50bb2011 release: v0.14.7\n","cache_control":{"type":"ephemeral"}}],"tools":[...],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}} http request
    INFO  2025-10-10T14:51:38 +10ms service=provider providerID=my-lite-llm-provider status=400 statusText=Bad Request body={"error":{"message":"litellm.BadRequestError: BedrockException - {\"message\":\"The model returned the following errors: messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking\"}. Received Model Group=claude-4-5-sonnet\nAvailable Model Group Fallbacks=['claude-4-5-sonnet-vertex']\nError doing the fallback: litellm.BadRequestError: Vertex_aiException BadRequestError - b'{\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking\"},\"request_id\":\"req_vrtx_011CTyhuTXynwxFQeCCieTz7\"}'No fallback model group found for original model_group=claude-4-5-sonnet-vertex. Fallbacks=[{'claude-4-5-sonnet': ['claude-4-5-sonnet-vertex']}, {'claude-4-sonnet': ['claude-4-sonnet-vertex']}, {'claude-3-7-sonnet': ['claude-3-7-sonnet-vertex']}, {'claude-3-5-sonnet': ['claude-3-5-sonnet-vertex']}, {'claude-3-haiku': ['claude-3-haiku-vertex']}, {'gpt-4.1-mini': ['gpt-4.1-nano']}]. Received Model Group=claude-4-5-sonnet-vertex\nAvailable Model Group Fallbacks=None\nError doing the fallback: litellm.BadRequestError: Vertex_aiException BadRequestError - b'{\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking\"},\"request_id\":\"req_vrtx_011CTyhuTXynwxFQeCCieTz7\"}'No fallback model group found for original model_group=claude-4-5-sonnet-vertex. Fallbacks=[{'claude-4-5-sonnet': ['claude-4-5-sonnet-vertex']}, {'claude-4-sonnet': ['claude-4-sonnet-vertex']}, {'claude-3-7-sonnet': ['claude-3-7-sonnet-vertex']}, {'claude-3-5-sonnet': ['claude-3-5-sonnet-vertex']}, {'claude-3-haiku': ['claude-3-haiku-vertex']}, {'gpt-4.1-mini': ['gpt-4.1-nano']}] LiteLLM Retried: 1 times, LiteLLM Max Retries: 2 LiteLLM Retried: 1 times, LiteLLM Max Retries: 2","type":null,"param":null,"code":"400"}} duration=7608 http response
    ERROR 2025-10-10T14:51:38 +4ms service=session.prompt session=ses_631651ae2ffej8iZ7gQz8TeDHV error={"error":{"name":"AI_APICallError","url":"https://my-litellm-host.com/chat/completions","requestBodyValues":{"model":"claude-4-5-sonnet","max_tokens":32000,"temperature":1,"thinking":{"type":"enabled","budget_tokens":16000},"messages":[{"role":"system","content":"...","cache_control":{"type":"ephemeral"}},{"role":"system","content":"...","cache_control":{"type":"ephemeral"}},{"role":"user","content":"Think of 5 different shell commands to run and run them."},{"role":"assistant","content":"","tool_calls":[{"id":"tooluse_xY3KNO5BQ_Wb2hdMsEgD8g","type":"function","function":{"name":"bash","arguments":"{\"command\":\"pwd\",\"description\":\"Print working directory\"}"}},{"id":"tooluse_QALMoQXsQYePdVd8rIaRTA","type":"function","function":{"name":"bash","arguments":"{\"command\":\"git branch\",\"description\":\"Show git branches\"}"}},{"id":"tooluse_V7hI0qzdTOC9xVQuvrNnDA","type":"function","function":{"name":"bash","arguments":"{\"command\":\"uname -a\",\"description\":\"Show system information\"}"}},{"id":"tooluse_hq8Ap0CYRiOxbMx66NONbg","type":"function","function":{"name":"bash","arguments":"{\"command\":\"bun --version\",\"description\":\"Show bun version\"}"}},{"id":"tooluse_ciZPFEpRS8KVQork8dOxDA","type":"function","function":{"name":"bash","arguments":"{\"command\":\"git log --oneline -5\",\"description\":\"Show last 5 git commits\"}"},"cache_control":{"type":"ephemeral"}}]},{"role":"tool","tool_call_id":"tooluse_xY3KNO5BQ_Wb2hdMsEgD8g","content":"/Users/jessevanderpluijm/Code/forks/opencode\n"},{"role":"tool","tool_call_id":"tooluse_QALMoQXsQYePdVd8rIaRTA","content":"  azure-openai-tool-schema\n  better-claude-prompt-caching-detection\n* dev\n"},{"role":"tool","tool_call_id":"tooluse_V7hI0qzdTOC9xVQuvrNnDA","content":"Darwin mac.home 24.6.0 Darwin Kernel Version 24.6.0: Mon Jul 14 11:30:40 PDT 2025; root:xnu-11417.140.69~1/RELEASE_ARM64_T6041 arm64 arm Darwin\n"},{"role":"tool","tool_call_id":"tooluse_hq8Ap0CYRiOxbMx66NONbg","content":"1.2.20\n"},{"role":"tool","tool_call_id":"tooluse_ciZPFEpRS8KVQork8dOxDA","content":"b3ef1428 add http log\n28d617d8 ignore: update download stats 2025-10-10\n9b52d338 core: improve directory validation error messages to help users fix invalid directory names\n096710a8 ensure @opencode-ai/plugin is available in `.opencode` folder\n50bb2011 release: v0.14.7\n","cache_control":{"type":"ephemeral"}}],"tools":[...],"tool_choice":"auto","stream":true,"stream_options":{"include_usage":true}},"statusCode":400,"responseHeaders":{"connection":"keep-alive","content-length":"3066","content-type":"application/json","date":"Fri, 10 Oct 2025 14:51:37 GMT","server":"uvicorn","x-litellm-call-id":"e27f8ee2-b8b7-47b6-a0fe-a82f1f88b271","x-litellm-key-spend":"32.04287525000002","x-litellm-response-cost":"0","x-litellm-timeout":"600"},"responseBody":"{\"error\":{\"message\":\"litellm.BadRequestError: BedrockException - {\\\"message\\\":\\\"The model returned the following errors: messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking\\\"}. Received Model Group=claude-4-5-sonnet\\nAvailable Model Group Fallbacks=['claude-4-5-sonnet-vertex']\\nError doing the fallback: litellm.BadRequestError: Vertex_aiException BadRequestError - b'{\\\"type\\\":\\\"error\\\",\\\"error\\\":{\\\"type\\\":\\\"invalid_request_error\\\",\\\"message\\\":\\\"messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking\\\"},\\\"request_id\\\":\\\"req_vrtx_011CTyhuTXynwxFQeCCieTz7\\\"}'No fallback model group found for original model_group=claude-4-5-sonnet-vertex. Fallbacks=[{'claude-4-5-sonnet': ['claude-4-5-sonnet-vertex']}, {'claude-4-sonnet': ['claude-4-sonnet-vertex']}, {'claude-3-7-sonnet': ['claude-3-7-sonnet-vertex']}, {'claude-3-5-sonnet': ['claude-3-5-sonnet-vertex']}, {'claude-3-haiku': ['claude-3-haiku-vertex']}, {'gpt-4.1-mini': ['gpt-4.1-nano']}]. Received Model Group=claude-4-5-sonnet-vertex\\nAvailable Model Group Fallbacks=None\\nError doing the fallback: litellm.BadRequestError: Vertex_aiException BadRequestError - b'{\\\"type\\\":\\\"error\\\",\\\"error\\\":{\\\"type\\\":\\\"invalid_request_error\\\",\\\"message\\\":\\\"messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking\\\"},\\\"request_id\\\":\\\"req_vrtx_011CTyhuTXynwxFQeCCieTz7\\\"}'No fallback model group found for original model_group=claude-4-5-sonnet-vertex. Fallbacks=[{'claude-4-5-sonnet': ['claude-4-5-sonnet-vertex']}, {'claude-4-sonnet': ['claude-4-sonnet-vertex']}, {'claude-3-7-sonnet': ['claude-3-7-sonnet-vertex']}, {'claude-3-5-sonnet': ['claude-3-5-sonnet-vertex']}, {'claude-3-haiku': ['claude-3-haiku-vertex']}, {'gpt-4.1-mini': ['gpt-4.1-nano']}] LiteLLM Retried: 1 times, LiteLLM Max Retries: 2 LiteLLM Retried: 1 times, LiteLLM Max Retries: 2\",\"type\":null,\"param\":null,\"code\":\"400\"}}","isRetryable":false,"data":{"error":{"message":"litellm.BadRequestError: BedrockException - {\"message\":\"The model returned the following errors: messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking\"}. Received Model Group=claude-4-5-sonnet\nAvailable Model Group Fallbacks=['claude-4-5-sonnet-vertex']\nError doing the fallback: litellm.BadRequestError: Vertex_aiException BadRequestError - b'{\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking\"},\"request_id\":\"req_vrtx_011CTyhuTXynwxFQeCCieTz7\"}'No fallback model group found for original model_group=claude-4-5-sonnet-vertex. Fallbacks=[{'claude-4-5-sonnet': ['claude-4-5-sonnet-vertex']}, {'claude-4-sonnet': ['claude-4-sonnet-vertex']}, {'claude-3-7-sonnet': ['claude-3-7-sonnet-vertex']}, {'claude-3-5-sonnet': ['claude-3-5-sonnet-vertex']}, {'claude-3-haiku': ['claude-3-haiku-vertex']}, {'gpt-4.1-mini': ['gpt-4.1-nano']}]. Received Model Group=claude-4-5-sonnet-vertex\nAvailable Model Group Fallbacks=None\nError doing the fallback: litellm.BadRequestError: Vertex_aiException BadRequestError - b'{\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking\"},\"request_id\":\"req_vrtx_011CTyhuTXynwxFQeCCieTz7\"}'No fallback model group found for original model_group=claude-4-5-sonnet-vertex. Fallbacks=[{'claude-4-5-sonnet': ['claude-4-5-sonnet-vertex']}, {'claude-4-sonnet': ['claude-4-sonnet-vertex']}, {'claude-3-7-sonnet': ['claude-3-7-sonnet-vertex']}, {'claude-3-5-sonnet': ['claude-3-5-sonnet-vertex']}, {'claude-3-haiku': ['claude-3-haiku-vertex']}, {'gpt-4.1-mini': ['gpt-4.1-nano']}] LiteLLM Retried: 1 times, LiteLLM Max Retries: 2 LiteLLM Retried: 1 times, LiteLLM Max Retries: 2","type":null,"param":null,"code":"400"}}}} stream error
    INFO  2025-10-10T14:51:38 +0ms service=session.prompt session=ses_631651ae2ffej8iZ7gQz8TeDHV type=error part
    ERROR 2025-10-10T14:51:38 +1ms service=session.prompt session=ses_631651ae2ffej8iZ7gQz8TeDHV error=litellm.BadRequestError: BedrockException - {"message":"The model returned the following errors: messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking"}. Received Model Group=claude-4-5-sonnet
    Available Model Group Fallbacks=['claude-4-5-sonnet-vertex']
    Error doing the fallback: litellm.BadRequestError: Vertex_aiException BadRequestError - b'{"type":"error","error":{"type":"invalid_request_error","message":"messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking"},"request_id":"req_vrtx_011CTyhuTXynwxFQeCCieTz7"}'No fallback model group found for original model_group=claude-4-5-sonnet-vertex. Fallbacks=[{'claude-4-5-sonnet': ['claude-4-5-sonnet-vertex']}, {'claude-4-sonnet': ['claude-4-sonnet-vertex']}, {'claude-3-7-sonnet': ['claude-3-7-sonnet-vertex']}, {'claude-3-5-sonnet': ['claude-3-5-sonnet-vertex']}, {'claude-3-haiku': ['claude-3-haiku-vertex']}, {'gpt-4.1-mini': ['gpt-4.1-nano']}]. Received Model Group=claude-4-5-sonnet-vertex
    Available Model Group Fallbacks=None
    Error doing the fallback: litellm.BadRequestError: Vertex_aiException BadRequestError - b'{"type":"error","error":{"type":"invalid_request_error","message":"messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking"},"request_id":"req_vrtx_011CTyhuTXynwxFQeCCieTz7"}'No fallback model group found for original model_group=claude-4-5-sonnet-vertex. Fallbacks=[{'claude-4-5-sonnet': ['claude-4-5-sonnet-vertex']}, {'claude-4-sonnet': ['claude-4-sonnet-vertex']}, {'claude-3-7-sonnet': ['claude-3-7-sonnet-vertex']}, {'claude-3-5-sonnet': ['claude-3-5-sonnet-vertex']}, {'claude-3-haiku': ['claude-3-haiku-vertex']}, {'gpt-4.1-mini': ['gpt-4.1-nano']}] LiteLLM Retried: 1 times, LiteLLM Max Retries: 2 LiteLLM Retried: 1 times, LiteLLM Max Retries: 2 process
    ERROR 2025-10-10T14:51:38 +0ms service=tui message=AI_APICallError: litellm.BadRequestError: BedrockException - {"message":"The model returned the following errors: messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking"}. Received Model Group=claude-4-5-sonnet
    Available Model Group Fallbacks=['claude-4-5-sonnet-vertex']
    Error doing the fallback: litellm.BadRequestError: Vertex_aiException BadRequestError - b'{"type":"error","error":{"type":"invalid_request_error","message":"messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking"},"request_id":"req_vrtx_011CTyhuTXynwxFQeCCieTz7"}'No fallback model group found for original model_group=claude-4-5-sonnet-vertex. Fallbacks=[{'claude-4-5-sonnet': ['claude-4-5-sonnet-vertex']}, {'claude-4-sonnet': ['claude-4-sonnet-vertex']}, {'claude-3-7-sonnet': ['claude-3-7-sonnet-vertex']}, {'claude-3-5-sonnet': ['claude-3-5-sonnet-vertex']}, {'claude-3-haiku': ['claude-3-haiku-vertex']}, {'gpt-4.1-mini': ['gpt-4.1-nano']}]. Received Model Group=claude-4-5-sonnet-vertex
    Available Model Group Fallbacks=None
    Error doing the fallback: litellm.BadRequestError: Vertex_aiException BadRequestError - b'{"type":"error","error":{"type":"invalid_request_error","message":"messages.1.content.0.type: Expected `thinking` or `redacted_thinking`, but found `tool_use`. When `thinking` is enabled, a final `assistant` message must start with a thinking block (preceeding the lastmost set of `tool_use` and `tool_result` blocks). We recommend you include thinking blocks from previous turns. To avoid this requirement, disable `thinking`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking"},"request_id":"req_vrtx_011CTyhuTXynwxFQeCCieTz7"}'No fallback model group found for original model_group=claude-4-5-sonnet-vertex. Fallbacks=[{'claude-4-5-sonnet': ['claude-4-5-sonnet-vertex']}, {'claude-4-sonnet': ['claude-4-sonnet-vertex']}, {'claude-3-7-sonnet': ['claude-3-7-sonnet-vertex']}, {'claude-3-5-sonnet': ['claude-3-5-sonnet-vertex']}, {'claude-3-haiku': ['claude-3-haiku-vertex']}, {'gpt-4.1-mini': ['gpt-4.1-nano']}] LiteLLM Retried: 1 times, LiteLLM Max Retries: 2 LiteLLM Retried: 1 times, LiteLLM Max Retries: 2 name=UnknownError Server error
    INFO  2025-10-10T14:51:38 +0ms service=server duration=0 response
    

  5. jessevdp commented on Oct 11, 2025

    @jessevdp
    ContributorAuthor

    Instead of logging HTTP request/responses I decided to log the chunks just before where they're processed:

    https://github.com/sst/opencode/blob/9d30bc692cb8854e6f37e9637de53c68a704852a/packages/opencode/src/session/prompt.ts#L900-L939

    Log implementation

    diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts
    index 0ccb208c..6f762007 100644
    --- a/packages/opencode/src/session/prompt.ts
    +++ b/packages/opencode/src/session/prompt.ts
    @@ -892,6 +892,7 @@ export namespace SessionPrompt {
                 input.abort.throwIfAborted()
                 log.info("part", {
                   type: value.type,
    +              data: value,
                 })
                 switch (value.type) {
                   case "start":

    Full log

    {"type":"start"}
    {"type":"reasoning-start","id":"reasoning-0"}
    {"type":"reasoning-delta","id":"reasoning-0","text":"The user is asking me to think"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" of 2 different commands and run"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" them. They"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" haven"}
    {"type":"reasoning-delta","id":"reasoning-0","text":"'t specified what"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" kin"}
    {"type":"reasoning-delta","id":"reasoning-0","text":"d of commands,"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" so"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" I should choose"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" some"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" reasonable"}
    {"type":"reasoning-delta","id":"reasoning-0","text":","}
    {"type":"reasoning-delta","id":"reasoning-0","text":" safe"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" commands that will"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" demonstrate"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" my capability. I shoul"}
    {"type":"reasoning-delta","id":"reasoning-0","text":"d run"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" them"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" in parallel since"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" they are"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" independent."}
    {"type":"reasoning-delta","id":"reasoning-0","text":"\n\nI'll choose"}
    {"type":"reasoning-delta","id":"reasoning-0","text":":"}
    {"type":"reasoning-delta","id":"reasoning-0","text":"\n1. `"}
    {"type":"reasoning-delta","id":"reasoning-0","text":"pw"}
    {"type":"reasoning-delta","id":"reasoning-0","text":"d` - to show the"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" current working"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" directory\n2. `date"}
    {"type":"reasoning-delta","id":"reasoning-0","text":"` - to show the current date an"}
    {"type":"reasoning-delta","id":"reasoning-0","text":"d time\n\nThese are simple"}
    {"type":"reasoning-delta","id":"reasoning-0","text":", safe"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" commands that don't modify"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" anything"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" an"}
    {"type":"reasoning-delta","id":"reasoning-0","text":"d will"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" provide"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" useful"}
    {"type":"reasoning-delta","id":"reasoning-0","text":" information."}
    {"type":"tool-input-start","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","toolName":"bash","dynamic":false}
    {"type":"tool-input-delta","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","delta":""}
    {"type":"tool-input-delta","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","delta":"{\"co"}
    {"type":"tool-input-delta","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","delta":"mmand\": "}
    {"type":"tool-input-delta","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","delta":"\"pwd\""}
    {"type":"tool-input-delta","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","delta":", \"d"}
    {"type":"tool-input-delta","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","delta":"escrip"}
    {"type":"tool-input-delta","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","delta":"ti"}
    {"type":"tool-input-delta","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","delta":"on\": \""}
    {"type":"tool-input-delta","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","delta":"Sho"}
    {"type":"tool-input-delta","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","delta":"w c"}
    {"type":"tool-input-delta","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","delta":"urrent work"}
    {"type":"tool-input-delta","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","delta":"ing directo"}
    {"type":"tool-input-delta","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","delta":"ry\"}"}
    {"type":"tool-input-end","id":"tooluse_-iPM9PVMQnehA0Ss7xnQJA"}
    {"type":"tool-call","toolCallId":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","toolName":"bash","input":{"command":"pwd","description":"Show current working directory"}}
    {"type":"tool-input-start","id":"tooluse_XTR012irSeWNkRiC_6AW1w","toolName":"bash","dynamic":false}
    {"type":"tool-input-delta","id":"tooluse_XTR012irSeWNkRiC_6AW1w","delta":""}
    {"type":"tool-input-delta","id":"tooluse_XTR012irSeWNkRiC_6AW1w","delta":"{\"c"}
    {"type":"tool-input-delta","id":"tooluse_XTR012irSeWNkRiC_6AW1w","delta":"ommand\": "}
    {"type":"tool-input-delta","id":"tooluse_XTR012irSeWNkRiC_6AW1w","delta":"\"date\""}
    {"type":"tool-input-delta","id":"tooluse_XTR012irSeWNkRiC_6AW1w","delta":", "}
    {"type":"tool-input-delta","id":"tooluse_XTR012irSeWNkRiC_6AW1w","delta":"\"description"}
    {"type":"tool-input-delta","id":"tooluse_XTR012irSeWNkRiC_6AW1w","delta":"\": \"Displa"}
    {"type":"tool-input-delta","id":"tooluse_XTR012irSeWNkRiC_6AW1w","delta":"y c"}
    {"type":"tool-input-delta","id":"tooluse_XTR012irSeWNkRiC_6AW1w","delta":"urrent date "}
    {"type":"tool-input-delta","id":"tooluse_XTR012irSeWNkRiC_6AW1w","delta":"and time"}
    {"type":"tool-input-delta","id":"tooluse_XTR012irSeWNkRiC_6AW1w","delta":"\"}"}
    {"type":"tool-input-end","id":"tooluse_XTR012irSeWNkRiC_6AW1w"}
    {"type":"tool-call","toolCallId":"tooluse_XTR012irSeWNkRiC_6AW1w","toolName":"bash","input":{"command":"date","description":"Display current date and time"}}
    {"type":"reasoning-end","id":"reasoning-0"}
    {"type":"tool-result","toolCallId":"tooluse_-iPM9PVMQnehA0Ss7xnQJA","toolName":"bash","input":{"command":"pwd","description":"Show current working directory"},"output":{"title":"pwd","metadata":{"output":"/Users/jessevanderpluijm/Code/forks/opencode\n","exit":0,"description":"Show current working directory"},"output":"/Users/jessevanderpluijm/Code/forks/opencode\n"}}
    {"type":"tool-result","toolCallId":"tooluse_XTR012irSeWNkRiC_6AW1w","toolName":"bash","input":{"command":"date","description":"Display current date and time"},"output":{"title":"date","metadata":{"output":"Sat Oct 11 07:31:36 CEST 2025\n","exit":0,"description":"Display current date and time"},"output":"Sat Oct 11 07:31:36 CEST 2025\n"}}
    {"type":"finish-step","finishReason":"tool-calls","usage":{"inputTokens":12574,"outputTokens":237,"totalTokens":12811,"reasoningTokens":99,"cachedInputTokens":12565},"providerMetadata":{"bonzai":{}},"response":{"id":"chatcmpl-43062c80-cbc1-471c-a7da-9ea23c7961a7","timestamp":"2025-10-11T05:31:33.000Z","modelId":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","headers":{"connection":"keep-alive","content-type":"text/event-stream; charset=utf-8","date":"Sat, 11 Oct 2025 05:31:33 GMT","server":"uvicorn","transfer-encoding":"chunked","x-litellm-call-id":"1c4ec28b-b5f2-41d1-90c6-b0d15e79da55","x-litellm-key-spend":"31.235653150000022","x-litellm-model-api-base":"https://bedrock-runtime.eu-central-1.amazonaws.com/model/eu.anthropic.claude-sonnet-4-5-20250929-v1%3A0/converse-stream","x-litellm-model-id":"b13a5f4ec04005c9b991a3723cfa44a8e388fda30c782189d08741a1dbb3472d","x-litellm-version":"1.77.5"}}}
    {"type":"finish","finishReason":"tool-calls","totalUsage":{"inputTokens":12574,"outputTokens":237,"totalTokens":12811,"reasoningTokens":99,"cachedInputTokens":12565}}
    

    Just looking at reasoning related chunks:

    {"type":"reasoning-start","id":"reasoning-0"}
    {"type":"reasoning-delta","id":"reasoning-0","text":"The user is asking me to think"}
    ...
    {"type":"reasoning-delta","id":"reasoning-0","text":" information."}
    {"type":"reasoning-end","id":"reasoning-0"}
    

    It doesn't seem like any providerMetadata is there... 🤔

    The only providerMetadata is in the finish-step chunk:

    {
      "type": "finish-step",
      "finishReason": "tool-calls",
      "usage": {
        // ...
      },
      "providerMetadata": {
        "bonzai": {} // name of my litellm provider
      },
      "response": {
         // ...
      }
    }
  6. rekram1-node commented on Oct 11, 2025

    @rekram1-node
    Collaborator

    @jessevdp are you saying we aren't parsing it correctly? Or that your proxy may be dropping information?

  7. jessevdp commented on Oct 11, 2025

    @jessevdp
    ContributorAuthor

    I’m unsure at this point. I’m assuming it’s either:

    • the server isn’t sending all the required metadata
    • the server is sending data correctly but @ai-sdk/openai-compatible (or opencode?) isn’t parsing it correctly.

    I have a bit of trouble interpreting those streamed chunks at HTTP log level. I’m not entirely sure what I’m looking for.

    I so something that looks vaguely like the signature metadata coming through in the HTTP stream.

    data: {"id":"chatcmpl-92a96b72-6a53-45ca-bb3a-5e29ebc29ba6","created":1760107884,"model":"eu.anthropic.claude-sonnet-4-5-20250929-v1:0","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"reasoning_content":"","thinking_blocks":[{"type":"thinking","signature":"Et4FCkgICBABGAIqQFm+AC4NJF4/9kEyplZ9WB9i1vplCHJCTSVmWfOvoNZ/5ifWsh40lyc/NiFcEpt2wrHpaxCEencZdL9BWp5YbeMSDDNc6kP8/Ro71T9G6hoMltAMuQwesnxDk9x7IjBvqhVIo5bIBO7YvAbsDyABrDXCECEYJluW3cRpYj90VG0IirCBxfozHdmQVI6j87QqwwTyQ8ILIWStyDhCJXBmPQsI1lOhs0aFKEs4D+FeDkZPwo6lehfkZ9XDfdvlGpD7zoiSPp8OpmiZUqQoeGIgC+RPcq04JUind5raJOWMzxf4nM681Nqqe99tMQRrAP67h+7YEWrH0O/YTZ1VRJ4dGVJ3q82ABmFLJu/7DgmEATyhWxQ7IdmMik+YYTHiSMdURkSm6Jvp20QsYPMB84BEM3UHIJcGyQQmQZ0ibRvtho1oPQrZxpcnpPuO0LRl/1GTRR7xgP3n2zm2f5l4bL1dLxl3BQLBH9NNG8RoA3LjcZ4T1v4IGbOsuGJZD+AZVr1vT0ZnkShcF8S+vHfuP8Y25AaFFxIAhZn9vC/FfrDVreQSEiFgLqOEZe1EP77b12zC0mQAoLPfdQLjPihASwNLcmV++wEOEq6ziJcfFw0137BxGo6d/Y9cj0nvmIqCAkCHo5J85gGMJBjIbBwHdEhKth5iT6tRITIDyCGBuTg1rdYldMz7ofefZaYCq2QTt2JHFaTsdxc4tobZExVCSfgrOUFpfCgE/egnJEAVk9gXYqKDk+Fua2aBwjpVD2NhcKkBDAUSYrYYNWrsbLDGoCnBgorze8nDKfRI67vNxRnQQr1ONiPlcti8rS7d0Q/fxBJjDlwNN3IFiRtdE2quRzr4nfVSuoXw8UTawMwsTzaLRG0SkuF66ximFkl0DyYt1USxJBCUHt9gO2tq1WBo0BYFkTAygUN6GTMB0G2rvbLSig08f8PwH06eZ5hCOkmZtVuenmZ7PRcYAQ==","thinking":""}],"provider_specific_fields":{"reasoningContent":{"signature":"Et4FCkgICBABGAIqQFm+AC4NJF4/9kEyplZ9WB9i1vplCHJCTSVmWfOvoNZ/5ifWsh40lyc/NiFcEpt2wrHpaxCEencZdL9BWp5YbeMSDDNc6kP8/Ro71T9G6hoMltAMuQwesnxDk9x7IjBvqhVIo5bIBO7YvAbsDyABrDXCECEYJluW3cRpYj90VG0IirCBxfozHdmQVI6j87QqwwTyQ8ILIWStyDhCJXBmPQsI1lOhs0aFKEs4D+FeDkZPwo6lehfkZ9XDfdvlGpD7zoiSPp8OpmiZUqQoeGIgC+RPcq04JUind5raJOWMzxf4nM681Nqqe99tMQRrAP67h+7YEWrH0O/YTZ1VRJ4dGVJ3q82ABmFLJu/7DgmEATyhWxQ7IdmMik+YYTHiSMdURkSm6Jvp20QsYPMB84BEM3UHIJcGyQQmQZ0ibRvtho1oPQrZxpcnpPuO0LRl/1GTRR7xgP3n2zm2f5l4bL1dLxl3BQLBH9NNG8RoA3LjcZ4T1v4IGbOsuGJZD+AZVr1vT0ZnkShcF8S+vHfuP8Y25AaFFxIAhZn9vC/FfrDVreQSEiFgLqOEZe1EP77b12zC0mQAoLPfdQLjPihASwNLcmV++wEOEq6ziJcfFw0137BxGo6d/Y9cj0nvmIqCAkCHo5J85gGMJBjIbBwHdEhKth5iT6tRITIDyCGBuTg1rdYldMz7ofefZaYCq2QTt2JHFaTsdxc4tobZExVCSfgrOUFpfCgE/egnJEAVk9gXYqKDk+Fua2aBwjpVD2NhcKkBDAUSYrYYNWrsbLDGoCnBgorze8nDKfRI67vNxRnQQr1ONiPlcti8rS7d0Q/fxBJjDlwNN3IFiRtdE2quRzr4nfVSuoXw8UTawMwsTzaLRG0SkuF66ximFkl0DyYt1USxJBCUHt9gO2tq1WBo0BYFkTAygUN6GTMB0G2rvbLSig08f8PwH06eZ5hCOkmZtVuenmZ7PRcYAQ=="}},"content":""}}],"provider_specific_fields":{}}
    

    That seems to be the final reasoning related HTTP chunk. The others just have incremental “actual content” / text.

    Is this something that’s special cases for anthropic? Should I be looking at the adapter? Is using anthropic thinking mode via openAI compatible API the root of the problem here? Or something else?

    Why is the missing metadata a problem? It seems that the chunks are correctly received as reasoning start/delta/finish etc.

  8. rekram1-node commented on Oct 11, 2025

    @rekram1-node
    Collaborator

    The error that you reported for this issue is caused by missing metadata, if for whatever reason your proxy isnt properly transforming the chunks into openai compatible format, then opencode wont have 100% of the data it needs when sending requests to your proxy, so then it fails once it hits anthropic

  9. jessevdp commented on Oct 13, 2025

    @jessevdp
    ContributorAuthor

    I'm investigating if this might be a problem in @ai-sdk/openai-compatible.

    I added some middleware to streamText via wrapLanguageModel to log the params sent to doStream

    diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts
    index 6f762007..d2798bcc 100644
    --- a/packages/opencode/src/session/prompt.ts
    +++ b/packages/opencode/src/session/prompt.ts
    @@ -315,6 +315,12 @@ export namespace SessionPrompt {
                     return args.params
                   },
                 },
    +            {
    +              async wrapStream(args) {
    +                log.info("wrapStream", { params: args.params })
    +                return args.doStream(args)
    +              }
    +            }
               ],
             }),
           })

    doStream params

    {
      "maxOutputTokens": 32000,
      "temperature": 1,
      "tools": [
        // ...
      ],
      "toolChoice": {
        "type": "auto"
      },
      "prompt": [
        {
          "role": "system",
          "content": "...",
          "providerOptions": {
            // ...
          }
        },
        {
          "role": "system",
          "content": "...",
          "providerOptions": {
            // ...
          }
        },
        {
          "role": "user",
          "content": [
            {
              "type": "text",
              "text": "Think of 2 different commands and run them"
            }
          ]
        },
        {
          "role": "assistant",
          "content": [
            {
              "type": "reasoning",
              "text": "The user wants me to think of 2 different commands and run them. They didn't specify what kind of commands, so I should choose some simple, harmless commands that would be informative or useful. Since I'm in a git repository according to the environment info, I could run git-related commands, or just general system commands.\n\nLet me pick two different commands:\n1. `pwd` - to show the current working directory\n2. `date` - to show the current date and time\n\nThese are simple, safe commands that don't modify anything. I can run them in parallel since they're independent."
            },
            {
              "type": "tool-call",
              "toolCallId": "toolu_vrtx_016xYpaUEa2znN1jYMrzrt9Z",
              "toolName": "bash",
              "input": {
                "command": "pwd",
                "description": "Print current working directory"
              }
            },
            {
              "type": "tool-call",
              "toolCallId": "toolu_vrtx_01CgPSgtTguW5DCsaYFJW6iq",
              "toolName": "bash",
              "input": {
                "command": "date",
                "description": "Show current date and time"
              },
              "providerOptions": {
                // ...
              }
            }
          ]
        },
        {
          "role": "tool",
          "content": [
            {
              "type": "tool-result",
              "toolCallId": "toolu_vrtx_016xYpaUEa2znN1jYMrzrt9Z",
              "toolName": "bash",
              "output": {
                "type": "text",
                "value": "/Users/jessevanderpluijm/Code/forks/opencode\n"
              }
            },
            {
              "type": "tool-result",
              "toolCallId": "toolu_vrtx_01CgPSgtTguW5DCsaYFJW6iq",
              "toolName": "bash",
              "output": {
                "type": "text",
                "value": "Mon Oct 13 15:05:08 CEST 2025\n"
              },
              "providerOptions": {
                // ...
              }
            }
          ]
        }
      ],
      "providerOptions": {
        "bonzai": {
          "thinking": {
            "type": "enabled",
            "budget_tokens": 16000
          }
        }
      },
      "abortSignal": {},
      "includeRawChunks": false
    }

    I then log the HTTP request sent by @ai-sdk/openai-compatible using the HTTP log implementation I provided earlier.

    HTTP request body

    {
      "model": "claude-sonnet-4-5-20250929",
      "max_tokens": 32000,
      "temperature": 1,
      "thinking": {
        "type": "enabled",
        "budget_tokens": 16000
      },
      "messages": [
        {
          "role": "system",
          "content": "...",
          "cache_control": {
            "type": "ephemeral"
          }
        },
        {
          "role": "system",
          "content": "...",
          "cache_control": {
            "type": "ephemeral"
          }
        },
        {
          "role": "user",
          "content": "Think of 2 different commands and run them"
        },
        {
          "role": "assistant",
          "content": "",
          "tool_calls": [
            {
              "id": "toolu_vrtx_016xYpaUEa2znN1jYMrzrt9Z",
              "type": "function",
              "function": {
                "name": "bash",
                "arguments": "{\"command\":\"pwd\",\"description\":\"Print current working directory\"}"
              }
            },
            {
              "id": "toolu_vrtx_01CgPSgtTguW5DCsaYFJW6iq",
              "type": "function",
              "function": {
                "name": "bash",
                "arguments": "{\"command\":\"date\",\"description\":\"Show current date and time\"}"
              },
              "cache_control": {
                "type": "ephemeral"
              }
            }
          ]
        },
        {
          "role": "tool",
          "tool_call_id": "toolu_vrtx_016xYpaUEa2znN1jYMrzrt9Z",
          "content": "/Users/jessevanderpluijm/Code/forks/opencode\n"
        },
        {
          "role": "tool",
          "tool_call_id": "toolu_vrtx_01CgPSgtTguW5DCsaYFJW6iq",
          "content": "Mon Oct 13 15:05:08 CEST 2025\n",
          "cache_control": {
            "type": "ephemeral"
          }
        }
      ],
      "tools": [
        // ...
      ],
      "tool_choice": "auto",
      "stream": true,
      "stream_options": {
        "include_usage": true
      }
    }

    Note how the reasoning content WAS present in the params sent to doStream but WASN'T in the HTTP request. I'm going to take a closer look at @ai-sdk/openai-compatible to see what's going on.

  10. rekram1-node commented on Oct 13, 2025

    @rekram1-node
    Collaborator

    sounds good ty!

  11. jessevdp commented on Oct 13, 2025

    @jessevdp
    ContributorAuthor

    I think / am afraid that using Anthropic thinking mode is fundamentally incompatible with using an OpenAI compatible API. The @ai-sdk/openai-compatible client just ignores the "reasoning" parts of "assistant" messages when making a request:

    https://github.com/vercel/ai/blob/dfa8a1c9c8b16499f5d1992a675a1f7037ee9300/packages/openai-compatible/src/chat/openai-compatible-chat-language-model.ts#L214

    https://github.com/vercel/ai/blob/dfa8a1c9c8b16499f5d1992a675a1f7037ee9300/packages/openai-compatible/src/chat/openai-compatible-chat-language-model.ts#L313

    https://github.com/vercel/ai/blob/dfa8a1c9c8b16499f5d1992a675a1f7037ee9300/packages/openai-compatible/src/chat/openai-compatible-chat-language-model.ts#L201

    https://github.com/vercel/ai/blob/e31be1cb65a9ab4e4938d61a56b17736df9dd335/packages/openai-compatible/src/chat/convert-to-openai-compatible-chat-messages.ts#L76-L104

    This is makes it incompatible with Anthropic extended thinking mode because that requires perserving the thinking blocks.

    I'm unsure if the "OpenAI compatible API" spec would allow for reasoning parts to be sent back (in which case we could add an option to the @ai-sdk/openai-compatible client to optionally include the reasoning parts, and then hope that the server [LiteLLM] could process that correctly...), or if this is just not permitted.

    Sorry to have wasted your time :/

    I hope this issue thread is at least helpful to others who are in the same situation as me. (There seem to be at least a couple of LiteLLM users out there.)

  12. rekram1-node commented on Oct 13, 2025

    @rekram1-node
    Collaborator

    hey no problem dw about it

  13. highing666 commented on Jan 7, 2026

    @highing666

    I ran into the same issue when using the Claude model via Open WebUI as a proxy

  14. themw123 commented on Jan 7, 2026

    @themw123

    same problem with openwebui and claude models

  15. rekram1-node commented on Jan 7, 2026

    @rekram1-node
    Collaborator

    Sounds like potential bug w/ ur proxy?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

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