-
Notifications
You must be signed in to change notification settings - Fork 0
/
ChatGPTService.cs
115 lines (97 loc) · 4.09 KB
/
ChatGPTService.cs
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
using System;
using System.Data;
using System.Data.SqlClient;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
namespace ChatGPTAppSqlServerAdvWithQuery
{
public class ChatGPTService
{
private readonly string _apiKey;
private readonly string _connectionString;
private bool _isOnline;
public ChatGPTService(string apiKey, string connectionString)
{
_apiKey = apiKey;
_connectionString = connectionString;
_isOnline = true; // الوضع الافتراضي هو متصل
}
public void SetMode(bool isOnline)
{
_isOnline = isOnline;
}
public async Task<string> SendMessageAsync(string message)
{
//try
//{
// // حاول الحصول على الرد عبر الإنترنت
// string response = await GetChatGPTResponseOnline(message);
// return response;
//}
//catch (Exception)
//{
// // إذا فشل الاتصال عبر الإنترنت، استخدم الرد المخزن محليًا
// return GetChatGPTResponseOffline(message);
//}
if (_isOnline)
{
return await GetChatGPTResponseOnline(message);
}
else
{
return GetChatGPTResponseOffline(message);
}
}
private async Task<string> GetChatGPTResponseOnline(string message)
{
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _apiKey);
var requestContent = new JObject
{
{ "model", "gpt-4" },
{ "messages", new JArray(
new JObject
{
{ "role", "user" },
{ "content", message }
})
}
};
var content = new StringContent(requestContent.ToString(), System.Text.Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync("https://api.openai.com/v1/chat/completions", content);
if (response.IsSuccessStatusCode)
{
string responseString = await response.Content.ReadAsStringAsync();
var jsonResponse = JObject.Parse(responseString);
return jsonResponse["choices"][0]["message"]["content"].ToString();
}
else
{
throw new Exception($"API request failed with status code {response.StatusCode}: {response.ReasonPhrase}");
}
}
}
private string GetChatGPTResponseOffline(string message)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
{
SqlCommand command = new SqlCommand("SearchResponses", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@Prompt", message);
connection.Open();
var result = command.ExecuteScalar();
if (result != null)
{
return result.ToString();
}
else
{
return "لا توجد استجابة محفوظة مسبقًا لهذا الاستعلام.";
}
}
}
}
}