vxcontrol/pentagi · error

failed to create flow vector store log: %w

Error message

failed to create flow vector store log: %w

What it means

Fifth step of newFlowProviderWorkers: the vector store log worker is created via cnts.vslc.NewFlowVectorStoreLog(ctx, flowID, pub). Failure wrapped with this message aborts flow startup — the flow's memory/vector-store events (pgvector) cannot be journaled.

Source

Thrown at backend/pkg/controller/flow.go:1189

	mlw, err := cnts.mlc.NewFlowMsgLog(ctx, flowID, pub)
	if err != nil {
		return nil, fmt.Errorf("failed to create flow msg log: %w", err)
	}

	slw, err := cnts.slc.NewFlowSearchLog(ctx, flowID, pub)
	if err != nil {
		return nil, fmt.Errorf("failed to create flow search log: %w", err)
	}

	tlw, err := cnts.tlc.NewFlowTermLog(ctx, flowID, pub)
	if err != nil {
		return nil, fmt.Errorf("failed to create flow term log: %w", err)
	}

	vslw, err := cnts.vslc.NewFlowVectorStoreLog(ctx, flowID, pub)
	if err != nil {
		return nil, fmt.Errorf("failed to create flow vector store log: %w", err)
	}

	tclw, err := cnts.tclc.NewFlowToolCallLog(ctx, flowID, pub)
	if err != nil {
		return nil, fmt.Errorf("failed to create flow tool call log: %w", err)
	}

	sw, err := cnts.sc.NewFlowScreenshot(ctx, flowID, pub)
	if err != nil {
		return nil, fmt.Errorf("failed to create flow screenshot: %w", err)
	}

	return &flowProviderWorkers{
		mlw:  mlw,
		alw:  alw,
		slw:  slw,
		tlw:  tlw,
		vslw: vslw,

View on GitHub (pinned to ea665308ba)

Solutions

  1. Verify the pgvector extension is installed: CREATE EXTENSION IF NOT EXISTS vector; and the table exists
  2. Check the wrapped error and Postgres logs for the exact SQL failure
  3. Re-run goose migrations after any DB restore
  4. Confirm DB connectivity and retry flow creation

Example fix

// before: flow start fails because pgvector is missing
workers, err := newFlowProviderWorkers(ctx, flowID, cnts, pub)
// after: preflight the extension before creating workers
var ext bool
if err := db.QueryRowContext(ctx,
    "SELECT EXISTS(SELECT 1 FROM pg_extension WHERE extname='vector')").Scan(&ext); err != nil {
    return nil, err
}
if !ext {
    return nil, errors.New("pgvector extension not installed")
}
workers, err = newFlowProviderWorkers(ctx, flowID, cnts, pub)
Defensive patterns

Strategy: validation

Validate before calling

var ext string
if err := db.QueryRowContext(ctx, `SELECT extname FROM pg_extension WHERE extname='vector'`).Scan(&ext); err != nil {
    return errors.New("pgvector extension not installed — required for vector store logs")
}

Type guard

func pgvectorReady(ctx context.Context, db DB) bool {
    var ext string
    return db.QueryRowContext(ctx, `SELECT extname FROM pg_extension WHERE extname='vector'`).Scan(&ext) == nil
}

Try / catch

vslw, err := cnts.vslc.NewFlowVectorStoreLog(ctx, flowID, pub)
if err != nil {
    if strings.Contains(err.Error(), "vector") || strings.Contains(err.Error(), "extension") {
        return nil, fmt.Errorf("pgvector missing/misconfigured: %w", err)
    }
    return nil, fmt.Errorf("failed to create flow vector store log: %w", err)
}

Prevention

When it happens

Trigger: NewFlowVectorStoreLog fails during flow startup: DB error on vector-store log initialization, invalid flowID, or the pgvector extension/table is unavailable.

Common situations: Postgres running without the pgvector extension installed or wrong version; vector-store table missing after restoring a DB dump without extensions; general DB outage mid-startup; concurrent flow deletion.

Related errors


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