diff --git a/.gitignore b/.gitignore
index 9491a2f..f5dad3a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@
*.user
*.userosscache
*.sln.docstates
+appsettings.json
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
diff --git a/GTPCorrgir.csproj b/GTPCorrgir.csproj
index 6fe1626..2c92ab1 100644
--- a/GTPCorrgir.csproj
+++ b/GTPCorrgir.csproj
@@ -32,5 +32,11 @@
+
+
+ PreserveNewest
+
+
+
diff --git a/Program.cs b/Program.cs
index 7f28245..b853f89 100644
--- a/Program.cs
+++ b/Program.cs
@@ -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;
diff --git a/gtpask.cs b/gtpask.cs
index 1622ea5..29df322 100644
--- a/gtpask.cs
+++ b/gtpask.cs
@@ -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 languageMap = new Dictionary
{
@@ -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(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 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 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 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 },