{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7474e4ec-63c1-47cd-a1f3-3cb3488a7580",
   "metadata": {},
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "module 'vanna' has no attribute 'VannaDefault'",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mAttributeError\u001b[39m                            Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[1]\u001b[39m\u001b[32m, line 5\u001b[39m\n\u001b[32m      1\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m vanna \u001b[38;5;28;01mas\u001b[39;00m vn\n\u001b[32m      2\u001b[39m \n\u001b[32m      3\u001b[39m \u001b[38;5;66;03m# 1. Configura o modelo usando o Vanna Hosted + Gemini\u001b[39;00m\n\u001b[32m      4\u001b[39m \u001b[38;5;66;03m# Substitua 'seu_email@gmail.com' pelo e-mail que você usa no Google AI Studio\u001b[39;00m\n\u001b[32m----> \u001b[39m\u001b[32m5\u001b[39m vn_app = vn.VannaDefault(\n\u001b[32m      6\u001b[39m     model=\u001b[33m'modelo-empresa-gemini'\u001b[39m,  \u001b[38;5;66;03m# Escolha um nome de identificação para o seu modelo\u001b[39;00m\n\u001b[32m      7\u001b[39m     api_key=vn.get_api_key(\u001b[33m'davidvalni930@gmail.com'\u001b[39m)  \u001b[38;5;66;03m# O Vanna enviará um código de 6 dígitos para o seu e-mail\u001b[39;00m\n\u001b[32m      8\u001b[39m )\n",
      "\u001b[31mAttributeError\u001b[39m: module 'vanna' has no attribute 'VannaDefault'"
     ]
    }
   ],
   "source": [
    "import vanna as vn\n",
    "\n",
    "# 1. Configura o modelo usando o Vanna Hosted + Gemini\n",
    "# Substitua 'seu_email@gmail.com' pelo e-mail que você usa no Google AI Studio\n",
    "vn_app = vn.VannaDefault(\n",
    "    model='modelo-empresa-gemini',  # Escolha um nome de identificação para o seu modelo\n",
    "    api_key=vn.get_api_key('davidvalni930@gmail.com')  # O Vanna enviará um código de 6 dígitos para o seu e-mail\n",
    ")\n",
    "\n",
    "# 2. Configura a sua chave do Gemini (copiada do AI Studio)\n",
    "vn_app.config['api_key'] = 'AQ.Ab8RN6KA3PTiWVWhFcO5aQgbjbB6xiCV5YxJSqFu9Sm3MUImoA'\n",
    "vn_app.config['model'] = 'gemini-1.5-flash'\n",
    "\n",
    "# 3. Conecta ao seu banco Postgres local ou do servidor\n",
    "try:\n",
    "    print(\"Tentando conectar ao banco Postgres...\")\n",
    "    vn_app.connect_to_postgres(\n",
    "        host='192.168.1.80',        # Endereço do seu banco\n",
    "        dbname='bdps55',      # Nome do banco de dados\n",
    "        user='postgres',      # Seu usuário do banco\n",
    "        password='ps@web',    # Sua senha\n",
    "        port=5432\n",
    "    )\n",
    "    \n",
    "    # 4. Teste de fogo da conexão\n",
    "    df = vn_app.run_sql(\"SELECT 1 AS status_conexao;\")\n",
    "    if not df.empty and df['status_conexao'].iloc[0] == 1:\n",
    "        print(\"✅ SUCESSO ABSOLUTO! Sem erros de pacotes, Gemini pronto e Postgres conectado!\")\n",
    "        \n",
    "except Exception as e:\n",
    "    print(f\"❌ Erro ao conectar ao Postgres: {e}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "a345c8c9-781f-494c-bcb8-d92fffb7c512",
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'vanna.vannadb'",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mModuleNotFoundError\u001b[39m                       Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[2]\u001b[39m\u001b[32m, line 2\u001b[39m\n\u001b[32m      1\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m vanna \u001b[38;5;28;01mas\u001b[39;00m vn\n\u001b[32m----> \u001b[39m\u001b[32m2\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m vanna.vannadb \u001b[38;5;28;01mimport\u001b[39;00m VannaDB_VectorStore\n\u001b[32m      3\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m vanna.google \u001b[38;5;28;01mimport\u001b[39;00m GoogleGeminiChat\n\u001b[32m      4\u001b[39m \n\u001b[32m      5\u001b[39m \u001b[38;5;66;03m# 1. Criamos a classe usando o banco de vetores gratuito do próprio Vanna (VannaDB) + Gemini\u001b[39;00m\n",
      "\u001b[31mModuleNotFoundError\u001b[39m: No module named 'vanna.vannadb'"
     ]
    }
   ],
   "source": [
    "import vanna as vn\n",
    "from vanna.vannadb import VannaDB_VectorStore\n",
    "from vanna.google import GoogleGeminiChat\n",
    "\n",
    "# 1. Criamos a classe usando o banco de vetores gratuito do próprio Vanna (VannaDB) + Gemini\n",
    "class MyVanna(VannaDB_VectorStore, GoogleGeminiChat):\n",
    "    def __init__(self, config=None):\n",
    "        # Aqui você coloca o nome do seu modelo e a sua chave de e-mail do Vanna\n",
    "        VannaDB_VectorStore.__init__(self, vanna_model='modelo-empresa-gemini', vanna_api_key=config.get('vanna_api_key'))\n",
    "        GoogleGeminiChat.__init__(self, config=config)\n",
    "\n",
    "# 2. Obtemos a chave de API gratuita do Vanna para guardar os treinamentos na nuvem deles\n",
    "# (O Vanna vai enviar um código de 6 dígitos para o seu e-mail na primeira execução)\n",
    "vanna_key = vn.get_api_key('davidvalni930@gmail.com') \n",
    "\n",
    "# 3. Inicializamos o aplicativo com as duas chaves\n",
    "vn_app = MyVanna(config={\n",
    "    'api_key': 'AQ.Ab8RN6KA3PTiWVWhFcO5aQgbjbB6xiCV5YxJSqFu9Sm3MUImoA',\n",
    "    'model': 'gemini-1.5-flash',\n",
    "    'vanna_api_key': vanna_key\n",
    "})\n",
    "\n",
    "# 4. Conectamos ao seu banco Postgres local ou do servidor\n",
    "try:\n",
    "    print(\"Tentando conectar ao banco Postgres...\")\n",
    "    vn_app.connect_to_postgres(\n",
    "        host='192.168.1.80',        # Endereço do seu banco\n",
    "        dbname='bdps55',      # Nome do banco de dados\n",
    "        user='postgres',      # Seu usuário do banco\n",
    "        password='ps@web',    # Sua senha\n",
    "        port=5432\n",
    "    )\n",
    "    \n",
    "    # 5. Teste de fogo da conexão\n",
    "    df = vn_app.run_sql(\"SELECT 1 AS status_conexao;\")\n",
    "    if not df.empty and df['status_conexao'].iloc[0] == 1:\n",
    "        print(\"✅ SUCESSO ABSOLUTO! Sem erros de pacotes, Gemini pronto e Postgres conectado!\")\n",
    "        \n",
    "except Exception as e:\n",
    "    print(f\"❌ Erro ao conectar ao Postgres: {e}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "4168bb1c-7824-4658-906c-24e78f78bcd5",
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'vanna.vannadb'",
     "output_type": "error",
     "traceback": [
      "\u001b[31m---------------------------------------------------------------------------\u001b[39m",
      "\u001b[31mModuleNotFoundError\u001b[39m                       Traceback (most recent call last)",
      "\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[3]\u001b[39m\u001b[32m, line 2\u001b[39m\n\u001b[32m      1\u001b[39m \u001b[38;5;28;01mimport\u001b[39;00m vanna \u001b[38;5;28;01mas\u001b[39;00m vn\n\u001b[32m----> \u001b[39m\u001b[32m2\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m vanna.vannadb \u001b[38;5;28;01mimport\u001b[39;00m VannaDB_VectorStore\n\u001b[32m      3\u001b[39m \u001b[38;5;28;01mfrom\u001b[39;00m vanna.google \u001b[38;5;28;01mimport\u001b[39;00m GoogleGeminiChat\n\u001b[32m      4\u001b[39m \n\u001b[32m      5\u001b[39m \u001b[38;5;66;03m# 1. Criamos a classe usando o banco de vetores gratuito do próprio Vanna (VannaDB) + Gemini\u001b[39;00m\n",
      "\u001b[31mModuleNotFoundError\u001b[39m: No module named 'vanna.vannadb'"
     ]
    }
   ],
   "source": [
    "import vanna as vn\n",
    "from vanna.vannadb import VannaDB_VectorStore\n",
    "from vanna.google import GoogleGeminiChat\n",
    "\n",
    "# 1. Criamos a classe usando o banco de vetores gratuito do próprio Vanna (VannaDB) + Gemini\n",
    "class MyVanna(VannaDB_VectorStore, GoogleGeminiChat):\n",
    "    def __init__(self, config=None):\n",
    "        # Aqui você coloca o nome do seu modelo e a sua chave de e-mail do Vanna\n",
    "        VannaDB_VectorStore.__init__(self, vanna_model='modelo-empresa-gemini', vanna_api_key=config.get('vanna_api_key'))\n",
    "        GoogleGeminiChat.__init__(self, config=config)\n",
    "\n",
    "# 2. Obtemos a chave de API gratuita do Vanna para guardar os treinamentos na nuvem deles\n",
    "# (O Vanna vai enviar um código de 6 dígitos para o seu e-mail na primeira execução)\n",
    "vanna_key = vn.get_api_key('davidvalni930@gmail.com') \n",
    "\n",
    "# 3. Inicializamos o aplicativo com as duas chaves\n",
    "vn_app = MyVanna(config={\n",
    "    'api_key': 'AQ.Ab8RN6KA3PTiWVWhFcO5aQgbjbB6xiCV5YxJSqFu9Sm3MUImoA',\n",
    "    'model': 'gemini-1.5-flash',\n",
    "    'vanna_api_key': vanna_key\n",
    "})\n",
    "\n",
    "# 4. Conectamos ao seu banco Postgres local ou do servidor\n",
    "try:\n",
    "    print(\"Tentando conectar ao banco Postgres...\")\n",
    "    vn_app.connect_to_postgres(\n",
    "        host='192.168.1.80',        # Endereço do seu banco\n",
    "        dbname='bdps55',      # Nome do banco de dados\n",
    "        user='postgres',      # Seu usuário do banco\n",
    "        password='ps@web',    # Sua senha\n",
    "        port=5432\n",
    "    )\n",
    "    \n",
    "    # 5. Teste de fogo da conexão\n",
    "    df = vn_app.run_sql(\"SELECT 1 AS status_conexao;\")\n",
    "    if not df.empty and df['status_conexao'].iloc[0] == 1:\n",
    "        print(\"✅ SUCESSO ABSOLUTO! Sem erros de pacotes, Gemini pronto e Postgres conectado!\")\n",
    "        \n",
    "except Exception as e:\n",
    "    print(f\"❌ Erro ao conectar ao Postgres: {e}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4f8c363a-cce7-4e8b-a7d6-ff1ea5594c81",
   "metadata": {},
   "outputs": [],
   "source": [
    "import vanna as vn\n",
    "from vanna.google import GoogleGeminiChat\n",
    "from vanna.base import VannaBase\n",
    "\n",
    "# 1. Criamos um banco de vetores ultra-simples em memória (sem ChromaDB, sem Nuvem, sem Erros)\n",
    "class MyVanna(VannaBase, GoogleGeminiChat):\n",
    "    def __init__(self, config=None):\n",
    "        # Inicializa o Gemini diretamente\n",
    "        GoogleGeminiChat.__init__(self, config=config)\n",
    "        VannaBase.__init__(self, config=config)\n",
    "        \n",
    "        # Armazenamento simples em listas na memória do Python\n",
    "        self.ddl_list = []\n",
    "        self.queries_list = []\n",
    "\n",
    "    # Salva o DDL na memória\n",
    "    def add_ddl(self, ddl: str, **kwargs):\n",
    "        self.ddl_list.append(ddl)\n",
    "\n",
    "    # Salva as perguntas e respostas (Golden Queries) na memória\n",
    "    def add_question_sql(self, question: str, sql: str, **kwargs):\n",
    "        self.queries_list.append({\"question\": question, \"sql\": sql})\n",
    "\n",
    "    # Retorna os DDLs cadastrados para o Gemini usar no contexto\n",
    "    def get_related_ddl(self, question: str, **kwargs):\n",
    "        return self.ddl_list\n",
    "\n",
    "    # Retorna as queries de exemplo cadastradas para o Gemini usar de referência\n",
    "    def get_related_questions(self, question: str, **kwargs):\n",
    "        return self.queries_list\n",
    "\n",
    "# 2. Inicializamos o aplicativo com a sua chave do Gemini\n",
    "vn_app = MyVanna(config={\n",
    "    'api_key': 'AQ.Ab8RN6KA3PTiWVWhFcO5aQgbjbB6xiCV5YxJSqFu9Sm3MUImoA',\n",
    "    'model': 'gemini-1.5-flash'\n",
    "})\n",
    "\n",
    "# 3. Conectamos ao seu banco de dados Postgres\n",
    "try:\n",
    "    print(\"Tentando conectar ao banco Postgres...\")\n",
    "    vn_app.connect_to_postgres(\n",
    "        host='localhost',        # Endereço do seu banco\n",
    "        dbname='seu_banco',      # Nome do banco de dados\n",
    "        user='seu_usuario',      # Seu usuário do banco\n",
    "        password='sua_senha',    # Sua senha\n",
    "        port=5432\n",
    "    )\n",
    "    \n",
    "    # 4. Testamos a conexão com o Postgres\n",
    "    df = vn_app.run_sql(\"SELECT 1 AS status_conexao;\")\n",
    "    if not df.empty and df['status_conexao'].iloc[0] == 1:\n",
    "        print(\"\\n✅ SUCESSO ABSOLUTO!\")\n",
    "        print(\"Ambiente limpo, Gemini pronto e Postgres conectado!\")\n",
    "        \n",
    "except Exception as e:\n",
    "    print(f\"\\n❌ Erro ao conectar ao Postgres: {e}\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.14.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
