feat: Adicionando scripts de setup e testes
parent
ce74c77ea2
commit
97673fe67b
@ -0,0 +1,152 @@
|
|||||||
|
# Test Cases para o Orquestrador
|
||||||
|
|
||||||
|
## Testes Manuais
|
||||||
|
|
||||||
|
### Setup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Terminal 1: Iniciar servidor
|
||||||
|
uvicorn app.main:app --reload
|
||||||
|
|
||||||
|
# Terminal 2: Rodar testes
|
||||||
|
bash test-local.sh http://localhost:8000
|
||||||
|
```
|
||||||
|
|
||||||
|
Ou com Docker Compose:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose up
|
||||||
|
bash test-local.sh http://localhost:8000
|
||||||
|
```
|
||||||
|
|
||||||
|
## Casos de Teste
|
||||||
|
|
||||||
|
### 1. Chat Simples (Sem Tool)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST http://localhost:8000/chat \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"message": "Olá, como você funciona?",
|
||||||
|
"user_id": "user-123"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Esperado**: Resposta direta do modelo, sem chamada de tool
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. Consultar Estoque
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST http://localhost:8000/chat \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"message": "Quero um carro de até 50000 reais",
|
||||||
|
"user_id": "user-123"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Esperado**: Modelo chama `consultar_estoque` com `preco_max=50000`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. Validar Cliente Venda
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST http://localhost:8000/chat \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"message": "Meu CPF é 12345678900. Posso financiar um carro de 45000 reais?",
|
||||||
|
"user_id": "user-123"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Esperado**: Modelo chama `validar_cliente_venda`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. Avaliar Veículo para Troca
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST http://localhost:8000/chat \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"message": "Tenho um Toyota Corolla 2015 com 120000 km para dar de entrada. Quanto vale?",
|
||||||
|
"user_id": "user-123"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Esperado**: Modelo chama `avaliar_veiculo_troca`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 5. Agendar Revisão
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST http://localhost:8000/chat \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"message": "Quero agendar uma revisão para meu carro com placa ABC1234 no dia 25 de fevereiro às 10 da manhã",
|
||||||
|
"user_id": "user-123"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Esperado**: Modelo chama `agendar_revisao`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 6. Cancelar Pedido
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST http://localhost:8000/chat \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{
|
||||||
|
"message": "Gostaria de cancelar meu pedido número 12345 porque mudei de ideia",
|
||||||
|
"user_id": "user-123"
|
||||||
|
}'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Esperado**: Modelo chama `cancelar_pedido`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Swagger UI
|
||||||
|
|
||||||
|
Acesse: http://localhost:8000/docs
|
||||||
|
|
||||||
|
Todos os endpoints estão documentados lá para testar interativamente.
|
||||||
|
|
||||||
|
## Checklist de Testes
|
||||||
|
|
||||||
|
- [ ] Chat simples sem tool funciona
|
||||||
|
- [ ] Consultar estoque retorna veículos
|
||||||
|
- [ ] Validar cliente retorna aprovação/rejeição
|
||||||
|
- [ ] Avaliar veículo retorna valor estimado
|
||||||
|
- [ ] Agendar revisão retorna agendamento
|
||||||
|
- [ ] Cancelar pedido retorna cancelamento
|
||||||
|
- [ ] Modelo é assertivo (chama tools quando apropriado)
|
||||||
|
- [ ] Modelo não chama tools desnecessariamente
|
||||||
|
- [ ] Respostas são formatadas corretamente
|
||||||
|
- [ ] Sem erros 500 na API
|
||||||
|
|
||||||
|
## Debugging
|
||||||
|
|
||||||
|
### Ver logs detalhados
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Terminal com logs
|
||||||
|
uvicorn app.main:app --reload --log-level debug
|
||||||
|
```
|
||||||
|
|
||||||
|
### Testar Mockaroo direto
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST http://localhost:8000/mock/consultar-estoque \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d '{"preco_max": 50000}'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ver resposta do Vertex AI
|
||||||
|
|
||||||
|
Adicione console.log nos handlers para ver o que o Vertex retorna.
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
"""
|
||||||
|
Inicialização de banco de dados
|
||||||
|
Cria tabelas e faz seed dos dados iniciais
|
||||||
|
"""
|
||||||
|
|
||||||
|
from app.db.database import Base, engine
|
||||||
|
from app.db.models import Tool
|
||||||
|
from app.db.tool_seed import get_tools_definitions, seed_tools
|
||||||
|
|
||||||
|
|
||||||
|
def init_db():
|
||||||
|
"""Cria todas as tabelas e faz o seed dos dados iniciais"""
|
||||||
|
print("📊 Inicializando banco de dados...")
|
||||||
|
|
||||||
|
# Cria todas as tabelas
|
||||||
|
print("🔨 Criando tabelas...")
|
||||||
|
Base.metadata.create_all(bind=engine)
|
||||||
|
|
||||||
|
# Seed das tools
|
||||||
|
print("📥 Populando tools iniciais...")
|
||||||
|
seed_tools()
|
||||||
|
|
||||||
|
print("✅ Banco de dados inicializado com sucesso!")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
init_db()
|
||||||
|
|
||||||
@ -0,0 +1,59 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Script para setup inicial no Google Cloud SQL
|
||||||
|
# Uso: ./setup-database.sh <project-id> <instance-name> <region>
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
PROJECT_ID=${1:-seu-projeto-id}
|
||||||
|
INSTANCE_NAME=${2:-orquestrador-db}
|
||||||
|
REGION=${3:-us-central1}
|
||||||
|
DB_NAME="orquestrador"
|
||||||
|
DB_USER="postgres"
|
||||||
|
|
||||||
|
echo "📊 Criando instância Cloud SQL PostgreSQL"
|
||||||
|
echo "📦 Projeto: $PROJECT_ID"
|
||||||
|
echo "🏢 Instância: $INSTANCE_NAME"
|
||||||
|
echo "🌍 Região: $REGION"
|
||||||
|
|
||||||
|
# Habilitar SQL Admin API
|
||||||
|
echo "📡 Habilitando Cloud SQL Admin API..."
|
||||||
|
gcloud services enable sqladmin.googleapis.com
|
||||||
|
|
||||||
|
# Criar instância PostgreSQL
|
||||||
|
echo "🔨 Criando instância PostgreSQL..."
|
||||||
|
gcloud sql instances create $INSTANCE_NAME \
|
||||||
|
--project=$PROJECT_ID \
|
||||||
|
--database-version=POSTGRES_15 \
|
||||||
|
--region=$REGION \
|
||||||
|
--tier=db-f1-micro \
|
||||||
|
--availability-type=ZONAL \
|
||||||
|
--backup-start-time=03:00 \
|
||||||
|
--enable-bin-log \
|
||||||
|
--no-assign-ip
|
||||||
|
|
||||||
|
# Criar banco de dados
|
||||||
|
echo "🗄️ Criando banco de dados..."
|
||||||
|
gcloud sql databases create $DB_NAME \
|
||||||
|
--instance=$INSTANCE_NAME \
|
||||||
|
--project=$PROJECT_ID
|
||||||
|
|
||||||
|
# Criar usuário
|
||||||
|
echo "👤 Criando usuário de banco de dados..."
|
||||||
|
gcloud sql users create $DB_USER \
|
||||||
|
--instance=$INSTANCE_NAME \
|
||||||
|
--project=$PROJECT_ID
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "✅ Setup do banco de dados concluído!"
|
||||||
|
echo ""
|
||||||
|
echo "📋 Configurações do Cloud SQL:"
|
||||||
|
echo "🏢 Instância: $INSTANCE_NAME"
|
||||||
|
echo "📦 Banco: $DB_NAME"
|
||||||
|
echo "👤 Usuário: $DB_USER"
|
||||||
|
echo ""
|
||||||
|
echo "próximos passos:"
|
||||||
|
echo "1. Defina a senha do usuário postgres no Cloud Console"
|
||||||
|
echo "2. Configure a connection string:"
|
||||||
|
echo " postgresql://$DB_USER:SENHA@/cloudsql/$PROJECT_ID:$REGION:$INSTANCE_NAME/$DB_NAME"
|
||||||
|
|
||||||
@ -0,0 +1,76 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Script de testes locais
|
||||||
|
# Testa a API antes de fazer deploy
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
API_URL=${1:-http://localhost:8000}
|
||||||
|
|
||||||
|
echo "🧪 Iniciando testes da API"
|
||||||
|
echo "🎯 URL: $API_URL"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Função para teste HTTP
|
||||||
|
test_endpoint() {
|
||||||
|
local method=$1
|
||||||
|
local endpoint=$2
|
||||||
|
local data=$3
|
||||||
|
local description=$4
|
||||||
|
|
||||||
|
echo "📝 Teste: $description"
|
||||||
|
echo " $method $endpoint"
|
||||||
|
|
||||||
|
if [ -z "$data" ]; then
|
||||||
|
curl -s -X $method "$API_URL$endpoint" \
|
||||||
|
-H "Content-Type: application/json" | jq . || echo "❌ Erro"
|
||||||
|
else
|
||||||
|
echo " Dados: $data"
|
||||||
|
curl -s -X $method "$API_URL$endpoint" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-d "$data" | jq . || echo "❌ Erro"
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Teste 1: Health check (Swagger)
|
||||||
|
echo "═══════════════════════════════════════════════════════════"
|
||||||
|
test_endpoint "GET" "/docs" "" "Documentação Swagger"
|
||||||
|
|
||||||
|
# Teste 2: Chat simples
|
||||||
|
echo "═══════════════════════════════════════════════════════════"
|
||||||
|
test_endpoint "POST" "/chat" \
|
||||||
|
'{"message":"Olá, tudo bem?","user_id":"test-user-1"}' \
|
||||||
|
"Chat simples (sem tool)"
|
||||||
|
|
||||||
|
# Teste 3: Chat com ferramenta - Consultar Estoque
|
||||||
|
echo "═══════════════════════════════════════════════════════════"
|
||||||
|
test_endpoint "POST" "/chat" \
|
||||||
|
'{"message":"Quero um carro de até 50000 reais que seja sedan","user_id":"test-user-2"}' \
|
||||||
|
"Chat com tool - Consultar Estoque"
|
||||||
|
|
||||||
|
# Teste 4: Chat com ferramenta - Validar Cliente
|
||||||
|
echo "═══════════════════════════════════════════════════════════"
|
||||||
|
test_endpoint "POST" "/chat" \
|
||||||
|
'{"message":"Meu CPF é 12345678900 e quero financiar um carro de 45000 reais, posso?","user_id":"test-user-3"}' \
|
||||||
|
"Chat com tool - Validar Cliente Venda"
|
||||||
|
|
||||||
|
# Teste 5: Chat com ferramenta - Avaliar Veículo
|
||||||
|
echo "═══════════════════════════════════════════════════════════"
|
||||||
|
test_endpoint "POST" "/chat" \
|
||||||
|
'{"message":"Tenho um Toyota Corolla 2015 com 120000 km, quanto vale para troca?","user_id":"test-user-4"}' \
|
||||||
|
"Chat com tool - Avaliar Veículo Troca"
|
||||||
|
|
||||||
|
# Teste 6: Mockaroo direto
|
||||||
|
echo "═══════════════════════════════════════════════════════════"
|
||||||
|
test_endpoint "POST" "/mock/consultar-estoque" \
|
||||||
|
'{"preco_max":50000,"categoria":"Sedan"}' \
|
||||||
|
"Endpoint direto - Consultar Estoque"
|
||||||
|
|
||||||
|
echo "✅ Testes concluídos!"
|
||||||
|
echo ""
|
||||||
|
echo "💡 Dicas:"
|
||||||
|
echo " - Para testes mais detalhados, visite: $API_URL/docs"
|
||||||
|
echo " - Para ver os logs: tail -f app.log"
|
||||||
|
echo " - Para reiniciar: Ctrl+C e execute novamente"
|
||||||
|
|
||||||
Loading…
Reference in New Issue