vxcontrol/pentagi · warning · Retryable

there had a problem with our server. try again later

Error message

there had a problem with our server. try again later

What it means

Thrown in tavily.parseHTTPResponse when Tavily answers HTTP 500 Internal Server Error, mapped to "there had a problem with our server. try again later". This is a server-side failure at Tavily, not a problem with your request. It is classified Retryable(err, 0) so the orchestrator can retry or fall back to another search engine.

Source

Thrown at backend/pkg/tools/searchers/tavily.go:162

		var respBody tavilySearchResult
		if err := json.NewDecoder(resp.Body).Decode(&respBody); err != nil {
			return "", Fatal(fmt.Errorf("failed to decode response body: %v", err))
		}
		return t.buildTavilyResult(ctx, &respBody), nil
	case http.StatusBadRequest:
		return "", Fatal(fmt.Errorf("request is invalid"))
	case http.StatusUnauthorized:
		return "", Fatal(fmt.Errorf("API key is wrong"))
	case http.StatusForbidden:
		return "", Fatal(fmt.Errorf("the endpoint requested is hidden for administrators only"))
	case http.StatusNotFound:
		return "", Fatal(fmt.Errorf("the specified endpoint could not be found"))
	case http.StatusMethodNotAllowed:
		return "", Fatal(fmt.Errorf("there need to try to access an endpoint with an invalid method"))
	case http.StatusTooManyRequests:
		return "", Retryable(fmt.Errorf("there are requesting too many results"), 0)
	case http.StatusInternalServerError:
		return "", Retryable(fmt.Errorf("there had a problem with our server. try again later"), 0)
	case http.StatusBadGateway:
		return "", Retryable(fmt.Errorf("there was a problem with the server. Please try again later"), 0)
	case http.StatusServiceUnavailable:
		return "", Retryable(fmt.Errorf("there are temporarily offline for maintenance. please try again later"), 0)
	case http.StatusGatewayTimeout:
		return "", Retryable(fmt.Errorf("there are temporarily offline for maintenance. please try again later"), 0)
	default:
		return "", Fatal(fmt.Errorf("unexpected status code: %d", resp.StatusCode))
	}
}

func (t *tavily) buildTavilyResult(ctx context.Context, result *tavilySearchResult) string {
	var writer strings.Builder
	writer.WriteString("# Answer\n\n")
	writer.WriteString(result.Answer)
	writer.WriteString("\n\n# Links\n\n")

	isRawContentExists := false

View on GitHub (pinned to ea665308ba)

Solutions

  1. Retry after a short delay — the error is Retryable, so confirm the orchestrator's retry/backoff and fallback engine chain are active.
  2. Check Tavily's status page or dashboard for an ongoing incident; wait it out if so.
  3. If one specific query reliably 500s, simplify it (shorter, remove special characters) — it may trip a server-side bug; report it to Tavily support.
  4. Verify network path is not returning a synthetic 500 (proxy error pages can mimic 500s) with curl from the container.
  5. Reduce reliance on a single engine by keeping fallback searchers configured in web_search's fallbackStrategy.
Defensive patterns

Strategy: retry

Try / catch

var re *RetryableError
if errors.As(err, &re) && strings.Contains(err.Error(), "problem with our server") {
    if retryN < maxRetries {
        time.Sleep(backoff(retryN))
        return retry(retryN + 1)
    }
    return fallbackSearcher.Handle(ctx, req) // engine-level fallback after retries exhausted
}

Prevention

When it happens

Trigger: POST to api.tavily.com/search returns 500: a transient Tavily backend failure, capacity problem during peak load, or a fault triggered by an unusual query (very long/odd content) crashing part of their pipeline.

Common situations: Tavily incidents/outages (check status.tavily.com); repeated 500s across many different queries during a known outage window; isolated 500 on one exotic query that their backend chokes on; regional infrastructure issues.

Related errors


AI-assisted analysis of vxcontrol/pentagi@ea665308ba (2026-09-01). Data as JSON: /api/errors/828e140bf0c41f87. Report an issue: GitHub.