This commit is contained in:
Loretta 2025-10-23 13:19:31 +02:00
parent 41422340c8
commit 8cf260a6d2
4 changed files with 73 additions and 61 deletions

View File

@ -1,36 +1,39 @@
@using Nop.Core; @using AyCode.Utils.Extensions
@using Nop.Core;
@using Nop.Plugin.Misc.FruitBankPlugin.Services @using Nop.Plugin.Misc.FruitBankPlugin.Services
@using Nop.Core.Domain.Customers @using Nop.Core.Domain.Customers
@inject IWorkContext workContext @inject IWorkContext workContext
@inject AICalculationService aiCalculationService @inject AICalculationService aiCalculationService
<div class="card card-primary"> <div class="card card-primary">
<div class="card-header"> <div class="card-header">
<h3 class="card-title"> <h3 class="card-title">
<i class="fas fa-leaf"></i> <i class="fas fa-leaf"></i>
Üdvözöljük a Fruit Bank rendszerben! Üdvözöljük a Fruit Bank rendszerben!
</h3> </h3>
</div> </div>
<div class="card-body"> <div class="card-body">
<div class="row"> <div class="row">
<div class="col-md-8"> <div class="col-md-8">
@{ @{
Customer customer = await workContext.GetCurrentCustomerAsync(); Customer customer = await workContext.GetCurrentCustomerAsync();
var WelcomeMessage = await aiCalculationService.GetWelcomeMessageAsync(customer);
var email = customer.Email; var welcomeMessage = await aiCalculationService.GetWelcomeMessageAsync(customer);
<h4>Ssytem check</h4> if (welcomeMessage.IsNullOrWhiteSpace())
<p class="lead"> {
@WelcomeMessage <p class="lead">Nincs kapcsolat az AI szerverrel...</p>
}
</p> else
<p class="lead"> {
Itt kezelheti az összes terméket, rendelést és ügyfelet egyszerűen és hatékonyan. var email = customer.Email;
</p> <h4>Ssytem check</h4>
} <p class="lead">@welcomeMessage</p>
<p> }
Mai dátum: <strong>@DateTime.Now.ToString("yyyy. MMMM dd., dddd", new System.Globalization.CultureInfo("hu-HU"))</strong> }
</p> <p>
@* Mai dátum: <strong>@DateTime.Now.ToString("yyyy. MMMM dd., dddd", new System.Globalization.CultureInfo("hu-HU"))</strong>
</p>
@*
<hr> <hr>
<div class="row"> <div class="row">
<div class="col-sm-6"> <div class="col-sm-6">
@ -42,17 +45,17 @@
<p class="text-muted">Megbízható kiszállítás országszerte</p> <p class="text-muted">Megbízható kiszállítás országszerte</p>
</div> </div>
</div> *@ </div> *@
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<div class="bg-light p-3 rounded"> <div class="bg-light p-3 rounded">
<h5><i class="fas fa-chart-line text-warning"></i> Mai összefoglaló</h5> <h5><i class="fas fa-chart-line text-warning"></i> Mai összefoglaló</h5>
<ul class="list-unstyled"> <ul class="list-unstyled">
<li><i class="fas fa-clock text-info"></i> Bejelentkezés ideje: @DateTime.Now.ToString("HH:mm")</li> <li><i class="fas fa-clock text-info"></i> Bejelentkezés ideje: @DateTime.Now.ToString("HH:mm")</li>
<li><i class="fas fa-calendar text-success"></i> Aktív napok: @DateTime.Now.DayOfYear</li> <li><i class="fas fa-calendar text-success"></i> Aktív napok: @DateTime.Now.DayOfYear</li>
<li><i class="fas fa-sun text-warning"></i> Szép napot kívánunk!</li> <li><i class="fas fa-sun text-warning"></i> Szép napot kívánunk!</li>
</ul> </ul>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -25,7 +25,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services
string userMessage = "Hello"; string userMessage = "Hello";
var response = await _openAIApiService.GetSimpleResponseAsync(systemMessage, userMessage); var response = await _openAIApiService.GetSimpleResponseAsync(systemMessage, userMessage) ?? string.Empty;
return response; return response;
} }
@ -34,6 +34,8 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services
string systemMessage = $"You are a pdf analyzis assistant, the user is asking you questions about a PDF document, that you have access to. The content of the PDF document is the following: {pdfText}"; string systemMessage = $"You are a pdf analyzis assistant, the user is asking you questions about a PDF document, that you have access to. The content of the PDF document is the following: {pdfText}";
var response = await _openAIApiService.GetSimpleResponseAsync(systemMessage, userQuestion); var response = await _openAIApiService.GetSimpleResponseAsync(systemMessage, userQuestion);
if (response == null) return string.Empty;
var fixedResponse = TextHelper.FixJsonWithoutAI(response); var fixedResponse = TextHelper.FixJsonWithoutAI(response);
return fixedResponse; return fixedResponse;

