-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathChartsAIService.cs
More file actions
151 lines (128 loc) · 4.05 KB
/
ChartsAIService.cs
File metadata and controls
151 lines (128 loc) · 4.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
using Azure.AI.OpenAI;
using Azure;
using Microsoft.Extensions.AI;
namespace ChartGenerator
{
internal class ChartAIService
{
#region Fields
/// <summary>
/// The EndPoint
/// </summary>
internal const string endpoint = "https://YOUR_ACCOUNT.openai.azure.com/";
/// <summary>
/// The Deployment name
/// </summary>
internal const string deploymentName = "deployment name";
/// <summary>
/// The Image Deployment name
/// </summary>
internal const string imageDeploymentName = "IMAGE_MODEL_NAME";
/// <summary>
/// The API key
/// </summary>
internal const string key = "API key";
/// <summary>
/// The already credential validated field
/// </summary>
private static bool isAlreadyValidated;
/// <summary>
/// The uri result field
/// </summary>
private Uri? uriResult;
#endregion
public ChartAIService()
{
ValidateCredential();
}
#region Properties
internal IChatClient? Client { get; set; }
internal string? ChatHistory { get; set; }
internal static bool IsCredentialValid { get; set; }
#endregion
#region Private Methods
/// <summary>
/// Validate Azure Credentials
/// </summary>
private async void ValidateCredential()
{
this.GetAzureOpenAIKernal();
if (isAlreadyValidated)
{
return;
}
try
{
if (Client != null)
{
await Client!.CompleteAsync("Hello, Test Check");
ChatHistory = string.Empty;
IsCredentialValid = true;
isAlreadyValidated = true;
}
else
{
ShowAlertAsync();
}
}
catch (Exception)
{
return;
}
}
#region Azure OpenAI
/// <summary>
/// To get the Azure open ai kernal method
/// </summary>
private void GetAzureOpenAIKernal()
{
try
{
var client = new AzureOpenAIClient(new Uri(endpoint), new AzureKeyCredential(key)).AsChatClient(modelId: deploymentName);
this.Client = client;
}
catch (Exception)
{
}
}
#endregion
/// <summary>
/// Retrieves an answer from the deployment name model using the provided user prompt.
/// </summary>
/// <param name="userPrompt">The user prompt.</param>
/// <returns>The AI response.</returns>
internal async Task<string> GetAnswerFromGPT(string userPrompt)
{
try
{
if (IsCredentialValid && Client != null)
{
ChatHistory = string.Empty;
// Add the system message and user message to the options
ChatHistory = ChatHistory + userPrompt;
var response = await Client.CompleteAsync(ChatHistory);
return response.ToString();
}
}
catch
{
// If an exception occurs (e.g., network issues, API errors), return an empty string.
return "";
}
return "";
}
/// <summary>
/// Show Alert Popup
/// </summary>
private async void ShowAlertAsync()
{
var page = Application.Current?.Windows[0].Page;
if (page != null && !IsCredentialValid)
{
isAlreadyValidated = true;
await page.DisplayAlert("Alert", "The Azure API key or endpoint is missing or incorrect. Please verify your credentials. You can also continue with the offline data.", "OK");
}
}
}
#endregion
}