Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Chave da API do Google Gemini
GEMINI_API_KEY=sua_chave_aqui

# URL do vídeo do YouTube
YOUTUBE_URL=https://www.youtube.com/watch?v=exemplo

# Modelo do Gemini (opcional, padrão: gemini-1.5-pro-latest)
# Outras opções: gemini-1.5-pro-001, gemini-1.5-flash-latest, etc.
# GEMINI_MODEL=gemini-1.5-pro-latest
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules/
.env
*.log
.DS_Store
97 changes: 95 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,95 @@
# ata
Gera atas do Comitê Executivo
# ATA - Análise de Vídeos com Gemini AI

Sistema de perguntas e respostas sobre vídeos do YouTube usando a API do Google Gemini.

## Descrição

Este é um proof of concept (POC) que utiliza a API do Gemini 1.5 Pro Preview para fazer perguntas sobre vídeos do YouTube através de uma interface de linha de comando.

## Requisitos

- Node.js (versão 18 ou superior)
- Chave da API do Google Gemini
- Conexão com a internet

## Instalação

1. Clone o repositório:
```bash
git clone https://github.com/RBBNet/ata.git
cd ata
```

2. Instale as dependências:
```bash
npm install
```

3. Configure o arquivo `.env`:
```bash
cp .env.example .env
```

4. Edite o arquivo `.env` e adicione:
- Sua chave da API do Gemini em `GEMINI_API_KEY`
- A URL do vídeo do YouTube em `YOUTUBE_URL`
- (Opcional) O modelo do Gemini em `GEMINI_MODEL` (padrão: gemini-1.5-pro-latest)

## Uso

Execute o programa:
```bash
npm start
```

O sistema irá:
1. Carregar as configurações do arquivo `.env`
2. Exibir a URL do vídeo configurado
3. Solicitar que você digite uma pergunta sobre o vídeo
4. Enviar a pergunta para a API do Gemini
5. Exibir a resposta

Para sair do programa, digite `sair` ou `exit`.

## Exemplo

```
Sistema de Perguntas sobre Vídeos do YouTube com Gemini AI
============================================================

Vídeo configurado: https://www.youtube.com/watch?v=exemplo

Digite sua pergunta sobre o vídeo (ou "sair" para encerrar)

Sua pergunta: Qual é o tema principal do vídeo?

Processando sua pergunta...

------------------------------------------------------------
Resposta:
------------------------------------------------------------
[A resposta do Gemini será exibida aqui]
------------------------------------------------------------
```

## Estrutura do Projeto

```
ata/
├── index.js # Arquivo principal da aplicação
├── package.json # Configuração do projeto e dependências
├── .env.example # Exemplo de arquivo de configuração
├── .env # Arquivo de configuração (não versionado)
├── .gitignore # Arquivos ignorados pelo Git
└── README.md # Este arquivo
```

## Tecnologias Utilizadas

- Node.js
- Google Generative AI SDK (@google/generative-ai)
- dotenv (para gerenciamento de variáveis de ambiente)

## Licença

ISC
103 changes: 103 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
import { GoogleGenerativeAI } from '@google/generative-ai';
import * as dotenv from 'dotenv';
import * as readline from 'readline';

// Carrega variáveis de ambiente do arquivo .env
dotenv.config();

// Configuração
const GEMINI_API_KEY = process.env.GEMINI_API_KEY;
const YOUTUBE_URL = process.env.YOUTUBE_URL;
const GEMINI_MODEL = process.env.GEMINI_MODEL || 'gemini-1.5-pro-latest';

if (!GEMINI_API_KEY) {
console.error('Erro: GEMINI_API_KEY não está configurada no arquivo .env');
console.error('Por favor, copie .env.example para .env e adicione sua chave da API');
process.exit(1);
}

if (!YOUTUBE_URL) {
console.error('Erro: YOUTUBE_URL não está configurada no arquivo .env');
console.error('Por favor, copie .env.example para .env e adicione a URL do vídeo do YouTube');
process.exit(1);
}

// Inicializa o Gemini AI
const genAI = new GoogleGenerativeAI(GEMINI_API_KEY);

// Interface para ler entrada do usuário
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});

/**
* Faz uma pergunta sobre o vídeo do YouTube usando Gemini
*/
async function askAboutVideo(question) {
try {
// Usa o modelo Gemini 1.5 Pro que suporta vídeos do YouTube
// Por padrão usa 'latest' para obter recursos mais recentes (configurável via GEMINI_MODEL)
const model = genAI.getGenerativeModel({ model: GEMINI_MODEL });

// Cria o prompt com o vídeo do YouTube e a pergunta
const prompt = `Analise este vídeo do YouTube: ${YOUTUBE_URL}\n\nPergunta: ${question}`;

console.log('\nProcessando sua pergunta...\n');

// Gera a resposta
const result = await model.generateContent(prompt);
const response = await result.response;
const text = response.text();

return text;
} catch (error) {
console.error('Erro ao processar a pergunta:', error.message);
throw error;
}
}

/**
* Loop principal do programa
*/
async function main() {
console.log('='.repeat(60));
console.log('Sistema de Perguntas sobre Vídeos do YouTube com Gemini AI');
console.log('='.repeat(60));
console.log(`\nVídeo configurado: ${YOUTUBE_URL}`);
console.log('\nDigite sua pergunta sobre o vídeo (ou "sair" para encerrar)\n');

const askQuestion = () => {
rl.question('Sua pergunta: ', async (question) => {
if (question.toLowerCase() === 'sair' || question.toLowerCase() === 'exit') {
console.log('\nEncerrando o programa. Até logo!\n');
rl.close();
return;
}

if (!question.trim()) {
console.log('Por favor, digite uma pergunta válida.\n');
askQuestion();
return;
}

try {
const answer = await askAboutVideo(question);
console.log('\n' + '-'.repeat(60));
console.log('Resposta:');
console.log('-'.repeat(60));
console.log(answer);
console.log('-'.repeat(60) + '\n');
} catch (error) {
console.error('\nNão foi possível obter uma resposta. Tente novamente.\n');
}

askQuestion();
});
};

askQuestion();
}

// Executa o programa principal
main().catch(console.error);
38 changes: 38 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "ata",
"version": "0.1.0",
"description": "Gera atas do Comitê Executivo usando Gemini API",
"main": "index.js",
"type": "module",
"scripts": {
"start": "node index.js"
},
"keywords": ["gemini", "youtube", "ai", "ata"],
"author": "",
"license": "ISC",
"dependencies": {
"@google/generative-ai": "^0.1.3",
"dotenv": "^16.3.1"
}
}