// Copyright (c) Microsoft. All rights reserved.
using Microsoft.SemanticKernel;
using Resources;
namespace PromptTemplates;
///
/// This example demonstrates how to use ChatPrompt XML format with Audio content types.
/// The new ChatPrompt parser supports <audio> tags for various audio formats like WAV, MP3, etc.
///
public class OpenAI_ChatPromptWithAudio(ITestOutputHelper output) : BaseTest(output)
{
///
/// Demonstrates using audio content in ChatPrompt XML format with data URI.
///
[Fact]
public async Task ChatPromptWithAudioContentDataUri()
{
// Load an audio file and convert to base64 data URI
var audioBytes = await EmbeddedResource.ReadAllAsync("test_audio.wav");
var audioBase64 = Convert.ToBase64String(audioBytes.ToArray());
var dataUri = $"data:audio/wav;base64,{audioBase64}";
var chatPrompt = $"""
You are a helpful assistant that can analyze audio content.Please transcribe and analyze this audio file.
""";
var kernel = Kernel.CreateBuilder()
.AddOpenAIChatCompletion(
modelId: "gpt-4o-audio-preview", // Use audio-capable model
apiKey: TestConfiguration.OpenAI.ApiKey)
.Build();
var chatFunction = kernel.CreateFunctionFromPrompt(chatPrompt);
var result = await kernel.InvokeAsync(chatFunction);
Console.WriteLine("=== ChatPrompt with Audio Content (Data URI) ===");
Console.WriteLine("Prompt:");
Console.WriteLine(chatPrompt);
Console.WriteLine("\nResult:");
Console.WriteLine(result);
}
///
/// Demonstrates a conversation flow using ChatPrompt with audio content across multiple messages.
///
[Fact]
public async Task ChatPromptConversationWithAudioContent()
{
var audioBytes = await EmbeddedResource.ReadAllAsync("test_audio.wav");
var audioBase64 = Convert.ToBase64String(audioBytes.ToArray());
var audioDataUri = $"data:audio/wav;base64,{audioBase64}";
var chatPrompt = $"""
You are a helpful assistant that specializes in audio analysis and transcription.I have an audio recording that I need help with. Can you analyze it?I can help you analyze this audio recording. Let me transcribe and examine its content for you. What specific information are you looking for from this audio?Can you provide a full transcription and also identify any background sounds or audio quality issues?
""";
var kernel = Kernel.CreateBuilder()
.AddOpenAIChatCompletion(
modelId: "gpt-4o-audio-preview", // Use audio-capable model
apiKey: TestConfiguration.OpenAI.ApiKey)
.Build();
var chatFunction = kernel.CreateFunctionFromPrompt(chatPrompt);
var result = await kernel.InvokeAsync(chatFunction);
Console.WriteLine("=== ChatPrompt Conversation with Audio Content ===");
Console.WriteLine("Prompt (showing conversation flow):");
Console.WriteLine(chatPrompt[..Math.Min(800, chatPrompt.Length)] + "...");
Console.WriteLine("\nResult:");
Console.WriteLine(result);
}
}