View File

@ -8,7 +8,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services
{ {
internal interface IAIAPIService internal interface IAIAPIService
{ {
Task<string> GetSimpleResponseAsync(string systemMessage, string userMessage, string? assistantMessage = null); Task<string?> GetSimpleResponseAsync(string systemMessage, string userMessage, string? assistantMessage = null);
Task<string> GetStreamedResponseAsync(string sessionId, string systemMessage, string userMessage, string? assistantMessage = null); Task<string> GetStreamedResponseAsync(string sessionId, string systemMessage, string userMessage, string? assistantMessage = null);
string GetApiKey(); string GetApiKey();

View File

@ -45,7 +45,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services
} }
#region === CHAT (TEXT INPUT) === #region === CHAT (TEXT INPUT) ===
public async Task<string> GetSimpleResponseAsync(string systemMessage, string userMessage, string? assistantMessage = null) public async Task<string?> GetSimpleResponseAsync(string systemMessage, string userMessage, string? assistantMessage = null)
{ {
string modelName = GetModelName(); string modelName = GetModelName();
StringContent requestContent = new(""); StringContent requestContent = new("");
@ -109,21 +109,30 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services
requestContent = new StringContent(requestJson, Encoding.UTF8, "application/json"); requestContent = new StringContent(requestJson, Encoding.UTF8, "application/json");
} }
using var response = await _httpClient.PostAsync(OpenAiEndpoint, requestContent); try
response.EnsureSuccessStatusCode(); {
using var response = await _httpClient.PostAsync(OpenAiEndpoint, requestContent);
response.EnsureSuccessStatusCode();
using var responseStream = await response.Content.ReadAsStreamAsync(); await using var responseStream = await response.Content.ReadAsStreamAsync();
using var document = await JsonDocument.ParseAsync(responseStream);
var inputTokens = document.RootElement.GetProperty("usage").GetProperty("prompt_tokens").GetInt32(); using var document = await JsonDocument.ParseAsync(responseStream);
var outputTokens = document.RootElement.GetProperty("usage").GetProperty("completion_tokens").GetInt32();
Console.WriteLine($"USAGE STATS - Tokens: {inputTokens} + {outputTokens} = {inputTokens + outputTokens}");
return document.RootElement var inputTokens = document.RootElement.GetProperty("usage").GetProperty("prompt_tokens").GetInt32();
.GetProperty("choices")[0] var outputTokens = document.RootElement.GetProperty("usage").GetProperty("completion_tokens").GetInt32();
.GetProperty("message") Console.WriteLine($"USAGE STATS - Tokens: {inputTokens} + {outputTokens} = {inputTokens + outputTokens}");
.GetProperty("content")
.GetString() ?? "No response"; return document.RootElement
.GetProperty("choices")[0]
.GetProperty("message")
.GetProperty("content")
.GetString() ?? "No response";
}
catch (Exception ex)
{
Console.Error.WriteLine($"{ex}");
return null;
}
} }
#endregion #endregion
@ -190,16 +199,14 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services
requestContent = new StringContent(requestJson, Encoding.UTF8, "application/json"); requestContent = new StringContent(requestJson, Encoding.UTF8, "application/json");
} }
using var httpRequest = new HttpRequestMessage(HttpMethod.Post, OpenAiEndpoint) using var httpRequest = new HttpRequestMessage(HttpMethod.Post, OpenAiEndpoint);
{ httpRequest.Content = requestContent;
Content = requestContent
};
using var response = await _httpClient.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead); using var response = await _httpClient.SendAsync(httpRequest, HttpCompletionOption.ResponseHeadersRead);
response.EnsureSuccessStatusCode(); response.EnsureSuccessStatusCode();
var stringBuilder = new StringBuilder(); var stringBuilder = new StringBuilder();
using var responseStream = await response.Content.ReadAsStreamAsync(); await using var responseStream = await response.Content.ReadAsStreamAsync();
using var reader = new StreamReader(responseStream); using var reader = new StreamReader(responseStream);
try try
@ -277,7 +284,7 @@ namespace Nop.Plugin.Misc.FruitBankPlugin.Services
return null; return null;
} }
using var content = await response.Content.ReadAsStreamAsync(); await using var content = await response.Content.ReadAsStreamAsync();
var json = await JsonDocument.ParseAsync(content); var json = await JsonDocument.ParseAsync(content);
var base64Image = json.RootElement var base64Image = json.RootElement