Skip to content

Commit f8d19ae

Browse files
committed
lint
1 parent 67fe23e commit f8d19ae

File tree

5 files changed

+61
-57
lines changed

5 files changed

+61
-57
lines changed

run.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,12 +495,12 @@ func (c *Client) CreateThreadAndStream(
495495
req.Header.Set("Cache-Control", "no-cache")
496496
req.Header.Set("Connection", "keep-alive")
497497

498-
resp, err := c.config.HTTPClient.Do(req) //nolint:bodyclose // body is closed in stream.Close()
498+
resp, err := c.config.HTTPClient.Do(req)
499499
if err != nil {
500500
return
501501
}
502502

503-
if resp.StatusCode != 200 {
503+
if resp.StatusCode != http.StatusOK {
504504
resp.Body.Close()
505505
return nil, fmt.Errorf("unexpected status code: %d", resp.StatusCode)
506506
}

sse.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"strings"
88
)
99

10-
// NewEOLSplitterFunc returns a bufio.SplitFunc tied to a new EOLSplitter instance
10+
// NewEOLSplitterFunc returns a bufio.SplitFunc tied to a new EOLSplitter instance.
1111
func NewEOLSplitterFunc() bufio.SplitFunc {
1212
splitter := NewEOLSplitter()
1313
return splitter.Split
@@ -23,6 +23,8 @@ func NewEOLSplitter() *EOLSplitter {
2323
return &EOLSplitter{prevCR: false}
2424
}
2525

26+
const crlfLen = 2
27+
2628
// Split function to handle CR LF, CR, and LF as end-of-line.
2729
func (s *EOLSplitter) Split(data []byte, atEOF bool) (advance int, token []byte, err error) {
2830
// Check if the previous data ended with a CR
@@ -38,7 +40,7 @@ func (s *EOLSplitter) Split(data []byte, atEOF bool) (advance int, token []byte,
3840
if data[i] == '\r' {
3941
if i+1 < len(data) && data[i+1] == '\n' {
4042
// Found CR LF
41-
return i + 2, data[:i], nil
43+
return i + crlfLen, data[:i], nil
4244
}
4345
// Found CR
4446
if !atEOF && i == len(data)-1 {
@@ -119,29 +121,27 @@ func (s *SSEScanner) Next() bool {
119121
}
120122

121123
seenNonEmptyLine = true
122-
123-
if strings.HasPrefix(line, "id: ") {
124+
switch {
125+
case strings.HasPrefix(line, "id: "):
124126
event.ID = strings.TrimPrefix(line, "id: ")
125-
} else if strings.HasPrefix(line, "data: ") {
127+
case strings.HasPrefix(line, "data: "):
126128
dataLines = append(dataLines, strings.TrimPrefix(line, "data: "))
127-
} else if strings.HasPrefix(line, "event: ") {
129+
case strings.HasPrefix(line, "event: "):
128130
event.Event = strings.TrimPrefix(line, "event: ")
129-
} else if strings.HasPrefix(line, "retry: ") {
131+
case strings.HasPrefix(line, "retry: "):
130132
retry, err := strconv.Atoi(strings.TrimPrefix(line, "retry: "))
131133
if err == nil {
132134
event.Retry = retry
133135
}
134-
135136
// ignore invalid retry values
136-
} else if strings.HasPrefix(line, ":") {
137+
case strings.HasPrefix(line, ":"):
137138
if s.readComment {
138139
event.Comment = strings.TrimPrefix(line, ":")
139140
}
140-
141141
// ignore comment line
142+
default:
143+
// ignore unknown lines
142144
}
143-
144-
// ignore unknown lines
145145
}
146146

147147
s.err = s.scanner.Err()

sse_test.go

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
package openai
1+
package openai_test
22

33
import (
44
"bufio"
55
"io"
66
"reflect"
77
"strings"
88
"testing"
9+
10+
"github.com/sashabaranov/go-openai"
911
)
1012

1113
// ChunksReader simulates a reader that splits the input across multiple reads.
@@ -55,7 +57,7 @@ func TestEolSplitter(t *testing.T) {
5557
t.Run(test.name, func(t *testing.T) {
5658
reader := strings.NewReader(test.input)
5759
scanner := bufio.NewScanner(reader)
58-
scanner.Split(NewEOLSplitterFunc())
60+
scanner.Split(openai.NewEOLSplitterFunc())
5961

6062
var lines []string
6163
for scanner.Scan() {
@@ -97,7 +99,7 @@ func TestEolSplitterBoundaryCondition(t *testing.T) {
9799
// Custom reader to simulate the boundary condition
98100
reader := NewChunksReader(c.input)
99101
scanner := bufio.NewScanner(reader)
100-
scanner.Split(NewEOLSplitterFunc())
102+
scanner.Split(openai.NewEOLSplitterFunc())
101103

102104
var lines []string
103105
for scanner.Scan() {
@@ -124,11 +126,11 @@ func TestEolSplitterBoundaryCondition(t *testing.T) {
124126
func TestSSEScanner(t *testing.T) {
125127
tests := []struct {
126128
raw string
127-
want []ServerSentEvent
129+
want []openai.ServerSentEvent
128130
}{
129131
{
130132
raw: `data: hello world`,
131-
want: []ServerSentEvent{
133+
want: []openai.ServerSentEvent{
132134
{
133135
Data: "hello world",
134136
},
@@ -137,7 +139,7 @@ func TestSSEScanner(t *testing.T) {
137139
{
138140
raw: `event: hello
139141
data: hello world`,
140-
want: []ServerSentEvent{
142+
want: []openai.ServerSentEvent{
141143
{
142144
Event: "hello",
143145
Data: "hello world",
@@ -150,7 +152,7 @@ data: {
150152
data: "msg": "hello world",
151153
data: "id": 12345
152154
data: }`,
153-
want: []ServerSentEvent{
155+
want: []openai.ServerSentEvent{
154156
{
155157
Event: "hello-json",
156158
Data: "{\n\"msg\": \"hello world\",\n\"id\": 12345\n}",
@@ -161,7 +163,7 @@ data: }`,
161163
raw: `data: hello world
162164
163165
data: hello again`,
164-
want: []ServerSentEvent{
166+
want: []openai.ServerSentEvent{
165167
{
166168
Data: "hello world",
167169
},
@@ -173,7 +175,7 @@ data: hello again`,
173175
{
174176
raw: `retry: 10000
175177
data: hello world`,
176-
want: []ServerSentEvent{
178+
want: []openai.ServerSentEvent{
177179
{
178180
Retry: 10000,
179181
Data: "hello world",
@@ -184,7 +186,7 @@ data: hello again`,
184186
raw: `retry: 10000
185187
186188
retry: 20000`,
187-
want: []ServerSentEvent{
189+
want: []openai.ServerSentEvent{
188190
{
189191
Retry: 10000,
190192
},
@@ -200,7 +202,7 @@ id: message-id
200202
retry: 20000
201203
event: hello-event
202204
data: hello`,
203-
want: []ServerSentEvent{
205+
want: []openai.ServerSentEvent{
204206
{
205207
ID: "message-id",
206208
Retry: 20000,
@@ -222,7 +224,7 @@ id: message 2
222224
retry: 20000
223225
event: hello-event 2
224226
`,
225-
want: []ServerSentEvent{
227+
want: []openai.ServerSentEvent{
226228
{
227229
ID: "message 1",
228230
Retry: 10000,
@@ -254,10 +256,10 @@ event: hello-event 2
254256
}
255257
}
256258

257-
func runSSEScanTest(t *testing.T, raw string, want []ServerSentEvent) {
258-
sseScanner := NewSSEScanner(strings.NewReader(raw), false)
259+
func runSSEScanTest(t *testing.T, raw string, want []openai.ServerSentEvent) {
260+
sseScanner := openai.NewSSEScanner(strings.NewReader(raw), false)
259261

260-
var got []ServerSentEvent
262+
var got []openai.ServerSentEvent
261263
for sseScanner.Next() {
262264
got = append(got, sseScanner.Scan())
263265
}

stream_v2.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ type StreamRawEvent struct {
1313
type StreamDone struct {
1414
}
1515

16-
// Define StreamThreadMessageDelta
1716
type StreamThreadMessageDelta struct {
1817
ID string `json:"id"`
1918
Object string `json:"object"`
@@ -75,7 +74,7 @@ type StreamerV2 struct {
7574
buffer []byte
7675
}
7776

78-
// Close closes the underlying io.ReadCloser
77+
// Close closes the underlying io.ReadCloser.
7978
func (s *StreamerV2) Close() error {
8079
return s.r.Close()
8180
}
@@ -106,30 +105,30 @@ func (s *StreamerV2) Next() bool {
106105
return true
107106
}
108107

109-
// Read implements io.Reader of the text deltas of thread.message.delta events
110-
func (r *StreamerV2) Read(p []byte) (int, error) {
108+
// Read implements io.Reader of the text deltas of thread.message.delta events.
109+
func (s *StreamerV2) Read(p []byte) (int, error) {
111110
// If we have data in the buffer, copy it to p first.
112-
if len(r.buffer) > 0 {
113-
n := copy(p, r.buffer)
114-
r.buffer = r.buffer[n:]
111+
if len(s.buffer) > 0 {
112+
n := copy(p, s.buffer)
113+
s.buffer = s.buffer[n:]
115114
return n, nil
116115
}
117116

118-
for r.Next() {
117+
for s.Next() {
119118
// Read only text deltas
120-
text, ok := r.MessageDeltaText()
119+
text, ok := s.MessageDeltaText()
121120
if !ok {
122121
continue
123122
}
124123

125-
r.buffer = []byte(text)
126-
n := copy(p, r.buffer)
127-
r.buffer = r.buffer[n:]
124+
s.buffer = []byte(text)
125+
n := copy(p, s.buffer)
126+
s.buffer = s.buffer[n:]
128127
return n, nil
129128
}
130129

131130
// Check for streamer error
132-
if err := r.Err(); err != nil {
131+
if err := s.Err(); err != nil {
133132
return 0, err
134133
}
135134

@@ -145,7 +144,7 @@ func (s *StreamerV2) Text() (string, bool) {
145144
return s.MessageDeltaText()
146145
}
147146

148-
// MessageDeltaText returns text delta if the current event is a "thread.message.delta"
147+
// MessageDeltaText returns text delta if the current event is a "thread.message.delta".
149148
func (s *StreamerV2) MessageDeltaText() (string, bool) {
150149
event, ok := s.next.(StreamThreadMessageDelta)
151150
if !ok {
@@ -157,7 +156,7 @@ func (s *StreamerV2) MessageDeltaText() (string, bool) {
157156
if content.Text != nil {
158157
// Can we return the first text we find? Does OpenAI stream ever
159158
// return multiple text contents in a delta?
160-
text = text + content.Text.Value
159+
text += content.Text.Value
161160
}
162161
}
163162

stream_v2_test.go

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1-
package openai
1+
//nolint:lll
2+
package openai_test
23

34
import (
45
"encoding/json"
56
"io"
67
"reflect"
78
"strings"
89
"testing"
10+
11+
"github.com/sashabaranov/go-openai"
912
)
1013

1114
func TestNewStreamTextReader(t *testing.T) {
@@ -19,7 +22,7 @@ data: {"id":"msg_KFiZxHhXYQo6cGFnGjRDHSee","object":"thread.message.delta","delt
1922
event: done
2023
data: [DONE]
2124
`
22-
reader := NewStreamerV2(strings.NewReader(raw))
25+
reader := openai.NewStreamerV2(strings.NewReader(raw))
2326

2427
expected := "helloworld"
2528
buffer := make([]byte, len(expected))
@@ -65,7 +68,7 @@ event: done
6568
data: [DONE]
6669
`
6770

68-
scanner := NewStreamerV2(strings.NewReader(raw))
71+
scanner := openai.NewStreamerV2(strings.NewReader(raw))
6972
var events []any
7073

7174
for scanner.Next() {
@@ -74,26 +77,26 @@ data: [DONE]
7477
}
7578

7679
expectedValues := []any{
77-
StreamRawEvent{
80+
openai.StreamRawEvent{
7881
Type: "thread.created",
7982
Data: json.RawMessage(`{"id":"thread_vMWb8sJ14upXpPO2VbRpGTYD","object":"thread","created_at":1715864046,"metadata":{},"tool_resources":{"code_interpreter":{"file_ids":[]}}}`),
8083
},
81-
StreamThreadMessageDelta{
84+
openai.StreamThreadMessageDelta{
8285
ID: "msg_KFiZxHhXYQo6cGFnGjRDHSee",
8386
Object: "thread.message.delta",
84-
Delta: Delta{
85-
Content: []DeltaContent{
87+
Delta: openai.Delta{
88+
Content: []openai.DeltaContent{
8689
{
8790
Index: 0,
8891
Type: "text",
89-
Text: &DeltaText{
92+
Text: &openai.DeltaText{
9093
Value: "hello",
9194
},
9295
},
9396
},
9497
},
9598
},
96-
StreamDone{},
99+
openai.StreamDone{},
97100
}
98101

99102
if len(events) != len(expectedValues) {
@@ -119,25 +122,25 @@ func TestStreamThreadMessageDeltaJSON(t *testing.T) {
119122
name: "DeltaContent with Text",
120123
jsonData: `{"index":0,"type":"text","text":{"value":"hello"}}`,
121124
expectType: "text",
122-
expectValue: &DeltaText{Value: "hello"},
125+
expectValue: &openai.DeltaText{Value: "hello"},
123126
},
124127
{
125128
name: "DeltaContent with ImageFile",
126129
jsonData: `{"index":1,"type":"image_file","image_file":{"file_id":"file123","detail":"An image"}}`,
127130
expectType: "image_file",
128-
expectValue: &DeltaImageFile{FileID: "file123", Detail: "An image"},
131+
expectValue: &openai.DeltaImageFile{FileID: "file123", Detail: "An image"},
129132
},
130133
{
131134
name: "DeltaContent with ImageURL",
132135
jsonData: `{"index":2,"type":"image_url","image_url":{"url":"https://example.com/image.jpg","detail":"low"}}`,
133136
expectType: "image_url",
134-
expectValue: &DeltaImageURL{URL: "https://example.com/image.jpg", Detail: "low"},
137+
expectValue: &openai.DeltaImageURL{URL: "https://example.com/image.jpg", Detail: "low"},
135138
},
136139
}
137140

138141
for _, tt := range tests {
139142
t.Run(tt.name, func(t *testing.T) {
140-
var content DeltaContent
143+
var content openai.DeltaContent
141144
err := json.Unmarshal([]byte(tt.jsonData), &content)
142145
if err != nil {
143146
t.Fatalf("Error unmarshalling JSON: %v", err)

0 commit comments

Comments
 (0)