@@ -1170,18 +1170,31 @@ func (c *coordinator) runSubAgent(ctx context.Context, params subAgentParams) (f
}
// Run the agent
- result, err := params.Agent.Run(ctx, SessionAgentCall{
- SessionID: session.ID,
- Prompt: params.Prompt,
- MaxOutputTokens: maxTokens,
- ProviderOptions: getProviderOptions(model, providerCfg),
- Temperature: model.ModelCfg.Temperature,
- TopP: model.ModelCfg.TopP,
- TopK: model.ModelCfg.TopK,
- FrequencyPenalty: model.ModelCfg.FrequencyPenalty,
- PresencePenalty: model.ModelCfg.PresencePenalty,
- NonInteractive: true,
- })
+ run := func() (*fantasy.AgentResult, error) {
+ return params.Agent.Run(ctx, SessionAgentCall{
+ SessionID: session.ID,
+ Prompt: params.Prompt,
+ MaxOutputTokens: maxTokens,
+ ProviderOptions: getProviderOptions(model, providerCfg),
+ Temperature: model.ModelCfg.Temperature,
+ TopP: model.ModelCfg.TopP,
+ TopK: model.ModelCfg.TopK,
+ FrequencyPenalty: model.ModelCfg.FrequencyPenalty,
+ PresencePenalty: model.ModelCfg.PresencePenalty,
+ NonInteractive: true,
+ })
+ }
+ result, err := run()
+ if err != nil && c.isUnauthorized(err) {
+ if retryErr := c.retryAfterUnauthorized(ctx, providerCfg); retryErr == nil {
+ result, err = run()
+ } else if c.notify != nil && model.ModelCfg.Provider == hyper.Name {
+ c.notify.Publish(pubsub.CreatedEvent, notify.Notification{
+ Type: notify.TypeReAuthenticate,
+ ProviderID: model.ModelCfg.Provider,
+ })
+ }
+ }
if err != nil {
return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to generate response: %s", err)), nil
}