Spaces:
Paused
Paused
| package thinking | |
| import ( | |
| "github.com/tidwall/gjson" | |
| ) | |
| // GetThinkingText extracts the thinking text from a content part. | |
| // Handles various formats: | |
| // - Simple string: { "thinking": "text" } or { "text": "text" } | |
| // - Wrapped object: { "thinking": { "text": "text", "cache_control": {...} } } | |
| // - Gemini-style: { "thought": true, "text": "text" } | |
| // Returns the extracted text string. | |
| func GetThinkingText(part gjson.Result) string { | |
| // Try direct text field first (Gemini-style) | |
| if text := part.Get("text"); text.Exists() && text.Type == gjson.String { | |
| return text.String() | |
| } | |
| // Try thinking field | |
| thinkingField := part.Get("thinking") | |
| if !thinkingField.Exists() { | |
| return "" | |
| } | |
| // thinking is a string | |
| if thinkingField.Type == gjson.String { | |
| return thinkingField.String() | |
| } | |
| // thinking is an object with inner text/thinking | |
| if thinkingField.IsObject() { | |
| if inner := thinkingField.Get("text"); inner.Exists() && inner.Type == gjson.String { | |
| return inner.String() | |
| } | |
| if inner := thinkingField.Get("thinking"); inner.Exists() && inner.Type == gjson.String { | |
| return inner.String() | |
| } | |
| } | |
| return "" | |
| } | |