using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorController;
using System.Windows.Forms;
using MercatorExtensions;
using MercatorDatabase;
// <CompileWithRoslyn />
namespace MercatorUi.MovableControls.ButtonsCodes
{
public static class Script
{
public static void Exec(MercatorUi.MovableControls.MovableButton clickedButton)
{
// enter your customized code here
MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)clickedButton.Form;
if (string.IsNullOrWhiteSpace(sigForm.StockRecord.S_MODELE))
{
MercatorUi.Dialogs.Stop("La désignation en français est vide !");
return;
}
MercatorAI.FactoryOpenAI factory = new MercatorAI.FactoryOpenAI();
MercatorAI.Interfaces.IOpenAiChat openAiChat = factory.CreateOpenAiChat("gpt-4o-mini", out string error);
if (!string.IsNullOrEmpty(error))
{
MercatorUi.Dialogs.Stop("Impossible d'initialiser le chat d'OpenAI : " + error);
return;
}
string systemMessage = "Tu es un assistant que traduit en néerlandais, anglais et allemand des noms de produits dans un magasin de bricolage.";
string chatMessage = sigForm.StockRecord.S_MODELE;
MercatorAI.FactoryOpenAI.ChatOptions chatOptions = new MercatorAI.FactoryOpenAI.ChatOptions
{
Temperature = 0.2f, // Limite la créativité mais permet quand même des formulations naturelles
TopP = 1.0f // Pas besoin de filtrer la probabilité cumulative, surtout pour des phrases courtes et simples
};
while (!string.IsNullOrEmpty(chatMessage))
{
try
{
MercatorUi.Wait.WaitStatic.WaitWindow(Api.Iif_langue(Globals.Langue, IifLangueEnum.AIisThinking));
Trad trad = openAiChat.Ask<Trad>(chatMessage, "Trad_NL_EN_DE", systemMessage: systemMessage, chatOptions: chatOptions);
systemMessage = null;
sigForm.StockRecord.S_MODELEN = trad.TradNL ?? "";
sigForm.StockRecord.S_MODELEE = trad.TradEN ?? "";
sigForm.StockRecord.S_MODELED = trad.TradDE ?? "";
MercatorUi.Wait.WaitStatic.WaitClear();
chatMessage = MercatorUi.Dialogs.AskMemo("Affiner les traductions avec une consigne supplémentaire ?", "");
}
catch (Exception ex)
{
MercatorUi.Wait.WaitStatic.WaitClear();
MercatorUi.Dialogs.Stop(ex.Message);
chatMessage = "";
}
}
}
public class Trad
{
[MercatorAI.FactoryOpenAI.ChatJsonFormat(Description = "Traduction en NL", IsRequired = true)]
public string TradNL { get; set; }
[MercatorAI.FactoryOpenAI.ChatJsonFormat(Description = "Traduction en EN", IsRequired = true)]
public string TradEN { get; set; }
[MercatorAI.FactoryOpenAI.ChatJsonFormat(Description = "Traduction en DE", IsRequired = true)]
public string TradDE { get; set; }
}
}
}