Quitada las claves API del codigo

This commit is contained in:
Miguel 2024-11-14 10:05:56 +01:00
parent d58f5c496a
commit f20ee01e22
4 changed files with 133 additions and 8 deletions

1
.gitignore vendored
View File

@ -9,6 +9,7 @@
*.user
*.userosscache
*.sln.docstates
appsettings.json
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

View File

@ -32,5 +32,11 @@
</Reference>
</ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View File

@ -13,7 +13,8 @@ namespace GTPCorrgir
{
OpenAI,
Ollama,
Groq
Groq,
Grok // x.ai
}
public enum modoDeUso
{
@ -29,6 +30,7 @@ namespace GTPCorrgir
{
{ Opciones.LLM_a_Usar.Ollama, "Ollama" },
{ Opciones.LLM_a_Usar.Groq, "Groq" },
{ Opciones.LLM_a_Usar.Grok, "Grok" },
{ Opciones.LLM_a_Usar.OpenAI, "OpenAI" },
};
@ -42,8 +44,8 @@ namespace GTPCorrgir
if (_instance == null)
{
_instance = new Opciones();
_instance.LLM = LLM_a_Usar.OpenAI;
_instance.modo = modoDeUso.Corregir;
_instance.LLM = LLM_a_Usar.Grok;
_instance.modo = modoDeUso.Chat;
}
return _instance;
}
@ -76,6 +78,8 @@ namespace GTPCorrgir
Opciones.Instance.LLM = Opciones.LLM_a_Usar.Ollama;
else if (arg.Contains("Groq"))
Opciones.Instance.LLM = Opciones.LLM_a_Usar.Groq;
else if (arg.Contains("Grok"))
Opciones.Instance.LLM = Opciones.LLM_a_Usar.Grok;
else if (arg.Contains("OpenAI"))
Opciones.Instance.LLM = Opciones.LLM_a_Usar.OpenAI;

124
gtpask.cs
View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
@ -14,11 +15,23 @@ using libObsidean;
namespace GTPCorrgir
{
public class ApiSettings
{
public class ApiKeySection
{
public string OpenAI { get; set; }
public string Groq { get; set; }
public string Grok { get; set; }
}
public ApiKeySection ApiKeys { get; set; }
}
public class gtpask
{
private readonly string openAiApiKey = "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";
private readonly string groqApiKey = "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";
private readonly string openAiApiKey;
private readonly string groqApiKey;
private readonly string grokApiKey;
public Logger Log = new Logger();
private Dictionary<string, string> languageMap = new Dictionary<string, string>
{
@ -35,6 +48,37 @@ namespace GTPCorrgir
public string TextodeSistema;
private const bool Simulacion = false;
public gtpask()
{
try
{
string configPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "appsettings.json");
if (File.Exists(configPath))
{
string jsonContent = File.ReadAllText(configPath);
var settings = JsonConvert.DeserializeObject<ApiSettings>(jsonContent);
openAiApiKey = settings.ApiKeys.OpenAI;
groqApiKey = settings.ApiKeys.Groq;
grokApiKey = settings.ApiKeys.Grok;
if (string.IsNullOrEmpty(openAiApiKey) || string.IsNullOrEmpty(groqApiKey) || string.IsNullOrEmpty(grokApiKey))
{
Log.Log("Warning: One or more API keys are missing in the configuration file.");
}
}
else
{
Log.Log("Error: Configuration file (appsettings.json) not found.");
throw new FileNotFoundException("Configuration file (appsettings.json) not found.");
}
}
catch (Exception ex)
{
Log.Log($"Error loading configuration: {ex.Message}");
throw;
}
}
private string CrearMensajeDeSistema()
{
@ -132,6 +176,7 @@ namespace GTPCorrgir
if (Opciones.Instance.LLM == Opciones.LLM_a_Usar.OpenAI) RespuestaLLM = await CallOpenAiApi(TextoACorregir);
if (Opciones.Instance.LLM == Opciones.LLM_a_Usar.Ollama) RespuestaLLM = await CallOllamaApi(TextoACorregir);
if (Opciones.Instance.LLM == Opciones.LLM_a_Usar.Groq) RespuestaLLM = await CallGroqAiApi(TextoACorregir);
if (Opciones.Instance.LLM == Opciones.LLM_a_Usar.Grok) RespuestaLLM = await CallGrokApi(TextoACorregir);
} else
{
await Task.Delay(1000);
@ -235,6 +280,74 @@ namespace GTPCorrgir
}
private async Task<string> CallGrokApi(string input)
{
using var httpClient = new HttpClient();
string Mensaje_Sistema = CrearMensajeDeSistema();
string Mensaje_Usuario = CrearMensajeDeUsuario(input);
// Configurar headers
httpClient.DefaultRequestHeaders.Clear();
httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {grokApiKey}");
// Crear el objeto de solicitud siguiendo exactamente el formato del ejemplo curl
var requestData = new
{
messages = new[]
{
new { role = "system", content = Mensaje_Sistema },
new { role = "user", content = Mensaje_Usuario }
},
model = "grok-beta",
stream = false,
temperature = 0
};
var content = new StringContent(
JsonConvert.SerializeObject(requestData),
Encoding.UTF8,
"application/json"
);
try
{
Log.Log("Ask Grok: " + JsonConvert.SerializeObject(requestData));
// URL corregida para coincidir con el ejemplo
var response = await httpClient.PostAsync("https://api.x.ai/v1/chat/completions", content);
response.EnsureSuccessStatusCode();
var jsonResponse = await response.Content.ReadAsStringAsync();
Log.Log("Grok Response: " + jsonResponse); // Logging la respuesta para debug
dynamic data = JsonConvert.DeserializeObject(jsonResponse);
return data.choices[0].message.content;
}
catch (HttpRequestException e)
{
Log.Log($"Error en la solicitud HTTP: {e.Message}");
Console.WriteLine($"Error making HTTP request: {e.Message}");
return null;
}
catch (JsonException e)
{
Log.Log($"Error al procesar JSON: {e.Message}");
Console.WriteLine($"Error processing JSON response: {e.Message}");
return null;
}
catch (Exception e)
{
Log.Log($"Error general: {e.Message}");
Console.WriteLine($"An error occurred: {e.Message}");
return null;
}
finally
{
httpClient?.Dispose();
}
}
private async Task<string> CallOllamaApi(string input)
{
var httpClient = new HttpClient();
@ -245,7 +358,7 @@ namespace GTPCorrgir
var requestData = new
{
model = "phi3", //"llama3",
model = "llama3.2:latest", // "phi3", //"llama3",
messages = new[]
{
new { role = "system", content = Mensaje_Sistema },
@ -294,7 +407,7 @@ namespace GTPCorrgir
var requestData = new
{
model = "gpt-4",
model = "gpt-4o-mini", //"gpt -4",
messages = new[]
{
new { role = "system", content = Mensaje_Sistema },
@ -326,6 +439,7 @@ namespace GTPCorrgir
}
}
private async Task<string> CallGroqAiApi(string input)
{
var httpClient = new HttpClient();
@ -336,7 +450,7 @@ namespace GTPCorrgir
var requestData = new
{
model = "llama3-70b-8192",
model = "llama-3.1-70b-versatile", // "llama3-70b-8192",
messages = new[]
{
new { role = "system", content = Mensaje_Sistema },