Issue Description
I’m experiencing an issue with the Responses API where tool calling stops working after the first iteration when using previous_response_id for multi-turn conversations.
( I am trying to save some bandwidth/ token when tool descripitons are in large contents)
Current Behavior
-
First iteration: Tools are called successfully
-
Subsequent iterations: Tools are never invoked, even when the model’s response suggests it should use them.
My Implementation
Here’s my simplified code structure:
go
for i := range maxIterations {
params := ResponseNewParams{
Model: deploymentName,
Input: inputItems,
Store: true,
}
// Only passing tools in first iteration
if i == 0 {
params.Tools = tools
}
if previousResponseID != "" {
params.PreviousResponseID = previousResponseID
}
// Make streaming request
stream := client.Responses.NewStreaming(ctx, params)
response := processStream(stream)
previousResponseID = response.ID
// Execute any tool calls and prepare next iteration
inputItems = executeToolCalls(response)
}
Question
Does the Responses API require tools to be passed in every request, even when using previous_response_id?
I initially assumed that tools configuration would be inherited from the previous response (similar to how conversation context is preserved), but my testing suggests otherwise.