@@ -2,7 +2,6 @@ package anthropic
22
33import (
44 "fmt"
5- "io"
65 "log/slog"
76 "net/http"
87
@@ -15,42 +14,27 @@ import (
1514
1615// betaStreamAdapter adapts the Anthropic Beta stream to our interface
1716type betaStreamAdapter struct {
18- stream * ssestream.Stream [anthropic.BetaRawMessageStreamEventUnion ]
19- trackUsage bool
20- toolCall bool
21- toolID string
22- // For single retry on context length error
23- retryFn func () * betaStreamAdapter
24- retried bool
17+ retryableStream [anthropic.BetaRawMessageStreamEventUnion ]
18+ trackUsage bool
19+ toolCall bool
20+ toolID string
2521 getResponseTrailer func () http.Header
2622}
2723
2824// newBetaStreamAdapter creates a new Beta stream adapter
2925func (c * Client ) newBetaStreamAdapter (stream * ssestream.Stream [anthropic.BetaRawMessageStreamEventUnion ], trackUsage bool ) * betaStreamAdapter {
3026 return & betaStreamAdapter {
31- stream : stream ,
27+ retryableStream : retryableStream [anthropic. BetaRawMessageStreamEventUnion ]{ stream : stream } ,
3228 trackUsage : trackUsage ,
3329 getResponseTrailer : c .getResponseTrailer ,
3430 }
3531}
3632
3733// Recv gets the next completion chunk from the Beta stream
3834func (a * betaStreamAdapter ) Recv () (chat.MessageStreamResponse , error ) {
39- if ! a .stream .Next () {
40- err := a .stream .Err ()
41- // Single retry on context length error
42- if err != nil && ! a .retried && a .retryFn != nil && isContextLengthError (err ) {
43- a .retried = true
44- if retry := a .retryFn (); retry != nil {
45- a .stream .Close ()
46- a .stream = retry .stream
47- return a .Recv ()
48- }
49- }
50- if err != nil {
51- return chat.MessageStreamResponse {}, err
52- }
53- return chat.MessageStreamResponse {}, io .EOF
35+ ok , err := a .next ()
36+ if ! ok {
37+ return chat.MessageStreamResponse {}, err
5438 }
5539
5640 event := a .stream .Current ()
@@ -137,7 +121,5 @@ func (a *betaStreamAdapter) Recv() (chat.MessageStreamResponse, error) {
137121
138122// Close closes the Beta stream
139123func (a * betaStreamAdapter ) Close () {
140- if a .stream != nil {
141- a .stream .Close ()
142- }
124+ a .stream .Close ()
143125}
0 commit comments