diff --git a/sdk/ai/azopenai/CHANGELOG.md b/sdk/ai/azopenai/CHANGELOG.md index 8cba1e8685ed..17324cfcb95d 100644 --- a/sdk/ai/azopenai/CHANGELOG.md +++ b/sdk/ai/azopenai/CHANGELOG.md @@ -8,6 +8,9 @@ ### Bugs Fixed +- `AudioTranscriptionOptions.Filename` and `AudioTranslationOptions.Filename` fields are now properly propagated, allowing + for disambiguating the format of an audio file when OpenAI can't detect it. (PR#22210) + ### Other Changes ## 0.4.0 (2023-12-11) diff --git a/sdk/ai/azopenai/assets.json b/sdk/ai/azopenai/assets.json index 0326a3ded597..7cbfc913d854 100644 --- a/sdk/ai/azopenai/assets.json +++ b/sdk/ai/azopenai/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "go", "TagPrefix": "go/ai/azopenai", - "Tag": "go/ai/azopenai_b42da78821" + "Tag": "go/ai/azopenai_85a01b7ac6" } diff --git a/sdk/ai/azopenai/client_audio_test.go b/sdk/ai/azopenai/client_audio_test.go index f49a9e4065ad..fb6d3a2e1dd6 100644 --- a/sdk/ai/azopenai/client_audio_test.go +++ b/sdk/ai/azopenai/client_audio_test.go @@ -8,7 +8,9 @@ package azopenai_test import ( "context" + "fmt" "os" + "path/filepath" "testing" "github.com/Azure/azure-sdk-for-go/sdk/ai/azopenai" @@ -24,20 +26,27 @@ func TestClient_GetAudioTranscription_AzureOpenAI(t *testing.T) { func TestClient_GetAudioTranscription_OpenAI(t *testing.T) { client := newOpenAIClientForTest(t) - mp3Bytes, err := os.ReadFile(`testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.mp3`) - require.NoError(t, err) - - args := newTranscriptionOptions(azopenai.AudioTranscriptionFormatVerboseJSON, openAI.Whisper.Model, mp3Bytes) - transcriptResp, err := client.GetAudioTranscription(context.Background(), args, nil) - require.NoError(t, err) - require.NotEmpty(t, transcriptResp) + testFiles := []string{ + `testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.m4a`, + `testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.mp3`, + } - require.NotEmpty(t, *transcriptResp.Text) - require.Greater(t, *transcriptResp.Duration, float32(0.0)) - require.NotEmpty(t, *transcriptResp.Language) - require.NotEmpty(t, transcriptResp.Segments) - require.NotEmpty(t, transcriptResp.Segments[0]) - require.NotEmpty(t, transcriptResp.Task) + for _, audioFile := range testFiles { + t.Run(fmt.Sprintf("verbose (%s)", filepath.Ext(audioFile)), func(t *testing.T) { + args := newTranscriptionOptions(azopenai.AudioTranscriptionFormatVerboseJSON, openAI.Whisper.Model, audioFile) + + transcriptResp, err := client.GetAudioTranscription(context.Background(), args, nil) + require.NoError(t, err) + require.NotEmpty(t, transcriptResp) + + require.NotEmpty(t, *transcriptResp.Text) + require.Greater(t, *transcriptResp.Duration, float32(0.0)) + require.NotEmpty(t, *transcriptResp.Language) + require.NotEmpty(t, transcriptResp.Segments) + require.NotEmpty(t, transcriptResp.Segments[0]) + require.NotEmpty(t, transcriptResp.Task) + }) + } } func TestClient_GetAudioTranslation_AzureOpenAI(t *testing.T) { @@ -48,154 +57,192 @@ func TestClient_GetAudioTranslation_AzureOpenAI(t *testing.T) { func TestClient_GetAudioTranslation_OpenAI(t *testing.T) { client := newOpenAIClientForTest(t) - mp3Bytes, err := os.ReadFile(`testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.mp3`) - require.NoError(t, err) - - args := newTranslationOptions(azopenai.AudioTranslationFormatVerboseJSON, openAI.Whisper.Model, mp3Bytes) - transcriptResp, err := client.GetAudioTranslation(context.Background(), args, nil) - require.NoError(t, err) - require.NotEmpty(t, transcriptResp) + testFiles := []string{ + `testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.m4a`, + `testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.mp3`, + } - require.NotEmpty(t, *transcriptResp.Text) - require.Greater(t, *transcriptResp.Duration, float32(0.0)) - require.NotEmpty(t, *transcriptResp.Language) - require.NotEmpty(t, transcriptResp.Segments) - require.NotEmpty(t, transcriptResp.Segments[0]) - require.NotEmpty(t, transcriptResp.Task) + for _, audioFile := range testFiles { + t.Run(fmt.Sprintf("verbose (%s)", filepath.Ext(audioFile)), func(t *testing.T) { + args := newTranslationOptions(azopenai.AudioTranslationFormatVerboseJSON, openAI.Whisper.Model, audioFile) + transcriptResp, err := client.GetAudioTranslation(context.Background(), args, nil) + require.NoError(t, err) + require.NotEmpty(t, transcriptResp) + + require.NotEmpty(t, *transcriptResp.Text) + require.Greater(t, *transcriptResp.Duration, float32(0.0)) + require.NotEmpty(t, *transcriptResp.Language) + require.NotEmpty(t, transcriptResp.Segments) + require.NotEmpty(t, transcriptResp.Segments[0]) + require.NotEmpty(t, transcriptResp.Task) + }) + } } func runTranscriptionTests(t *testing.T, client *azopenai.Client, model string) { - mp3Bytes, err := os.ReadFile(`testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.mp3`) - require.NoError(t, err) - - t.Run(string(azopenai.AudioTranscriptionFormatText), func(t *testing.T) { - args := newTranscriptionOptions(azopenai.AudioTranscriptionFormatText, model, mp3Bytes) - transcriptResp, err := client.GetAudioTranscription(context.Background(), args, nil) - require.NoError(t, err) - require.NotEmpty(t, transcriptResp) - - require.NotEmpty(t, *transcriptResp.Text) - requireEmptyAudioTranscription(t, transcriptResp.AudioTranscription) - }) - - t.Run(string(azopenai.AudioTranscriptionFormatSrt), func(t *testing.T) { - args := newTranscriptionOptions(azopenai.AudioTranscriptionFormatSrt, model, mp3Bytes) - transcriptResp, err := client.GetAudioTranscription(context.Background(), args, nil) - require.NoError(t, err) - require.NotEmpty(t, transcriptResp) - - require.NotEmpty(t, *transcriptResp.Text) - requireEmptyAudioTranscription(t, transcriptResp.AudioTranscription) - }) - - t.Run(string(azopenai.AudioTranscriptionFormatVtt), func(t *testing.T) { - args := newTranscriptionOptions(azopenai.AudioTranscriptionFormatVtt, model, mp3Bytes) - transcriptResp, err := client.GetAudioTranscription(context.Background(), args, nil) - require.NoError(t, err) - require.NotEmpty(t, transcriptResp) - - require.NotEmpty(t, *transcriptResp.Text) - requireEmptyAudioTranscription(t, transcriptResp.AudioTranscription) - }) - - t.Run(string(azopenai.AudioTranscriptionFormatVerboseJSON), func(t *testing.T) { - args := newTranscriptionOptions(azopenai.AudioTranscriptionFormatVerboseJSON, model, mp3Bytes) - transcriptResp, err := client.GetAudioTranscription(context.Background(), args, nil) - require.NoError(t, err) - require.NotEmpty(t, transcriptResp) - - require.NotEmpty(t, *transcriptResp.Text) - require.Greater(t, *transcriptResp.Duration, float32(0.0)) - require.NotEmpty(t, *transcriptResp.Language) - require.NotEmpty(t, transcriptResp.Segments) - require.NotEmpty(t, transcriptResp.Segments[0]) - require.NotEmpty(t, transcriptResp.Task) - }) - - t.Run(string(azopenai.AudioTranscriptionFormatJSON), func(t *testing.T) { - args := newTranscriptionOptions(azopenai.AudioTranscriptionFormatJSON, model, mp3Bytes) - transcriptResp, err := client.GetAudioTranscription(context.Background(), args, nil) - require.NoError(t, err) - require.NotEmpty(t, transcriptResp) - - require.NotEmpty(t, *transcriptResp.Text) - requireEmptyAudioTranscription(t, transcriptResp.AudioTranscription) - }) + testFiles := []string{ + `testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.m4a`, + `testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.mp3`, + } + + for _, audioFile := range testFiles { + ext := filepath.Ext(audioFile) + + t.Run(fmt.Sprintf("%s (%s)", azopenai.AudioTranscriptionFormatText, ext), func(t *testing.T) { + args := newTranscriptionOptions(azopenai.AudioTranscriptionFormatText, model, audioFile) + transcriptResp, err := client.GetAudioTranscription(context.Background(), args, nil) + require.NoError(t, err) + require.NotEmpty(t, transcriptResp) + + require.NotEmpty(t, *transcriptResp.Text) + requireEmptyAudioTranscription(t, transcriptResp.AudioTranscription) + }) + + t.Run(fmt.Sprintf("%s (%s)", azopenai.AudioTranscriptionFormatSrt, ext), func(t *testing.T) { + args := newTranscriptionOptions(azopenai.AudioTranscriptionFormatSrt, model, audioFile) + transcriptResp, err := client.GetAudioTranscription(context.Background(), args, nil) + require.NoError(t, err) + require.NotEmpty(t, transcriptResp) + + require.NotEmpty(t, *transcriptResp.Text) + requireEmptyAudioTranscription(t, transcriptResp.AudioTranscription) + }) + + t.Run(fmt.Sprintf("%s (%s)", azopenai.AudioTranscriptionFormatVtt, ext), func(t *testing.T) { + args := newTranscriptionOptions(azopenai.AudioTranscriptionFormatVtt, model, audioFile) + transcriptResp, err := client.GetAudioTranscription(context.Background(), args, nil) + require.NoError(t, err) + require.NotEmpty(t, transcriptResp) + + require.NotEmpty(t, *transcriptResp.Text) + requireEmptyAudioTranscription(t, transcriptResp.AudioTranscription) + }) + + t.Run(fmt.Sprintf("%s (%s)", azopenai.AudioTranscriptionFormatVerboseJSON, ext), func(t *testing.T) { + args := newTranscriptionOptions(azopenai.AudioTranscriptionFormatVerboseJSON, model, audioFile) + transcriptResp, err := client.GetAudioTranscription(context.Background(), args, nil) + require.NoError(t, err) + require.NotEmpty(t, transcriptResp) + + require.NotEmpty(t, *transcriptResp.Text) + require.Greater(t, *transcriptResp.Duration, float32(0.0)) + require.NotEmpty(t, *transcriptResp.Language) + require.NotEmpty(t, transcriptResp.Segments) + require.NotEmpty(t, transcriptResp.Segments[0]) + require.NotEmpty(t, transcriptResp.Task) + }) + + t.Run(fmt.Sprintf("%s (%s)", azopenai.AudioTranscriptionFormatJSON, ext), func(t *testing.T) { + args := newTranscriptionOptions(azopenai.AudioTranscriptionFormatJSON, model, audioFile) + transcriptResp, err := client.GetAudioTranscription(context.Background(), args, nil) + require.NoError(t, err) + require.NotEmpty(t, transcriptResp) + + require.NotEmpty(t, *transcriptResp.Text) + requireEmptyAudioTranscription(t, transcriptResp.AudioTranscription) + }) + } } func runTranslationTests(t *testing.T, client *azopenai.Client, model string) { - mp3Bytes, err := os.ReadFile(`testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.mp3`) - require.NoError(t, err) - - t.Run(string(azopenai.AudioTranscriptionFormatText), func(t *testing.T) { - args := newTranslationOptions(azopenai.AudioTranslationFormatText, model, mp3Bytes) - transcriptResp, err := client.GetAudioTranslation(context.Background(), args, nil) - require.NoError(t, err) - require.NotEmpty(t, transcriptResp) - - require.NotEmpty(t, *transcriptResp.Text) - requireEmptyAudioTranslation(t, transcriptResp.AudioTranslation) - }) - - t.Run(string(azopenai.AudioTranscriptionFormatSrt), func(t *testing.T) { - args := newTranslationOptions(azopenai.AudioTranslationFormatSrt, model, mp3Bytes) - transcriptResp, err := client.GetAudioTranslation(context.Background(), args, nil) - require.NoError(t, err) - require.NotEmpty(t, transcriptResp) - - require.NotEmpty(t, *transcriptResp.Text) - requireEmptyAudioTranslation(t, transcriptResp.AudioTranslation) - }) - - t.Run(string(azopenai.AudioTranscriptionFormatVtt), func(t *testing.T) { - args := newTranslationOptions(azopenai.AudioTranslationFormatVtt, model, mp3Bytes) - transcriptResp, err := client.GetAudioTranslation(context.Background(), args, nil) - require.NoError(t, err) - require.NotEmpty(t, transcriptResp) - - require.NotEmpty(t, *transcriptResp.Text) - requireEmptyAudioTranslation(t, transcriptResp.AudioTranslation) - }) - - t.Run(string(azopenai.AudioTranscriptionFormatVerboseJSON), func(t *testing.T) { - args := newTranslationOptions(azopenai.AudioTranslationFormatVerboseJSON, model, mp3Bytes) - transcriptResp, err := client.GetAudioTranslation(context.Background(), args, nil) - require.NoError(t, err) - require.NotEmpty(t, transcriptResp) - - require.NotEmpty(t, *transcriptResp.Text) - require.Greater(t, *transcriptResp.Duration, float32(0.0)) - require.NotEmpty(t, *transcriptResp.Language) - require.NotEmpty(t, transcriptResp.Segments) - require.NotEmpty(t, transcriptResp.Segments[0]) - require.NotEmpty(t, transcriptResp.Task) - }) - - t.Run(string(azopenai.AudioTranscriptionFormatJSON), func(t *testing.T) { - args := newTranslationOptions(azopenai.AudioTranslationFormatJSON, model, mp3Bytes) - transcriptResp, err := client.GetAudioTranslation(context.Background(), args, nil) - require.NoError(t, err) - require.NotEmpty(t, transcriptResp) - - require.NotEmpty(t, *transcriptResp.Text) - requireEmptyAudioTranslation(t, transcriptResp.AudioTranslation) - }) + testFiles := []string{ + `testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.m4a`, + `testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.mp3`, + } + + for _, audioFile := range testFiles { + ext := filepath.Ext(audioFile) + + t.Run(fmt.Sprintf("%s (%s)", azopenai.AudioTranscriptionFormatText, ext), func(t *testing.T) { + args := newTranslationOptions(azopenai.AudioTranslationFormatText, model, audioFile) + transcriptResp, err := client.GetAudioTranslation(context.Background(), args, nil) + require.NoError(t, err) + require.NotEmpty(t, transcriptResp) + + require.NotEmpty(t, *transcriptResp.Text) + requireEmptyAudioTranslation(t, transcriptResp.AudioTranslation) + }) + + t.Run(fmt.Sprintf("%s (%s)", azopenai.AudioTranscriptionFormatSrt, ext), func(t *testing.T) { + args := newTranslationOptions(azopenai.AudioTranslationFormatSrt, model, audioFile) + transcriptResp, err := client.GetAudioTranslation(context.Background(), args, nil) + require.NoError(t, err) + require.NotEmpty(t, transcriptResp) + + require.NotEmpty(t, *transcriptResp.Text) + requireEmptyAudioTranslation(t, transcriptResp.AudioTranslation) + }) + + t.Run(fmt.Sprintf("%s (%s)", azopenai.AudioTranscriptionFormatVtt, ext), func(t *testing.T) { + args := newTranslationOptions(azopenai.AudioTranslationFormatVtt, model, audioFile) + transcriptResp, err := client.GetAudioTranslation(context.Background(), args, nil) + require.NoError(t, err) + require.NotEmpty(t, transcriptResp) + + require.NotEmpty(t, *transcriptResp.Text) + requireEmptyAudioTranslation(t, transcriptResp.AudioTranslation) + }) + + t.Run(fmt.Sprintf("%s (%s)", azopenai.AudioTranscriptionFormatVerboseJSON, ext), func(t *testing.T) { + args := newTranslationOptions(azopenai.AudioTranslationFormatVerboseJSON, model, audioFile) + transcriptResp, err := client.GetAudioTranslation(context.Background(), args, nil) + require.NoError(t, err) + require.NotEmpty(t, transcriptResp) + + require.NotEmpty(t, *transcriptResp.Text) + require.Greater(t, *transcriptResp.Duration, float32(0.0)) + require.NotEmpty(t, *transcriptResp.Language) + require.NotEmpty(t, transcriptResp.Segments) + require.NotEmpty(t, transcriptResp.Segments[0]) + require.NotEmpty(t, transcriptResp.Task) + }) + + t.Run(fmt.Sprintf("%s (%s)", azopenai.AudioTranscriptionFormatJSON, ext), func(t *testing.T) { + args := newTranslationOptions(azopenai.AudioTranslationFormatJSON, model, audioFile) + transcriptResp, err := client.GetAudioTranslation(context.Background(), args, nil) + require.NoError(t, err) + require.NotEmpty(t, transcriptResp) + + require.NotEmpty(t, *transcriptResp.Text) + requireEmptyAudioTranslation(t, transcriptResp.AudioTranslation) + }) + } } -func newTranscriptionOptions(format azopenai.AudioTranscriptionFormat, model string, mp3Bytes []byte) azopenai.AudioTranscriptionOptions { +func newTranscriptionOptions(format azopenai.AudioTranscriptionFormat, model string, path string) azopenai.AudioTranscriptionOptions { + audioBytes, err := os.ReadFile(path) + + if err != nil { + panic(err) + } + return azopenai.AudioTranscriptionOptions{ DeploymentName: to.Ptr(model), - File: mp3Bytes, + File: audioBytes, + Filename: &path, ResponseFormat: &format, Language: to.Ptr("en"), Temperature: to.Ptr[float32](0.0), } } -func newTranslationOptions(format azopenai.AudioTranslationFormat, model string, mp3Bytes []byte) azopenai.AudioTranslationOptions { +func newTranslationOptions(format azopenai.AudioTranslationFormat, model string, path string) azopenai.AudioTranslationOptions { + audioBytes, err := os.ReadFile(path) + + if err != nil { + panic(err) + } + + var filename *string + + if filepath.Ext(path) != ".mp3" { + filename = &path + } + return azopenai.AudioTranslationOptions{ DeploymentName: to.Ptr(model), - File: mp3Bytes, + File: audioBytes, + Filename: filename, ResponseFormat: &format, Temperature: to.Ptr[float32](0.0), } diff --git a/sdk/ai/azopenai/client_completions_test.go b/sdk/ai/azopenai/client_completions_test.go index 13242d371f2c..96a408b28425 100644 --- a/sdk/ai/azopenai/client_completions_test.go +++ b/sdk/ai/azopenai/client_completions_test.go @@ -45,33 +45,23 @@ func testGetCompletions(t *testing.T, client *azopenai.Client, isAzure bool) { skipNowIfThrottled(t, err) require.NoError(t, err) - want := azopenai.GetCompletionsResponse{ - Completions: azopenai.Completions{ - Choices: []azopenai.Choice{ - { - Text: to.Ptr("\n\nAzure OpenAI is a platform from Microsoft that provides access to OpenAI's artificial intelligence (AI) technologies. It enables developers to build, train, and deploy AI models in the cloud. Azure OpenAI provides access to OpenAI's powerful AI technologies, such as GPT-3, which can be used to create natural language processing (NLP) applications, computer vision models, and reinforcement learning models."), - Index: to.Ptr(int32(0)), - FinishReason: to.Ptr(azopenai.CompletionsFinishReason("stop")), - LogProbs: nil, - }, - }, - Usage: &azopenai.CompletionsUsage{ - CompletionTokens: to.Ptr(int32(85)), - PromptTokens: to.Ptr(int32(6)), - TotalTokens: to.Ptr(int32(91)), - }, - }, - } + // we'll do a general check here - as models change the answers can also change, token usages are different, + // etc... So we'll just make sure data is coming back and is reasonable. + require.NotZero(t, *resp.Completions.Usage.PromptTokens) + require.NotZero(t, *resp.Completions.Usage.CompletionTokens) + require.NotZero(t, *resp.Completions.Usage.TotalTokens) + require.Equal(t, int32(0), *resp.Completions.Choices[0].Index) + require.Equal(t, azopenai.CompletionsFinishReasonStopped, *resp.Completions.Choices[0].FinishReason) + + require.NotEmpty(t, *resp.Completions.Choices[0].Text) if isAzure { - want.Choices[0].ContentFilterResults = (*azopenai.ContentFilterResultsForChoice)(safeContentFilter) - want.PromptFilterResults = []azopenai.ContentFilterResultsForPrompt{ - {PromptIndex: to.Ptr[int32](0), ContentFilterResults: safeContentFilterResultDetailsForPrompt}, - } + require.Equal(t, safeContentFilter, resp.Completions.Choices[0].ContentFilterResults) + require.Equal(t, []azopenai.ContentFilterResultsForPrompt{ + { + PromptIndex: to.Ptr[int32](0), + ContentFilterResults: safeContentFilterResultDetailsForPrompt, + }}, resp.PromptFilterResults) } - want.ID = resp.Completions.ID - want.Created = resp.Completions.Created - - require.Equal(t, want, resp) } diff --git a/sdk/ai/azopenai/client_shared_test.go b/sdk/ai/azopenai/client_shared_test.go index 5651136e5792..400ddaa01f57 100644 --- a/sdk/ai/azopenai/client_shared_test.go +++ b/sdk/ai/azopenai/client_shared_test.go @@ -246,8 +246,8 @@ func initEnvVars() { openAI.Vision = azureOpenAI.Vision - azureOpenAI.Completions = "text-davinci-003" - openAI.Completions = "text-davinci-003" + azureOpenAI.Completions = "gpt-35-turbo-instruct" + openAI.Completions = "gpt-3.5-turbo-instruct" azureOpenAI.ChatCompletions = "gpt-35-turbo-0613" azureOpenAI.ChatCompletionsLegacyFunctions = "gpt-4-0613" diff --git a/sdk/ai/azopenai/custom_client_audio.go b/sdk/ai/azopenai/custom_client_audio.go index caf80ef65768..d9ce56f5177d 100644 --- a/sdk/ai/azopenai/custom_client_audio.go +++ b/sdk/ai/azopenai/custom_client_audio.go @@ -44,6 +44,7 @@ func (client *Client) GetAudioTranscription(ctx context.Context, body AudioTrans audioStream := streaming.NopCloser(bytes.NewReader(body.File)) resp, err := client.getAudioTranscriptionInternal(ctx, getDeployment(body), audioStream, &getAudioTranscriptionInternalOptions{ + Filename: body.Filename, Language: body.Language, Model: body.DeploymentName, Prompt: body.Prompt, @@ -79,6 +80,7 @@ func (client *Client) GetAudioTranslation(ctx context.Context, body AudioTransla audioStream := streaming.NopCloser(bytes.NewReader(body.File)) resp, err := client.getAudioTranslationInternal(ctx, getDeployment(body), audioStream, &getAudioTranslationInternalOptions{ + Filename: body.Filename, Model: body.DeploymentName, Prompt: body.Prompt, ResponseFormat: body.ResponseFormat, @@ -106,7 +108,20 @@ func setMultipartFormData[T getAudioTranscriptionInternalOptions | getAudioTrans return err } - if err := writeContent("file", "audio.mp3", file); err != nil { + var filename = "audio.mp3" + + switch opt := any(options).(type) { + case getAudioTranscriptionInternalOptions: + if opt.Filename != nil { + filename = *opt.Filename + } + case getAudioTranslationInternalOptions: + if opt.Filename != nil { + filename = *opt.Filename + } + } + + if err := writeContent("file", filename, file); err != nil { return err } diff --git a/sdk/ai/azopenai/custom_client_test.go b/sdk/ai/azopenai/custom_client_test.go index 9d851d213171..7b024096c41c 100644 --- a/sdk/ai/azopenai/custom_client_test.go +++ b/sdk/ai/azopenai/custom_client_test.go @@ -137,9 +137,8 @@ func testGetCompletionsStream(t *testing.T, client *azopenai.Client, tv testVars } } got := sb.String() - const want = "\n\nAzure OpenAI is a platform from Microsoft that provides access to OpenAI's artificial intelligence (AI) technologies. It enables developers to build, train, and deploy AI models in the cloud. Azure OpenAI provides access to OpenAI's powerful AI technologies, such as GPT-3, which can be used to create natural language processing (NLP) applications, computer vision models, and reinforcement learning models." - require.Equal(t, want, got) + require.NotEmpty(t, got) // there's no strict requirement of how the response is streamed so just // choosing something that's reasonable but will be lower than typical usage diff --git a/sdk/ai/azopenai/testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.m4a b/sdk/ai/azopenai/testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.m4a new file mode 100644 index 000000000000..716d6d206746 Binary files /dev/null and b/sdk/ai/azopenai/testdata/sampledata_audiofiles_myVoiceIsMyPassportVerifyMe01.m4a differ