vxcontrol/pentagi · error
time_end must be after time_start
Error message
time_end must be after time_start
What it means
After parsing, the temporal_window search validates that the window is ordered: time_end must come after time_start. This error fires when the parsed end timestamp is before the parsed start timestamp, which would produce an empty or nonsensical query window for Graphiti.
Source
Thrown at backend/pkg/tools/graphiti_search.go:357
observationObject *graphiti.Observation,
) (string, error) {
// Validate temporal parameters
if args.TimeStart == "" || args.TimeEnd == "" {
return "", fmt.Errorf("time_start and time_end are required for temporal_window search")
}
timeStart, err := parseGraphitiTime(args.TimeStart)
if err != nil {
return "", fmt.Errorf("invalid time_start format (use ISO 8601, e.g. 2026-01-02T15:04:05Z): %w", err)
}
timeEnd, err := parseGraphitiTime(args.TimeEnd)
if err != nil {
return "", fmt.Errorf("invalid time_end format (use ISO 8601, e.g. 2026-01-02T15:04:05Z): %w", err)
}
if timeEnd.Before(timeStart) {
return "", fmt.Errorf("time_end must be after time_start")
}
maxResults := args.MaxResults.Int()
if maxResults <= 0 {
maxResults = DefaultTemporalMaxResults
}
req := graphiti.TemporalSearchRequest{
Query: args.Query,
GroupID: &groupID,
TimeStart: timeStart,
TimeEnd: timeEnd,
MaxResults: maxResults,
Observation: observationObject,
}
resp, err := t.graphitiClient.TemporalWindowSearch(ctx, req)
if err != nil {View on GitHub (pinned to ea665308ba)
Solutions
- Swap the values so time_start < time_end
- Compute the window as start=now-minus-duration, end=now
- Re-check timezone offsets on both timestamps to ensure the intended order
Example fix
// before
{"time_start": "2026-08-31T00:00:00Z", "time_end": "2026-08-01T00:00:00Z"}
// after
{"time_start": "2026-08-01T00:00:00Z", "time_end": "2026-08-31T00:00:00Z"} Defensive patterns
Strategy: validation
Validate before calling
if !end.After(start) {
return errors.New("time_end must be after time_start")
} Prevention
- Compute windows as start = now - duration, end = now
- Double-check argument order when constructing the payload
- Normalize both timestamps to UTC before comparing
When it happens
Trigger: Passing time_start later than time_end, e.g. swapped values (start=2026-08-31, end=2026-08-01) or a negative window spanning a timezone mistake.
Common situations: Agents mixing up argument order; computing 'last 24h' with the offsets assigned to the wrong fields; timezone conversions flipping the ordering.
Related errors
- time_start and time_end are required for temporal_window sea
- unknown search_type: %s
- 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
- center_node_uuid is required for entity_relationships search
AI-assisted analysis of vxcontrol/pentagi@ea665308ba (2026-09-01).
Data as JSON: /api/errors/439275b81023b6f4.
Report an issue: GitHub.