{"id":23684197,"url":"https://github.com/luismisanve/geminipostsql","last_synced_at":"2025-04-11T05:09:48.547Z","repository":{"id":270834443,"uuid":"908985179","full_name":"LuisMiSanVe/GeminiPostSQL","owner":"LuisMiSanVe","description":"WinForms program assisted with an AI that translates natural language to PostgreSQL queries","archived":false,"fork":false,"pushed_at":"2025-04-08T17:21:13.000Z","size":5138,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-11T05:09:42.170Z","etag":null,"topics":["ai","chsarp","database","dotnet","gemini","json","postgresql","visual-studio","winforms"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LuisMiSanVe.png","metadata":{"files":{"readme":"README.es.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-27T13:10:43.000Z","updated_at":"2025-04-08T17:21:16.000Z","dependencies_parsed_at":"2025-01-03T12:39:56.908Z","dependency_job_id":"0c1ed073-a6e9-4852-ac17-1bf9b557cab2","html_url":"https://github.com/LuisMiSanVe/GeminiPostSQL","commit_stats":null,"previous_names":["luismisanve/geminipostsql"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuisMiSanVe%2FGeminiPostSQL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuisMiSanVe%2FGeminiPostSQL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuisMiSanVe%2FGeminiPostSQL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuisMiSanVe%2FGeminiPostSQL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LuisMiSanVe","download_url":"https://codeload.github.com/LuisMiSanVe/GeminiPostSQL/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248345266,"owners_count":21088244,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","chsarp","database","dotnet","gemini","json","postgresql","visual-studio","winforms"],"created_at":"2024-12-29T20:35:40.906Z","updated_at":"2025-04-11T05:09:48.533Z","avatar_url":"https://github.com/LuisMiSanVe.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e [Ver en ingles/See in english](https://github.com/LuisMiSanVe/GeminiPostSQL/tree/main)\n\n\u003cimg src=\"https://github.com/LuisMiSanVe/LuisMiSanVe/blob/main/Resources/GeminiPostSQL/GeminiPostSQL_banner.png\" style=\"width: 100%; height: auto;\" alt=\"GeminiPostSQL Banner\"\u003e\n\n# \u003cimg src=\"https://github.com/LuisMiSanVe/GeminiPostSQL/blob/main/AiPostgreWinForms/Resources/icon.ico\" width=\"40\" alt=\"Logo de GeminiPostSQL\"\u003e GeminiPostSQL | WinForms Asistido por IA para PostgreSQL\n[![image](https://img.shields.io/badge/C%23-239120?style=for-the-badge\u0026logo=csharp\u0026logoColor=white)](https://dotnet.microsoft.com/en-us/languages/csharp)\n[![image](https://img.shields.io/badge/.NET-5C2D91?style=for-the-badge\u0026logo=.net\u0026logoColor=white)](https://dotnet.microsoft.com/en-us/learn/dotnet/what-is-dotnet)\n[![image](https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white)](https://www.postgresql.org/)\n[![image](https://img.shields.io/badge/json-5E5C5C?style=for-the-badge\u0026logo=json\u0026logoColor=white)](https://www.newtonsoft.com/json)\n[![image](https://img.shields.io/badge/Google%20Gemini-8E75B2?style=for-the-badge\u0026logo=googlegemini\u0026logoColor=white)](https://aistudio.google.com/app/apikey)\n[![image](https://img.shields.io/badge/Visual_Studio-5C2D91?style=for-the-badge\u0026logo=visual%20studio\u0026logoColor=white)](https://visualstudio.microsoft.com/)\n\n\u003e[!NOTE]\n\u003e Esta es la versión de WinForms pensada para ser usada como cliente. Hay una versión de [REST API](https://github.com/LuisMiSanVe/GeminiPostSQL_API/blob/main/README.es.md) pensada para su uso en servidores con Swagger y un [ChatBot](https://github.com/LuisMiSanVe/GeminiPostSQL_ChatBot/tree/main) de Blazor como cliente web.\n\nEste WinForms usa la IA de Google 'Gemini 2.0 Flash' para generar consultas a bases de datos PostgreSQL.  \nLa IA convierte lenguaje natural a consultas SQL usando un método con sus ventajas y desventajas.\n\n## 📋 Prerequisitos\n\nPara que el programa funcione, necesiatarás un servidor PostgreSQL y una clave de la API de Gemini.\n\n\u003e [!NOTE]  \n\u003e Yo usaré pgAdmin para montar el servidor PostgreSQL.\n\n## 🛠️ Instalación\n\nSi no lo tienes, descarga [pgAdmin 4 desde su página ofical](https://www.pgadmin.org/download/).  \nAhora, crea el servidor y monta la base de datos con algunas tablas y valores.\n\nDespués, obten tu clave de la API de Gemini yendo aqui: [Google AI Studio](https://aistudio.google.com/app/apikey). Asegurate de tener tu sesión de Google abierta, y encontes dale al botón que dice 'Crear clave de API' y sigue los pasos para crear tu proyecto de Google Cloud y conseguir tu clave de API. **Guardala en algún sitio seguro**.  \nGoogle permite el uso gratuito de esta API sin añadir ninguna forma de pago, pero con algunas limitaciones.\n\nEn Google AI Studio, puedes monitorizar el uso de la IA haciendo clic en 'Ver datos de uso' en la columna de 'Plan' en la tabla con todos tus proyectos. Recomiendo monitorizarla desde la pestaña de 'Cuota y límites del sistema' y ordenando por 'Porcentaje de uso actual', ya que es donde más información obtienes.\n\nYa tienes todo lo que necesitas para hacer funcionar el programa.  \nSimplemente pon los datos que acabas de conseguir en las pantallas de configuración del programa.\n\n## 📖 Sobre el programa de WinForms\nLa interfaz tiene unos cuantos botones, siendo \u003cimg src=\"https://github.com/LuisMiSanVe/GeminiPostSQL/blob/main/AiPostgreWinForms/Resources/key.png\" width=\"20\" alt=\"API Key Settings\"\u003e y \u003cimg src=\"https://github.com/LuisMiSanVe/GeminiPostSQL/blob/main/AiPostgreWinForms/Resources/db.png\" width=\"20\" alt=\"Database Settings\"\u003e las pantallas de configuración, de la clave de la API y la base de datos respectivamente y \u003cimg src=\"https://github.com/LuisMiSanVe/GeminiPostSQL/blob/main/AiPostgreWinForms/Resources/show.png\" width=\"20\" alt=\"Show SQL\"\u003e/\u003cimg src=\"https://github.com/LuisMiSanVe/GeminiPostSQL/blob/main/AiPostgreWinForms/Resources/hide.png\" width=\"20\" alt=\"Hide SQL\"\u003e para mostrar u ocultar la consulta creada por la IA.\n\nEl botón \u003cimg src=\"https://github.com/LuisMiSanVe/GeminiPostSQL/blob/main/AiPostgreWinForms/Resources/map.png\" width=\"20\" alt=\"Map DB\"\u003e saca un Gestor de Bases de Datos Mapeadas, en el que puedes Mapear a JSON cualquier base de datos que quieras y seleccionarla para usarla en futuras solicitudes a la IA. \n\nEstas Bases de Datos Mapeadas se guardan en tu disco por lo que siempre se cargarán al iniciar el programa. \n\nRecuerda que las Bases de Datos Mapeadas solo se usan al hacer una solicitud a la IA, por lo que si estás modificando una sentencia y la ejecutas, esta correrá en el Servidor PostgreSQL que tengas configurado.\n\nAl hacer clic en 'Save' en la pantalla de Configuración de la  Base de  Datos o en la de Configuración de la clave de la API (si la caja de 'Remember' está marcada) un archivo se creará en la carpeta interna del programa para que la siguiente vez que se inicie, todos esos datos se carguen automaticamente.\n\u003e [!NOTE]\n\u003e Se encripta los ficheros de configuración de la API Key y los datos de la BBDD usando AES con un [Método Basado en Sistemas Especificos](https://gist.github.com/LuisMiSanVe/6b3c53cbfc4fcd75d816377bb6eb06b5), en la que se crea la clave AES con la información de tu equipo, por lo que si alguna persona indeseada roba esos ficheros, no podrían ser desencriptados, manteniendo tus datos sensibles a salvo.\n\n**[Método de traducción de Lenguaje Natural a SQL:](https://gist.github.com/LuisMiSanVe/2da8e2d932a06ef408b3ee8468d0d820)**  \nEste método mapea la estructura de la base de datos en un JSON que Gemini analiza ([con este prompt](https://gist.github.com/LuisMiSanVe/b189c8920d2dcedf5fd46485f3403d51)) para crear una consulta SQL, la cual es ejecutada por el servidor PostgreSQL directamente.  \nYa que este método no mapea los valores de la base de datos el uso de tokens es menor, y los datos que devuelve son mas fiables pues es el mismo Servidor el que los devuelve. Sin embargo, no evita completamente los errores que cometa la IA. A veces, la consulta SQL fallará debido a que la IA se inventa columnas que no existen, en ese caso deberás comprobar la consulta generada para que identifiques el fallo.\n\n## 🚀 Lanzamientos\nUna versión será lanzada solo cuando se cumplan los siguientes puntos:\\\nNuevas funciones importantes y arreglos de fallos criticos causarán la salida inmediata de una nueva versión, mientras que otros cambios/arreglos menores deberán esperar una semana desde que se incluyeron en el repositorio antes de ser incluidos en la nueva versión, para que otros posibles cambios puedan ser añadidos tambien.\n\u003e[!NOTE]\n\u003eEstos posibles nuevos cambios no alargarán la espera de la salida de la nueva versión a más de una semana.\n\nEl número de la versión seguirá este formato: \\\n\\[Añadido Importante\\].\\[Añadido Menor\\].\\[Arreglos de Errores\\]\n\n## 💻 Tecnologías usadas\n- Lenguaje de programación: [C#](https://dotnet.microsoft.com/en-us/languages/csharp)\n- Framework: [.Net](https://dotnet.microsoft.com/en-us/learn/dotnet/what-is-dotnet) 8.0 Framework\n- Paquetes NuGet:\n  - [Npgsql](https://www.npgsql.org/) (8.0.5)\n  - [RestSharp](https://restsharp.dev/) (112.1.0)\n  - [Newtonsoft.Json](https://www.newtonsoft.com/json) (13.0.3)\n  - [System.Management](https://learn.microsoft.com/es-es/dotnet/api/system.management?view=netframework-1.1) (9.0.1)\n- Otros:\n  - [PostgreSQL](https://www.postgresql.org/) (16.3)\n  - [pgAdmin 4](https://www.pgadmin.org/) (8.9)\n  - Gemini API Key (2.0 Flash)\n  - [FreeIcons](https://freeicons.io/) (Fuente original de los iconos, luego retocados por mi)\n  - [Microsoft Visual Studio Installer Projects 2022](https://marketplace.visualstudio.com/items?itemName=VisualStudioClient.MicrosoftVisualStudio2022InstallerProjects) (2.0.1)\n- IDE Recomendado: [Visual Studio](https://visualstudio.microsoft.com/) 2022\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluismisanve%2Fgeminipostsql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluismisanve%2Fgeminipostsql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluismisanve%2Fgeminipostsql/lists"}