Skip to content

feat: usa db_engine no script de avaliação do BIRD - #20

Open
Petroncini wants to merge 2 commits into
devfrom
feat/bird-db-engine
Open

Petroncini wants to merge 2 commits into
devfrom
feat/bird-db-engine

Conversation

@Petroncini

@Petroncini Petroncini commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

Resumo

Adapta scripts/test_bird_eval.py à nova passagem de conexão (#18), como já feito nos scripts do Spider 1 e 2: uma Engine SQLAlchemy read-only (mode=ro) por banco, passada via db_engine e descartada ao final. O import do SQLAlchemy fica dentro do caminho de execução real, então o --dry-run continua sem dependências.

Só o lado do agente muda. O avaliador (BirdQueryExecutor, que roda as queries gold) continua no backend sqlite padrão, lendo os mesmos arquivos locais do dev/mini dev.

Correção incluída: :palavra em literais no caminho da engine

Ao passar o BIRD pela engine, apareceu um bug em executar_sql_via_engine (vindo da #18, já no dev, e que afeta também os scripts do Spider e quem usa db_url): a SQL do agente era executada com conn.execute(text(sql)), e o text() interpreta :palavra como parâmetro de bind. Uma literal como 'Status :ativo' quebrava com "A value is required for bind parameter", enquanto o caminho por db_path executava a mesma SQL normalmente.

Agora a SQL vai crua ao driver com conn.exec_driver_sql(sql), como no caminho db_path. '12:30', '%H:%M', % em LIKE e o :: do Postgres continuam funcionando.

Testes

  • tests/test_bird_eval.py: 17 passed.
  • Novo teste de regressão em tests/test_componentes.py com literais contendo : e %. O caso 'Status :ativo' falha sem a correção (conferido).
  • Suíte completa: 158 passed, 1 skipped.
  • Execução real com um fixture mínimo no formato do BIRD (2 perguntas sobre o concert_singer do Spider 1, uma com Hint): as duas passaram pelo caminho da engine e bateram com o gabarito, antes e depois da correção.
  • Não testado num PostgreSQL real.

Mesmo padrão dos scripts do Spider: uma Engine SQLAlchemy read-only por
banco, criada só na execução real (o --dry-run continua sem dependências),
passada via db_engine e descartada ao final.
text() do SQLAlchemy tratava ':palavra' dentro de literais como parâmetro
de bind (ex.: 'Status :ativo' quebrava com 'A value is required for bind
parameter'), enquanto o caminho por db_path executava a mesma SQL sem
problema. exec_driver_sql manda a SQL direto ao driver, como o db_path.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant