Skip to content

Commit 91f5cc1

Browse files
committed
refactor: added segment formatiing, fixed benchmark printings
1 parent 50caee3 commit 91f5cc1

File tree

2 files changed

+62
-10
lines changed

2 files changed

+62
-10
lines changed

bindings/go/pkg/whisper/context_benchmark_test.go

Lines changed: 56 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package whisper_test
22

33
import (
44
"fmt"
5+
"io"
56
"math"
67
"os"
78
"runtime"
@@ -13,6 +14,38 @@ import (
1314
wav "github.com/go-audio/wav"
1415
)
1516

17+
func processAndExtractSegmentsSequentially(ctx whisper.Context, samples []float32) ([]whisper.Segment, error) {
18+
if err := ctx.Process(samples, nil, nil, nil); err != nil {
19+
return nil, err
20+
}
21+
22+
var segments []whisper.Segment
23+
for {
24+
seg, err := ctx.NextSegment()
25+
if err == io.EOF {
26+
break
27+
} else if err != nil {
28+
return nil, err
29+
}
30+
31+
segments = append(segments, seg)
32+
}
33+
34+
return segments, nil
35+
}
36+
37+
func processAndExtractSegmentsWithCallback(ctx whisper.Context, samples []float32) ([]whisper.Segment, error) {
38+
segments := make([]whisper.Segment, 0)
39+
40+
if err := ctx.Process(samples, nil, func(seg whisper.Segment) {
41+
segments = append(segments, seg)
42+
}, nil); err != nil {
43+
return nil, err
44+
}
45+
46+
return segments, nil
47+
}
48+
1649
// benchProcessVariants runs the common benchmark matrix across context kinds,
1750
// thread sets, and callback modes, for given samples. If singleIteration is true
1851
// it runs only one iteration regardless of b.N. If printTimings is true,
@@ -87,18 +120,23 @@ func benchProcessVariants(
87120

88121
b.ResetTimer()
89122
for i := 0; i < iters; i++ {
90-
if printTimings {
91-
model.ResetTimings()
92-
}
123+
model.ResetTimings()
93124
start := time.Now()
94-
if err := ctx.Process(samples, nil, nil, nil); err != nil {
95-
b.Fatalf("process: %v", err)
125+
126+
segments, err := processAndExtractSegmentsSequentially(ctx, samples)
127+
if err != nil {
128+
b.Fatalf("process and extract segments sequentially: %v", err)
96129
}
130+
131+
b.Logf("segments: %+v", segments)
132+
133+
elapsed := time.Since(start)
134+
97135
if printTimings {
98-
elapsed := time.Since(start)
99136
model.PrintTimings()
100-
b.ReportMetric(float64(elapsed.Milliseconds()), "ms_process")
101137
}
138+
139+
b.ReportMetric(float64(elapsed.Milliseconds()), "ms_process")
102140
}
103141
})
104142

@@ -120,14 +158,22 @@ func benchProcessVariants(
120158
b.ResetTimer()
121159
for i := 0; i < iters; i++ {
122160
start := time.Now()
161+
model.ResetTimings()
162+
123163
// Passing a segment callback forces single-segment mode and exercises token extraction
124-
if err := ctx.Process(samples, nil, func(seg whisper.Segment) {}, nil); err != nil {
164+
segments, err := processAndExtractSegmentsWithCallback(ctx, samples)
165+
if err != nil {
125166
b.Fatalf("process with callback: %v", err)
126167
}
168+
169+
b.Logf("segments: %+v", segments)
170+
171+
elapsed := time.Since(start)
127172
if printTimings {
128-
elapsed := time.Since(start)
129-
b.ReportMetric(float64(elapsed.Milliseconds()), "ms_process")
173+
model.PrintTimings()
130174
}
175+
176+
b.ReportMetric(float64(elapsed.Milliseconds()), "ms_process")
131177
}
132178
})
133179
}

bindings/go/pkg/whisper/interface.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package whisper
22

33
import (
4+
"fmt"
45
"io"
56
"time"
67
)
@@ -175,6 +176,11 @@ type Segment struct {
175176
SpeakerTurnNext bool
176177
}
177178

179+
func (s Segment) String() string {
180+
// foramt: [00:01:39.000 --> 00:01:50.000] And so, my fellow Americans, ask not what your country can do for you, ask what you can do for your country.
181+
return fmt.Sprintf("[%s --> %s] %s", s.Start.Truncate(time.Millisecond), s.End.Truncate(time.Millisecond), s.Text)
182+
}
183+
178184
// Token is a text or special token
179185
type Token struct {
180186
// ID of the token

0 commit comments

Comments
 (0)