feat: implement circuit breaker, fix auth vulnerability
CI / Lint (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Build (push) Has been cancelled

This commit is contained in:
2026-04-09 12:17:18 -04:00
parent 2929f51556
commit 212ac14a1b
5 changed files with 79 additions and 25 deletions
+44
View File
@@ -0,0 +1,44 @@
package providers
import (
"context"
"fmt"
"github.com/sony/gobreaker"
"gophergate/internal/models"
)
type CircuitBreakerProvider struct {
provider Provider
cb *gobreaker.CircuitBreaker
}
func NewCircuitBreakerProvider(p Provider) Provider {
settings := gobreaker.Settings{
Name: p.Name(),
}
return &CircuitBreakerProvider{
provider: p,
cb: gobreaker.NewCircuitBreaker(settings),
}
}
func (cbp *CircuitBreakerProvider) Name() string {
return cbp.provider.Name()
}
func (cbp *CircuitBreakerProvider) ChatCompletion(ctx context.Context, req *models.UnifiedRequest) (*models.ChatCompletionResponse, error) {
result, err := cbp.cb.Execute(func() (interface{}, error) {
return cbp.provider.ChatCompletion(ctx, req)
})
if err != nil {
return nil, err
}
return result.(*models.ChatCompletionResponse), nil
}
func (cbp *CircuitBreakerProvider) ChatCompletionStream(ctx context.Context, req *models.UnifiedRequest) (<-chan *models.ChatCompletionStreamResponse, error) {
// Circuit breaker for streaming is tricky. We'll just call the provider directly.
// Future: Implement a way to track stream failures in the circuit breaker.
return cbp.provider.ChatCompletionStream(ctx, req)
}