vxcontrol/pentagi · warning

there are temporarily offline for maintenance. please try ag

Error message

there are temporarily offline for maintenance. please try again later

What it means

The Perplexity searcher maps HTTP 503 (Service Unavailable) from the Perplexity API to a plain error 'there are temporarily offline for maintenance. please try again later'. handleErrorResponse is invoked by search when the upstream returns a non-OK status, signaling the external search backend is temporarily down rather than a caller mistake.

Source

Thrown at backend/pkg/tools/searchers/perplexity.go:237

		return errors.New("request is invalid")
	case http.StatusUnauthorized:
		return errors.New("API key is wrong")
	case http.StatusForbidden:
		return errors.New("the endpoint requested is hidden for administrators only")
	case http.StatusNotFound:
		return errors.New("the specified endpoint could not be found")
	case http.StatusMethodNotAllowed:
		return errors.New("there need to try to access an endpoint with an invalid method")
	case http.StatusTooManyRequests:
		return errors.New("there are requesting too many results")
	case http.StatusInternalServerError:
		return errors.New("there had a problem with our server. try again later")
	case http.StatusBadGateway:
		return errors.New("there was a problem with the server. Please try again later")
	case http.StatusServiceUnavailable:
		return errors.New("there are temporarily offline for maintenance. please try again later")
	case http.StatusGatewayTimeout:
		return errors.New("there are temporarily offline for maintenance. please try again later")
	default:
		return fmt.Errorf("unexpected status code: %d", statusCode)
	}
}

// formatResponse formats the API response into readable text
func (p *perplexity) formatResponse(ctx context.Context, response *CompletionResponse, query string) string {
	var builder strings.Builder

	// Checking for response choices
	if len(response.Choices) == 0 {
		return "No response received from Perplexity API"
	}

	// Getting the response content
	content := response.Choices[0].Message.Content
	builder.WriteString("# Answer\n\n")
	builder.WriteString(content)

View on GitHub (pinned to ea665308ba)

Solutions

  1. Retry the search later; 503 is transient — prefer the web_search fallback chain which can fail over to another engine
  2. Check https://status.perplexity.ai or the provider status for an active outage
  3. Verify the PPLX/Perplexity API key and plan are valid and not exhausted
  4. Inspect network/proxy path for intermediaries generating the 503

Example fix

null
Defensive patterns

Strategy: retry

Validate before calling

// Availability check is not practical for transient 503; validate config instead
if (!process.env.PERPLEXITY_API_KEY) throw new Error('perplexity not configured');

Type guard

null

Try / catch

async function searchWithRetry(req, retries = 3) {
  for (let i = 0; i < retries; i++) {
    try {
      return await webSearch({ mode: req.mode, query: req.query, engine: 'perplexity' });
    } catch (e) {
      if (i === retries - 1 || !/offline for maintenance|problem with .*server/i.test(String(e))) throw e;
      await new Promise(r => setTimeout(r, 2 ** i * 1000));
    }
  }
}

Prevention

When it happens

Trigger: web_search (perplexity mode/engine) issues a request and Perplexity's API responds with 503 — during provider maintenance windows, capacity throttling, or an outage.

Common situations: Perplexity status-page incidents, rate/burst limiting showing as 503, expired plan or overloaded API causing server-side unavailability, corporate proxy returning 503 for the upstream.

Related errors


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