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}");
    }
}







No comments:

Post a Comment

Featured Post

Building Secure APIs with FastAPI and Azure AD Authentication

Building Secure APIs with FastAPI and Azure AD Authentication Published on September 2, 2025 In today's world of microservices and API-f...

Popular posts