@@ -8,6 +8,7 @@
8package agent
8package agent
@@ -32,6 +33,7 @@ import (
32 "github.com/charmbracelet/crush/internal/message"
33 "github.com/charmbracelet/crush/internal/message"
33 "github.com/charmbracelet/crush/internal/permission"
34 "github.com/charmbracelet/crush/internal/permission"
34 "github.com/charmbracelet/crush/internal/session"
35 "github.com/charmbracelet/crush/internal/session"
36+ "github.com/charmbracelet/crush/internal/stringext"
37//go:embed templates/title.md
39//go:embed templates/title.md
@@ -303,7 +305,7 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
303 currentAssistant.AddToolCall(toolCall)
305 currentAssistant.AddToolCall(toolCall)
304 return a.messages.Update(genCtx, *currentAssistant)
306 return a.messages.Update(genCtx, *currentAssistant)
306− OnRetry: func(err *fantasy.APICallError, delay time.Duration) {
308+ OnRetry: func(err *fantasy.ProviderError, delay time.Duration) {
307 // TODO: implement
309 // TODO: implement
309 OnToolCall: func(tc fantasy.ToolCallContent) error {
311 OnToolCall: func(tc fantasy.ToolCallContent) error {
@@ -459,12 +461,19 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy
459 return nil, createErr
461 return nil, createErr
464+ var fantasyErr *fantasy.Error
465+ var providerErr *fantasy.ProviderError
466+ const defaultTitle = "Provider Error"
462 if isCancelErr {
467 if isCancelErr {
463 currentAssistant.AddFinish(message.FinishReasonCanceled, "User canceled request", "")
468 currentAssistant.AddFinish(message.FinishReasonCanceled, "User canceled request", "")
464 } else if isPermissionErr {
469 } else if isPermissionErr {
465 currentAssistant.AddFinish(message.FinishReasonPermissionDenied, "User denied permission", "")
470 currentAssistant.AddFinish(message.FinishReasonPermissionDenied, "User denied permission", "")
471+ } else if errors.As(err, &providerErr) {
472+ currentAssistant.AddFinish(message.FinishReasonError, cmp.Or(stringext.Capitalize(providerErr.Title), defaultTitle), providerErr.Message)
473+ } else if errors.As(err, &fantasyErr) {
474+ currentAssistant.AddFinish(message.FinishReasonError, cmp.Or(stringext.Capitalize(fantasyErr.Title), defaultTitle), fantasyErr.Message)
467− currentAssistant.AddFinish(message.FinishReasonError, "API Error", err.Error())
476+ currentAssistant.AddFinish(message.FinishReasonError, defaultTitle, err.Error())
469 // Note: we use the parent context here because the genCtx has been
478 // Note: we use the parent context here because the genCtx has been
470 // cancelled.
479 // cancelled.