Skip to content

Commit

Permalink
Room: AI-Talk add utests for new API. v5.13.20
Browse files Browse the repository at this point in the history
  • Loading branch information
winlinvip committed Jan 30, 2024
1 parent ba3af94 commit a52c9fc
Show file tree
Hide file tree
Showing 9 changed files with 692 additions and 31 deletions.
7 changes: 1 addition & 6 deletions DEVELOPER.md
Original file line number Diff line number Diff line change
Expand Up @@ -777,12 +777,7 @@ Finally, open [http://localhost](http://localhost) to check it.
Please setup the environment variable `OPENAI_API_KEY` and `OPENAI_PROXY`, if need to test the OpenAI
feature like transcript.

```bash
bash scripts/tools/secret.sh --output test/.env &&
cat ~/git/issues-translation/.env |grep OPENAI >> test/.env
```

Now you can run test.
> Note: Already setup in the secret.sh script, no extra steps needed.
## Run test in Goland

Expand Down
48 changes: 29 additions & 19 deletions platform/ai-talk.go
Original file line number Diff line number Diff line change
Expand Up @@ -750,14 +750,17 @@ func (v *StageSubscriber) completeRobotAudioMessage(ctx context.Context, sreq *S
message.err = errors.Wrapf(err, "copy %v to %v", segment.ttsFile, copyFile)
}

message.finished, message.segment = true, segment
message.segment = segment
message.RequestUUID, message.SegmentUUID = sreq.rid, segment.asid
message.Message, message.audioFile = segment.text, copyFile
message.Username = v.stage.room.AIName

// User may disable TTS, we only ship the text message to user.
message.HasAudioFile = !segment.noTTS

// Now, message is finished.
message.finished = true

// Always close message if timeout.
go func() {
select {
Expand Down Expand Up @@ -1219,6 +1222,9 @@ func (v *TTSWorker) SubmitSegment(ctx context.Context, stage *Stage, sreq *Stage
go func() {
defer v.wg.Done()

// Always make the segment ready or error, to update the stage to be ready.
defer sreq.onSegmentReady(segment)

if stage.aiTtsEnabled {
ttsService := NewOpenAITTSService(stage.aiConfig)
if err := ttsService.RequestTTS(ctx, func(ext string) string {
Expand All @@ -1230,13 +1236,11 @@ func (v *TTSWorker) SubmitSegment(ctx context.Context, stage *Stage, sreq *Stage
segment.err = err
} else {
segment.ready, segment.noTTS = true, false
sreq.onSegmentReady(segment)
logger.Tf(ctx, "TTS: Complete rid=%v, asid=%v, file saved to %v, %v",
sreq.rid, segment.asid, segment.ttsFile, segment.text)
}
} else {
segment.ready, segment.noTTS = true, true
sreq.onSegmentReady(segment)
logger.Tf(ctx, "TTS: Skip rid=%v, asid=%v, %v", sreq.rid, segment.asid, segment.text)
}

Expand Down Expand Up @@ -1352,6 +1356,11 @@ func handleAITalkService(ctx context.Context, handler *http.ServeMux) error {
return errors.Wrapf(err, "unmarshal %v %v", roomUUID, r0)
}

// If assistant is disabled in room, fail.
if !room.Assistant {
return errors.Errorf("assistant disabled")
}

// Authenticate by room token if got one.
if roomToken != "" && room.RoomToken != roomToken {
return errors.Errorf("invalid room token %v", roomToken)
Expand Down Expand Up @@ -1431,9 +1440,9 @@ func handleAITalkService(ctx context.Context, handler *http.ServeMux) error {
var sid, roomUUID, roomToken string
if err := ParseBody(ctx, r.Body, &struct {
Token *string `json:"token"`
StageUUID *string `json:"sid"`
RoomUUID *string `json:"room"`
RoomToken *string `json:"roomToken"`
StageUUID *string `json:"sid"`
}{
Token: &token, StageUUID: &sid, RoomUUID: &roomUUID, RoomToken: &roomToken,
}); err != nil {
Expand Down Expand Up @@ -1502,14 +1511,14 @@ func handleAITalkService(ctx context.Context, handler *http.ServeMux) error {
var audioBase64Data, textMessage string
if err := ParseBody(ctx, r.Body, &struct {
Token *string `json:"token"`
RoomUUID *string `json:"room"`
RoomToken *string `json:"roomToken"`
StageUUID *string `json:"sid"`
UserID *string `json:"userId"`
RequestUUID *string `json:"rid"`
UserMayInput *float64 `json:"umi"`
AudioData *string `json:"audio"`
TextMessage *string `json:"text"`
RoomUUID *string `json:"room"`
RoomToken *string `json:"roomToken"`
}{
Token: &token, StageUUID: &sid, UserID: &userID, RequestUUID: &rid,
UserMayInput: &userMayInput, TextMessage: &textMessage, AudioData: &audioBase64Data,
Expand Down Expand Up @@ -1655,10 +1664,10 @@ func handleAITalkService(ctx context.Context, handler *http.ServeMux) error {
var roomUUID, roomToken string
if err := ParseBody(ctx, r.Body, &struct {
Token *string `json:"token"`
StageUUID *string `json:"sid"`
RequestUUID *string `json:"rid"`
RoomUUID *string `json:"room"`
RoomToken *string `json:"roomToken"`
StageUUID *string `json:"sid"`
RequestUUID *string `json:"rid"`
}{
Token: &token, StageUUID: &sid, RequestUUID: &rid,
RoomUUID: &roomUUID, RoomToken: &roomToken,
Expand Down Expand Up @@ -1854,12 +1863,12 @@ func handleAITalkService(ctx context.Context, handler *http.ServeMux) error {
stage.KeepAlive()
subscriber.KeepAlive()

type StageResult struct {
type SubscribeResult struct {
StageID string `json:"sid"`
SubscriberID string `json:"spid"`
Voice string `json:"voice"`
}
r0 := &StageResult{
r0 := &SubscribeResult{
StageID: stage.sid,
SubscriberID: subscriber.spid,
Voice: stage.voice,
Expand All @@ -1881,14 +1890,15 @@ func handleAITalkService(ctx context.Context, handler *http.ServeMux) error {
var token string
var sid, spid string
var roomUUID, roomToken string
// Optional, stream hosts has a userID, no this field for subscribers.
// Optional, stream hosts has a userID, no this field for subscribers. Use as heartbeat to
// make user keep in alive.
var userID string
if err := ParseBody(ctx, r.Body, &struct {
Token *string `json:"token"`
StageUUID *string `json:"sid"`
SubscriberID *string `json:"spid"`
RoomUUID *string `json:"room"`
RoomToken *string `json:"roomToken"`
StageUUID *string `json:"sid"`
SubscriberID *string `json:"spid"`
UserID *string `json:"userId"`
}{
Token: &token, StageUUID: &sid, SubscriberID: &spid,
Expand Down Expand Up @@ -2075,11 +2085,11 @@ func handleAITalkService(ctx context.Context, handler *http.ServeMux) error {
var roomUUID, roomToken string
if err := ParseBody(ctx, r.Body, &struct {
Token *string `json:"token"`
RoomUUID *string `json:"room"`
RoomToken *string `json:"roomToken"`
StageUUID *string `json:"sid"`
SubscriberID *string `json:"spid"`
AudioSegmentUUID *string `json:"asid"`
RoomUUID *string `json:"room"`
RoomToken *string `json:"roomToken"`
}{
Token: &token, StageUUID: &sid, SubscriberID: &spid, AudioSegmentUUID: &asid,
RoomUUID: &roomUUID, RoomToken: &roomToken,
Expand Down Expand Up @@ -2156,10 +2166,10 @@ func handleAITalkService(ctx context.Context, handler *http.ServeMux) error {
var roomUUID, roomToken string
if err := ParseBody(ctx, r.Body, &struct {
Token *string `json:"token"`
StageUUID *string `json:"sid"`
UserID *string `json:"userId"`
RoomUUID *string `json:"room"`
RoomToken *string `json:"roomToken"`
StageUUID *string `json:"sid"`
UserID *string `json:"userId"`
}{
Token: &token, StageUUID: &sid, UserID: &userID,
RoomUUID: &roomUUID, RoomToken: &roomToken,
Expand Down Expand Up @@ -2224,12 +2234,12 @@ func handleAITalkService(ctx context.Context, handler *http.ServeMux) error {
var roomUUID, roomToken string
if err := ParseBody(ctx, r.Body, &struct {
Token *string `json:"token"`
RoomUUID *string `json:"room"`
RoomToken *string `json:"roomToken"`
StageUUID *string `json:"sid"`
UserID *string `json:"userId"`
Username *string `json:"name"`
UserLanguage *string `json:"lang"`
RoomUUID *string `json:"room"`
RoomToken *string `json:"roomToken"`
}{
Token: &token, StageUUID: &sid, UserID: &userID,
Username: &username, UserLanguage: &userLanguage,
Expand Down
2 changes: 1 addition & 1 deletion platform/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
package main

// The version for platform.
const version = "v5.13.18"
const version = "v5.13.20"
2 changes: 1 addition & 1 deletion scripts/setup-aapanel/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"title": "SRS Stack",
"name": "srs_stack",
"ps": "SRS Stack is an all-in-one, out-of-the-box, and open-source video solution for creating online video services, including live streaming and WebRTC, on the cloud or through self-hosting. Built with SRS, FFmpeg, and WebRTC, it supports various protocols and offers features like authentication, multi-platform streaming, recording, transcoding, virtual live events, transcription, automatic HTTPS, and HTTP Open API.",
"versions": "5.13.18",
"versions": "5.13.20",
"checks": "/www/server/panel/plugin/srs_stack",
"author": "Winlin",
"home": "https://github.com/ossrs/srs-stack"
Expand Down
2 changes: 1 addition & 1 deletion scripts/setup-bt/info.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"title": "SRS音视频服务器",
"name": "srs_stack",
"ps": "SRS Stack让你一键拥有自己的视频云解决方案,可以在云上或私有化部署,支持丰富的音视频协议,提供鉴权、私人直播间、多平台转播、录制、转码、虚拟直播、AI字幕、自动HTTPS、开放API等丰富功能,基于SRS、FFmpeg和WebRTC构建。",
"versions": "5.13.18",
"versions": "5.13.20",
"checks": "/www/server/panel/plugin/srs_stack",
"author": "Winlin",
"home": "https://github.com/ossrs/srs-stack"
Expand Down
2 changes: 1 addition & 1 deletion scripts/setup-droplet/srs.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"do_token": "{{env `DIGITALOCEAN_TOKEN`}}",
"image_name": "srs-5-snapshot-{{timestamp}}",
"application_name": "SRS",
"application_version": "5.13.18"
"application_version": "5.13.20"
},
"sensitive-variables": ["do_token"],
"builders": [
Expand Down
2 changes: 2 additions & 0 deletions scripts/tools/secret.sh
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ if [[ ! -z $SRS_PLATFORM_SECRET ]]; then
if [[ ! -z $OUTPUT ]]; then
echo "SRS_PLATFORM_SECRET=$SRS_PLATFORM_SECRET" > $OUTPUT
echo "MGMT_PASSWORD=$MGMT_PASSWORD" >> $OUTPUT
# For local development OpenAI service test. Ignored by production, because there is no source .env file.
if [[ -f ~/git/issues-translation/.env ]]; then cat ~/git/issues-translation/.env |grep OPENAI >> $OUTPUT; fi
fi
exit 0
fi
Expand Down
4 changes: 2 additions & 2 deletions test/media_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ func TestMedia_WithStream_PublishRtmpPlayHls_NoHlsCtx(t *testing.T) {

// Check the HLS playlist, should with hls context.
var body string
if err := NewApi().Request(ctx, hlsStreamURL, nil, true, &body); err != nil {
if err := NewApi().Request(ctx, hlsStreamURL, nil, false, &body); err != nil {
r5 = err
return
}
Expand Down Expand Up @@ -609,7 +609,7 @@ func TestMedia_WithStream_PublishRtmpPlayHls_WithHlsCtx(t *testing.T) {

// Check the HLS playlist, should with hls context.
var body string
if err := NewApi().Request(ctx, hlsStreamURL, nil, true, &body); err != nil {
if err := NewApi().Request(ctx, hlsStreamURL, nil, false, &body); err != nil {
r5 = err
return
}
Expand Down
Loading

0 comments on commit a52c9fc

Please sign in to comment.