Skip to content

Commit bd28457

Browse files
author
Nicholas Cecere
committed
Fix state preservation for thinking_enabled and merge_reasoning_content_in_choices fields
1 parent 55c3ce1 commit bd28457

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.2.7] - 2025-04-23
9+
10+
### Fixed
11+
- Fixed issue where `thinking_enabled` and `merge_reasoning_content_in_choices` values were not being preserved in state, causing Terraform to want to modify them on every run
12+
813
## [0.2.6] - 2025-03-13
914

1015
### Added

litellm/resource_model_crud.go

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -152,23 +152,41 @@ func resourceLiteLLMModelRead(d *schema.ResourceData, m interface{}) error {
152152
d.Set("output_cost_per_million_tokens", d.Get("output_cost_per_million_tokens"))
153153

154154
// Handle thinking configuration
155-
if modelResp.LiteLLMParams.Thinking != nil {
156-
if thinkingType, ok := modelResp.LiteLLMParams.Thinking["type"].(string); ok && thinkingType == "enabled" {
157-
d.Set("thinking_enabled", true)
158-
if budgetTokens, ok := modelResp.LiteLLMParams.Thinking["budget_tokens"].(float64); ok {
159-
d.Set("thinking_budget_tokens", int(budgetTokens))
155+
if _, ok := d.GetOk("thinking_enabled"); ok {
156+
// Keep the existing value from state
157+
thinkingEnabled := d.Get("thinking_enabled").(bool)
158+
d.Set("thinking_enabled", thinkingEnabled)
159+
160+
// Only set thinking_budget_tokens if thinking is enabled and we have a value in state
161+
if thinkingEnabled {
162+
if _, ok := d.GetOk("thinking_budget_tokens"); ok {
163+
d.Set("thinking_budget_tokens", d.Get("thinking_budget_tokens").(int))
164+
}
165+
}
166+
} else {
167+
// Fall back to API response if no state value exists
168+
if modelResp.LiteLLMParams.Thinking != nil {
169+
if thinkingType, ok := modelResp.LiteLLMParams.Thinking["type"].(string); ok && thinkingType == "enabled" {
170+
d.Set("thinking_enabled", true)
171+
if budgetTokens, ok := modelResp.LiteLLMParams.Thinking["budget_tokens"].(float64); ok {
172+
d.Set("thinking_budget_tokens", int(budgetTokens))
173+
}
174+
} else {
175+
d.Set("thinking_enabled", false)
160176
}
161177
} else {
162178
d.Set("thinking_enabled", false)
163-
// Don't set thinking_budget_tokens when thinking is not enabled
164179
}
165-
} else {
166-
d.Set("thinking_enabled", false)
167-
// Don't set thinking_budget_tokens when thinking is not enabled
168180
}
169181

170-
// Handle merge_reasoning_content_in_choices
171-
d.Set("merge_reasoning_content_in_choices", modelResp.LiteLLMParams.MergeReasoningContentInChoices)
182+
// Handle merge_reasoning_content_in_choices - preserve state value if not returned by API
183+
if _, ok := d.GetOk("merge_reasoning_content_in_choices"); ok {
184+
// Keep the existing value from state
185+
d.Set("merge_reasoning_content_in_choices", d.Get("merge_reasoning_content_in_choices").(bool))
186+
} else {
187+
// Only set from API response if we don't have a value in state
188+
d.Set("merge_reasoning_content_in_choices", modelResp.LiteLLMParams.MergeReasoningContentInChoices)
189+
}
172190

173191
return nil
174192
}

0 commit comments

Comments
 (0)