At present, it doesnt appear that we see the reasoning traces for a supported model, at least with GCP Vertex Chat Model. There is, however, a setting that implies -1 (default) for the thinking budget.
Using Gemini 3.8-flash, it’s not obvious where 0 and -1 come from. What are the expected values beyond 0 and -1? Those on the Google model page I referenced above?
The 0 and -1 come from the older thinking_budget setting. That’s what the node’s Thinking Budget option sets. With it, 0 turns thinking off (Gemini 2.5 Flash and 2.5 Flash-Lite only) and -1 lets the model decide. Any other number caps the thinking tokens. For Gemini 2.5 Flash you can pick 1 to 24,576.
Your model works a different way, though. Gemini 3 models take thinking_level, not a token count. For 3.8 Flash you get LOW, MEDIUM or HIGH, and MEDIUM is the default. Google’s page says thinking_budget is deprecated for Gemini 3. It also warns it can cause intermittent 400 INVALID_ARGUMENT errors.
So with 3.8 Flash, I’d remove the Thinking Budget option from the node’s Options. Don’t leave it at -1, because -1 still sends the old setting. With the option gone, the node sends no thinking config and you run at MEDIUM.
About the missing traces: when the budget is anything but 0, the LangChain code behind the node already asks Gemini for thoughts. So they’re likely coming back and just not shown in n8n. Removing the option stops that request too. If you need the traces or a set level, call Vertex generateContent from an HTTP Request node. Set thinkingLevel and includeThoughts in thinkingConfig, and leave thinkingBudget out, since sending both returns an error.
When configuring the thinking budget for Gemini models on Vertex AI, passing explicit token limits or mapping -1 for dynamic default relies heavily on the underlying API schema version your n8n node is communicating with. If reasoning traces are not appearing in your execution output, check the raw response payload in the node execution history to see if the reasoning tokens are being returned under a separate candidate metadata object. Let me know which API version or n8n sub-node you are using and I can help outline the exact payload structure right here.
Thanks for clarifying! With n8n Cloud and the native Google Vertex Chat Model sub-node, there are two distinct things happening under the hood that you need to know:
Passing the Thinking Budget in the Node
In the Google Vertex AI API, the thinking budget is governed by generationConfig.thinkingConfig.thinkingBudget.
If using the Model UI Options: Open your Google Vertex Chat Model node → click Add Option at the bottom:
If Thinking Budget (or Additional Model Arguments) appears in your build, you can pass an integer between 0 (off) and 24576 (or -1 for dynamic/default on Gemini 2.5/2.0 Flash Thinking).
Note: If you set it to 0, thinking is fully suppressed and it behaves like standard Flash.
The “Hidden Trace” Trap (Why you might not see the thoughts)
Even when the thinking budget is actively working, n8n’s LangChain wrapper strips the internal thinking trace by default.
In Vertex API responses, Gemini returns two parts in the response array: the thought stream (part.thought = true) and the final response text.
The @langchain/google-vertexai package used by n8n only extracts the final resolved text block to pass down the agent chain as AIMessage.content.
How to verify it’s actually thinking: Look at your execution latency and token metrics. If response latency jumps from ~800ms to 4–6s and total tokens include reasoning tokens, the model is executing the thinking budget, but LangChain is cleanly suppressing the raw chain-of-thought from the final output.
What to do if you need the raw thinking traces in n8n:
If your use case requires parsing or displaying the actual reasoning tokens (the thoughts themselves) rather than just the final answer, bypass the LangChain sub-node and use a standard HTTP Request node targeting the Vertex REST API:
This will return the complete raw candidates[0].content.parts array, allowing you to access both the thought trace and the final answer directly in n8n.
Let me know if your node UI has the options field exposed or if you’d like the exact JSON to map via the HTTP node!