Skip to content

Saída polars: pânico do polars na conversão final derruba a saída depois das chamadas (Decimal acima de 38 dígitos) #230

Closed

Description

@bdcdo

Com entrada polars, um campo Decimal que recebe um valor com mais de 38 dígitos derruba a saída depois de todas as chamadas ao provider, com PanicException do polars. Com entrada pandas, o mesmo modelo devolve a coluna com os três valores.

import warnings
from decimal import Decimal
from unittest.mock import patch

import polars as pl
from pydantic import BaseModel

from dataframeit import dataframeit


class M(BaseModel):
    total: Decimal


respostas = iter([Decimal("1.5"), Decimal("1E+40"), Decimal("2")])
with patch("dataframeit.core.call_langchain", side_effect=lambda *a, **k: {"data": {"total": next(respostas)}, "usage": None}), \
     patch("dataframeit.core.validate_provider_dependencies"), \
     warnings.catch_warnings():
    warnings.simplefilter("ignore")
    dataframeit(pl.DataFrame({"texto": ["a", "b", "c"]}), questions=M, prompt="{texto}", track_tokens=False)
# pyo3_runtime.PanicException: operator does not support primitive `Int256`

Reproduzido na main com polars 2.0.0; a revisão do #220 viu o mesmo de 1.0.0 a 2.0.0.

Causa

from_pandas (utils.py) converte cada coluna do modelo com pl.from_pandas dentro de um try/except Exception, e a coluna que a conversão recusa sai Object com aviso (#220). O pânico do polars herda de BaseException, passa pelo except e sobe até o chamador. Pela mensagem, o pyarrow entrega o valor como decimal de 256 bits, que o polars não lê.

A revisão do #220 achou um segundo caminho para o mesmo pânico, em versões antigas: Optional[dict[str, int]] com {} e None, no polars 1.6.0 a 1.9.0.

Proposta

Capturar também o pânico nesse ponto, pelo nome que o polars expõe (pl.exceptions.PanicException, presente no 1.0.0 e no 2.0.0), e mandar a coluna para Object como as demais recusadas. Capturar BaseException engoliria o KeyboardInterrupt. O teste é o trecho acima, conferindo que a coluna sai Object com os três valores e o aviso.

Relacionada: #218, que tratou a mesma falha quando a conversão levanta exceção comum.

Activity

  1. added a commit that references this issue on Oct 14, 2026
    40d4f13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions