vxcontrol/pentagi · error
center_node_uuid must be a valid UUID copied verbatim from t
Error message
center_node_uuid must be a valid UUID copied verbatim from the 'UUID:' field of a prior graphiti_search result, got %q
What it means
After presence-checking center_node_uuid, entity_relationships validates it with uuid.Parse. Any non-UUID string (invented IDs, names, truncated UUIDs) produces this error quoting the received value, instructing the caller that the UUID must be copied verbatim from a prior graphiti_search result's 'UUID:' field.
Source
Thrown at backend/pkg/tools/graphiti_search.go:393
if err != nil {
return "", fmt.Errorf("temporal window search failed: %w", err)
}
return FormatGraphitiTemporalResults(resp, args.Query), nil
}
// handleEntityRelationshipsSearch finds relationships from a center node
func (t *graphitiSearchTool) handleEntityRelationshipsSearch(
ctx context.Context,
groupID string,
args GraphitiSearchAction,
observationObject *graphiti.Observation,
) (string, error) {
if args.CenterNodeUUID == "" {
return "", fmt.Errorf("center_node_uuid is required for entity_relationships search")
}
if _, err := uuid.Parse(args.CenterNodeUUID); err != nil {
return "", fmt.Errorf(
"center_node_uuid must be a valid UUID copied verbatim from the 'UUID:' field of a prior "+
"graphiti_search result, got %q", args.CenterNodeUUID,
)
}
maxResults := args.MaxResults.Int()
if maxResults <= 0 {
maxResults = DefaultRelationshipMaxResults
}
maxDepth := args.MaxDepth.Int()
if maxDepth <= 0 {
maxDepth = DefaultMaxDepth
}
if maxDepth > 3 {
maxDepth = 3
}
View on GitHub (pinned to ea665308ba)
Solutions
- Copy the exact UUID string from the 'UUID:' field of a prior graphiti_search result
- Re-run a nodes search to obtain a valid UUID if the original is lost
- Trim whitespace/quotes from the value before passing it
Example fix
// before
{"center_node_uuid": "vpn-server-node"}
// after
{"center_node_uuid": "3f2a9c1e-8b47-4d20-9c11-2f6a5b7e1234"} Defensive patterns
Strategy: validation
Validate before calling
if _, err := uuid.Parse(args.CenterNodeUUID); err != nil {
return fmt.Errorf("center_node_uuid is not a valid UUID: %q", args.CenterNodeUUID)
} Type guard
func isValidUUID(s string) bool {
_, err := uuid.Parse(s)
return err == nil
} Prevention
- Copy UUIDs verbatim from the 'UUID:' field of graphiti_search output
- Trim whitespace and quotes from IDs extracted by the LLM
- Never let the model invent IDs; require them to come from prior tool output
When it happens
Trigger: Passing a node name, hostname, partial UUID, or an ID from a different system as center_node_uuid for entity_relationships search.
Common situations: LLM agents hallucinating plausible-looking UUIDs; copying an 'ID' column that is not the UUID field; whitespace or quotes around the value breaking the parse.
Related errors
- center_node_uuid is required for entity_relationships search
- unknown search_type: %s
- time_start and time_end are required for temporal_window sea
- invalid time_start format (use ISO 8601, e.g. 2026-01-02T15:
- invalid time_end format (use ISO 8601, e.g. 2026-01-02T15:04
AI-assisted analysis of vxcontrol/pentagi@ea665308ba (2026-09-01).
Data as JSON: /api/errors/d572540a3a7c7a5c.
Report an issue: GitHub.