mirror of
https://github.com/hanzoai/go-openai-realtime.git
synced 2026-09-30 21:54:42 +00:00
Go 1.27.1, and the code it can say more simply
Modules declare go 1.27.1 and the build images follow. go fix applied the modernizers, and the examples print streamed deltas with Print instead of using them as format strings; omitzero is not applied, since it changes what the JSON says. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -14,7 +14,7 @@ jobs:
|
||||
- name: Setup Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: "1.19"
|
||||
go-version: "1.27.1"
|
||||
- name: Run vet
|
||||
run: |
|
||||
go vet .
|
||||
|
||||
@@ -10,7 +10,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
go-version: ["1.19", "1.20", "1.22", "1.23"]
|
||||
go-version: ["1.27.1"]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@@ -17,13 +17,11 @@ func TestCreateSession(t *testing.T) {
|
||||
client := openairt.NewClient(key)
|
||||
session, err := client.CreateSession(context.Background(), &openairt.CreateSessionRequest{
|
||||
Model: openairt.GPT4oRealtimePreview20241217,
|
||||
ClientSession: openairt.ClientSession{
|
||||
Modalities: []openairt.Modality{
|
||||
openairt.ModalityAudio,
|
||||
openairt.ModalityText,
|
||||
},
|
||||
Instructions: "You are a friendly assistant.",
|
||||
Modalities: []openairt.Modality{
|
||||
openairt.ModalityAudio,
|
||||
openairt.ModalityText,
|
||||
},
|
||||
Instructions: "You are a friendly assistant.",
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotEmpty(t, session.ClientSecret.Value)
|
||||
|
||||
+23
-27
@@ -4,9 +4,9 @@ import (
|
||||
"encoding/json"
|
||||
"testing"
|
||||
|
||||
openairt "github.com/hanzoai/go-openai-realtime"
|
||||
"github.com/WqyJh/jsontools"
|
||||
"github.com/hanzoai/go-openai"
|
||||
openairt "github.com/hanzoai/go-openai-realtime"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
@@ -18,13 +18,11 @@ func TestCreateSessionRequest(t *testing.T) {
|
||||
}`
|
||||
expected := openairt.CreateSessionRequest{
|
||||
Model: openairt.GPT4oRealtimePreview20241217,
|
||||
ClientSession: openairt.ClientSession{
|
||||
Modalities: []openairt.Modality{
|
||||
openairt.ModalityAudio,
|
||||
openairt.ModalityText,
|
||||
},
|
||||
Instructions: "You are a friendly assistant.",
|
||||
Modalities: []openairt.Modality{
|
||||
openairt.ModalityAudio,
|
||||
openairt.ModalityText,
|
||||
},
|
||||
Instructions: "You are a friendly assistant.",
|
||||
}
|
||||
|
||||
var actual openairt.CreateSessionRequest
|
||||
@@ -67,27 +65,25 @@ func TestCreateSessionResponse(t *testing.T) {
|
||||
Value: "ek_abc123",
|
||||
ExpiresAt: 1234567890,
|
||||
},
|
||||
ServerSession: openairt.ServerSession{
|
||||
ID: "sess_001",
|
||||
Object: "realtime.session",
|
||||
Model: openairt.GPT4oRealtimePreview20241217,
|
||||
Modalities: []openairt.Modality{
|
||||
openairt.ModalityAudio,
|
||||
openairt.ModalityText,
|
||||
},
|
||||
Instructions: "You are a friendly assistant.",
|
||||
Voice: openairt.VoiceAlloy,
|
||||
InputAudioFormat: openairt.AudioFormatPcm16,
|
||||
OutputAudioFormat: openairt.AudioFormatPcm16,
|
||||
InputAudioTranscription: &openairt.InputAudioTranscription{
|
||||
Model: openai.Whisper1,
|
||||
},
|
||||
TurnDetection: nil,
|
||||
Tools: []openairt.Tool{},
|
||||
ToolChoice: openairt.ServerToolChoice{String: openairt.ToolChoiceNone},
|
||||
Temperature: &temperature,
|
||||
MaxOutputTokens: openairt.IntOrInf(200),
|
||||
ID: "sess_001",
|
||||
Object: "realtime.session",
|
||||
Model: openairt.GPT4oRealtimePreview20241217,
|
||||
Modalities: []openairt.Modality{
|
||||
openairt.ModalityAudio,
|
||||
openairt.ModalityText,
|
||||
},
|
||||
Instructions: "You are a friendly assistant.",
|
||||
Voice: openairt.VoiceAlloy,
|
||||
InputAudioFormat: openairt.AudioFormatPcm16,
|
||||
OutputAudioFormat: openairt.AudioFormatPcm16,
|
||||
InputAudioTranscription: &openairt.InputAudioTranscription{
|
||||
Model: openai.Whisper1,
|
||||
},
|
||||
TurnDetection: nil,
|
||||
Tools: []openairt.Tool{},
|
||||
ToolChoice: openairt.ServerToolChoice{String: openairt.ToolChoiceNone},
|
||||
Temperature: &temperature,
|
||||
MaxOutputTokens: openairt.IntOrInf(200),
|
||||
}
|
||||
|
||||
var actual openairt.CreateSessionResponse
|
||||
|
||||
+6
-10
@@ -4,8 +4,8 @@ import (
|
||||
"encoding/json"
|
||||
"testing"
|
||||
|
||||
openairt "github.com/hanzoai/go-openai-realtime"
|
||||
"github.com/hanzoai/go-openai"
|
||||
openairt "github.com/hanzoai/go-openai-realtime"
|
||||
"github.com/hanzoai/go-openai/jsonschema"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
@@ -13,9 +13,7 @@ import (
|
||||
func TestSessionUpdateEvent(t *testing.T) {
|
||||
temperature := float32(0.5)
|
||||
message := openairt.SessionUpdateEvent{
|
||||
EventBase: openairt.EventBase{
|
||||
EventID: "test-id",
|
||||
},
|
||||
EventID: "test-id",
|
||||
Session: openairt.ClientSession{
|
||||
Modalities: []openairt.Modality{openairt.ModalityText, openairt.ModalityAudio},
|
||||
Instructions: "test-instructions",
|
||||
@@ -26,12 +24,10 @@ func TestSessionUpdateEvent(t *testing.T) {
|
||||
Model: openai.Whisper1,
|
||||
},
|
||||
TurnDetection: &openairt.ClientTurnDetection{
|
||||
Type: openairt.ClientTurnDetectionTypeServerVad,
|
||||
TurnDetectionParams: openairt.TurnDetectionParams{
|
||||
Threshold: 0.5,
|
||||
PrefixPaddingMs: 1000,
|
||||
SilenceDurationMs: 2000,
|
||||
},
|
||||
Type: openairt.ClientTurnDetectionTypeServerVad,
|
||||
Threshold: 0.5,
|
||||
PrefixPaddingMs: 1000,
|
||||
SilenceDurationMs: 2000,
|
||||
},
|
||||
Tools: []openairt.Tool{
|
||||
{
|
||||
|
||||
@@ -114,8 +114,7 @@ func (c *ConnHandler) run() error {
|
||||
|
||||
msg, err := c.conn.ReadMessage(c.ctx)
|
||||
if err != nil {
|
||||
var permanent *PermanentError
|
||||
if errors.As(err, &permanent) {
|
||||
if permanent, ok := errors.AsType[*PermanentError](err); ok {
|
||||
return permanent.Err
|
||||
}
|
||||
c.conn.logger.Warnf("read message temporary error: %+v", err)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
module github.com/hanzoai/go-openai-realtime/contrib/ws-gorilla
|
||||
|
||||
go 1.19
|
||||
go 1.27.1
|
||||
|
||||
require (
|
||||
github.com/gorilla/websocket v1.5.3
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
github.com/WqyJh/jsontools v0.3.1 h1:zKT+DvxUSTji06ZcjsbQzZ48PycFZDI0OGATmmFhJ+U=
|
||||
github.com/WqyJh/jsontools v0.3.1/go.mod h1:Gk2OlyXjAJmYNZ0aUbEXGHq4I5ihGRjXxVuUprWtkss=
|
||||
github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo=
|
||||
github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
@@ -6,6 +7,7 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
|
||||
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
||||
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/hanzoai/go-openai v1.41.0 h1:/jF/fZbBHyK7N14mQquUKzCnjwomcuy5YVBIn8AR3NQ=
|
||||
github.com/hanzoai/go-openai v1.41.0/go.mod h1:v0q1gjYS3fpa41xOwzUUXF/julZXhoSmGULcDhmxMY8=
|
||||
github.com/hanzoai/go-openai-realtime v1.0.0 h1:toSd20ii/1zwxk1ULlT6bHZTTdi5qf7AIMzZm0Gy8NY=
|
||||
github.com/hanzoai/go-openai-realtime v1.0.0/go.mod h1:YUQQXTK9zAZvAWriSYm0PnzvApO0EbPiwTT07Ycqrtw=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
module github.com/hanzoai/go-openai-realtime/examples
|
||||
|
||||
go 1.19
|
||||
go 1.27.1
|
||||
|
||||
require (
|
||||
github.com/faiface/beep v1.1.0
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
|
||||
github.com/WqyJh/jsontools v0.3.1 h1:zKT+DvxUSTji06ZcjsbQzZ48PycFZDI0OGATmmFhJ+U=
|
||||
github.com/WqyJh/jsontools v0.3.1/go.mod h1:Gk2OlyXjAJmYNZ0aUbEXGHq4I5ihGRjXxVuUprWtkss=
|
||||
github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo=
|
||||
github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs=
|
||||
github.com/d4l3k/messagediff v1.2.2-0.20190829033028-7e0a312ae40b/go.mod h1:Oozbb1TVXFac9FtSIxHBMnBCq2qeH/2KkEQxENCrlLo=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/faiface/beep v1.1.0 h1:A2gWP6xf5Rh7RG/p9/VAW2jRSDEGQm5sbOb38sf5d4c=
|
||||
github.com/faiface/beep v1.1.0/go.mod h1:6I8p6kK2q4opL/eWb+kAkk38ehnTunWeToJB+s51sT4=
|
||||
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
|
||||
@@ -33,7 +35,9 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8 h1:idBdZTd9UioThJp8KpM/rTSinK/ChZFBE43/WtIy8zg=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/image v0.0.0-20190220214146-31aff87c08e9/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||
@@ -50,3 +54,4 @@ golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
|
||||
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
||||
@@ -27,7 +27,7 @@ func main() {
|
||||
responseDeltaHandler := func(ctx context.Context, event openairt.ServerEvent) {
|
||||
switch event.ServerEventType() {
|
||||
case openairt.ServerEventTypeResponseTextDelta:
|
||||
fmt.Printf(event.(openairt.ResponseTextDeltaEvent).Delta)
|
||||
fmt.Print(event.(openairt.ResponseTextDeltaEvent).Delta)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ func main() {
|
||||
responseDeltaHandler := func(ctx context.Context, event openairt.ServerEvent) {
|
||||
switch event.ServerEventType() {
|
||||
case openairt.ServerEventTypeResponseAudioTranscriptDelta:
|
||||
fmt.Printf(event.(openairt.ResponseAudioTranscriptDeltaEvent).Delta)
|
||||
fmt.Print(event.(openairt.ResponseAudioTranscriptDeltaEvent).Delta)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
module github.com/hanzoai/go-openai-realtime
|
||||
|
||||
go 1.19
|
||||
go 1.27.1
|
||||
|
||||
require (
|
||||
github.com/WqyJh/jsontools v0.3.1
|
||||
|
||||
+69
-129
@@ -22,10 +22,8 @@ func TestErrorEvent(t *testing.T) {
|
||||
}
|
||||
}`
|
||||
expected := openairt.ErrorEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
Type: openairt.ServerEventTypeError,
|
||||
EventID: "event_890",
|
||||
},
|
||||
Type: openairt.ServerEventTypeError,
|
||||
EventID: "event_890",
|
||||
Error: openairt.Error{
|
||||
Type: "invalid_request_error",
|
||||
Code: "invalid_event",
|
||||
@@ -108,10 +106,8 @@ func TestSessionCreatedEvent(t *testing.T) {
|
||||
}`
|
||||
temperature := float32(0.8)
|
||||
expected := openairt.SessionCreatedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_1234",
|
||||
Type: openairt.ServerEventTypeSessionCreated,
|
||||
},
|
||||
EventID: "event_1234",
|
||||
Type: openairt.ServerEventTypeSessionCreated,
|
||||
Session: openairt.ServerSession{
|
||||
ID: "sess_001",
|
||||
Object: "realtime.session",
|
||||
@@ -123,12 +119,10 @@ func TestSessionCreatedEvent(t *testing.T) {
|
||||
OutputAudioFormat: openairt.AudioFormatPcm16,
|
||||
InputAudioTranscription: nil,
|
||||
TurnDetection: &openairt.ServerTurnDetection{
|
||||
Type: openairt.ServerTurnDetectionTypeServerVad,
|
||||
TurnDetectionParams: openairt.TurnDetectionParams{
|
||||
Threshold: 0.5,
|
||||
PrefixPaddingMs: 300,
|
||||
SilenceDurationMs: 200,
|
||||
},
|
||||
Type: openairt.ServerTurnDetectionTypeServerVad,
|
||||
Threshold: 0.5,
|
||||
PrefixPaddingMs: 300,
|
||||
SilenceDurationMs: 200,
|
||||
},
|
||||
Tools: []openairt.Tool{},
|
||||
ToolChoice: openairt.ServerToolChoice{String: openairt.ToolChoiceAuto},
|
||||
@@ -169,10 +163,8 @@ func TestSessionUpdatedEvent(t *testing.T) {
|
||||
}`
|
||||
temperature := float32(0.7)
|
||||
expected := openairt.SessionUpdatedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_5678",
|
||||
Type: openairt.ServerEventTypeSessionUpdated,
|
||||
},
|
||||
EventID: "event_5678",
|
||||
Type: openairt.ServerEventTypeSessionUpdated,
|
||||
Session: openairt.ServerSession{
|
||||
ID: "sess_001",
|
||||
Object: "realtime.session",
|
||||
@@ -240,10 +232,8 @@ func TestConversationCreatedEvent(t *testing.T) {
|
||||
}
|
||||
}`
|
||||
expected := openairt.ConversationCreatedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_9101",
|
||||
Type: openairt.ServerEventTypeConversationCreated,
|
||||
},
|
||||
EventID: "event_9101",
|
||||
Type: openairt.ServerEventTypeConversationCreated,
|
||||
Conversation: openairt.Conversation{
|
||||
ID: "conv_001",
|
||||
Object: "realtime.conversation",
|
||||
@@ -275,10 +265,8 @@ func TestConversationItemCreatedEvent(t *testing.T) {
|
||||
}
|
||||
}`
|
||||
expected := openairt.ConversationItemCreatedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_1920",
|
||||
Type: openairt.ServerEventTypeConversationItemCreated,
|
||||
},
|
||||
EventID: "event_1920",
|
||||
Type: openairt.ServerEventTypeConversationItemCreated,
|
||||
PreviousItemID: "msg_002",
|
||||
Item: openairt.ResponseMessageItem{
|
||||
Object: "realtime.item",
|
||||
@@ -311,10 +299,8 @@ func TestConversationItemInputAudioTranscriptionCompletedEvent(t *testing.T) {
|
||||
"transcript": "Hello, how are you?"
|
||||
}`
|
||||
expected := openairt.ConversationItemInputAudioTranscriptionCompletedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_2122",
|
||||
Type: openairt.ServerEventTypeConversationItemInputAudioTranscriptionCompleted,
|
||||
},
|
||||
EventID: "event_2122",
|
||||
Type: openairt.ServerEventTypeConversationItemInputAudioTranscriptionCompleted,
|
||||
ItemID: "msg_003",
|
||||
ContentIndex: 1,
|
||||
Transcript: "Hello, how are you?",
|
||||
@@ -339,10 +325,8 @@ func TestConversationItemInputAudioTranscriptionFailedEvent(t *testing.T) {
|
||||
}
|
||||
}`
|
||||
expected := openairt.ConversationItemInputAudioTranscriptionFailedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_2324",
|
||||
Type: openairt.ServerEventTypeConversationItemInputAudioTranscriptionFailed,
|
||||
},
|
||||
EventID: "event_2324",
|
||||
Type: openairt.ServerEventTypeConversationItemInputAudioTranscriptionFailed,
|
||||
ItemID: "msg_003",
|
||||
ContentIndex: 0,
|
||||
Error: openairt.Error{
|
||||
@@ -368,10 +352,8 @@ func TestConversationItemTruncatedEvent(t *testing.T) {
|
||||
"audio_end_ms": 1500
|
||||
}`
|
||||
expected := openairt.ConversationItemTruncatedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_2526",
|
||||
Type: openairt.ServerEventTypeConversationItemTruncated,
|
||||
},
|
||||
EventID: "event_2526",
|
||||
Type: openairt.ServerEventTypeConversationItemTruncated,
|
||||
ItemID: "msg_004",
|
||||
ContentIndex: 2,
|
||||
AudioEndMs: 1500,
|
||||
@@ -389,11 +371,9 @@ func TestConversationItemDeletedEvent(t *testing.T) {
|
||||
"item_id": "msg_005"
|
||||
}`
|
||||
expected := openairt.ConversationItemDeletedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_2728",
|
||||
Type: openairt.ServerEventTypeConversationItemDeleted,
|
||||
},
|
||||
ItemID: "msg_005",
|
||||
EventID: "event_2728",
|
||||
Type: openairt.ServerEventTypeConversationItemDeleted,
|
||||
ItemID: "msg_005",
|
||||
}
|
||||
actual, err := openairt.UnmarshalServerEvent([]byte(data))
|
||||
require.NoError(t, err)
|
||||
@@ -409,10 +389,8 @@ func TestInputAudioBufferCommittedEvent(t *testing.T) {
|
||||
"item_id": "msg_002"
|
||||
}`
|
||||
expected := openairt.InputAudioBufferCommittedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_1121",
|
||||
Type: openairt.ServerEventTypeInputAudioBufferCommitted,
|
||||
},
|
||||
EventID: "event_1121",
|
||||
Type: openairt.ServerEventTypeInputAudioBufferCommitted,
|
||||
PreviousItemID: "msg_001",
|
||||
ItemID: "msg_002",
|
||||
}
|
||||
@@ -428,10 +406,8 @@ func TestInputAudioBufferClearedEvent(t *testing.T) {
|
||||
"type": "input_audio_buffer.cleared"
|
||||
}`
|
||||
expected := openairt.InputAudioBufferClearedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_1314",
|
||||
Type: openairt.ServerEventTypeInputAudioBufferCleared,
|
||||
},
|
||||
EventID: "event_1314",
|
||||
Type: openairt.ServerEventTypeInputAudioBufferCleared,
|
||||
}
|
||||
actual, err := openairt.UnmarshalServerEvent([]byte(data))
|
||||
require.NoError(t, err)
|
||||
@@ -447,10 +423,8 @@ func TestInputAudioBufferSpeechStartedEvent(t *testing.T) {
|
||||
"item_id": "msg_003"
|
||||
}`
|
||||
expected := openairt.InputAudioBufferSpeechStartedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_1516",
|
||||
Type: openairt.ServerEventTypeInputAudioBufferSpeechStarted,
|
||||
},
|
||||
EventID: "event_1516",
|
||||
Type: openairt.ServerEventTypeInputAudioBufferSpeechStarted,
|
||||
AudioStartMs: 1000,
|
||||
ItemID: "msg_003",
|
||||
}
|
||||
@@ -468,10 +442,8 @@ func TestInputAudioBufferSpeechStoppedEvent(t *testing.T) {
|
||||
"item_id": "msg_003"
|
||||
}`
|
||||
expected := openairt.InputAudioBufferSpeechStoppedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_1718",
|
||||
Type: openairt.ServerEventTypeInputAudioBufferSpeechStopped,
|
||||
},
|
||||
EventID: "event_1718",
|
||||
Type: openairt.ServerEventTypeInputAudioBufferSpeechStopped,
|
||||
AudioEndMs: 2000,
|
||||
ItemID: "msg_003",
|
||||
}
|
||||
@@ -495,10 +467,8 @@ func TestResponseCreatedEvent(t *testing.T) {
|
||||
}
|
||||
}`
|
||||
expected := openairt.ResponseCreatedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_2930",
|
||||
Type: openairt.ServerEventTypeResponseCreated,
|
||||
},
|
||||
EventID: "event_2930",
|
||||
Type: openairt.ServerEventTypeResponseCreated,
|
||||
Response: openairt.Response{
|
||||
ID: "resp_001",
|
||||
Object: "realtime.response",
|
||||
@@ -550,10 +520,8 @@ func TestResponseDoneEvent(t *testing.T) {
|
||||
}
|
||||
}`
|
||||
expected := openairt.ResponseDoneEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_APnPcL4wUvPmXTFejvDzn",
|
||||
Type: openairt.ServerEventTypeResponseDone,
|
||||
},
|
||||
EventID: "event_APnPcL4wUvPmXTFejvDzn",
|
||||
Type: openairt.ServerEventTypeResponseDone,
|
||||
Response: openairt.Response{
|
||||
ID: "resp_APnPbMhvCmC0K8qZALSeI",
|
||||
Object: "realtime.response",
|
||||
@@ -562,16 +530,14 @@ func TestResponseDoneEvent(t *testing.T) {
|
||||
Output: []openairt.ResponseMessageItem{
|
||||
{
|
||||
Object: "realtime.item",
|
||||
MessageItem: openairt.MessageItem{
|
||||
ID: "item_APnPbzHkH7zf8AteO9hdx",
|
||||
Type: openairt.MessageItemTypeMessage,
|
||||
Status: openairt.ItemStatusCompleted,
|
||||
Role: openairt.MessageRoleAssistant,
|
||||
Content: []openairt.MessageContentPart{
|
||||
{
|
||||
Type: openairt.MessageContentTypeAudio,
|
||||
Transcript: "Hello! How can I help you today?",
|
||||
},
|
||||
ID: "item_APnPbzHkH7zf8AteO9hdx",
|
||||
Type: openairt.MessageItemTypeMessage,
|
||||
Status: openairt.ItemStatusCompleted,
|
||||
Role: openairt.MessageRoleAssistant,
|
||||
Content: []openairt.MessageContentPart{
|
||||
{
|
||||
Type: openairt.MessageContentTypeAudio,
|
||||
Transcript: "Hello! How can I help you today?",
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -618,10 +584,8 @@ func TestResponseOutputItemAddedEvent(t *testing.T) {
|
||||
}
|
||||
}`
|
||||
expected := openairt.ResponseOutputItemAddedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_3334",
|
||||
Type: openairt.ServerEventTypeResponseOutputItemAdded,
|
||||
},
|
||||
EventID: "event_3334",
|
||||
Type: openairt.ServerEventTypeResponseOutputItemAdded,
|
||||
ResponseID: "resp_001",
|
||||
OutputIndex: 10,
|
||||
Item: openairt.ResponseMessageItem{
|
||||
@@ -662,10 +626,8 @@ func TestResponseOutputItemDoneEvent(t *testing.T) {
|
||||
}
|
||||
}`
|
||||
expected := openairt.ResponseOutputItemDoneEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_3536",
|
||||
Type: openairt.ServerEventTypeResponseOutputItemDone,
|
||||
},
|
||||
EventID: "event_3536",
|
||||
Type: openairt.ServerEventTypeResponseOutputItemDone,
|
||||
ResponseID: "resp_001",
|
||||
OutputIndex: 0,
|
||||
Item: openairt.ResponseMessageItem{
|
||||
@@ -704,10 +666,8 @@ func TestResponseContentPartAddedEvent(t *testing.T) {
|
||||
}
|
||||
}`
|
||||
expected := openairt.ResponseContentPartAddedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_3738",
|
||||
Type: openairt.ServerEventTypeResponseContentPartAdded,
|
||||
},
|
||||
EventID: "event_3738",
|
||||
Type: openairt.ServerEventTypeResponseContentPartAdded,
|
||||
ResponseID: "resp_001",
|
||||
ItemID: "msg_007",
|
||||
OutputIndex: 1,
|
||||
@@ -737,10 +697,8 @@ func TestResponseContentPartDoneEvent(t *testing.T) {
|
||||
}
|
||||
}`
|
||||
expected := openairt.ResponseContentPartDoneEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_3940",
|
||||
Type: openairt.ServerEventTypeResponseContentPartDone,
|
||||
},
|
||||
EventID: "event_3940",
|
||||
Type: openairt.ServerEventTypeResponseContentPartDone,
|
||||
ResponseID: "resp_001",
|
||||
ItemID: "msg_007",
|
||||
OutputIndex: 0,
|
||||
@@ -767,10 +725,8 @@ func TestResponseTextDelta(t *testing.T) {
|
||||
"delta": "Sure, I can h"
|
||||
}`
|
||||
expected := openairt.ResponseTextDeltaEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_4142",
|
||||
Type: openairt.ServerEventTypeResponseTextDelta,
|
||||
},
|
||||
EventID: "event_4142",
|
||||
Type: openairt.ServerEventTypeResponseTextDelta,
|
||||
ResponseID: "resp_001",
|
||||
ItemID: "msg_007",
|
||||
OutputIndex: 0,
|
||||
@@ -794,10 +750,8 @@ func TestResponseTextDoneEvent(t *testing.T) {
|
||||
"text": "Sure, I can help with that."
|
||||
}`
|
||||
expected := openairt.ResponseTextDoneEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_4344",
|
||||
Type: openairt.ServerEventTypeResponseTextDone,
|
||||
},
|
||||
EventID: "event_4344",
|
||||
Type: openairt.ServerEventTypeResponseTextDone,
|
||||
ResponseID: "resp_001",
|
||||
ItemID: "msg_007",
|
||||
OutputIndex: 0,
|
||||
@@ -821,10 +775,8 @@ func TestResponseAudioTranscriptDelta(t *testing.T) {
|
||||
"delta": "Hello, how can I a"
|
||||
}`
|
||||
expected := openairt.ResponseAudioTranscriptDeltaEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_4546",
|
||||
Type: openairt.ServerEventTypeResponseAudioTranscriptDelta,
|
||||
},
|
||||
EventID: "event_4546",
|
||||
Type: openairt.ServerEventTypeResponseAudioTranscriptDelta,
|
||||
ResponseID: "resp_001",
|
||||
ItemID: "msg_008",
|
||||
OutputIndex: 1,
|
||||
@@ -848,10 +800,8 @@ func TestResponseAudioTranscriptDoneEvent(t *testing.T) {
|
||||
"transcript": "Hello, how can I assist you today?"
|
||||
}`
|
||||
expected := openairt.ResponseAudioTranscriptDoneEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_4748",
|
||||
Type: openairt.ServerEventTypeResponseAudioTranscriptDone,
|
||||
},
|
||||
EventID: "event_4748",
|
||||
Type: openairt.ServerEventTypeResponseAudioTranscriptDone,
|
||||
ResponseID: "resp_001",
|
||||
ItemID: "msg_008",
|
||||
OutputIndex: 0,
|
||||
@@ -875,10 +825,8 @@ func TestResponseAudioDeltaEvent(t *testing.T) {
|
||||
"delta": "Base64EncodedAudioDelta"
|
||||
}`
|
||||
expected := openairt.ResponseAudioDeltaEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_4950",
|
||||
Type: openairt.ServerEventTypeResponseAudioDelta,
|
||||
},
|
||||
EventID: "event_4950",
|
||||
Type: openairt.ServerEventTypeResponseAudioDelta,
|
||||
ResponseID: "resp_001",
|
||||
ItemID: "msg_008",
|
||||
OutputIndex: 0,
|
||||
@@ -901,10 +849,8 @@ func TestResponseAudioDoneEvent(t *testing.T) {
|
||||
"content_index": 0
|
||||
}`
|
||||
expected := openairt.ResponseAudioDoneEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_5152",
|
||||
Type: openairt.ServerEventTypeResponseAudioDone,
|
||||
},
|
||||
EventID: "event_5152",
|
||||
Type: openairt.ServerEventTypeResponseAudioDone,
|
||||
ResponseID: "resp_001",
|
||||
ItemID: "msg_008",
|
||||
OutputIndex: 0,
|
||||
@@ -927,10 +873,8 @@ func TestResponseFunctionCallArgumentsDelta(t *testing.T) {
|
||||
"delta": "{\"location\": \"San\""
|
||||
}`
|
||||
expected := openairt.ResponseFunctionCallArgumentsDeltaEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_5354",
|
||||
Type: openairt.ServerEventTypeResponseFunctionCallArgumentsDelta,
|
||||
},
|
||||
EventID: "event_5354",
|
||||
Type: openairt.ServerEventTypeResponseFunctionCallArgumentsDelta,
|
||||
ResponseID: "resp_002",
|
||||
ItemID: "fc_001",
|
||||
OutputIndex: 0,
|
||||
@@ -954,10 +898,8 @@ func TestResponseFunctionCallArgumentsDoneEvent(t *testing.T) {
|
||||
"arguments": "{\"location\": \"San Francisco\"}"
|
||||
}`
|
||||
expected := openairt.ResponseFunctionCallArgumentsDoneEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_5556",
|
||||
Type: openairt.ServerEventTypeResponseFunctionCallArgumentsDone,
|
||||
},
|
||||
EventID: "event_5556",
|
||||
Type: openairt.ServerEventTypeResponseFunctionCallArgumentsDone,
|
||||
ResponseID: "resp_002",
|
||||
ItemID: "fc_001",
|
||||
OutputIndex: 1,
|
||||
@@ -990,10 +932,8 @@ func TestRateLimitsUpdatedEvent(t *testing.T) {
|
||||
]
|
||||
}`
|
||||
expected := openairt.RateLimitsUpdatedEvent{
|
||||
ServerEventBase: openairt.ServerEventBase{
|
||||
EventID: "event_5758",
|
||||
Type: openairt.ServerEventTypeRateLimitsUpdated,
|
||||
},
|
||||
EventID: "event_5758",
|
||||
Type: openairt.ServerEventTypeRateLimitsUpdated,
|
||||
RateLimits: []openairt.RateLimit{
|
||||
{
|
||||
Name: "requests",
|
||||
|
||||
+2
-2
@@ -19,7 +19,7 @@ import (
|
||||
// only allows one message every 100ms with a 10 message burst.
|
||||
type echoServer struct {
|
||||
// logf controls where logs are sent.
|
||||
logf func(f string, v ...interface{})
|
||||
logf func(f string, v ...any)
|
||||
// interval is the interval between each message.
|
||||
interval time.Duration
|
||||
}
|
||||
@@ -96,7 +96,7 @@ type Server struct {
|
||||
|
||||
func NewServer(_ *testing.T, interval time.Duration) Server {
|
||||
var testServer Server
|
||||
testServer.Server = httptest.NewServer(echoServer{logf: func(f string, v ...interface{}) {
|
||||
testServer.Server = httptest.NewServer(echoServer{logf: func(f string, v ...any) {
|
||||
log.Printf("[test server] "+f, v...)
|
||||
}, interval: interval})
|
||||
testServer.URL = makeWsProto(testServer.Server.URL)
|
||||
|
||||
Reference in New Issue
Block a user