Saturday, April 13, 2024

Azure OpenAI Chat and DALL-E in C# and Python

Azure OpenAI Chat in C#:
// Install the .NET library via NuGet: dotnet add package Azure.AI.OpenAI --version 1.0.0-beta.5
 
using System;
using System.Threading.Tasks;
using Azure;
using Azure.AI.OpenAI;
namespace ConsoleApp
{
    internal class Program
    {
        static async Task Main(string[] args)
        {
            OpenAIClient client = new OpenAIClient(new Uri("https://xxx-xxxxxxxxx.openai.azure.com/"),
                new AzureKeyCredential("123456895a5bcef0hijklmnopqrstuvwx"));
 
            Response<ChatCompletions> responseWithoutStream = await client.GetChatCompletionsAsync("model_deployment_name",
                new ChatCompletionsOptions()
                {
                    Messages = {
                        new ChatMessage(ChatRole.System, @"You are an AI assistant that helps people find information."),
                        new ChatMessage(ChatRole.User, @"Summarize:
                        Full-stack developer with Azure Development")
                    },
                    Temperature = (float)0.7,
                    MaxTokens = 800,
                    NucleusSamplingFactor = (float)0.95,
                    FrequencyPenalty = 0,
                    PresencePenalty = 0,
                });
            ChatCompletions response = responseWithoutStream.Value;
            Console.WriteLine(response.Choices[0].Message.Content);
            Console.ReadKey();
        }
    }
}

Azure OpenAI Chat in Python:

from openai import AzureOpenAI

client = AzureOpenAI(
    azure_endpoint = "https://xxx-xxxxxxxxx.openai.azure.com/",
    api_key = "123456895a5bcef0hijklmnopqrstuvwx",  
    api_version="2024-02-15-preview"
    )

message_text = [
    {"role":"system",
     "content":"You are an AI assistant that helps people find information."},
    {"role":"user","content":"Summary  
\nFull-stack developer with Azure Development"}
    ]

completion = client.chat.completions.create(
    model="model_deployment_name",
    messages = message_text,
    temperature=0.7,
    max_tokens=800,
    top_p=0.95,
    frequency_penalty=0,
    presence_penalty=0,
    stop=None
    )

print(completion.choices[0].message.content)



Azure OpenAI DALL-E 3 in Python:
# Note: DALL-E 3 requires version 1.0.0 of the openai-python library or later
# !pip install openai
import os
from openai import AzureOpenAI
import json

client = AzureOpenAI(
    api_version="2024-02-01",
    azure_endpoint="https://mydemo.openai.azure.com/",
    api_key='key'  # os.environ["AZURE_OPENAI_API_KEY"],
)

result = client.images.generate(
    model="Dalle3", # the name of your DALL-E 3 deployment
    prompt="A relisting image of a futuristic skyline consisting of the world's
tallest building ",
    n=1
)

image_url = json.loads(result.model_dump_json())['data'][0]['url']
print(image_url)









































Use Azure OpenAI APIs in your app c#:

// {
//     "AzureOAIEndpoint": "https://rg1openailab.openai.azure.com/",
//     "AzureOAIKey": "e9742dc25fd446a38492fecb6f3c8e3d",
//     "AzureOAIDeploymentName": "gpt35turbo16kdemo"
// }

//  dotnet add package Azure.AI.OpenAI --version 1.0.0-beta.14
using System.Text;
using System.Text.Json;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Azure;
using Azure.AI.OpenAI;

IConfiguration config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json").Build();
string? oaiEndpoint = config["AzureOAIEndpoint"];
string? oaiKey = config["AzureOAIKey"];
string? oaiDeploymentName = config["AzureOAIDeploymentName"];

if (string.IsNullOrEmpty(oaiEndpoint) || string.IsNullOrEmpty(oaiKey) ||
string.IsNullOrEmpty(oaiDeploymentName))
{
    Console.WriteLine("Please check your appsettings.json file for missing
or incorrect values.");
    return;
}

OpenAIClient client = new OpenAIClient(new Uri(oaiEndpoint),
new AzureKeyCredential(oaiKey));
string systemMessage = "I am a hiking enthusiast named Forest who helps
people discover hikes in their area. If no area is specified, I will
default to near Rainier National Park. I will then provide three
suggestions for nearby hikes that vary in length. I will also share an
interesting fact about the local nature on the hikes when making a
recommendation.";
var messagesList = new List<ChatRequestMessage>()
{
    new ChatRequestSystemMessage(systemMessage),
};

do
{
    Console.WriteLine("Enter your prompt text (or type 'quit' to exit): ");
    string? inputText = Console.ReadLine();
    if (inputText == "quit") break;

    if (inputText == null)
    {
        Console.WriteLine("Please enter a prompt.");
        continue;
    }

    Console.WriteLine("\nSending request for summary to Azure OpenAI
endpoint...\n\n");
    messagesList.Add(new ChatRequestUserMessage(inputText));

    ChatCompletionsOptions chatCompletionsOptions = new
ChatCompletionsOptions()
    {
        MaxTokens = 1200,
        Temperature = 0.7f,
        DeploymentName = oaiDeploymentName
    };

    foreach (ChatRequestMessage chatMessage in messagesList)
    {
        chatCompletionsOptions.Messages.Add(chatMessage);
    }

    ChatCompletions response =
client.GetChatCompletions(chatCompletionsOptions);
    string completion = response.Choices[0].Message.Content;
    messagesList.Add(new ChatRequestAssistantMessage(completion));
    Console.WriteLine("Response: " + completion + "\n");
} while (true);





Utilize prompt engineering in your app in c#:

// {
//     "AzureOAIEndpoint": "https://openailab.openai.azure.com/",
//     "AzureOAIKey": "e8762dc15fd441a68495fecb7f3c8e3d",
//     "AzureOAIDeploymentName": "gpt35turbo16kdemo"
// }
//  dotnet add package Azure.AI.OpenAI --version 1.0.0-beta.14
//dotnet run - to run app
using System.Text;
using System.Text.Json;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Azure;
using Azure.AI.OpenAI;

IConfiguration config = new ConfigurationBuilder().
AddJsonFile("appsettings.json").Build();
string? oaiEndpoint = config["AzureOAIEndpoint"];
string? oaiKey = config["AzureOAIKey"];
string? oaiDeploymentName = config["AzureOAIDeploymentName"];
bool printFullResponse = true;

do
{
    Console.WriteLine("-----------\nPausing the app to allow you to change
the system prompt.\nPress any key to continue...");
    Console.ReadKey();
    Console.WriteLine("\nUsing system message from system.txt");
    string systemMessage = System.IO.File.ReadAllText("system.txt");
    systemMessage = systemMessage.Trim();
    Console.WriteLine("\nEnter user message or type 'quit' to exit:");
    string userMessage = Console.ReadLine() ?? "";
    userMessage = userMessage.Trim();
    if (systemMessage.ToLower() == "quit" ||
userMessage.ToLower() == "quit")
    {
        break;
    }
    else if (string.IsNullOrEmpty(systemMessage) ||
string.IsNullOrEmpty(userMessage))
    {
        Console.WriteLine("Please enter a system and user message.");
        continue;
    }
    else
    {
        await GetResponseFromOpenAI(systemMessage, userMessage);
    }
} while (true);

async Task GetResponseFromOpenAI(string systemMessage, string userMessage)
{
    Console.WriteLine("\nSending prompt to Azure OpenAI endpoint...\n\n");
    if (string.IsNullOrEmpty(oaiEndpoint) || string.IsNullOrEmpty(oaiKey)
|| string.IsNullOrEmpty(oaiDeploymentName))
    {
        Console.WriteLine("Please check your appsettings.json file for
missing or incorrect values.");
        return;
    }
    OpenAIClient client = new OpenAIClient(new Uri(oaiEndpoint),
new AzureKeyCredential(oaiKey));
    Console.WriteLine("\nAdding grounding context from grounding.txt");
    string groundingText = System.IO.File.ReadAllText("grounding.txt");
    userMessage = groundingText + userMessage;
    var chatCompletionsOptions = new ChatCompletionsOptions()
    {
        Messages =
     {
         new ChatRequestSystemMessage(systemMessage),
         new ChatRequestUserMessage(userMessage)
     },
        Temperature = 0.7f,
        MaxTokens = 800,
        DeploymentName = oaiDeploymentName
    };
    Response<ChatCompletions> response =
await client.GetChatCompletionsAsync(chatCompletionsOptions);
    ChatCompletions completions = response.Value;
    string completion = completions.Choices[0].Message.Content;
    if (printFullResponse)
    {
        Console.WriteLine($"\nFull response:
{JsonSerializer.Serialize(completions, new JsonSerializerOptions
{ WriteIndented = true })}\n\n");
    }
    Console.WriteLine($"\nResponse:\n{completion}\n\n");
}


Generate and improve code with Azure OpenAI Service in c#:
// {
//     "AzureOAIEndpoint": "https://rg1openailab.openai.azure.com/",
//     "AzureOAIKey": "e9712dc11fd141a31491fecb1f3c8e3d",
//     "AzureOAIDeploymentName": "gpt35turbo16kdemo"
// }

// dotnet add package Azure.AI.OpenAI --version 1.0.0-beta.14
//dotnet run

using System.Text;
using System.Text.Json;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Azure;
using Azure.AI.OpenAI;

IConfiguration config = new ConfigurationBuilder().
AddJsonFile("appsettings.json").Build();
string? oaiEndpoint = config["AzureOAIEndpoint"];
string? oaiKey = config["AzureOAIKey"];
string? oaiDeploymentName = config["AzureOAIDeploymentName"];
string command;
bool printFullResponse = false;
do
{
    Console.WriteLine("\n1: Add comments to my function\n" +
    "2: Write unit tests for my function\n" +
    "3: Fix my Go Fish game\n" +
    "\"quit\" to exit the program\n\n" +
    "Enter a number to select a task:");

    command = Console.ReadLine() ?? "";
    if (command == "quit")
    {
        Console.WriteLine("Exiting program...");
        break;
    }
    Console.WriteLine("\nEnter a prompt: ");
    string userPrompt = Console.ReadLine() ?? "";
    string codeFile = "";
    if (command == "1" || command == "2")
        codeFile = System.IO.File
.ReadAllText("../sample-code/function/function.cs");
    else if (command == "3")
        codeFile = System.IO.File
.ReadAllText("../sample-code/go-fish/go-fish.cs");
    else
    {
        Console.WriteLine("Invalid input. Please try again.");
        continue;
    }
    userPrompt += codeFile;
    await GetResponseFromOpenAI(userPrompt);
} while (true);

async Task GetResponseFromOpenAI(string prompt)
{
    Console.WriteLine("\nCalling Azure OpenAI to generate code...\n\n");
    if (string.IsNullOrEmpty(oaiEndpoint) ||
string.IsNullOrEmpty(oaiKey) || string.IsNullOrEmpty(oaiDeploymentName))
    {
        Console.WriteLine("Please check your appsettings.json
file for missing or incorrect values.");
        return;
    }
    OpenAIClient client = new OpenAIClient(new Uri(oaiEndpoint),
new AzureKeyCredential(oaiKey));
    string systemPrompt = "You are a helpful AI assistant that helps
programmers write code.";
    string userPrompt = prompt;
    var chatCompletionsOptions = new ChatCompletionsOptions()
    {
        Messages =
     {
         new ChatRequestSystemMessage(systemPrompt),
         new ChatRequestUserMessage(userPrompt)
     },
        Temperature = 0.7f,
        MaxTokens = 1000,
        DeploymentName = oaiDeploymentName
    };
    Response<ChatCompletions> response =
await client.GetChatCompletionsAsync(chatCompletionsOptions);
    ChatCompletions completions = response.Value;
    string completion = completions.Choices[0].Message.Content;
    if (printFullResponse)
    {
        Console.WriteLine($"\nFull response:
{JsonSerializer.Serialize(completions, new JsonSerializerOptions
{ WriteIndented = true })}\n\n");
    }
    System.IO.File.WriteAllText("result/app.txt", completion);
    Console.WriteLine($"\nResponse written to result/app.txt\n\n");
}



Generate images with a DALL-E model - Use the REST API to generate images in c#:
// {
//     "AzureOAIEndpoint": "https://rg1openailab.openai.azure.com/",
//     "AzureOAIKey": "e1742dc35fd341a48592fecb6f7c8e3d"
// }
using System;
using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web;
using Microsoft.Extensions.Configuration;
using System.Threading.Tasks;

namespace generate_image
{
    class Program
    {
        private static string? aoaiEndpoint;
        private static string? aoaiKey;
        static async Task Main(string[] args)
        {
            try
            {
                IConfigurationBuilder builder =
new ConfigurationBuilder().AddJsonFile("appsettings.json");
                IConfigurationRoot configuration = builder.Build();
                aoaiEndpoint = configuration["AzureOAIEndpoint"] ?? "";
                aoaiKey = configuration["AzureOAIKey"] ?? "";
                Console.Clear();
                Console.WriteLine("Enter a prompt to request an image:");
                string prompt = Console.ReadLine() ?? "";

                using (var client = new HttpClient())
                {
                    var contentType =
new MediaTypeWithQualityHeaderValue("application/json");
                    var api = "openai/deployments/dalle3/images/generations
?api-version=2024-02-15-preview";
                    client.BaseAddress = new Uri(aoaiEndpoint);
                    client.DefaultRequestHeaders.Accept.Add(contentType);
                    client.DefaultRequestHeaders.Add("api-key", aoaiKey);
                    var data = new
                    {
                        prompt = prompt,
                        n = 1,
                        size = "1024x1024"
                    };
                    var jsonData = JsonSerializer.Serialize(data);
                    var contentData = new StringContent(jsonData,
Encoding.UTF8, "application/json");
                    var response = await client.PostAsync(api, contentData);
                    var stringResponse =
await response.Content.ReadAsStringAsync();
                    JsonNode contentNode = JsonNode.Parse(stringResponse)!;
                    JsonNode dataCollectionNode = contentNode!["data"];
                    JsonNode dataNode = dataCollectionNode[0]!;
                    JsonNode revisedPrompt = dataNode!["revised_prompt"];
                    JsonNode url = dataNode!["url"];
                    Console.WriteLine(revisedPrompt.ToJsonString());
                    Console.WriteLine(url.ToJsonString()
.Replace(@"\u0026", "&"));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}




Implement Retrieval Augmented Generation (RAG) with Azure OpenAI Service c#:
// {
//"AzureOAIEndpoint": "https://rg1openailab.openai.azure.com/",
//"AzureOAIKey": "e9742dc35fd441a38492fecb4f3c8e4d",
//"AzureOAIDeploymentName": "gpt35turbo16kdemo",
//"AzureSearchEndpoint": "https://rg1searchservice.search.windows.net",
//"AzureSearchKey": "vMsdF7CosssQ0LtzqGhpyi4Z6NFes4FGMj5UQ4dXQO0DtAzSeBh3Dg0",
//"AzureSearchIndex": "margiestravel"
// }
//  dotnet add package Azure.AI.OpenAI --version 1.0.0-beta.14

using System;
using System.Text.Json;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Azure;
using Azure.AI.OpenAI;

bool showCitations = true;
IConfiguration config =
new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
string oaiEndpoint = config["AzureOAIEndpoint"] ?? "";
string oaiKey = config["AzureOAIKey"] ?? "";
string oaiDeploymentName = config["AzureOAIDeploymentName"] ?? "";
string azureSearchEndpoint = config["AzureSearchEndpoint"] ?? "";
string azureSearchKey = config["AzureSearchKey"] ?? "";
string azureSearchIndex = config["AzureSearchIndex"] ?? "";

OpenAIClient client = new OpenAIClient(new Uri(oaiEndpoint),
new AzureKeyCredential(oaiKey));
Console.WriteLine("Enter a question:");
string text = Console.ReadLine() ?? "";
AzureSearchChatExtensionConfiguration ownDataConfig = new()
{
    SearchEndpoint = new Uri(azureSearchEndpoint),
    Authentication =
new OnYourDataApiKeyAuthenticationOptions(azureSearchKey),
    IndexName = azureSearchIndex
};
Console.WriteLine("...Sending the following request to Azure OpenAI
endpoint...");
Console.WriteLine("Request: " + text + "\n");
ChatCompletionsOptions chatCompletionsOptions =
new ChatCompletionsOptions()
{
    Messages =
{
new ChatRequestUserMessage(text)
},
    MaxTokens = 600,
    Temperature = 0.9f,
    DeploymentName = oaiDeploymentName,
    AzureExtensionsOptions = new AzureChatExtensionsOptions()
    {
        Extensions = { ownDataConfig }
    }
};
ChatCompletions response=client.GetChatCompletions(chatCompletionsOptions);
ChatResponseMessage responseMessage = response.Choices[0].Message;
Console.WriteLine("Response: " + responseMessage.Content + "\n");
Console.WriteLine("  Intent: " +
responseMessage.AzureExtensionsContext.Intent);
if (showCitations)
{
    Console.WriteLine($"\n  Citations of data used:");
    foreach (AzureChatExtensionDataSourceResponseCitation citation in
responseMessage.AzureExtensionsContext.Citations)
    {
        Console.WriteLine($"    Citation: {citation.Title} -
{citation.Url}");
    }
}







Featured Post

Mention a Channel or Team – Power Automate

Mention a Channel or Team – Power Automate graph.microsoft.com/v1.0/teams/{teamId}/channels/{channelId}/messages Channel: ---------- {   &qu...

Popular posts