fix: enhance logging for interrupted processes and ensure step results are saved in failfast mode

This commit is contained in:
lilong.129
2025-06-25 11:57:09 +08:00
parent 53fad4edc5
commit 70471d2fb4
3 changed files with 23 additions and 8 deletions

View File

@@ -1 +1 @@
v5.0.0-beta-2506242310 v5.0.0-beta-2506251157

View File

@@ -909,17 +909,24 @@ func (r *SessionRunner) RunStep(step IStep) (stepResult *StepResult, err error)
// execute step with merged variables // execute step with merged variables
stepResult, stepErr := r.executeStepWithVariables(step, task.stepName, task.parameters) stepResult, stepErr := r.executeStepWithVariables(step, task.stepName, task.parameters)
// Always add stepResult to stepResults if it exists, even on error
// This ensures data is saved in defer function for summary generation
if stepResult != nil {
stepResults = append(stepResults, stepResult)
}
if stepErr != nil { if stepErr != nil {
if r.caseRunner.hrpRunner.failfast { if r.caseRunner.hrpRunner.failfast {
// failfast mode, abort running // failfast mode, abort running but step result is already saved above
log.Error().Err(stepErr).
Str("step", task.stepName).
Int("completed_tasks", len(stepResults)).
Msg("execute step failed in failfast mode, step result saved")
return nil, errors.Wrap(stepErr, "execute step failed") return nil, errors.Wrap(stepErr, "execute step failed")
} }
log.Error().Err(stepErr).Str("step", task.stepName).Msg("execute step failed") log.Error().Err(stepErr).Str("step", task.stepName).Msg("execute step failed")
} }
if stepResult != nil {
stepResults = append(stepResults, stepResult)
}
} }
// return last result // return last result

View File

@@ -30,7 +30,10 @@ func (dExt *XTDriver) StartToGoal(ctx context.Context, prompt string, opts ...op
// Check for context cancellation (interrupt signal) // Check for context cancellation (interrupt signal)
select { select {
case <-ctx.Done(): case <-ctx.Done():
log.Warn().Msg("interrupted in StartToGoal") log.Warn().
Int("attempt", attempt).
Int("completed_plannings", len(allPlannings)).
Msg("interrupted in StartToGoal")
return allPlannings, errors.Wrap(code.InterruptError, "StartToGoal interrupted") return allPlannings, errors.Wrap(code.InterruptError, "StartToGoal interrupted")
default: default:
} }
@@ -83,7 +86,12 @@ func (dExt *XTDriver) StartToGoal(ctx context.Context, prompt string, opts ...op
// Check for context cancellation before each action // Check for context cancellation before each action
select { select {
case <-ctx.Done(): case <-ctx.Done():
log.Warn().Msg("interrupted in invokeToolCalls") log.Warn().
Int("attempt", attempt).
Int("completed_plannings", len(allPlannings)).
Int("completed_tool_calls", len(planningResult.SubActions)).
Int("total_tool_calls", len(planningResult.ToolCalls)).
Msg("interrupted in invokeToolCalls")
planningResult.Elapsed = time.Since(planningStartTime).Milliseconds() planningResult.Elapsed = time.Since(planningStartTime).Milliseconds()
allPlannings = append(allPlannings, planningResult) allPlannings = append(allPlannings, planningResult)
return allPlannings, errors.Wrap(code.InterruptError, "invokeToolCalls interrupted") return allPlannings, errors.Wrap(code.InterruptError, "invokeToolCalls interrupted")