Track the operation owning internal errors

This commit is contained in:
2026-11-05 13:42:56 +00:00
parent 106c808442
commit e881bbdcf4
8 changed files with 95 additions and 21 deletions

View File

@@ -204,7 +204,7 @@ func (r *Runner) executePreparedRun(
outputArtifact := buildOutputArtifact(genResp.Content, prepared.OutputContract.Format)
validationResult, err := validateArtifact(ctx, &outputArtifact, 0)
if err != nil {
return nil, fmt.Errorf("%w: %w", ErrValidation, err)
return nil, &OperationError{Category: ErrValidation, Cause: err}
}
if r.shouldAttemptRepair(prepared.OutputContract, validationResult) {
@@ -238,7 +238,7 @@ func (r *Runner) executePreparedRun(
validationResult, err = validateArtifact(ctx, &outputArtifact, attemptsUsed)
if err != nil {
return nil, fmt.Errorf("%w: %w", ErrValidation, err)
return nil, &OperationError{Category: ErrValidation, Cause: err}
}
}
}
@@ -269,10 +269,7 @@ func (r *Runner) executePreparedRun(
}
func wrapGenerationError(err error) error {
if errors.Is(err, llm.ErrInvalidRequest) {
return fmt.Errorf("%w: %w", ErrInvalidRequest, err)
}
return fmt.Errorf("%w: %w", ErrLLMGenerate, err)
return &OperationError{Category: ErrLLMGenerate, Cause: err}
}
func addTokenUsage(total, next domain.TokenUsage) domain.TokenUsage {
@@ -408,7 +405,7 @@ func (r *Runner) prepareValidation(
}
plan, err := preparer.PrepareValidation(ctx, contract)
if err != nil {
return nil, fmt.Errorf("%w: %w", ErrValidation, err)
return nil, &OperationError{Category: ErrValidation, Cause: err}
}
if plan == nil {
return nil, fmt.Errorf("%w: validator returned nil prepared validation", ErrValidation)
@@ -450,7 +447,7 @@ func (r *Runner) completePreparationWithStructuredOutput(
for name, ref := range req.Inputs {
art, readErr := r.artifacts.Read(ctx, ref)
if readErr != nil {
return nil, fmt.Errorf("%w: input %q: %w", ErrArtifactLoad, name, readErr)
return nil, &OperationError{Category: ErrArtifactLoad, Cause: fmt.Errorf("input %q: %w", name, readErr)}
}
if art.Name == "" {
art.Name = name
@@ -467,7 +464,7 @@ func (r *Runner) completePreparationWithStructuredOutput(
}
renderedPrompt, err := r.renderer.Render(ctx, definitionToRender, resolvedInputs, req.Vars)
if err != nil {
return nil, fmt.Errorf("%w: %w", ErrPromptRender, err)
return nil, &OperationError{Category: ErrPromptRender, Cause: err}
}
effectivePrompt := *renderedPrompt
if state.directSessionID != "" {