Preserve LLM generation failure metadata
This commit is contained in:
@@ -194,13 +194,19 @@ func (c *PromptKitClient) CompleteStructured(ctx context.Context, req contracts.
|
||||
}
|
||||
if errors.Is(err, promptkit.ErrLLMGenerate) {
|
||||
var generationErr *promptkit.GenerationError
|
||||
var exhaustedErr *promptkit.RetryExhaustedError
|
||||
status := 0
|
||||
metadata := contracts.LLMGenerationMetadata{FailureKind: promptKitGenerationFailureKind(err)}
|
||||
if errors.As(err, &exhaustedErr) {
|
||||
metadata.RetriesExhausted = true
|
||||
metadata.Attempts = exhaustedErr.Attempts()
|
||||
}
|
||||
response := contracts.StructuredCompletionResponse{Debug: &contracts.LLMDebugMaterial{Prompt: promptKitDebugPrompt(&preparedDetails)}}
|
||||
if errors.As(err, &generationErr) {
|
||||
status = generationErr.StatusCode()
|
||||
response.Debug.Response = promptKitDebugGenerationError(&preparedDetails, generationErr)
|
||||
}
|
||||
return response, contracts.NewLLMGenerationError(status, fmt.Sprintf("run PromptKit prompt %q: %v", promptID, redactPromptKitError(err)))
|
||||
return response, contracts.NewLLMGenerationErrorWithMetadata(status, fmt.Sprintf("run PromptKit prompt %q: %v", promptID, redactPromptKitError(err)), metadata)
|
||||
}
|
||||
return contracts.StructuredCompletionResponse{}, fmt.Errorf("run PromptKit prompt %q: %v", promptID, redactPromptKitError(err))
|
||||
}
|
||||
@@ -220,6 +226,20 @@ func (c *PromptKitClient) CompleteStructured(ctx context.Context, req contracts.
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func promptKitGenerationFailureKind(err error) contracts.LLMGenerationFailureKind {
|
||||
switch {
|
||||
case errors.Is(err, promptkit.ErrTransport):
|
||||
return contracts.LLMGenerationFailureTransport
|
||||
case errors.Is(err, promptkit.ErrMalformedResponse):
|
||||
return contracts.LLMGenerationFailureMalformedResponse
|
||||
}
|
||||
var generationErr *promptkit.GenerationError
|
||||
if errors.As(err, &generationErr) && generationErr.StatusCode() != 0 {
|
||||
return contracts.LLMGenerationFailureProviderStatus
|
||||
}
|
||||
return contracts.LLMGenerationFailureGeneration
|
||||
}
|
||||
|
||||
func promptKitCorrectionMessages(correction *contracts.SemanticCorrection) ([]promptkit.RenderedMessage, error) {
|
||||
owned, err := contracts.CloneSemanticCorrection(correction)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user