mirror of
https://wget.la/https://github.com/leookun/cursor-byok
synced 2026-08-17 11:37:20 +08:00
43 lines
1.0 KiB
Go
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
|
|
}
|