vxcontrol/pentagi · error

failed to get ask advice handler: %w

Error message

failed to get ask advice handler: %w

What it means

PerformAgentChain wraps the error from fp.GetAskAdviceHandler(ctx, nil, nil), which constructs the `ask_advice` tool handler. Construction failed, so the agent chain cannot be assembled with its toolset.

Source

Thrown at backend/pkg/providers/assistant.go:165

		return fmt.Errorf("failed to get assistant use agents: %w", err)
	}

	msgChain, err := ap.fp.DB().GetMsgChain(ctx, ap.msgChainID)
	if err != nil {
		logger.WithError(err).Error("failed to get primary agent msg chain")
		return fmt.Errorf("failed to get primary agent msg chain %d: %w", ap.msgChainID, err)
	}

	var chain []llms.MessageContent
	if err := json.Unmarshal(msgChain.Chain, &chain); err != nil {
		logger.WithError(err).Error("failed to unmarshal primary agent msg chain")
		return fmt.Errorf("failed to unmarshal primary agent msg chain %d: %w", ap.msgChainID, err)
	}

	adviser, err := ap.fp.GetAskAdviceHandler(ctx, nil, nil)
	if err != nil {
		logger.WithError(err).Error("failed to get ask advice handler")
		return fmt.Errorf("failed to get ask advice handler: %w", err)
	}

	coder, err := ap.fp.GetCoderHandler(ctx, nil, nil)
	if err != nil {
		logger.WithError(err).Error("failed to get coder handler")
		return fmt.Errorf("failed to get coder handler: %w", err)
	}

	installer, err := ap.fp.GetInstallerHandler(ctx, nil, nil)
	if err != nil {
		logger.WithError(err).Error("failed to get installer handler")
		return fmt.Errorf("failed to get installer handler: %w", err)
	}

	memorist, err := ap.fp.GetMemoristHandler(ctx, nil, nil)
	if err != nil {
		logger.WithError(err).Error("failed to get memorist handler")
		return fmt.Errorf("failed to get memorist handler: %w", err)

View on GitHub (pinned to ea665308ba)

Solutions

  1. Read the wrapped error in logs to see which tool/config the handler failed on.
  2. Set the required tool env vars (search keys, Docker socket) per .env.example and restart.
  3. Verify prompt/template rows exist (run migrations, installer wizard).
  4. Confirm the flow's provider was fully initialized before building the assistant.

Example fix

// before
adviser, err := ap.fp.GetAskAdviceHandler(ctx, nil, nil)
if err != nil {
    return fmt.Errorf("failed to get ask advice handler: %w", err)
}
// after
adviser, err := ap.fp.GetAskAdviceHandler(ctx, &taskID, &subtaskID)
if err != nil {
    return fmt.Errorf("failed to get ask advice handler: %w", err) // inspect wrapped cause: usually missing tool config
}
Defensive patterns

Strategy: try-catch

Validate before calling

if os.Getenv("SEARXNG_URL") == "" && os.Getenv("TAVILY_API_KEY") == "" {
    return errors.New("no search backend configured: ask-advice handler will fail to init")
}
if _, err := net.Dial("unix", "/var/run/docker.sock"); err != nil {
    return fmt.Errorf("docker socket unavailable: %w", err)
}

Try / catch

adviser, err := ap.fp.GetAskAdviceHandler(ctx, nil, nil)
if err != nil {
    logger.WithError(err).Error("ask advice handler init failed")
    return fmt.Errorf("failed to get ask advice handler: %w", err)
}

Prevention

When it happens

Trigger: The handler factory fails while wiring its tools: required tool config/env missing (e.g. search provider keys), Docker client unavailable, database/template lookups error, or provider context invalid.

Common situations: Missing env vars for tools the advice handler depends on; Docker socket not mounted; template/prompt records absent in DB after a fresh install; nil flowProvider fields passed to the assistant.

Related errors


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