Files
2026-06-30 10:38:52 +08:00

43 lines
1.0 KiB
Go

package forwarder
import (
"context"
"errors"
"strings"
)
var errProviderLoopInterrupted = errors.New("provider loop interrupted")
func isTerminalStreamStatus(status StreamStatus) bool {
switch status {
case StreamStatusCanceled, StreamStatusCompleted, StreamStatusFailed:
return true
default:
return false
}
}
func providerLoopInterruptErr(ctx context.Context, stream *ActiveStream, modelCallID string) error {
if ctx != nil && ctx.Err() != nil {
return errProviderLoopInterrupted
}
if stream == nil {
return nil
}
stream.mu.Lock()
defer stream.mu.Unlock()
if isTerminalStreamStatus(stream.Status) {
return errProviderLoopInterrupted
}
switch stream.Phase {
case TurnPhaseCanceled, TurnPhaseCompleted, TurnPhaseFailed:
return errProviderLoopInterrupted
}
expectedModelCallID := strings.TrimSpace(modelCallID)
currentModelCallID := strings.TrimSpace(stream.CurrentModelCallID)
if expectedModelCallID != "" && currentModelCallID != "" && currentModelCallID != expectedModelCallID {
return errProviderLoopInterrupted
}
return nil
}