@@ -1170,18 +1170,31 @@ func (c *coordinator) runSubAgent(ctx context.Context, params subAgentParams) (f
1172 // Run the agent
1172 // Run the agent
1173+ run := func() (*fantasy.AgentResult, error) {
1173− result, err := params.Agent.Run(ctx, SessionAgentCall{
1174+ return params.Agent.Run(ctx, SessionAgentCall{
1174− SessionID: session.ID,
1175+ SessionID: session.ID,
1175− Prompt: params.Prompt,
1176+ Prompt: params.Prompt,
1176− MaxOutputTokens: maxTokens,
1177+ MaxOutputTokens: maxTokens,
1177− ProviderOptions: getProviderOptions(model, providerCfg),
1178+ ProviderOptions: getProviderOptions(model, providerCfg),
1178− Temperature: model.ModelCfg.Temperature,
1179+ Temperature: model.ModelCfg.Temperature,
1179− TopP: model.ModelCfg.TopP,
1180+ TopP: model.ModelCfg.TopP,
1180− TopK: model.ModelCfg.TopK,
1181+ TopK: model.ModelCfg.TopK,
1181− FrequencyPenalty: model.ModelCfg.FrequencyPenalty,
1182+ FrequencyPenalty: model.ModelCfg.FrequencyPenalty,
1182− PresencePenalty: model.ModelCfg.PresencePenalty,
1183+ PresencePenalty: model.ModelCfg.PresencePenalty,
1183− NonInteractive: true,
1184+ NonInteractive: true,
1187+ result, err := run()
1188+ if err != nil && c.isUnauthorized(err) {
1189+ if retryErr := c.retryAfterUnauthorized(ctx, providerCfg); retryErr == nil {
1190+ result, err = run()
1191+ } else if c.notify != nil && model.ModelCfg.Provider == hyper.Name {
1192+ c.notify.Publish(pubsub.CreatedEvent, notify.Notification{
1193+ Type: notify.TypeReAuthenticate,
1194+ ProviderID: model.ModelCfg.Provider,
1185 if err != nil {
1198 if err != nil {
1186 return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to generate response: %s", err)), nil
1199 return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to generate response: %s", err)), nil