fmt.Fprintf(os.Stderr,"\033[31m✗ Too many consecutive errors, giving up\033[0m\n")
returnnil,fmt.Errorf("too many consecutive server errors: %s",statusErr.ErrorMessage)
}
fmt.Fprintf(os.Stderr,"\033[33m⚠ Server error (attempt %d/3): %s\033[0m\n",consecutiveErrors,statusErr.ErrorMessage)
// Include both the model's response and the error so it can learn
assistantContent:=fullResponse.String()
ifassistantContent==""{
assistantContent="(empty response)"
}
errorMsg:=fmt.Sprintf("Your previous response caused an error: %s\n\nYour response was:\n%s\n\nPlease try again with a valid response.",statusErr.ErrorMessage,assistantContent)
messages=append(messages,
api.Message{Role:"user",Content:errorMsg},
)
// Reset state and retry
fullResponse.Reset()
thinkingContent.Reset()
thinkTagOpened=false
thinkTagClosed=false
pendingToolCalls=nil
state=&displayResponseState{}
p=progress.NewProgress(os.Stderr)
spinner=progress.NewSpinner("")
p.Add("",spinner)
continue
}
ifstrings.Contains(err.Error(),"upstream error"){
ifstrings.Contains(err.Error(),"upstream error"){
p.StopAndClear()
p.StopAndClear()
fmt.Println("An error occurred while processing your message. Please try again.")
fmt.Println("An error occurred while processing your message. Please try again.")